При работе с конфигурацией Управление торговлей, редакция 11.2, часто возникает необходимость создания индивидуальных печатных форм, которые отсутствуют в типовом функционале. Одним из наиболее гибких и правильных способов решения этой задачи является создание внешней печатной формы (ВПФ). Это позволяет не вносить изменения в основную конфигурацию, оставляя ее на поддержке, и при этом реализовывать любую логику формирования документа.
В данной статье мы подробно разберем процесс создания ВПФ для документа ПоступлениеУслугИПрочихАктивов, научимся переносить макет из Excel и интегрировать форму в систему с помощью механизмов Библиотеки стандартных подсистем (БСП).
Зачастую заказчик предоставляет образец печатной формы в формате Excel. Рассмотрим, как быстро перенести его в 1С, не тратя время на ручное рисование каждой ячейки. Проанализируем этот процесс:
Теперь нам необходимо превратить статический текст в динамические данные. Разберем, как это сделать. Вместо конкретной даты или номера в ячейках напишем имена параметров в угловых скобках, например: [НомерДокумента], [ДатаДокумента], [Контрагент]. После этого в свойствах ячейки (F4) установим значение Заполнение в положение Параметр.
Для того чтобы 1С:Управление торговлей смогла распознать нашу обработку как печатную форму и добавить ее в меню «Печать», необходимо в модуле объекта обработки прописать экспортную функцию СведенияОВнешнейОбработке(). Рассмотрим структуру этой функции:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.3.1.73");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
ПараметрыРегистрации.Назначение.Добавить("Документ.ПоступлениеУслугИПрочихАктивов");
ПараметрыРегистрации.Наименование = "Внешняя печатная форма (Акт)";
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.БезопасныйРежим = Ложь;
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Акт поступления услуг (внешний)";
НоваяКоманда.Идентификатор = "АктПоступленияУслуг";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.ПоказыватьОповещение = Истина;
НоваяКоманда.Модификатор = "ПечатьMXL";
Возврат ПараметрыРегистрации;
КонецФункции
В этом коде мы указываем, что наша обработка относится к типу «Печатная форма», привязываем ее к конкретному документу и определяем идентификатор команды, который понадобится нам в дальнейшем.
Основная логика формирования акта будет находиться в экспортной процедуре Печать. Проанализируем ее структуру. Программа передает в эту процедуру массив ссылок на объекты (ведь мы можем выделить несколько документов в списке и нажать «Печать») и коллекцию печатных форм.
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "АктПоступленияУслуг");
Если ПечатнаяФорма <> Неопределено Тогда
ПечатнаяФорма.ТабличныйДокумент = СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати);
ПечатнаяФорма.СинонимМакета = "Акт поступления услуг";
КонецЕсли;
КонецПроцедуры
Разберем теперь вспомогательную функцию СформироватьПечатнуюФорму. В ней мы будем использовать запрос для получения данных из документа. Выясним важную особенность: данные в документе ПоступлениеУслугИПрочихАктивов чаще всего хранятся в табличной части Расходы.
Функция СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати)
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПоступлениеУслуг";
Макет = ПолучитьМакет("Макет"); // Название вашего макета
// Получим данные документов одним запросом
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Док.Ссылка КАК Ссылка,
| Док.Номер КАК Номер,
| Док.Дата КАК Дата,
| Док.Организация КАК Организация,
| Док.Контрагент КАК Контрагент,
| Док.Валюта КАК Валюта,
| Док.Расходы.(
| Содержание КАК Содержание,
| Сумма КАК Сумма
| )
|ИЗ
| Документ.ПоступлениеУслугИПрочихАктивов КАК Док
|ГДЕ
| Док.Ссылка В(&МассивОбъектов)";
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
Выборка = Запрос.Выполнить().Выбрать();
ПервыйДокумент = Истина;
Пока Выборка.Следующий() Цикл
Если Не ПервыйДокумент Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
// Используем БСП для красивого вывода номера
НомерНаПечать = ПрефиксацияОбъектов.НомерНаПечать(Выборка.Номер);
ОбластьЗаголовок.Параметры.НомерДокумента = НомерНаПечать;
ОбластьЗаголовок.Параметры.ДатаДокумента = Формат(Выборка.Дата, "ДЛФ=DD");
ТабличныйДокумент.Вывести(ОбластьЗаголовок);
// Вывод строк услуг
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ВыборкаСтрок = Выборка.Расходы.Выбрать();
Пока ВыборкаСтрок.Следующий() Цикл
ОбластьСтрока.Параметры.Заполнить(ВыборкаСтрок);
ТабличныйДокумент.Вывести(ОбластьСтрока);
КонецЦикла;
ПервыйДокумент = Ложь;
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, 1, ОбъектыПечати, Выборка.Ссылка);
КонецЦикла;
Возврат ТабличныйДокумент;
КонецФункции
Чтобы печатная форма выглядела профессионально и соответствовала стандартам 1С, рекомендуется использовать функции из общих модулей. Разберем самые полезные из них:
РаботаСКурсамиВалют.СформироватьСуммуПрописью(СуммаДокумента, Валюта).ФормированиеПечатныхФорм.СведенияОЮрФизЛице(СсылкаНаОрганизацию, ДатаДокумента). Это позволит автоматически подтянуть ИНН, КПП, адреса и банковские счета.ФизическиеЛица.ФамилияИнициалыФизЛица().Когда программный код готов, необходимо подключить ВПФ к базе данных. Посмотрим на последовательность действий:
.epf.Теперь в любом документе поступления услуг в подменю Печать появится наш новый пункт. Рассмотрим способ отладки: если в коде возникает ошибка, а точка останова в ВПФ не срабатывает, воспользуйтесь небольшой хитростью. Создайте в обработке обычную форму, добавьте на нее поле выбора документа и кнопку, которая будет запускать процедуру Печать напрямую. Это позволит вам отладить логику формирования табличного документа как в обычной внешней обработке.
Выясним, когда вместо ВПФ лучше использовать расширение конфигурации. Если ваша задача требует не просто добавить новую форму, а заменить стандартную или добавить новые реквизиты в макет существующей типовой формы, расширение будет более эффективным инструментом. В расширении вы можете переопределить макет документа, просто скопировав его из основной конфигурации и внеся правки. Однако для большинства задач по созданию уникальных актов и накладных механизм внешних печатных форм остается наиболее безопасным и удобным для поддержки.
Таким образом, мы проанализировали полный цикл разработки: от импорта визуальной части из Excel до программирования серверной логики на базе БСП. Следуя этим шагам, вы сможете быстро и качественно создавать любые отчетные формы для УТ 11.2.