Разработка печатной формы 1С

ТехЗадание:

Для документа прогноз сформировать печатную форму по определенному алгоритму. 1C 8.3 УТ 11.2

Реализация:

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

Макет печатный формы достаточно простой:

Расчет приводить не буду.

Отмечу только, что печатаем макет с помощью стандартных средств.

Дальнейшая часть может быть интересна техническим специалистам.

Вывод печатной формы с запросами из базы данных в общую форму "Печать документов" из подсистемы БСП "Печать"

1 Необходимо создать команду в нашем документе.

В тип парамера команды указываем документы откуда будет вызываться эта команда. Макет тоже называется "Производство_расширенный".

В "группа" указываем "Командная панель формы.Печать"

В модуль команды пишем:

 
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	Если УправлениеПечатьюКлиент.ПроверитьДокументыПроведены(ПараметрКоманды, ПараметрыВыполненияКоманды.Источник) Тогда
		
		УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Документ.Прогноз",
		"Производство_расширенный",
		ПараметрКоманды,
		ПараметрыВыполненияКоманды.Источник,
		Неопределено);
		
	КонецЕсли;
	
КонецПроцедуры

После этого переходим в менеджер объектов этого документа

(для сведения:это он указан в 1-м параметре команды «ВыполнитьКомандуПечати»)

и ищем процедуру печать()

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

4-й параметр процедуры "УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию" = ПечатьПроизводствоРасширенный(МассивОбъектов, ОбъектыПечати) это функция, где мы формируем наш табличный документ.

Далее привожу часть ее текста. Для понимания достаточно:

 
Функция ПечатьПроизводствоРасширенный(МассивОбъектов, ОбъектыПечати)

// !!!!! важно!!!!!! в параметре МассивОбъектов ссылка на документ, который вызвал команду

		 ЗапросПоДокументам = Новый Запрос;
		 ЗапросПоДокументам.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
		 ЗапросПоДокументам.Текст =
		 "ВЫБРАТЬ
		 |	Прогноз.Ссылка КАК Ссылка,
…........................
// тут делаем любые запросы к БД ТабДокумент = Новый ТабличныйДокумент; ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Прогноз"; Макет = УправлениеПечатью.ПолучитьМакет("Документ.Прогноз.Производство_расширенный"); // указываем наш макет ПервыйДокумент = Истина; ВыборкаДокументы = ЗапросПоДокументам.Выполнить().Выбрать(); Пока ВыборкаДокументы.Следующий() Цикл Если Не ПервыйДокумент Тогда ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли; ПервыйДокумент = Ложь; ОбластьМакета = Макет.ПолучитьОбласть("Заголовок"); ТабДокумент.Вывести(ОбластьМакета); ОбластьМакета = Макет.ПолучитьОбласть("Шапка|Тело"); ТабДокумент.Вывести(ОбластьМакета); …................. ОбластьМакетаСтрока = Макет.ПолучитьОбласть("Строка|Итого"); ОбластьМакетаСтрока.Параметры.Итог=ИтогоПрогнозМесяц; ТабДокумент.Присоединить(ОбластьМакетаСтрока); КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; Возврат ТабДокумент; КонецФункции

В итоге получаем на форме кнопочку печать с нашей командой:

И при нажатии получаем нужную форму:

Нестандартная печатная форма 1С 8.3