В современной «1С:Бухгалтерия 8.3» (редакция 3.0) поиск конкретной формы или участка кода, отвечающего за печать, может стать непростой задачей для начинающего разработчика. Это связано с тем, что конфигурация построена на базе Библиотеки стандартных подсистем (БСП), где механизмы формирования документов унифицированы и разнесены по разным модулям. Разберем подробно, как идентифицировать нужный фрагмент кода и внести в него изменения, например, добавить товары в стандартный «Акт об оказании услуг».
Прежде чем открывать код, нам необходимо точно определить имя документа. Рассмотрим ситуацию на примере документа «Реализация: Товары, услуги, комиссия». Чтобы узнать его системное имя, проанализируем интерфейс в режиме «1С:Предприятие»:
РеализацияТоваровУслуг.Теперь в конфигураторе мы можем уверенно развернуть ветку Документы и найти там РеализацияТоваровУслуг.
В управляемых формах БСП логика печати практически никогда не находится в модуле самой формы. Проанализируем структуру объекта: основная работа по подготовке данных происходит в модуле менеджера документа. Выясним, какие процедуры нас интересуют в первую очередь:
СформироватьПечатнуюФорму[НазваниеФормы].Предположим, нам нужно изменить «Акт об оказании услуг», чтобы в него попадали не только данные из табличной части «Услуги», но и «Товары». Проанализируем модуль менеджера документа РеализацияТоваровУслуг. Нам необходимо найти область Печать.
Для быстрого поиска воспользуемся глобальным поиском по конфигурации (клавиши Ctrl + Shift + F). Введем уникальную фразу из макета или имя самого макета. Как правило, для акта это будет ПФ_MXL_Акт. Посмотрим, в каких процедурах упоминается этот идентификатор.
В 1С:Бухгалтерии за сбор данных для акта часто отвечает специализированная функция. Рассмотрим пример поиска функции формирования запроса:
// В модуле менеджера находим функцию, отвечающую за текст запроса
Функция ПолучитьТекстЗапросаДляФормированияТаблицыСведенийАктаОбОказанииУслуг()
// Здесь подготавливается текст запроса к базе данных
ТекстЗапроса =
"ВЫБРАТЬ
| ...
|ГДЕ
| ...
| И (РегистрСведенийРублевыеСуммыДокументовВВалюте.ТабличнаяЧастьДокумента =
| ЗНАЧЕНИЕ(Перечисление.ТабличныеЧастиДокументов.Услуги))";
Возврат ТекстЗапроса;
КонецФункции
Проанализировав этот код, мы видим жесткую фильтрацию по типу табличной части — только Услуги. Чтобы добавить товары, нам потребуется модифицировать этот запрос, используя конструкцию ОБЪЕДИНИТЬ ВСЕ, чтобы включить данные из табличной части Товары.
Если вы не можете найти процедуру «глазами», воспользуемся методом замера производительности. Это один из самых эффективных способов для «нуба» (как выразился автор вопроса) быстро понять путь исполнения кода:
УправлениеПечатью или РеализацияТоваровУслуг).Важно помнить, что прямое изменение типовой конфигурации — это крайняя мера, которая затруднит последующие обновления. Рассмотрим более правильные подходы:
1. Внешняя печатная форма
Это отдельный файл (.epf), который подключается через справочник «Дополнительные отчеты и обработки». Мы берем код модуля менеджера (процедуру Печать и сопутствующие функции), копируем их во внешнюю обработку, меняем логику и подключаем к системе. Конфигурация при этом остается на полной поддержке.
2. Расширение конфигурации
Это самый современный метод. Создаем Расширение, добавляем в него документ РеализацияТоваровУслуг и перехватываем нужную функцию с помощью аннотации &Вместо. Рассмотрим пример:
&Вместо("ПолучитьТекстЗапросаДляФормированияТаблицыСведенийАктаОбОказанииУслуг")
Функция Расш1_ПолучитьТекстЗапросаДляФормированияТаблицыСведенийАктаОбОказанииУслуг()
// Копируем оригинальный текст запроса и модифицируем его
ТекстЗапроса = "ВЫБРАТЬ ... ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ...";
Возврат ТекстЗапроса;
КонецФункции
Для поиска кода формы в 1С:Бухгалтерии 3.0 необходимо ориентироваться на Модуль менеджера документа и процедуры, работающие с механизмом УправлениеПечатью. Использование глобального поиска по имени макета (ПФ_MXL_...) и замера производительности позволяет найти нужную точку входа за считанные минуты. Однако, лучшей практикой является вынос этих изменений во внешние печатные формы или расширения, чтобы сохранить возможность беспрепятственного обновления программы.