Как создать внешнюю печатную форму для документа Поступление услуг и прочих активов в 1С:УТ 11.2

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет
← На главную

При работе с конфигурацией Управление торговлей, редакция 11.2, часто возникает необходимость создания индивидуальных печатных форм, которые отсутствуют в типовом функционале. Одним из наиболее гибких и правильных способов решения этой задачи является создание внешней печатной формы (ВПФ). Это позволяет не вносить изменения в основную конфигурацию, оставляя ее на поддержке, и при этом реализовывать любую логику формирования документа.

В данной статье мы подробно разберем процесс создания ВПФ для документа ПоступлениеУслугИПрочихАктивов, научимся переносить макет из Excel и интегрировать форму в систему с помощью механизмов Библиотеки стандартных подсистем (БСП).

Шаг 1: Подготовка макета из файла Excel

Зачастую заказчик предоставляет образец печатной формы в формате Excel. Рассмотрим, как быстро перенести его в 1С, не тратя время на ручное рисование каждой ячейки. Проанализируем этот процесс:

  1. Откроем Конфигуратор 1С.
  2. Перейдем в меню Файл — Открыть и выберем предоставленный Excel-файл. Платформа 1С позволяет просматривать файлы табличных документов прямо внутри среды разработки.
  3. Выделим нужную область в Excel, скопируем ее (Ctrl+C).
  4. Создадим новую внешнюю обработку, добавим в нее новый Макет типа Табличный документ.
  5. Вставим скопированные данные (Ctrl+V). Мы увидим, что границы, шрифты и объединения ячеек перенеслись практически в исходном виде.

Теперь нам необходимо превратить статический текст в динамические данные. Разберем, как это сделать. Вместо конкретной даты или номера в ячейках напишем имена параметров в угловых скобках, например: [НомерДокумента], [ДатаДокумента], [Контрагент]. После этого в свойствах ячейки (F4) установим значение Заполнение в положение Параметр.

Шаг 2: Реализация обязательной функции СведенияОВнешнейОбработке

Для того чтобы 1С:Управление торговлей смогла распознать нашу обработку как печатную форму и добавить ее в меню «Печать», необходимо в модуле объекта обработки прописать экспортную функцию СведенияОВнешнейОбработке(). Рассмотрим структуру этой функции:


Функция СведенияОВнешнейОбработке() Экспорт
    
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.3.1.73");
    
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
    ПараметрыРегистрации.Назначение.Добавить("Документ.ПоступлениеУслугИПрочихАктивов");
    ПараметрыРегистрации.Наименование = "Внешняя печатная форма (Акт)";
    ПараметрыРегистрации.Версия = "1.0";
    ПараметрыРегистрации.БезопасныйРежим = Ложь;
    
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = "Акт поступления услуг (внешний)";
    НоваяКоманда.Идентификатор = "АктПоступленияУслуг";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    НоваяКоманда.ПоказыватьОповещение = Истина;
    НоваяКоманда.Модификатор = "ПечатьMXL";
    
    Возврат ПараметрыРегистрации;
    
КонецФункции

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

Шаг 3: Процедура Печать и формирование табличного документа

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


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

Разберем теперь вспомогательную функцию СформироватьПечатнуюФорму. В ней мы будем использовать запрос для получения данных из документа. Выясним важную особенность: данные в документе ПоступлениеУслугИПрочихАктивов чаще всего хранятся в табличной части Расходы.


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

Шаг 4: Использование стандартных функций БСП

Чтобы печатная форма выглядела профессионально и соответствовала стандартам 1С, рекомендуется использовать функции из общих модулей. Разберем самые полезные из них:

Шаг 5: Регистрация и отладка печатной формы

Когда программный код готов, необходимо подключить ВПФ к базе данных. Посмотрим на последовательность действий:

  1. Зайдем в режим 1С:Предприятие.
  2. Перейдем в раздел НСИ и администрирование — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки.
  3. Нажмем кнопку Добавить из файла и выберем нашу созданную обработку .epf.
  4. Проверим, что программа правильно определила назначение (Документ Поступление услуг и прочих активов).
  5. Установим Размещение (в каких разделах будет видна команда) и Быстрый доступ для нужных пользователей.
  6. Нажмем Записать и закрыть.

Теперь в любом документе поступления услуг в подменю Печать появится наш новый пункт. Рассмотрим способ отладки: если в коде возникает ошибка, а точка останова в ВПФ не срабатывает, воспользуйтесь небольшой хитростью. Создайте в обработке обычную форму, добавьте на нее поле выбора документа и кнопку, которая будет запускать процедуру Печать напрямую. Это позволит вам отладить логику формирования табличного документа как в обычной внешней обработке.

Дополнительный вариант: Использование расширений

Выясним, когда вместо ВПФ лучше использовать расширение конфигурации. Если ваша задача требует не просто добавить новую форму, а заменить стандартную или добавить новые реквизиты в макет существующей типовой формы, расширение будет более эффективным инструментом. В расширении вы можете переопределить макет документа, просто скопировав его из основной конфигурации и внеся правки. Однако для большинства задач по созданию уникальных актов и накладных механизм внешних печатных форм остается наиболее безопасным и удобным для поддержки.

Таким образом, мы проанализировали полный цикл разработки: от импорта визуальной части из Excel до программирования серверной логики на базе БСП. Следуя этим шагам, вы сможете быстро и качественно создавать любые отчетные формы для УТ 11.2.

← На главную