Как найти и изменить поля формы, которые не отображаются в конфигураторе 1С:УТ 11?

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

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

Выясняем причину: механизм динамического формирования полей

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

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

Поиск кода, отвечающего за отрисовку полей

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

  1. Откроем модуль формы документа РеализацияТоваровУслуг.
  2. Найдем процедуру ПриСозданииНаСервере.
  3. Посмотрим на вызовы общих модулей. Обычно там присутствует строка вида:

// В типовых конфигурациях за это отвечает подсистема печати
РеквизитыПечатиУТ.ПриСозданииНаСервере(ЭтаФорма, Параметры);

Именно в таких общих модулях, как РеквизитыПечатиСервер или РеквизитыПечатиУТ, сосредоточена логика описания состава полей. Программа проверяет тип документа и динамически добавляет в коллекцию ЭтаФорма.Элементы новые поля ввода, связывая их с данными, которые часто хранятся не в самом документе, а в дополнительных структурах или регистрах сведений (например, «Сведения о документах»).

Как изменить тип данных или свойства динамического поля

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

Шаг 1. Создание расширения. Добавим форму документа в расширение. Нам не нужно менять саму форму визуально, нам нужен доступ к её программному коду.

Шаг 2. Перехват процедуры формирования. Нам необходимо найти место, где поля уже созданы, но форма еще не показана пользователю. Оптимально использовать аннотацию &После для процедуры ПриСозданииНаСервере.

Шаг 3. Программное изменение свойств. Рассмотрим пример кода в расширении, который находит программно созданный элемент и меняет его свойства:


&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Пытаемся найти программно созданный элемент по его имени
    ИмяЭлемента = "ДоверенностьНомер"; // Имя можно подсмотреть в режиме предприятия через "Изменить форму"
    ПолеНомер = ЭтаФорма.Элементы.Найти(ИмяЭлемента);
    
    Если ПолеНомер <> Неопределено Тогда
        // Здесь мы можем изменить доступность, видимость или заголовок
        ПолеНомер.Заголовок = "Номер выданной доверенности (изм.)";
        ПолеНомер.ТолькоПросмотр = Ложь;
        
        // ВНИМАНИЕ: Изменение ТипаЗначения программного элемента требует 
        // также изменения связанного реквизита формы.
    КонецЕсли;

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

Проблемы отладки: почему не срабатывают точки останова?

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

Использование переопределяемых модулей

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

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

Резюме

Если вы не видите поля в конфигураторе — не пугайтесь. Это признак гибкой архитектуры современной платформы. Для решения задачи:

  1. Используйте отладчик для поиска момента вызова процедур подсистемы печати.
  2. Анализируйте состав коллекции ЭтаФорма.Элементы в режиме реального времени.
  3. Вносите изменения через расширения, используя программные методы манипуляции объектами формы.

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

← На главную