Как найти запрос данных для внешней печатной формы "Заказ клиента" в 1С:ERP?

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

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

В этом руководстве мы подробно рассмотрим, как найти запрос данных для печатной формы документа "Заказ клиента" в 1С:ERP, а затем разберем процесс создания и подключения внешней печатной формы, опираясь на найденные механизмы.

Что такое внешние печатные формы и почему они важны?

Внешняя печатная форма представляет собой отдельный файл с расширением ".epf", который содержит программный код на языке 1С и макеты для печати. Она позволяет нам создавать уникальные формы документов, отчетов или обработок без внесения изменений в основной код типовой конфигурации. Это значительно упрощает процесс обновления системы, так как изменения, внесенные во внешние печатные формы, не затрагиваются при обновлении конфигурации, а значит, нам не придется каждый раз адаптировать типовые объекты.

Для документа "Заказ клиента" в 1С:ERP, создание ВПФ позволяет адаптировать внешний вид заказа, добавлять специфическую информацию (например, изображения номенклатуры, дополнительные поля), изменять структуру таблицы товаров или услуг, или даже формировать совершенно новые виды документов на основе данных заказа.

Поиск запроса данных для печатной формы "Заказ клиента"

Наша основная задача — найти процедуру, которая отвечает за сбор всех необходимых данных из базы данных для формирования печатной формы "Заказ клиента". Этот процесс не всегда очевиден, но мы разберем его по шагам.

Шаг 1: Идентификация пути к обработке печати

Обычно регистрация команд печати для документов происходит в модуле менеджера соответствующего объекта. Для "Заказа клиента" мы должны начать поиск в Модуле менеджера документа ЗаказКлиента.

  1. Откройте конфигуратор 1С.
  2. Найдите объект Документы -> ЗаказКлиента.
  3. Откройте его Модуль менеджера.
  4. В этом модуле нам нужно найти процедуру ДобавитьКомандыПечати. Эта процедура отвечает за добавление команд печати в список доступных для данного документа.

Внутри процедуры ДобавитьКомандыПечати мы обнаружим, как система регистрирует команды печати. Особое внимание следует обратить на строки, где определяется менеджер печати.

Пример кода, который мы можем найти:


// ...
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "ЗаказКлиента";
КомандаПечати.Представление = НСтр("ru = 'Заказ клиента'");
КомандаПечати.МенеджерПечати = "Обработка.ПечатьЗаказовНаТоварыУслуги"; // Это то, что нам нужно!
КомандаПечати.Использование = "ВызовСерверногоМетода";
КомандаПечати.Порядок = 10;
// ...

Строка КомандаПечати.МенеджерПечати = "Обработка.ПечатьЗаказовНаТоварыУслуги"; указывает на то, какая обработка отвечает за формирование печатной формы "Заказ клиента". В данном случае это будет внешняя обработка или объект конфигурации Обработка.ПечатьЗаказовНаТоварыУслуги.

Шаг 2: Поиск процедуры формирования печатной формы

Теперь, зная имя обработки, которая управляет печатью, мы переходим к ней.

  1. Найдите объект конфигурации Обработки -> ПечатьЗаказовНаТоварыУслуги.
  2. Откройте ее основной модуль.
  3. В этом модуле мы ищем экспортную процедуру, которая вызывается для формирования печатной формы заказа клиента. Часто она имеет название вроде СформироватьПечатнуюФормуЗаказаКлиента.

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

Шаг 3: Определение источника данных (искомый запрос)

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

Искомый запрос, который собирает данные для печатной формы "Заказ клиента", находится в процедуре ПолучитьДанныеДляПечатнойФормыЗаказаНаТоварыУслуги, расположенной в Модуле менеджера документа ЗаказКлиента.

Таким образом, полный путь к процедуре, содержащей данные для печати, выглядит так: Документ.ЗаказКлиента.МодульМенеджера.ПолучитьДанныеДляПечатнойФормыЗаказаНаТоварыУслуги.

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

Создание внешней печатной формы (ВПФ) в Конфигураторе

Теперь, когда мы знаем, откуда получать данные, приступим к созданию самой внешней печатной формы.

