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