В связи с прекращением поддержки Бухгалтерии 2.0 многие встретились с дилеммой переноса всего того «что нажито непосильным трудом», а именно множеством внешних печатных форм, отчетов и обработок. Пришлось разбираться и мне. Человек я ленивый, люблю комфорт и поэтому делаю так, чтоб можно потом было что-то делать с меньшими трудозатратами для себя.
Для внешних печатных форм на толстом клиенте у меня давненько был набросан шаблончик с возможностью отладки в конфигураторе без нервотрепки: постоянного залезания в справоник, загрузкой, снова просмотра кода, снова загрузкой и т.д. до высказывания куда пойти и кому, если кто встрял в этот, мягко говоря, неблагоприятный момент. Там все было предельно просто.
И вот, не желая отказываться от комфортной жизни и на тонком клиенте, села за перенос печатной формы (первая ласточка так сказать) с твердой уверенностью сделать себе похожий на предыдущий шаблон. Сначала меня порадовало вид публикации «Режим отладки». Впрочем, радость быстро прошла. Это всего лишь
» Режим отладки – обработка доступна для использования только с установленной ролью Добавление и изменение дополнительных обработок или Полные права.»
Чем дальше я углублялась в логику всего происходящего, тем больше понимала, что «предельно просто» тут не прокатит. Но «лучше день потерять, потом за 5 минут долететь». И вот после трудов я получила себе нечто похожее, чего я так желала. Шаблон готов, печатная форма заработала.
Далее пойдет детальное повествование, как пользоваться этим «чудом». Итак……..
Основные процедуры и функции лежат в модуле формы.
Первая функция, предназначенная для создания структуры регистрации обработки в информационной базе
Функция СведенияОВнешнейОбработке() Экспорт
Все подробности можно прочитать в комментариях внутри функции, здесь я приведу только пример как ее заполнить (комментарии убрала для компактности):
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить(«Вид», «ПечатнаяФорма»);
МассивНазначений = Новый Массив;
МассивНазначений.Добавить(«Документ.ПоступлениеТоваровУслуг»);
МассивНазначений.Добавить(«Документ.РеализацияТоваровУслуг»);
ПараметрыРегистрации.Вставить(«Назначение», МассивНазначений);
ПараметрыРегистрации.Вставить(«Наименование», НСтр(«ru = ‘ПСА'»));
ПараметрыРегистрации.Вставить(«Версия», «2.0»);
ПараметрыРегистрации.Вставить(«БезопасныйРежим», Истина);
ПараметрыРегистрации.Вставить(«Информация», НСтр(«ru = ‘Печать приемосдаточного акта.'»));
ПараметрыРегистрации.Вставить(«ВерсияБСП», «1.2.1.4»);
ТаблицаКоманд = ПолучитьТаблицуКоманд();
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = НСтр(«ru = ‘ПСА'»);
НоваяКоманда.Идентификатор = «ПСА»;
НоваяКоманда.Использование = «ВызовСерверногоМетода»;
НоваяКоманда.ПоказыватьОповещение = Истина;
НоваяКоманда.Модификатор = «ПечатьMXL»;
ПараметрыРегистрации.Вставить(«Команды», ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Далее идет функция создания таблицы команд, ее не надо редактировать, оставляем как есть
Функция ПолучитьТаблицуКоманд()
А вот процедуру печати уже заполняем как нам нужно, она отвечает за вызов процедур создания нужных нам печатных форм и характерна только для обработок типа «ПечатнаяФорма»
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Привожу пример заполнения данной процедуры, естественно эта процедура может существенно отличаться. У меня пример с печатью одной формы под два объекта. Но основной смысл будет понятен:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, «ПСА») Тогда
Если ТипЗнч(МассивОбъектов) = Тип(«ДокументСсылка.РеализацияТоваровУслуг») Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, «ПСА», НСтр(«ru = ‘ПСА'»),
Печать_ПСА_Реализация(МассивОбъектов, ОбъектыПечати));
ИначеЕсли ТипЗнч(МассивОбъектов) = Тип(«ДокументСсылка.ПоступлениеТоваровУслуг») Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, «ПСА», НСтр(«ru = ‘ПСА'»),
Печать_ПСА_Поступление(МассивОбъектов, ОбъектыПечати));
Иначе
МассивРеализация = Новый Массив; МассивПоступление = Новый Массив;
Для каждого Элем Из МассивОбъектов Цикл
Если ТипЗнч(Элем) = Тип(«ДокументСсылка.РеализацияТоваровУслуг») Тогда
МассивРеализация.Добавить(Элем);
ИначеЕсли ТипЗнч(Элем) = Тип(«ДокументСсылка.ПоступлениеТоваровУслуг») Тогда
МассивПоступление.Добавить(Элем);
КонецЕсли;
Если МассивРеализация.Количество() > 0 Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, «ПСА», НСтр(«ru = ‘ПСА'»),
Печать_ПСА_Реализация(МассивОбъектов, ОбъектыПечати));
КонецЕсли;
Если МассивПоступление.Количество() > 0 Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, «ПСА», НСтр(«ru = ‘ПСА'»),
Печать_ПСА_Поступление(МассивОбъектов, ОбъектыПечати));
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Ну принципе и все. С этого момента можете приступать уже непосредственно к созданию самой печатной формы.
Ах, да… Исправьте реквизит обработки СсылкаНаОбъект на нужную Вам ссылку для удобства тестирования. Формы, которые в обработке, трогать не нужно.
Так в чем же «фишка»? А вот теперь именно про нее. Обработку можно тестировать как простую обработку через меню Файл -> Открыть…
Появляется форма обработки, которая позволяет выбрать ссылку на объект для созданной печатной формы.
Если у Вас все благополучно закодировано, то Вы увидите здесь результат своей работы:
PS. Возможно потом шаблон будет дорабатываться, пока все устроило. В архив вложила пример старой обработки и новой.