Шаблон разработки печатных форм и подключения к конфигурациям на БСП 2.х и БСП 3.0

20.02.20

Учетные задачи - Печатные формы

«Вместо поставки внешних печатных форм в виде внешних обработок рекомендуется вести их разработку с помощью расширений конфигурации.» [ИТС, БСП гл. 3.38 Печать] У меня задачи типа «Требуется разработать печатную форму …» появляются регулярно, но с временными интервалами. Что бы вести разработку единообразно, для конфигураций на БСП, я заготовил шаблон для таких задачек, который позволяет мне сразу приступить к разработке макета и алгоритма формирования печатной формы, а «обертка» из БСП уже готова.

Скачать исходный код

Наименование Файл Версия Размер
Расширение для конфигурации на БСП 3.0
.cfe 12,50Kb
80
.cfe 12,50Kb 80 Скачать
Расширение для конфигурации на БСП 2.х
.cfe 15,10Kb
11
.cfe 15,10Kb 11 Скачать

Шаблон я заготовил еще на БСП 2.х, сейчас актуальна БСП 3.0.х – шаблон менял с развитием БСП. Сравнивая шаблоны получилось очень наглядно как «1С» реализует концепцию «вести разработку как бы сбоку, оставляя типовые объекты на поддержке, а в идеале на замке». Для этого развивает программный интерфейс подсистем БСП, что позволяет свести к минимуму количество объектов в расширении конфигурации.

Для БСП 2.х и БСП 3.0 макет табличного документа и алгоритм формирования печатной формы располагаю в объекте обработка, расширения конфигурации. «Обычно макет печатной формы располагается при объекте, но если макет является общим для двух и более объектов, то либо его следует располагать в обработке, либо это должен быть общий макет.» [ИТС, БСП гл. 3.38 Печать]. Для меня важно оставить конфигурацию «девственной» и минимум объектов заимствовать в расширение конфигурации, поэтому в обработке.

Если на БСП 2.х укладываемся в 7 шагов:

  1. Создаем Расширение;
  2. Создаем обработку;
  3. Создаем макет в обработке;
  4. Заимствуем сам объект (например, документ), для которого требуется добавить команду печати;
  5. Заимствуем Группу команд – «Печать»;
  6. Создаем команду у обработки и определяем свойства «Тип параметра команды» (шаг 4) и «Группа» (шаг 5);
  7. В модуле менеджера Обработки располагаем процедуру с кодом формирования печатной формы и методы подсистемы Печать.

После этого в командной панели формы объекта (например, документа) и формы журнала, в меню «Печать» появится созданная команда. 

 

Рис. 1 Расширение конфигурации на БСП 2.х

 

то на БСП 3.0 получаем желаемое за 4-е шага

  1. Создаем Расширение;
  2. Создаем обработку;
  3. Создаем макет в обработке;
  4. В модуле менеджера Обработки располагаем процедуру с кодом формирования печатной формы и методы подсистемы Печать.

Благодаря развившемуся программному интерфейсу подсистемы «Печать» в расширении конфигурации ничего заимствовать более не нужно.

 

Рис. 2 Расширение конфигурации на БСП 3.0

 

Повинуясь ИТС, подсистему «ПодключаемыеОтчетыИОбработки» заимствуем и в нее включаем созданную обработку.

Вот тот программный интерфейс БСП 3.0, благодаря которому нет более надобности заимствовать «Группу команд», «Документ» и создавать команды у обработки. Следующие процедуры, располагаем в модуле менеджера обработки.

#Область ПрограммныйИнтерфейс

// Определяет состав программного интерфейса для интеграции с конфигурацией.
//
// Параметры:
//   Настройки - Структура - Настройки интеграции этого объекта.
//       См. возвращаемое значение функции ПодключаемыеКоманды.НастройкиПодключаемыхОтчетовИОбработок().
//
Процедура ПриОпределенииНастроек(Настройки) Экспорт
	
    Настройки.Размещение.Добавить(Метаданные.Документы.РасходнаяНакладная);
    Настройки.ДобавитьКомандыПечати = Истина;
	
КонецПроцедуры

// Заполняет список команд печати.
//
// Параметры:
//   КомандыПечати - ТаблицаЗначений - Подробнее см. в УправлениеПечатью.СоздатьКоллекциюКомандПечати().
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
	
	Команда = КомандыПечати.Добавить();
	Команда.Представление = НСтр("ru = 'Акт передачи на комиссию (из расширения)'");
	Команда.Идентификатор = "АктПередачиНаКомиссию";
	Команда.ПроверкаПроведенияПередПечатью = Истина;
	Команда.Порядок = 1;
	
КонецПроцедуры

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

#КонецОбласти

Процедуру формирования печатной формы располагаем в ММ обработки

