Как найти и модифицировать код печатной формы в 1С:Бухгалтерия 8.3

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

В современной «1С:Бухгалтерия 8.3» (редакция 3.0) поиск конкретной формы или участка кода, отвечающего за печать, может стать непростой задачей для начинающего разработчика. Это связано с тем, что конфигурация построена на базе Библиотеки стандартных подсистем (БСП), где механизмы формирования документов унифицированы и разнесены по разным модулям. Разберем подробно, как идентифицировать нужный фрагмент кода и внести в него изменения, например, добавить товары в стандартный «Акт об оказании услуг».

Шаг 1. Идентификация объекта в конфигураторе

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

  1. Перейдем в меню «Сервис и настройки» (иконка в правом верхнем углу).
  2. Выберем пункт «Функции для технического специалиста» (если пункт не отображается, его нужно включить в настройках параметров).
  3. В строке поиска введем «Реализация». Мы увидим, что системное имя документа — РеализацияТоваровУслуг.

Теперь в конфигураторе мы можем уверенно развернуть ветку Документы и найти там РеализацияТоваровУслуг.

Шаг 2. Где искать логику формирования печати

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

  1. Процедура ДобавитьКомандыПечати: Здесь происходит регистрация кнопок, которые мы видим в подменю «Печать». Если нам нужно добавить новый пункт меню, искать следует именно здесь.
  2. Процедура Печать: Это «диспетчер», который принимает запрос от пользователя, определяет, какой именно макет был выбран, и вызывает соответствующий алгоритм формирования табличного документа.
  3. Функции формирования макетов: Обычно они называются по шаблону СформироватьПечатнуюФорму[НазваниеФормы].

Шаг 3. Локализация кода для конкретной печатной формы

Предположим, нам нужно изменить «Акт об оказании услуг», чтобы в него попадали не только данные из табличной части «Услуги», но и «Товары». Проанализируем модуль менеджера документа РеализацияТоваровУслуг. Нам необходимо найти область Печать.

Для быстрого поиска воспользуемся глобальным поиском по конфигурации (клавиши Ctrl + Shift + F). Введем уникальную фразу из макета или имя самого макета. Как правило, для акта это будет ПФ_MXL_Акт. Посмотрим, в каких процедурах упоминается этот идентификатор.

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


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

Проанализировав этот код, мы видим жесткую фильтрацию по типу табличной части — только Услуги. Чтобы добавить товары, нам потребуется модифицировать этот запрос, используя конструкцию ОБЪЕДИНИТЬ ВСЕ, чтобы включить данные из табличной части Товары.

Шаг 4. Использование отладки и замера производительности

Если вы не можете найти процедуру «глазами», воспользуемся методом замера производительности. Это один из самых эффективных способов для «нуба» (как выразился автор вопроса) быстро понять путь исполнения кода:

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

Шаг 5. Правильные методы внесения изменений

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

1. Внешняя печатная форма

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

2. Расширение конфигурации

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


&Вместо("ПолучитьТекстЗапросаДляФормированияТаблицыСведенийАктаОбОказанииУслуг")
Функция Расш1_ПолучитьТекстЗапросаДляФормированияТаблицыСведенийАктаОбОказанииУслуг()
    // Копируем оригинальный текст запроса и модифицируем его
    ТекстЗапроса = "ВЫБРАТЬ ... ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ..."; 
    Возврат ТекстЗапроса;
КонецФункции

Резюме

Для поиска кода формы в 1С:Бухгалтерии 3.0 необходимо ориентироваться на Модуль менеджера документа и процедуры, работающие с механизмом УправлениеПечатью. Использование глобального поиска по имени макета (ПФ_MXL_...) и замера производительности позволяет найти нужную точку входа за считанные минуты. Однако, лучшей практикой является вынос этих изменений во внешние печатные формы или расширения, чтобы сохранить возможность беспрепятственного обновления программы.

← На главную