Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
16 апр 2024, 20:17

нужна ВПФ для Бух 3.0

Автор Дмитрий13, 05 янв 2014, 12:47

0 Пользователей и 1 гость просматривают эту тему.

Дмитрий13

Добрый день! Кому не сложно отправьте сюда pokfg666@yandex.ru любую внешнюю печатную форму для бух. 3.0. Заранее благодарю!!

Обработка нужна чтобы разобраться как они делаются, а то никак не доходит до меня...

LordWizard

Тебе просто нужна любая ВПФ под УФ или именно под бухгалтерию 3.0 форма? Ты хочешь разобраться или отредактировать макет?
Отредактировать макет можно в разделе "Администрирование" по нужному документу.
Правильно ведите учет или пишите программы и вам воздастся!...

(Кстати - кнопочку Сказать Спасибо - никто не отменял)

Дмитрий13

Нужна чтобы разобраться, просто у меня только конфигурация Бухгалтерия 3.0, хотел подключить ее.
Кстати, если тут можно прикрепить файл, то можно и не отправлять на почту а здесь прикрепить.

А при редактировании макета через администрирование, если затем обновить конфигурацию макет сохраниться??

Я не работаю программистом, только учусь...

LordWizard

Эта технология сохранения макета уже ранее использовалась в УТ 11 (была выпущена намного раньше БП 3.0). Ты редактируешь макет, находящийся не в конфигурации, а в самой программе - поэтому обновления его не коснутся.Можешь вставлять логотипы и прочую дребедень - только не нарушай структуру передачи параметров - увидишь сам как они описываются в самом макете.
Правильно ведите учет или пишите программы и вам воздастся!...

(Кстати - кнопочку Сказать Спасибо - никто не отменял)

Дмитрий13

это-то понятно, хотелось посмотреть как создаются внешние обработки для типовых конфигураций, кстати, ты случайно на почту ничего не скидывал?))

Просто я делаю внешнюю обработку, копирую макет, меняю в нем одну надпись(не параметр), прописываю функцию сведения о внешней обработке, копирую процедуру печать и функцию где формируется табличный документ и ни фига не работает. Хотелось сравнить с работающем, разобраться что не так. У меня ошибка что-то вроде "у объекта нет такого метода(печать).  И кстати, я так не додумал где в коде привязать реквизит СсылкаНаОбъект))  Вот и хотел посмотреть уже готовые. В инете не смог найти для УФ готовые и бесплатно, смотрел видео но там не для УФ...

Besart

код в модуле объекта Функция ВерсияИБ(Знач ИдентификаторБиблиотеки) Экспорт

УстановитьПривилегированныйРежим(Истина);

