Почему форма документа в режиме «1С:Предприятие» отличается от вида в Конфигураторе?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Причины расхождений: программное изменение состава формы

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

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


// Пример программного добавления страницы и поля на форму
НоваяСтраница = Элементы.Добавить("ГруппаДополнительно", Тип("ГруппаФормы"), Элементы.ГруппировкаСтраницы);
НоваяСтраница.Вид = ВидГруппыФормы.Страница;
НоваяСтраница.Заголовок = "Дополнительная информация";

НовоеПоле = Элементы.Добавить("ПолеКомментарий", Тип("ПолеФормы"), НоваяСтраница);
НовоеПоле.ПутьКДанным = "Объект.Комментарий";
НовоеПоле.Вид = ВидПоляФормы.ПолеВвода;

Проанализируем этот код: мы используем коллекцию Элементы и метод Добавить. В результате в режиме «1С:Предприятие» появится новая вкладка, которой физически нет в дереве элементов формы в Конфигураторе.

Механизмы БСП и переопределяемые модули

В типовых решениях (ERP, КА, УТ 11, БП 3.0) за модификацию интерфейса часто отвечает Библиотека стандартных подсистем (БСП). Рассмотрим, где именно искать такие изменения. Практически в каждой форме документа в процедуре ПриСозданииНаСервере можно встретить вызовы общих модулей.

Особое внимание стоит уделить общему модулю МодификацияКонфигурацииПереопределяемый. Именно здесь часто прописываются алгоритмы, которые «достраивают» форму в зависимости от различных условий. Выясним причину использования такого подхода: это позволяет централизованно управлять интерфейсом множества документов из одного места.

Влияние функциональных опций

Рассмотрим еще один мощный механизм платформы 1С — функциональные опции (ФО). Это «выключатели» функционала в программе. Если элемент формы (например, страница «Акциз») связан с функциональной опцией, которая выключена в настройках программы, этот элемент не просто будет скрыт — он может полностью отсутствовать в структуре формы при выполнении кода ПриСозданииНаСервере.

Важно: Если вы видите элемент в Конфигураторе, но не видите в программе — проверьте свойство элемента ФункциональныеОпции. Если же вы видите элемент в программе, но его нет в Конфигураторе — возможно, включение ФО инициирует программное создание этого элемента через механизмы БСП.

Динамическое изменение реквизитов формы

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


// Программное добавление реквизита формы
ДобавляемыеРеквизиты = Новый Массив;
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ДополнительныйТекст", Новый ОписаниеТипов("Строка")));
ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);

После выполнения такого кода в форме появляется реквизит, к которому затем программно привязывается новый элемент управления (поле ввода). В Конфигураторе на вкладке «Реквизиты» вы его никогда не найдете.

Пользовательские настройки и видимость по ролям

Выясним, могут ли настройки интерфейса влиять на отображение. Любой пользователь через меню «Ещё — Изменить форму» может скрыть или переместить элементы. Эти настройки сохраняются в системных таблицах базы данных. Если форма у одного пользователя выглядит иначе, чем у другого, — скорее всего, дело в интерактивных настройках.

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

Как эффективно искать скрытые элементы: пошаговая инструкция

Для того чтобы понять, откуда берутся «лишние» страницы, проделаем следующие действия:

  1. Глобальный поиск: Используем сочетание клавиш Ctrl+Shift+F. Ищем по всей конфигурации названия тех страниц или полей, которые мы видим в программе, но не видим в редакторе. Ищите как по имени, так и по заголовку.
  2. Использование отладчика: Это самый надежный метод. Поставим точку останова в самом конце процедуры ПриСозданииНаСервере в модуле формы. Когда программа остановится на этой точке, откроем табло (Shift+F9) и введем ЭтаФорма.Элементы. Мы сможем увидеть полный список всех элементов, которые реально существуют в данный момент, и посмотреть их свойства (имя, заголовок, родитель).
  3. Замер производительности: Включим замер производительности перед открытием формы. После открытия остановим замер и проанализируем список вызванных процедур. Ищем те, что находятся в общих модулях и содержат слова «Модификация», «УправлениеФормами», «Переопределяемый».
  4. Анализ функциональных опций: В Конфигураторе воспользуемся поиском ссылок на объект (Shift+F12) для подозрительных функциональных опций или проверим свойства формы, чтобы увидеть, какие ФО на неё влияют.

Таким образом, мы видим, что современная форма 1С — это динамический объект, который собирается «конструктором» прямо в оперативной памяти сервера перед показом пользователю. Понимание механизмов Элементы.Добавить(), функциональных опций и подписок БСП позволит вам быстро ориентироваться даже в самых сложных типовых решениях.

← На главную