Шаг 1: Создание файла внешней обработки

  1. Откройте Конфигуратор 1С.
  2. Выберите меню Файл -> Новый.
  3. В появившемся окне выберите тип объекта Внешняя обработка и нажмите ОК.
  4. Сохраните файл обработки с расширением .epf в удобное для вас место.

Шаг 2: Создание макета печатной формы

Макет определяет внешний вид нашей печатной формы. Мы можем создать его непосредственно в конфигураторе.

  1. В дереве объектов внешней обработки (открытой в конфигураторе) щелкните правой кнопкой мыши на ветке Макеты и выберите Добавить макет табличного документа.
  2. Дайте макету понятное имя, например, МакетЗаказКлиента.
  3. Откройте созданный макет. Здесь мы можем размещать области печати, ячейки для вывода данных, заголовки, таблицы и т.д.
  4. Спроектируйте внешний вид вашей печатной формы, используя инструменты табличного документа. Определите области для шапки документа, для табличной части товаров, для подписей и примечаний.
  5. Для вывода данных в макете используйте параметры макета (например, [НомерДокумента], [ДатаДокумента], [НаименованиеНоменклатуры]). Эти параметры будут заполняться из данных, полученных программно.

Шаг 3: Программирование модуля объекта ВПФ

В Модуле объекта нашей внешней обработки мы должны реализовать две ключевые экспортные процедуры/функции для ее корректной работы.

1. Функция СведенияОВнешнейОбработке():

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


Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = Новый Структура;
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
    ПараметрыРегистрации.Вставить("Наименование", НСтр("ru = 'Мой Заказ клиента (Внешняя)"));
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
    ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма для документа Заказ клиента");

    // Создаем таблицу команд
    ТаблицаКоманд = Новый ТаблицаЗначений;
    ТаблицаКоманд.Колонки.Добавить("Идентификатор");
    ТаблицаКоманд.Колонки.Добавить("Представление");
    ТаблицаКоманд.Колонки.Добавить("Модификатор");
    ТаблицаКоманд.Колонки.Добавить("Проверка");
    ТаблицаКоманд.Колонки.Добавить("ПоказыватьВФорме");
    ТаблицаКоманд.Колонки.Добавить("РежимИспользования");

    // Добавляем команду печати для Заказа клиента
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Идентификатор    = "ПечатьМойЗаказКлиента"; // Уникальный идентификатор команды
    НоваяКоманда.Представление   = НСтр("ru = 'Мой Заказ клиента'"); // Текст, который увидит пользователь
    НоваяКоманда.Модификатор     = "ЗаказКлиента"; // Объект, к которому привязывается печатная форма
    НоваяКоманда.ПоказыватьВФорме = Истина; // Показывать в форме документа
    НоваяКоманда.РежимИспользования = "ВызовСерверногоМетода"; // Способ вызова команды
    
    // В некоторых случаях может потребоваться проверка, например, на заполненность полей
    // НоваяКоманда.Проверка = "ПроверкаПечати"; // Имя экспортной процедуры в модуле объекта

    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

    Возврат ПараметрыРегистрации;

КонецФункции

