При работе с современными конфигурациями 1С, такими как Управление торговлей 11, ERP 2 или Комплексная автоматизация, разработчики часто сталкиваются с ситуацией, когда на форме в режиме «Предприятие» видны поля (например, «Доверенность», «Номер», «Дата»), а в конфигураторе на этой же форме их найти невозможно. Рассмотрим подробно, почему так происходит, как найти «ноги» этих реквизитов и каким образом их можно корректно модифицировать.
В типовых решениях, построенных на базе БСП (Библиотеки стандартных подсистем), активно используется механизм динамического изменения состава форм. Это делается для того, чтобы не перегружать метаданные формы сотнями редко используемых элементов. Разберем ситуацию на примере документа РеализацияТоваровУслуг.
Поля, относящиеся к печати (реквизиты доверенности, подписи и т.д.), не являются статичными элементами. Платформа создает их программно в момент открытия формы. Проанализируем, как это работает: в визуальном редакторе конфигуратора вы можете увидеть пустую группу (например, с именем ГруппаДополнительныеРеквизитыПечати), которая служит «контейнером». В коде модуля формы в событии ПриСозданииНаСервере вызываются специализированные процедуры, которые «дорисовывают» нужные поля ввода прямо в эту группу.
Чтобы понять, откуда берутся данные, нам необходимо погрузиться в программный код модуля формы документа. Рассмотрим типичный алгоритм поиска:
РеализацияТоваровУслуг.ПриСозданииНаСервере.
// В типовых конфигурациях за это отвечает подсистема печати
РеквизитыПечатиУТ.ПриСозданииНаСервере(ЭтаФорма, Параметры);
Именно в таких общих модулях, как РеквизитыПечатиСервер или РеквизитыПечатиУТ, сосредоточена логика описания состава полей. Программа проверяет тип документа и динамически добавляет в коллекцию ЭтаФорма.Элементы новые поля ввода, связывая их с данными, которые часто хранятся не в самом документе, а в дополнительных структурах или регистрах сведений (например, «Сведения о документах»).
Если нам нужно изменить тип поля (например, сделать номер доверенности не строкой, а ссылкой на другой объект), мы не можем сделать это через визуальный редактор. Нам потребуется механизм расширений конфигурации. Рассмотрим пошагово, как реализовать изменения:
Шаг 1. Создание расширения. Добавим форму документа в расширение. Нам не нужно менять саму форму визуально, нам нужен доступ к её программному коду.
Шаг 2. Перехват процедуры формирования. Нам необходимо найти место, где поля уже созданы, но форма еще не показана пользователю. Оптимально использовать аннотацию &После для процедуры ПриСозданииНаСервере.
Шаг 3. Программное изменение свойств. Рассмотрим пример кода в расширении, который находит программно созданный элемент и меняет его свойства:
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Пытаемся найти программно созданный элемент по его имени
ИмяЭлемента = "ДоверенностьНомер"; // Имя можно подсмотреть в режиме предприятия через "Изменить форму"
ПолеНомер = ЭтаФорма.Элементы.Найти(ИмяЭлемента);
Если ПолеНомер <> Неопределено Тогда
// Здесь мы можем изменить доступность, видимость или заголовок
ПолеНомер.Заголовок = "Номер выданной доверенности (изм.)";
ПолеНомер.ТолькоПросмотр = Ложь;
// ВНИМАНИЕ: Изменение ТипаЗначения программного элемента требует
// также изменения связанного реквизита формы.
КонецЕсли;
КонецПроцедуры
Часто программисты сталкиваются с тем, что при попытке отладить процесс формирования формы точки останова игнорируются. Разберем основные причины и способы их решения:
ПриСозданииНаСервере) выполняется на стороне сервера. Если у вас серверный вариант базы, убедитесь, что сервер запущен с ключом -debug. Проверить это можно в настройках подключения («Отладка» -> «Подключение» -> «Автоматическое подключение»), установив галочки для сервера.Процедура...) или на комментарии, платформа может её пропустить. Всегда ставьте точку на первой значимой строке внутри тела процедуры.Разберем еще один способ, заложенный разработчиками 1С. В БСП существуют так называемые переопределяемые модули (например, УправлениеПечатьюПереопределяемый). Эти модули специально предназначены для того, чтобы внедрять в них кастомную логику без изменения основного ядра системы.
Проанализируем ситуацию: если вам нужно добавить новое поле во все печатные формы определенного типа документов, лучше найти соответствующую процедуру в переопределяемом модуле. Это позволит сохранить обновляемость конфигурации и обеспечит корректную работу типовых механизмов заполнения данных перед печатью.
Если вы не видите поля в конфигураторе — не пугайтесь. Это признак гибкой архитектуры современной платформы. Для решения задачи:
ЭтаФорма.Элементы в режиме реального времени.Такой подход позволит вам эффективно управлять интерфейсом, сохраняя при этом чистоту основной конфигурации.