До процедуры с кодом формирования конкретного табличного документа, я заворачиваю в метод «обертку» ПечатнаяФорма(), в который вынес общие действия характерные для формирования любого табличного документа и обработки массива ссылок, которые нужно распечатать.

В самой процедуре формирования печатной формы я придерживаюсь следующей структуры:

  1. Определяю параметры печати и макет табличного документа;
  2. Запросом выбираю нужные данные;
  3. Результатами выборки заполняю структуру ДанныеПечати  и таблицы значений данными табличных частей. Причем, имена ключей структуры и полей таблицы значений совпадают с именами параметров макета;
  4. Области макета собираю в массив и обхожу его заполняя параметры макета из созданных коллекций на предыдущем шаге, на каждом витке цикла выводя в результирующий табличный документ. Для повышения устойчивости кода заполняю методом ЗаполнитьЗначенияСвойств().

Такой прием позволяет в дальнейшем передвигать параметры по областям макета, не меняя код в процедуре и выглядит элегантно.

 
 Пример формирования печатной формы

После того как я себе «зарубил на носу» разрабатывать «так», когда приходят задачи изменить печатные формы не «так» разработанные (например, мной давно) теперь я испытываю когнитивный диссонанс J. Собрал этот паттерн для себя, может, кто еще проникнется.

//тол+ Обновление публикации от 20.02.2020 г.

 
Клиентский контекст при формировании печатной формы

 

печатные формы БСП паттерн шаблон расширения УНФ макет устойчивый

См. также

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

18000 руб.

06.10.2023    7725    24    6    

42

Универсальная печать по шаблонам Word (Печать договоров из 1С БП 3, УНФ 1.6, ЗУП 3, УТ 11, КА 2, ERP 2, ДО 3)

Печатные формы Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Научите вашу 1C печатать из 1С в файл Word (Например: трудовые договоры, договоры с контрагентами, спецификации, дополнительные соглашения, приказы, коммерческие предложения, акты, накладные, карточки партнера или любого справочника и многие другие). Универсальная печать предназначена для формирования печатных форм на основе шаблонов в формате Word из любой конфигурации 1С. С помощью данного инструмента можно самостоятельно заполнить шаблон реквизитами справочника или документа 1С и сформировать печатные формы на основании ссылки на любой объект.

5400 руб.

08.10.2019    43101    146    89    

139

УТ 11, КА 2, ERP 2: Настраиваемые под каждую организацию печать и подпись ответственных лиц в печатных формах (ТОРГ-12, Счёт-фактура, УПД, УКД, Заказ клиента, Акт сверки, М-15 и др.)

Печатные формы Взаиморасчеты Оптовая торговля Производство готовой продукции (работ, услуг) Акт сверки Оперативный учет Управляемые формы 1С:Управление торговлей 11 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Задайте для каждой организации свою печать и для каждого физического лица свою подпись. Выберите в документе печатную форму "... с печатью и подписью" - и автоматически сформируется табличный документ с печатью и подписями той организации и ответственных лиц, которые указаны в документе.

12000 руб.

13.03.2018    56746    184    76    

116

Печатные формы КС-2 и КС-3 в "1С:Бухгалтерия 3.0"

Печатные формы Производство готовой продукции (работ, услуг) Платформа 1С v8.3 Бухгалтерский учет Оперативный учет 1С:Бухгалтерия 3.0 Строительство Россия Бухгалтерский учет Платные (руб)

Откройте для себя заполнение КС-2 и КС-3 в "1С:Бухгалтерия 3.0". Вы получаете удобство, скорость и систему, чтобы заполнить, распечатать и сохранить формы КС-2 и КС-3 из документов "Оказание производственных услуг" или "Реализация товаров услуг". Вы можете заполнить дополнительную информацию о материалах из документов "Требование-накладная" и указать сведения, которые не предусмотрены типовой конфигурацией "1С:Бухгалтерия 3.0". Так же доступно множество настроек для формирования КС-2 и КС-3.

3240 руб.

13.02.2019    88510    391    44    

374

Путевой лист грузового автомобиля в 1С:Бухгалтерия 3.0

Печатные формы Учет рабочего времени Платформа 1С v8.3 Бухгалтерский учет Оперативный учет 1С:Бухгалтерия 3.0 Транспорт, автопарки, такси Россия Бухгалтерский учет Платные (руб)

Путевой лист грузового автомобиля в 1С:Бухгалтерия 3.0 - заполнить, распечатать, сохранить. Вы можете не только внести всю информацию и распечатать путевой лист грузового автомобиля в 1С, но и повторно использовать ранее введенные данные спустя любое время - данные путевого листа сохраняются в "1С:Бухгалтерия 3.0" без каких-либо доработок.

4200 руб.

23.08.2019    53735    161    63    

149

