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