Разработка на платформе 1С:Предприятие 8.3 с использованием управляемых форм часто преподносит сюрпризы. Типичная ситуация: программист вносит правки в запрос динамического списка, добавляет новые колонки на форму или меняет их порядок, но при запуске приложения в режиме «Предприятие» форма остается прежней. При этом точки останова в процедурах ПриСозданииНаСервере или ПриОткрытии не срабатывают, что ставит разработчика в тупик.
В этой статье мы подробно разберем, почему система может «игнорировать» ваши изменения, и изучим пошаговый алгоритм диагностики этой проблемы. Мы рассмотрим влияние расширений, механизмы кэширования пользовательских настроек и программные способы подмены форм.
Проанализируем наиболее вероятную причину, которая и стала решением в рассматриваемом обсуждении. В современной архитектуре 1С активно используются расширения. Если объект метаданных (в нашем случае — документ) или его конкретная форма заимствованы в расширение, платформа отдает приоритет именно версии из расширения.
Рассмотрим, как это работает: когда система должна открыть форму, она сначала ищет её в списке подключенных расширений. Если форма там найдена, 1С открывает именно её, полностью игнорируя то, что вы напрограммировали в основной конфигурации. Даже если расширение не вносит видимых правок, сам факт заимствования формы делает её «главной».
Как проверить влияние расширений:
Ctrl+Alt+Is) для нужной формы. В списке ссылок будет видно, в каких расширениях задействован объект.Если форма найдена в расширении, у нас есть два пути: либо вносить изменения непосредственно в форму внутри расширения, либо удалить форму из расширения (если она там не нужна), чтобы управление вернулось к основной конфигурации.
Если с расширениями всё в порядке, но колонки всё равно не появляются, выясним причину в пользовательских настройках. Платформа 1С сохраняет «внешний вид» формы для каждого пользователя отдельно. Это включает видимость колонок, их ширину и положение.
Рассмотрим ситуацию: вы добавили новое поле в запрос динамического списка и вывели его на форму. Однако у пользователя в базе данных уже сохранен старый вариант формы, где этого поля нет. Система при открытии накладывает старые настройки поверх новой конфигурации.
Для решения этой проблемы выполним следующие действия:
%AppData%\1C\1Cv8\).Иногда поле в динамическом списке добавлено правильно, но оно не отображается или недоступно для программного обращения. Проанализируем настройки самого реквизита Список (типа ДинамическийСписок).
Платформа 1С оптимизирует запросы. Если поле добавлено в текст запроса динамического списка, но не выведено на форму в виде элемента (колонки) и не используется в оформлении, система может просто не включать его в итоговый SELECT запрос к базе данных для экономии ресурсов.
Чтобы гарантировать наличие поля, выполним следующие шаги:
Это заставит платформу всегда выбирать данные по этому полю, даже если оно скрыто пользователем.
Если отладчик не заходит в процедуры вашей формы, значит, открывается физически другая форма. Выясним, как платформа может подменить форму программно. Существует специальное событие в модуле менеджера объекта — ОбработкаПолученияФормы.
Разберем пример кода, который может скрываться в модуле менеджера документа:
Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
Если ВидФормы = "ФормаСписка" И РольДоступна("СпециальныйДоступ") Тогда
ВыбраннаяФорма = "ФормаСпискаЭлементарная"; // Подмена стандартной формы другой
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
Если такой код существует, то сколько бы вы ни правили основную форму списка, система будет настойчиво открывать ФормаСпискаЭлементарная. Также не забывайте проверять подписки на события. Существуют подписки, которые могут срабатывать при открытии форм и изменять их поведение или состав данных.
Когда визуальный осмотр не помогает, применим методы профессиональной отладки. Чтобы понять, какая именно форма открывается, нам нужно «поймать» момент её создания. Поскольку мы не знаем, в какой форме ставить точку останова, используем общие модули.
В большинстве типовых конфигураций (БП, УТ, ERP) при создании любой формы вызывается общий модуль СобытияФорм или МодификацияКонфигурации. Поставим точку останова в процедуре ПриСозданииНаСервере одного из таких модулей.
Когда отладка прервется, выполним следующие действия:
Также полезным инструментом является Замер производительности. Включим его перед открытием формы, откроем форму и выключим замер. В полученной таблице будут перечислены все процедуры, которые выполнились. Ищите процедуры с именами ПриСозданииНаСервере — путь к ним укажет на реальный объект метаданных, который был использован.
Подведем итог и составим краткий список действий для проверки, если форма «не видится» программой:
ОбработкаПолученияФормы?Используя этот комплексный подход, мы сможем гарантированно найти причину «исчезновения» правок и обеспечить корректную работу интерфейса для пользователей.