Запрос = Новый Запрос(
"ВЫБРАТЬ
| ВерсииПодсистем.Версия КАК Версия
|ИЗ
| РегистрСведений.ВерсииПодсистем КАК ВерсииПодсистем
|ГДЕ
| ВерсииПодсистем.ИмяПодсистемы = &ИмяПодсистемы");
Запрос.Параметры.Вставить("ИмяПодсистемы", ИдентификаторБиблиотеки);
ТаблицаЗначений = Запрос.Выполнить().Выгрузить();
Результат = "";
Если ТаблицаЗначений.Количество() > 0 Тогда
Результат = СокрЛП(ТаблицаЗначений[0].Версия);
КонецЕсли;
Возврат ?(ПустаяСтрока(Результат), "0.0.0.0", Результат);

КонецФункции

Функция СформироватьПечатнуюФормуТоварногоЧека(МассивОбъектов, ОбъектыПечати)
//Инициализируем и устанавливаем параметры таблибличного документа для печати
ТабДок = Новый ТабличныйДокумент;
ТабДок.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Печать_Проводок";
ТабДок.АвтоМасштаб = Истина;
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;

Макет = ПолучитьМакет("ПФ_MXL_ПечатьПроводок");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ХозрасчетныйДвиженияССубконто.Регистратор КАК Регистратор,
| ХозрасчетныйДвиженияССубконто.НомерСтроки,
| ХозрасчетныйДвиженияССубконто.Период,
| ХозрасчетныйДвиженияССубконто.СчетДт,
| ХозрасчетныйДвиженияССубконто.ПодразделениеДт,
| ХозрасчетныйДвиженияССубконто.СубконтоДт1,
| ХозрасчетныйДвиженияССубконто.СубконтоДт2,
| ХозрасчетныйДвиженияССубконто.СубконтоДт3,
| ХозрасчетныйДвиженияССубконто.КоличествоДт,
| ХозрасчетныйДвиженияССубконто.ВалютаДт,
| ХозрасчетныйДвиженияССубконто.ВалютнаяСуммаДт,
| ХозрасчетныйДвиженияССубконто.СчетКт,
| ХозрасчетныйДвиженияССубконто.ПодразделениеКт,
| ХозрасчетныйДвиженияССубконто.СубконтоКт1,
| ХозрасчетныйДвиженияССубконто.СубконтоКт2,
| ХозрасчетныйДвиженияССубконто.СубконтоКт3,
| ХозрасчетныйДвиженияССубконто.КоличествоКт,
| ХозрасчетныйДвиженияССубконто.ВалютаКт,
| ХозрасчетныйДвиженияССубконто.ВалютнаяСуммаКт,
| ХозрасчетныйДвиженияССубконто.Сумма,
| ХозрасчетныйДвиженияССубконто.НеКорректироватьСтоимостьАвтоматически,
| ХозрасчетныйДвиженияССубконто.Содержание,
| ХозрасчетныйДвиженияССубконто.СуммаНУДт,
| ХозрасчетныйДвиженияССубконто.СуммаПРДт,
| ХозрасчетныйДвиженияССубконто.СуммаВРДт,
| ХозрасчетныйДвиженияССубконто.СуммаНУКт,
| ХозрасчетныйДвиженияССубконто.СуммаПРКт,
| ХозрасчетныйДвиженияССубконто.СуммаВРКт
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(, , Регистратор В (&МассивОбъектов), , ) КАК ХозрасчетныйДвиженияССубконто
|ИТОГИ ПО
| Регистратор";

Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);

Результат = Запрос.Выполнить();

ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");

ТабДок.Очистить();
ТабДок.Вывести(ОбластьЗаголовок);
ТабДок.Вывести(ОбластьШапкаТаблицы);
ТабДок.НачатьАвтогруппировкуСтрок();

ВыборкаРегистратор = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаРегистратор.Следующий() Цикл
//ОбластьРегистратор.Параметры.Заполнить(ВыборкаРегистратор);
//ТабДок.Вывести(ОбластьРегистратор, ВыборкаРегистратор.Уровень());

ВыборкаДетальныеЗаписи = ВыборкаРегистратор.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
ОбластьДетальныхЗаписей.Параметры.СчетДт = "Здесь будет счет ДТ";
ОбластьДетальныхЗаписей.Параметры.СчетКт = "Здесь будет счет КТ";
ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
КонецЦикла;
ТабДок.Вывести(ОбластьПодвал);
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
НомерСтрокиНачало = ТабДок.ВысотаТаблицы;
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабДок, НомерСтрокиНачало, ОбъектыПечати, ВыборкаРегистратор.Регистратор);
КонецЦикла;

ТабДок.ЗакончитьАвтогруппировкуСтрок();

Возврат ТабДок;

КонецФункции // СформироватьПечатнуюФормуТоварногоЧека()

// Экспортная процедура печати, вызываемая из основной программы
//
// Параметры:
// ВХОДЯЩИЕ:
//  МассивОбъектовНазначения - Массив - список объектов ссылочного типа для печати документа
//                 Как правило, содержит один элемент с ссылкой на вызвавший форму объект (документ, справочник)
//
// ИСХОДЯЩИЕ:
//  КоллекцияПечатныхФорм - ТаблицаЗначений - таблица сформированных табличных документов.
//                 Как правило, содержит одну строку с именем текущей печатной формы
//  ОбъектыПечати - СписокЗначений - список объектов печати.
//  ПараметрыВывода - Структура - Параметры сформированных табличных документов. Содержит поля:
//  ДоступнаПечатьПоКомплектно - булево - по умолчанию Ложь
// ПолучательЭлектронногоПисьма
// ОтправительЭлектронногоПисьма
//
Процедура Печать(МассивОбъектовНазначения, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПечатьПроводок") Тогда

ТабличныйДокумент = СформироватьПечатнуюФормуТоварногоЧека(МассивОбъектовНазначения, ОбъектыПечати);

УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ПечатьПроводок",
"Печать проводок",
ТабличныйДокумент
);

