Работа с расширениями в платформе «1С:Предприятие 8.3» — это удобный и безопасный способ кастомизации типовых конфигураций. Однако разработчики часто сталкиваются с ситуацией, когда изменения, внесенные в форму внутри расширения (например, добавление колонки, изменение расположения элементов или новые реквизиты), упорно не желают отображаться в режиме «1С:Предприятие». При этом конфигурация базы данных успешно обновляется, само расширение подключено, а система не выдает никаких ошибок при запуске.
В этой статье мы подробно разберем, почему возникает подобное поведение платформы, как устроен внутренний механизм работы с заимствованными формами и какие шаги необходимо предпринять, чтобы ваши изменения гарантированно вступили в силу.
Самая частая и неочевидная причина, по которой изменения формы в расширении «не взлетают», кроется в алгоритме сравнения форм, заложенном в платформу 1С. Рассмотрим стандартный сценарий ошибки разработчика:
ПартииНоменклатуры) для проверки гипотезы.Почему так происходит? В момент, когда мы заимствуем форму в расширение, платформа создает скрытый «снимок» (сохраненную форму) исходного объекта на текущий момент времени. При запуске предприятия 1С выполняет трехстороннее сопоставление:
Платформа анализирует эти данные и видит, что форма в расширении полностью идентична скрытому снимку. Раз разницы между сохраненным состоянием и расширением нет, платформа считает, что разработчик не вносил никаких изменений в расширение относительно момента заимствования, и выводит пользователю стандартную форму из основной конфигурации.
Как правильно решить эту проблему:
Для того чтобы заставить платформу обновить скрытый снимок и увидеть разницу, воспользуемся штатной командой конфигуратора:
В крайнем случае, если форма сильно запутана, помогает полное удаление формы из расширения и ее повторное заимствование *после* того, как основная конфигурация была возвращена к типовому виду.
Платформа 1С по умолчанию накладывает жесткие ограничения на исполнение кода в расширениях. Если ваше расширение содержит программный код в модулях заимствованной формы, оно может полностью блокироваться системой.
Проанализируем свойства подключения расширения в режиме предприятия (меню «Администрирование» — «Печатные формы, отчеты и обработки» — «Расширения» или через функции технического специалиста «Управление расширениями конфигурации»):
&Вместо.Выясним, влияет ли это на работоспособность: снимите оба флага в списке расширений, перезапустите сеанс «1С:Предприятие» и проверьте результат.
Если визуальные изменения не видны, нам необходимо точно понять: применяется ли код расширения вообще. Для этого мы можем принудительно вызвать прерывание выполнения в коде расширения.
Разберем по шагам, как настроить точку останова в расширении формы:
ПриСозданииНаСервере с помощью аннотации &После.Посмотрим на пример шаблона кода для проверки:
&НаСервере
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Установите точку останова на строке ниже
ИмяТекущегоПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().Имя;
КонецПроцедуры
Запустите отладку. Если при открытии формы управление передается в эту процедуру и отладчик останавливается на контрольной строке, значит, само расширение успешно подключено и функционирует. Проблему нужно искать исключительно в составе элементов формы или правах доступа.
Начиная с современных версий платформы 8.3, заимствование формы не означает автоматического переноса всех ее данных. Переносятся только элементы (визуальная часть).
Если вы добавили колонку, которая связана с определенным реквизитом (например, реквизит дерева или динамического списка), убедитесь, что сам этот реквизит (или путь к данным элемента формы) также заимствован в расширение. Для этого кликните правой кнопкой мыши по нужному реквизиту на вкладке «Реквизиты» формы в расширении и выберите «Добавить в расширение».
Иногда платформа кэширует старое состояние метаданных формы, из-за чего новые элементы из расширения игнорируются клиентом. Для решения этой проблемы выполним следующие действия:
/ClearCache в строке запуска.%userprofile%\AppData\Local\1C\1cv8%userprofile%\AppData\Roaming\1C\1cv8Применяя данные подходы системно, мы сможем оперативно диагностировать и устранить любые проблемы, связанные с тем, что расширения форм не отображают внесенные изменения.