При разработке расширений для современных конфигураций на базе 1С:Предприятие 8.3, таких как «Управление торговлей 11», программисты часто сталкиваются с ситуацией: реквизит в расширение добавлен, форма изменена, права назначены, но в режиме «Предприятие» поле упорно не появляется. Особенно это актуально для справочника Контрагенты. Давайте разберем эту проблему подробно, проанализируем внутренние механизмы конфигурации и найдем решение.
Прежде всего, нам необходимо вспомнить архитектурную особенность УТ 11. В этой конфигурации реализовано разделение на управленческий учет (справочник Партнеры) и регламентированный учет (справочник Контрагенты). Проанализируем настройки системы: если в разделе «НСИ и администрирование» включена опция использования партнеров, то основной формой для взаимодействия с клиентом или поставщиком становится форма партнера. Рассмотрим, почему это важно для нашей задачи.
Если вы добавляете реквизит только в справочник Контрагенты, а пользователи работают через интерфейс партнеров, ваше поле может быть попросту не выведено в нужный контекст. Проверьте, не открывается ли у вас «Помощник регистрации нового партнера», который является отдельной обработкой. В этом случае изменения формы справочника вообще не затронут этот диалог.
Одной из главных причин «исчезновения» элементов в УТ 11 является программная отрисовка интерфейса. Рассмотрим, как это работает. В процедуре ПриСозданииНаСервере большинства типовых форм вызываются общие модули, такие как УправлениеФормами или ПродажиКлиентСервер. Эти модули анализируют функциональные опции и права пользователя, после чего принудительно устанавливают свойство Видимость или Доступность для групп и отдельных элементов.
Выясним причину через код. Если вы добавили реквизит в расширение, попробуйте внедрить в процедуру ПриСозданииНаСервере (после вызова типовых обработчиков) следующий фрагмент кода для диагностики:
&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Проверяем программную видимость нашего элемента
ИмяЭлемента = "Расш1_НовоеПолеПеречисление";
Если Элементы.Найти(ИмяЭлемента) <> Неопределено Тогда
Сообщить("Элемент найден. Видимость: " + Элементы[ИмяЭлемента].Видимость);
Сообщить("Видимость родительской группы: " + Элементы[ИмяЭлемента].Родитель.Видимость);
Иначе
Сообщить("Элемент формы не найден!");
КонецЕсли;
КонецПроцедуры
Если в сообщении вы видите «Ложь», значит, типовой механизм скрывает вашу группу или само поле. В этом случае решение — разместить реквизит внутри стандартной группы, которая гарантированно отображается (например, в группе ОбщаяИнформация), либо изменить логику типового модуля через расширение.
Платформа 1С хранит персональные настройки форм для каждого пользователя. Рассмотрим ситуацию: вы изменили форму в конфигураторе, но пользователь уже открывал её ранее. Система может «помнить» старый состав полей. Для решения этой проблемы выполним следующие шаги в режиме «Предприятие»:
Контрагенты.Очень часто после выполнения этой операции добавленные через расширение поля мгновенно появляются в интерфейсе.
Разберем ситуацию, когда реквизит имеет тип данных, также созданный в расширении (например, новое Перечисление). Одной роли, дающей права на справочник, недостаточно. Проанализируем состав прав в расширении:
Иногда реквизит присутствует на форме, но данные в него не подтягиваются или он скрывается из-за механизмов оптимизации платформы. Посмотрим на свойства реквизита в редакторе формы. Существует флаг Использовать всегда. Установка этого флага гарантирует, что данные реквизита будут переданы с сервера на клиент, даже если платформа решит, что поле в данный момент невидимо.
Также важно проверить свойство Функциональные опции у созданного реквизита. Если вы случайно привязали новый реквизит к существующей функциональной опции (например, ИспользоватьМногооборотнуюТару), то поле будет отображаться только тогда, когда эта опция включена в настройках системы.
Если все вышеперечисленные методы не помогают, стоит рассмотреть вероятность сбоя кэша расширений. Проанализируем порядок действий для «чистого» обновления:
/ClearCache..cfe) и добавим его заново. Внимание: при удалении расширения данные в добавленных реквизитах могут быть потеряны, если они не были помечены как сохраняемые в основной базе.Подводя итог, можно сказать, что работа с расширениями в УТ 11 требует комплексного подхода. Мы рассмотрели влияние архитектуры «Партнеры-Контрагенты», программные методы управления видимостью и особенности прав доступа. Используя системный подход к проверке каждого из этих уровней, вы обязательно добьетесь корректного отображения ваших данных на форме.