КонецЕсли;

КонецПроцедуры

//
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ РЕГИСТРАЦИИ ОБРАБОТКИ
//

// Сервисная экспортная функция. Вызывается в основной программе при регистрации обработки в информационной базе
// Возвращает структуру с параметрами регистрации
//
// Возвращаемое значение:
// Структура с полями:
// Вид - строка, вид обработки, один из возможных: "ДополнительнаяОбработка", "ДополнительныйОтчет",
// "ЗаполнениеОбъекта", "Отчет", "ПечатнаяФорма", "СозданиеСвязанныхОбъектов"
// Назначение - Массив строк имен объектов метаданных в формате:
// <ИмяКлассаОбъектаМетаданного>.[ * | <ИмяОбъектаМетаданных>].
// Например, "Документ.СчетЗаказ" или "Справочник.*". Параметр имеет смысл только для назначаемых обработок, для глобальных может не задаваться.
// Наименование - строка - Наименование обработки, которым будет заполнено наименование элемента справочника по умолчанию.
// Информация  - строка - Краткая информация или описание по обработке.
// Версия - строка - Версия обработки в формате "<старший номер>.<младший номер>" используется при загрузке обработок в информационную базу.
// БезопасныйРежим - булево - Принимает значение Истина или Ложь, в зависимости от того, требуется ли устанавливать или отключать безопасный режим
// исполнения обработок. Если истина, обработка будет запущена в безопасном режиме.
//
//
Функция СведенияОВнешнейОбработке() Экспорт

//Инициализируем структуру с параметрами регистрации

//Определяем список объектов, вызывающих обработку
ОбъектыНазначенияФормы = Новый Массив;
ОбъектыНазначенияФормы.Добавить("Документ.ПоступлениеТоваровУслуг");


ПараметрыРегистрации = ПолучитьПараметрыРегистрации(ОбъектыНазначенияФормы);
ПараметрыРегистрации.Версия = "1.0.0.0";

//Определяем команды для печати формы

ТаблицаКоманд = ПолучитьТаблицуКоманд();

ДобавитьКоманду(ТаблицаКоманд,
"Печать проводок", // Представление команды в пользовательском интерфейсе
"ПечатьПроводок", // Уникальный идентификатор команды
);

ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

Возврат ПараметрыРегистрации;

КонецФункции

//
// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ РЕГИСТРАЦИИ ОБРАБОТКИ
//

// Формирует структуру с параметрами регистрации регистрации обработки в информационной базе
//
// Параметры:
// ОбъектыНазначенияФормы - Массив - Массив строк имен объектов метаданных в формате:
// <ИмяКлассаОбъектаМетаданного>.[ * | <ИмяОбъектаМетаданных>].
// или строка с именем объекта метаданных
// НаименованиеОбработки - строка - Наименование обработки, которым будет заполнено наименование элемента справочника по умолчанию.
// Необязательно, по умолчанию синоним или представление объекта
// Информация  - строка - Краткая информация или описание обработки.
// Необязательно, по умолчанию комментарий объекта
// Версия - строка - Версия обработки в формате "<старший номер>.<младший номер>" используется при загрузке обработок в информационную базу.
//
//
// Возвращаемое значение:
// Структура
//
Функция ПолучитьПараметрыРегистрации(ОбъектыНазначенияФормы = Неопределено, НаименованиеОбработки = "", Информация = "", Версия = "1.0")

Если ТипЗнч(ОбъектыНазначенияФормы) = Тип("Строка") Тогда
ОбъектНазначенияФормы = ОбъектыНазначенияФормы;
ОбъектыНазначенияФормы = Новый Массив;
ОбъектыНазначенияФормы.Добавить(ОбъектНазначенияФормы);
КонецЕсли;

ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
ПараметрыРегистрации.Вставить("Назначение", ОбъектыНазначенияФормы);