Печать актов МХ-1, МХ-3 в 1С:Бухгалтерия 3.0

Печатные формы Логистика, склад и ТМЦ Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Обработки для "1С:Бухгалтерия 3.0", которые формируют акты МХ-1 и МХ-3 для документов "ПоступлениеТоваровУслуг", "Реализация товаров услуг", "Возврат товаров поставщику", "Передача материалов в эксплуатацию" соответственно. Так же можно сформировать акты с факсимиле, которая загружена в 1С:Бухгалтерия 3.0.

2520 руб.

18.02.2019    61366    170    14    

140
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. d.samsonov92y 04.10.19 12:44 Сейчас в теме
«Вместо поставки внешних печатных форм в виде внешних обработок рекомендуется вести их разработку с помощью расширений конфигурации.» [ИТС, БСП гл. 3.38 Печать]
а как они данный тезис закрепили? для мотивации юзать новый функционал или какие то проблемы не решаемые с привычным способом создания внешних печатных форм?
за статью спс)
RealSurfer; MikhailGirshberg; kild; +3
4. Кадош 06.10.19 11:17 Сейчас в теме
(1) разработчики отказались от развития подсистемы допотчетов и допобработок по причинам безопасности и отсутствия модулей менеджера.
cleaner_it; +1
2. SarethDark 04.10.19 15:55 Сейчас в теме
Запрос в цикле? Сомнительное решение... Правильнее одним запросом выбрать данные по всем объектам, а потом в цикле обходить группировки.
simy4; kild; +2 1
9. tolX5 129 22.10.19 08:49 Сейчас в теме
(2)С этим не поспоришь, если формировать больше одного табличного документа, рекомендуется получить данные до формирования табличных документов. Я чаще сталкиваюсь с задачей много печатных форм у одного документа, обработку массива сохранил т.к. подсистема «Печать» позволяет. Вот доработка нарисовалась, спасибо за дельное замечание.
+
16. mikecool 5 18.11.19 17:08 Сейчас в теме
(2) уже много мест в типовых переделано, где получаются данные по всему массиву переданных объектов, а далее по ключу забираются нужные
+
3. feva 518 04.10.19 20:48 Сейчас в теме
Уххх сразу флэшбэки ловить начал. "Джони эти расширения по всюду, они даже во внешних обработках, Джони..". А Так спасибо!)
kild; +1
5. user633533_encantado 11 08.10.19 21:35 Сейчас в теме
Весь модуль менеджера документа тащить в расширение ?
+
10. tolX5 129 22.10.19 08:57 Сейчас в теме
(5)Сама «соль» в том, что документ и его модуль менеджера «ваще» не трогаем, все в модуле обработки созданной в расширении.
+
6. motorkuzbassa.it 99 09.10.19 17:40 Сейчас в теме
для УРБД это провал, расширения потребуется включать в обмен, в котором они будут ездить всегда, в отличии от допов, которые уезжают только при изменении...
AnryMc; Lapitskiy; +2
11. tolX5 129 22.10.19 09:00 Сейчас в теме
(6) ушел от УРБД очень давно, неужели если нет изменений в расширении поедет в узел?
+
12. motorkuzbassa.it 99 22.10.19 15:12 Сейчас в теме
7. simy4 34 13.10.19 16:08 Сейчас в теме
Подскажите пожалуйста, а если перед печатью нужно вывести диалоговое окно, как быть?
+
8. tolX5 129 22.10.19 08:48 Сейчас в теме
(7)Можно дать «круголя» в клиентский контекст, запросить у пользователя интерактивно доп. параметры перед печатью и вернуться назад на сервер в процедуру Печать модуля менеджера вот так:
1. В процедуре ДобавитьКомандыПечати определяем в параметре КомандыПечати.Обработчик имя Клиентской функции, в которую перенаправим управление;
2. Добавляем эту Клиентскую функцию в модуль формы обработки или общий клиентский модуль;
3. Из клиентского контекста возвращаем управление на сервер вызовом метода УправлениеПечатьюКлиент.ВыполнитьКомандуПечати
Например, вот так (1):
Команда.Обработчик = "ПечатьАктПередачиНаКомиссиюКлиент";

(2) (3) Например так, в форме запрашиваем реквизит «Автомобиль» и передаем в процедуру формирования табличного документа на сервер.
&НаКлиенте
Перем ПараметрыФормы;

&НаКлиенте
Функция ПечатьАктПередачиНаКомиссиюКлиент(ПараметрыПечати) Экспорт
	
	ПараметрыФормы = ПараметрыПечати;
	
	ЭтотОбъект.РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;
	ЭтотОбъект.Открыть();
	
КонецФункции

