Реализация печатных форм в БСП несколько отличается в разных версиях. Ниже разобран пример с БСП версии 3.1.5
Допустим надо добавить печатную форму "Счет на оплату" для документа ЗаказКлиента
Для этого нам потребуется:
1. Создать макет "ПФ_MXL_СчетНаОплату" для печатной формы. Макет создаем в макетах документа.
2. Добавить изменения в Общий модуль УправлениеПечатьюПереопределяемый в процедуру ПриОпределенииОбъектовСКомандамиПечати. Для нашего документа надо добавить стоку:
СписокОбъектов.Добавить(Документы.ЗаказКлиента);
Если модуль стоит на поддержки, то в настройках правил поддержки устанавливаем "Объект поставщика редактируется с сохранением поддержки".
3. В модуле менеджера документа добавляем:
3.1. экспортную процедуру ДобавитьКомандыПечати()
// Заполняет список команд печати.
//
// Параметры:
// КомандыПечати – ТаблицаЗначений – состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати.
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
// Счет на оплату
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.МенеджерПечати = "Документ.ЗаказКлиента";
КомандаПечати.Идентификатор = "СчетНаОплату";
//КомандаПечати.МестоРазмещения = "<ИмяПодменюНаФорме>";
КомандаПечати.Представление = НСтр("ru = 'Счет на оплату'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Ложь;
КонецПроцедуры
3.2. экспортную процедуру Печать()
// Формирует печатные формы.
//
// Параметры:
// МассивОбъектов – Массив – ссылки на объекты, которые нужно распечатать;
// ПараметрыПечати – Структура – дополнительные настройки печати;
// КоллекцияПечатныхФорм – ТаблицаЗначений – сформированные табличные документы (выходной параметр)
// ОбъектыПечати – СписокЗначений – значение – ссылка на объект;
// представление – имя области, в которой был выведен объект (выходной параметр);
// ПараметрыВывода – Структура – дополнительные параметры сформированных табличных документов (выходной параметр).
//
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "СчетНаОплату");
Если ПечатнаяФорма <> Неопределено Тогда
ПечатнаяФорма.ТабличныйДокумент = ПечатьСчетаНаОплату(МассивОбъектов, ОбъектыПечати);
ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Счет на оплату'");
ПечатнаяФорма.ПолныйПутьКМакету = "Документ.ЗаказКлиента.ПФ_MXL_СчетНаОплату";
КонецЕсли;
КонецПроцедуры
3.3 Функцию формирования табличного документа
// Формирует табличный документ печатной формы "Счет на оплату"
//
// Параметры:
// МассивОбъектов – Массив – ссылки на объекты, которые нужно распечатать;
// ПараметрыПечати – Структура – дополнительные настройки печати;
//
Функция ПечатьСчетаНаОплату(МассивОбъектов, ОбъектыПечати)
// Создаем табличный документ и устанавливаем имя параметров печати.
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.КлючПараметровПечати = "ПараметрыПечати_СчетНаОплату";
Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.ЗаказКлиента.ПФ_MXL_СчетНаОплату"); // позволят получать макет, который пользователь может редактировать.
// Получаем запросом необходимые данные.
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаДокумента.Ссылка КАК Ссылка
|ИЗ
| Документ.ЗаказКлиента КАК ТаблицаДокумента
|ГДЕ
| ТаблицаДокумента.Ссылка В(&МассивОбъектов)";
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
Шапка = Запрос.Выполнить().Выбрать();
ПервыйДокумент = Истина;
Пока Шапка.Следующий() Цикл
Если Не ПервыйДокумент Тогда
// Все документы нужно выводить на разных страницах.
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ПервыйДокумент = Ложь;
// Запомним номер строки, с которой начали выводить текущий документ.
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
//Начало вывода документа
//...алгоритм заполнения табличного документа...
//Конец вывода документа
// В табличном документе необходимо задать имя области, в которую был
// выведен объект. Нужно для возможности печати комплектов документов.
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент,
НомерСтрокиНачало, ОбъектыПечати, Шапка.Ссылка);
КонецЦикла;
Возврат ТабличныйДокумент;
КонецФункции
4. Подключить форму документа к подсистеме "Подключаемые команды". Для этого в модуле формы документа добавить в процедуры:
4.1. В событии "ПриСозданииНаСервере"
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
4.2. В событии "ПриЧтенииНаСервере"
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
4.3. В событии "ПриОткрытии"
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
4.4 В событии "ПослеЗаписи"
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
4.5. Добавить в модуль формы следующие процедуры:
// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
5. Подключить форму списка документов к подсистеме "Подключаемые команды". Для этого в модуле формы списка добавить в процедуры:
5.1. Добавить в процедуру "ПриСозданииНаСервере"
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
5.2. Добавить в обработчик события "ПриАктивизацииСтроки" таблицы формы, которая отображает список
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
5.3. Добавить в модуль формы следующие процедуры
// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.Список); //Элементы.Список - элемент на форме, который связан с динамическим списком. При необходимости изменить.
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.Список);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
|