2. Процедура Печать():

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


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

    Если МассивОбъектов.Количество() = 0 Тогда
        Возврат;
    КонецЕсли;

    // Получаем ссылку на первый объект (если печатаем несколько, можно перебрать в цикле)
    СсылкаНаОбъект = МассивОбъектов[0]; 

    // Получаем макет
    Макет = ПолучитьМакет("МакетЗаказКлиента"); // Имя нашего макета

    // Создаем табличный документ
    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЗаказКлиента_" + СсылкаНаОбъект.УникальныйИдентификатор();

    // Заполняем табличный документ данными.
    // Здесь мы вызываем ту самую процедуру, которую нашли!
    ДанныеДляПечати = Документы.ЗаказКлиента.ПолучитьДанныеДляПечатнойФормыЗаказаНаТоварыУслуги(СсылкаНаОбъект);

    // Если типовая процедура возвращает структуру,
    // то нам нужно разобрать ее и заполнить наш макет.
    // Пример примитивного заполнения (нужно адаптировать под структуру ДанныеДляПечати)
    Если ДанныеДляПечати <> Неопределено Тогда
        ОбластьШапка = Макет.ПолучитьОбласть("Шапка"); // Предполагаем, что есть область Шапка
        ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаТовара"); // Предполагаем, что есть область СтрокаТовара
        ОбластьПодвал = Макет.ПолучитьОбласть("Подвал"); // Предполагаем, что есть область Подвал
        
        // Заполняем шапку
        ОбластьШапка.Параметры.НомерДокумента = ДанныеДляПечати.Номер;
        ОбластьШапка.Параметры.ДатаДокумента = ДанныеДляПечати.Дата;
        ОбластьШапка.Параметры.Контрагент = ДанныеДляПечати.Контрагент.Наименование;
        // ... другие параметры шапки

        ТабличныйДокумент.Вывести(ОбластьШапка);

        // Заполняем табличную часть
        Если ДанныеДляПечати.Товары.Количество() > 0 Тогда
            Для Каждого СтрокаТабЧасти Из ДанныеДляПечати.Товары Цикл
                ОбластьСтрока.Параметры.Номенклатура = СтрокаТабЧасти.Номенклатура;
                ОбластьСтрока.Параметры.Количество = СтрокаТабЧасти.Количество;
                ОбластьСтрока.Параметры.Цена = СтрокаТабЧасти.Цена;
                ОбластьСтрока.Параметры.Сумма = СтрокаТабЧасти.Сумма;
                // ... другие параметры строки
                ТабличныйДокумент.Вывести(ОбластьСтрока);
            КонецЦикла;
        КонецЕсли;

        // Заполняем подвал
        ОбластьПодвал.Параметры.ВсегоСумма = ДанныеДляПечати.СуммаДокумента;
        // ... другие параметры подвала
        ТабличныйДокумент.Вывести(ОбластьПодвал);
    КонецЕсли;

    // Добавляем табличный документ в коллекцию печатных форм
    КоллекцияПечатныхФорм.Добавить(ТабличныйДокумент, "МойЗаказКлиента", "Мой Заказ клиента");

КонецПроцедуры

В этой процедуре мы получаем ссылку на документ, получаем макет, вызываем типовую процедуру ПолучитьДанныеДляПечатнойФормыЗаказаНаТоварыУслуги для сбора данных, а затем используем эти данные для заполнения нашего макета и формирования табличного документа.

Подключение ВПФ в режиме 1С:Предприятие

После того как мы создали и сохранили нашу внешнюю печатную форму (файл .epf), ее необходимо подключить в режиме "1С:Предприятие".

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

Рекомендации и возможные проблемы

  1. Совместимость с обновлениями: При обновлениях типовой конфигурации могут изменяться структуры данных и процедуры. Всегда проверяйте совместимость ваших ВПФ с новой версией системы, особенно если были изменены ключевые функции или структуры, используемые в ПолучитьДанныеДляПечатнойФормыЗаказаНаТоварыУслуги.
  2. Использование расширений: Вместо внешних обработок в некоторых случаях удобнее использовать механизмы расширений конфигурации. Расширения позволяют изменять или добавлять функционал (в том числе печатные формы) без внесения изменений в исходный код и сохраняя конфигурацию на поддержке. Для печатных форм расширения часто предоставляют более тесную интеграцию.
  3. Отладка ВПФ: Для отладки внешней печатной формы ее можно открыть через Файл -> Открыть в Конфигураторе, а затем установить точки останова в ее модулях. Запустите 1С:Предприятие в режиме отладки и вызовите печать из документа "Заказ клиента". Отладчик остановится на установленных точках.
  4. Пользовательские права: Убедитесь, что пользователям, которым необходим доступ к новой печатной форме, предоставлены соответствующие права на использование дополнительных отчетов и обработок.
  5. Изображения номенклатуры: Если необходимо выводить изображения номенклатуры в печатной форме, то процедура ПолучитьДанныеДляПечатнойФормыЗаказаНаТоварыУслуги может не возвращать их напрямую. В таком случае, после получения основных данных, нам потребуется дополнительно получить данные изображений, используя механизмы работы с хранилищем файлов или прикрепленными файлами.

Следуя этим шагам, мы сможем эффективно находить источники данных для типовых печатных форм и создавать свои собственные внешние печатные формы для документа "Заказ клиента" в 1С:ERP, расширяя функционал системы без изменения ее ядра.

← На главную