&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
	
	ДополнительныеПараметрыПечати = Новый Структура;
	ДополнительныеПараметрыПечати.Вставить("Автомобиль", ЭтаФорма.Автомобиль);
	
	УправлениеПечатьюКлиент.ВыполнитьКомандуПечати(ПараметрыФормы.МенеджерПечати, ПараметрыФормы.Идентификатор,
		ПараметрыФормы.ОбъектыПечати, ПараметрыФормы.Форма, ДополнительныеПараметрыПечати);
	
КонецПроцедуры
Показать
+
15. simy4 34 23.10.19 10:02 Сейчас в теме
(8)благодарю. у меня получилось следующим образом:
Менеджер обработки:
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
	
	Команда = КомандыПечати.Добавить();
	Команда.Представление = НСтр("ru = 'ТЕстовая печать (расширение)'");
	Команда.Идентификатор = "ТестовыйИдентификатор";
	Команда.ПроверкаПроведенияПередПечатью = Истина;
	Команда.Порядок = 1;
	Команда.Обработчик	= "ОткрытьФормуПечати";
	Команда.МенеджерПечати= "Обработка.ТестоваяПечать";
	
КонецПроцедуры
Показать


Форма обработки:
&НаКлиенте
Функция ОткрытьФормуПечати(ПараметрыПечати) Экспорт //процедура
	//кешируем параметры печати в реквизиты формы

	АдресОбъектовПечати = ПоместитьВоВременноеХранилище(ПараметрыПечати.ОбъектыПечати, УникальныйИдентификатор);
	МенеджерПечати	 	= ПараметрыПечати.МенеджерПечати;
	ИменаМакетов		= ПараметрыПечати.Идентификатор;
	Открыть();
  
 
КонецФункции


&НаКлиенте
Процедура Печать(Команда)
	
	ОбъектыПечати = ПолучитьИзВременногоХранилища(АдресОбъектовПечати);
	УправлениеПечатьюКлиент.ВыполнитьКомандуПечати(МенеджерПечати, ИменаМакетов, ОбъектыПечати, ЭтотОбъект, Новый Структура("Тест"));

КонецПроцедуры
Показать
+
13. motorkuzbassa.it 99 22.10.19 15:13 Сейчас в теме
(7)Используйте типовые шаблоны внешек БСП , они более чем , покрывают все потребности. и с предварительным окном и пр...
+
14. simy4 34 23.10.19 09:58 Сейчас в теме
(13)спасибо за совет. видимо я не до конца точно выразился.
...как быть, при условии работы в расширении с конфигурациями на БСП 3.
+
17. RustIG 1408 10.04.20 15:30 Сейчас в теме
(0) в УТ 11.4 шаблон расширения после подключения выдает ошибки, поскольку сам шаблон разрабатывался на УНФ. Подключать и тестировать лучше все-таки на УНФ.
+
18. RustIG 1408 10.04.20 15:35 Сейчас в теме
(0) при подключении к УНФ 1.6.20.94, платформа 8.3.15.1830 выдается ошибка
Расширение1 Конфигурация саУНФДокРасходнаяНакладнаяДопПечатныеФормы Значение контролируемого свойства РежимСовместимости у объекта не совпадает со значением в расширяемой конфигурации Исправить...

У вас режим совместимости 8.3.12, у конфы 8.3.14 - но это легко поправить.
+
19. AnryMc 849 25.10.21 08:59 Сейчас в теме
(5)
Насколько я понял из описания...
Плюсы:
- Можно в одно расширение "впихнуть" много ВПФ
- соответственно можно использовать общие модули с "повторяющимся" кодом
Минусы:
- Раньше для ВПФ при её добавлении определялся "перечень" объектов где её использовать, теперь надо для каждой прописывать в коде.. Тоже самое и для модулей печати
- Т.к. есть различные конфигурации - нужно создавать вырианты "наименований" подключаемых объектов (Например если ЗУП то не подключать ПТУ, РТУ, и т.д.)

З.Ы. Например у меня есть "универсальные" ВПФ: "История объекта", "Печать движений" и пр...
Можно все собрать в одно расширение и для каждой обработки:
Прописать для каких объектов её подключать... (или вынести это в общих модуль, или сделать регистр сведений только с административным доступом - для настройки) и какую процедуру печати использовать

А если еще "озаботиться" что кому можно - то вообще мрак...

ИМХО: Интересно. Но пока стандартные ВПФ лучше...

З.З.Ы. Хоть и прошло больше года... Или я что то пропустил?
+
20. burgomister 59 16.11.21 19:04 Сейчас в теме
Скачал, установил. Немного переделал для УТ. Работает. Спасибо.
+
21. mart-artur 7 16.05.22 14:36 Сейчас в теме
Доброго всем дня. Подскажите, как можно прицепить ПФ к документу, созданному в расширении? Сломал себе голову, не появляется кнопка Печать...
+
Внимание! Тема сдана в архив