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