Если Не ЗначениеЗаполнено(НаименованиеОбработки) Тогда
НаименованиеОбработки = ЭтотОбъект.Метаданные().Представление();
КонецЕсли;
ПараметрыРегистрации.Вставить("Наименование", НаименованиеОбработки);

Если Не ЗначениеЗаполнено(Информация) Тогда
Информация = ЭтотОбъект.Метаданные().Комментарий;
КонецЕсли;
ПараметрыРегистрации.Вставить("Информация", Информация);

ПараметрыРегистрации.Вставить("Версия", Версия);

Возврат ПараметрыРегистрации;

КонецФункции

// Формирует таблицу значений с командами печати
//
// Возвращаемое значение:
// ТаблицаЗначений
//
Функция ПолучитьТаблицуКоманд()

Команды = Новый ТаблицаЗначений;

//Представление команды в пользовательском интерфейсе
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));

//Уникальный идентификатор команды или имя макета печати
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));

//Способ вызова команды: "ОткрытиеФормы", "ВызовКлиентскогоМетода", "ВызовСерверногоМетода"
// "ОткрытиеФормы" - применяется только для отчетов и дополнительных отчетов
// "ВызовКлиентскогоМетода" - вызов процедуры Печать(), определённой в модуле формы обработки
// "ВызовСерверногоМетода" - вызов процедуры Печать(), определённой в модуле объекта обработки
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));

//Показывать оповещение.
//Если Истина, требуется показать оповещение при начале и при завершении работы обработки.
//Имеет смысл только при запуске обработки без открытия формы
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));

//Дополнительный модификатор команды.
//Используется для дополнительных обработок печатных форм на основе табличных макетов.
//Для таких команд должен содержать строку ПечатьMXL
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));

Возврат Команды;

КонецФункции

// Вспомогательная процедура.
//
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование = "ВызовСерверногоМетода", ПоказыватьОповещение = Ложь, Модификатор = "ПечатьMXL")

НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;

КонецПроцедуры

Дмитрий13

Реквизит СсылкаНаОбъект использовался в этой обработке?

Besart

Цитата: Дмитрий13 от 05 янв 2014, 17:40
Реквизит СсылкаНаОбъект использовался в этой обработке?
да есть реквизит к\й может быть составным и в к\м указаны объекты из к\х осуществляется печать, можно реквизит и не указывать, а документы в к\х используется ВПФ указать в диалоге доп. отчетов и обработок > Указать назначение, формы нет (поминится один товарищ утверждал что во ВПФ нужно обязательно создавать форму), т.к. форма генерируется самой конфигурацией

Дмитрий13

Как я понял В этой обработке реквизит СсылкаНаОбъект не использовался, в коде нет его. То есть документы, из которых можно печатать форму находятся в массиве объектов, а в массив объектов они попадают через указание при подключении внешней обработки в режиме 1с:предприятие?
На одном из сайтов читал, что нужно прописывать что-то вроде

Для Каждого Элемент Из МассивОбъектов Цикл
   Здесь я так и не понял что писать
КонецЦикла

Или если документ 1 то
МассивОбъектов(0)=СсылкаНаОбъект;

А В цикле что писать? СсылкаНаОбъект=Элемент??

Besart

Цитата: Дмитрий13 от 05 янв 2014, 19:45Для Каждого Элемент Из МассивОбъектов Цикл
   Здесь я так и не понял что писать
КонецЦикла

Или если документ 1 то
МассивОбъектов(0)=СсылкаНаОбъект;

А В цикле что писать? СсылкаНаОбъект=Элемент??
это может потребоваться в случае если применяется групповая печать, для этого у меня в запросе включены итоги по регистратору, а также вставляется разделитель страниц,
хотя я сам не пробовал, но я думаю можно сделать ч\з цикл Для Сч=1 Из МассивОбъектов.Количество() Цикл
//Запрос...
Запрос.УстановитьПараметр("Ссылка", МассивОбъектов[Сч]);   
КонецЦикла

но зачем гонять лишний раз цикл если можно в одном запросе выбрать по всем объектам, а затем разделять их уже на уровне макета печатной формы

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск