Откуда печатная форма в 1С берет данные и как найти нужные поля в коде

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

В современных конфигурациях 1С, таких как Управление торговлей 11, ERP 2 или Комплексная автоматизация, механизм печати реализован достаточно сложно. Это не просто кнопка, которая выводит значения на экран, а целая подсистема, основанная на Библиотеке стандартных подсистем (БСП). Разберемся по шагам, как найти путь от конкретного поля в печатной форме до строки в коде, где это значение получается из базы данных.

1. Поиск через модуль менеджера документа

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

  1. Откроем конфигуратор и найдем нужный документ (например, ЗаказКлиента).
  2. Перейдем в Модуль менеджера.
  3. Найдем процедуру ДобавитьКомандыПечати. Здесь регистрируются все кнопки, которые мы видим в меню «Печать».
  4. В этой процедуре нас интересует параметр МенеджерПечати. Если он не указан явно, значит, печать обрабатывается в этом же модуле. Если указан (например, какая-то обработка), то искать нужно в модуле менеджера этой обработки.
  5. Найдем экспортную процедуру Печать. Именно она является «входными воротами».

Рассмотрим пример типичной процедуры Печать в УТ 11:


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

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

2. Анализ запроса к данным

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

Если мы ищем, откуда берется конкретное поле, например, Менеджер, нам нужно найти соответствующий текст запроса. Посмотрим на пример кода:


| ВЫБРАТЬ
|   Документы.Валюта КАК Валюта,
|   Документы.Менеджер.ФизическоеЛицо КАК Менеджер,
|   Документы.ДополнительнаяИнформация КАК ДополнительнаяИнформация,
|   Документы.Организация КАК Организация
| ИЗ
|   Документ.ЗаказКлиента КАК Документы
| ГДЕ
|   Документы.Ссылка В(&МассивОбъектов)

Из этого кода становится ясно, что в печатную форму попадает не просто ссылка на пользователя (реквизит Менеджер), а именно ФизическоеЛицо, привязанное к этому пользователю. Это важный момент: в коде данные могут преобразовываться или выбираться из связанных справочников.

3. Использование отладки (тонкий момент с фоновыми заданиями)

Многие начинающие разработчики пытаются использовать кнопку «Остановить» в конфигураторе в момент нажатия на печать. Однако часто отладчик выбрасывает их в общие модули, связанные с резервным копированием или фоновыми заданиями. Выясним причину: в современных конфигурациях печать может запускаться в фоновом режиме для повышения производительности.

Чтобы отладка сработала корректно, выполним следующие настройки:

  1. В конфигураторе зайдем в меню Сервис — Параметры.
  2. На вкладке Запуск 1С:Предприятия выберем раздел Дополнительно.
  3. Установим флажок «Отладка фоновых заданий».
  4. Лучше не использовать кнопку паузы, а поставить точку останова (F9) в самом начале процедуры Печать в модуле менеджера. Тогда система гарантированно остановится в нужном месте кода.

4. Обратный поиск через макет (Метод параметров)

Если запрос в коде слишком сложный и состоит из множества временных таблиц, применим метод «от обратного»:

  1. Найдем Макет печатной формы (в ветке документа или в общих макетах).
  2. Найдем ячейку, где выводится интересующее нас значение.
  3. Посмотрим свойства этой ячейки (F4). Нас интересует поле Параметр. Например, там написано ФИОМенеджера.
  4. Теперь в конфигураторе нажмем Ctrl + Shift + F (Глобальный поиск) и введем .Параметры.ФИОМенеджера =.
  5. Поиск выведет нас на строку кода, где этому параметру присваивается конкретное значение. Часто это выглядит так: ОбластьМакета.Параметры.ФИОМенеджера = ФизическиеЛица.ФамилияИнициалы(ДанныеСтроки.МенеджерФизЛицо);.

5. Где еще могут храниться данные?

Нужно учитывать, что не все данные лежат в самом документе. Рассмотрим типичные места-источники:

6. Внешние печатные формы и расширения

Если мы изучили модуль менеджера, но не нашли там кода, который бы менял данные так, как мы видим на экране, проанализируем вероятность использования механизмов кастомизации:

Внешние печатные формы: Перейдем в раздел НСИ и администрирование — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки. Если форма зарегистрирована там, значит, логика находится во внешнем файле .epf. Его нужно выгрузить на диск и открыть в конфигураторе отдельно.

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

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

← На главную