При разработке расширений для современных конфигураций на платформе 1С:Предприятие 8.3 программисты часто сталкиваются с ситуацией, когда новые реквизиты, добавленные в документы или справочники, ведут себя непредсказуемо. На копии базы у разработчика все работает идеально, но после внедрения на рабочую базу клиента часть пользователей (обычно те, у кого нет полных прав) не видят внесенных изменений. В этой статье мы подробно разберем причины возникновения этой проблемы и пошагово опишем методы её решения, опираясь на специфику работы 1С:Комплексная автоматизация 2.4 и механизмы БСП.
Первым делом проанализируем ситуацию с правами. В современных версиях платформы (начиная с 8.3.15) механизмы безопасности были существенно усилены. Если режим совместимости расширения установлен на 8.3.14 или выше, платформа требует явного указания прав доступа для всех новых объектов, добавленных через расширение. Рассмотрим, почему это критично.
Для пользователей с ролью ПолныеПрава система часто игнорирует ограничения, но для всех остальных категорий пользователей (бухгалтеры, менеджеры по продажам) доступ к новым данным по умолчанию закрыт. Если вы добавили реквизиты в ЗаказПокупателя, они не появятся в интерфейсе, пока система не поймет, что пользователю разрешено их просматривать.
Алгоритм действий для настройки прав:
ДобавленныеРеквизитыЧтение).В конфигурациях, использующих Библиотеку стандартных подсистем (БСП), таких как КА 2.4 или ERP, права доступа строятся на справочнике ИдентификаторыОбъектовМетаданных. Когда мы добавляем новые реквизиты через расширение, система не всегда автоматически регистрирует их в этом справочнике, особенно если загрузка расширения производилась через пользовательский режим, а не через конфигуратор.
Выясним, как заставить систему «увидеть» новые объекты. Для этого необходимо запустить процедуру обновления идентификаторов. Проанализируем программный способ решения этой задачи. Нам потребуется выполнить следующий код под пользователем с административными правами:
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(Истина, Ложь, Ложь);
ПараметрыОбновления = Справочники.ИдентификаторыОбъектовМетаданных.ПараметрыОбновления();
Справочники.ИдентификаторыОбъектовМетаданных.ВыполнитьОбновлениеИнформацииОбОбъектахМетаданных(ПараметрыОбновления);
После выполнения этого кода система переиндексирует состав метаданных, включая объекты расширения, что позволит механизмам прав доступа БСП корректно обрабатывать новые поля.
Рассмотрим ситуацию, описанную в сообщении №7: у старого пользователя реквизиты не видны, а у вновь созданного — всё в порядке. Это классический признак того, что проблема кроется в сохраненных настройках формы. 1С сохраняет состояние элементов интерфейса (видимость, положение, ширина колонок) для каждого пользователя индивидуально в системных таблицах базы данных.
Если пользователь открывал форму ЗаказПокупателя до того, как было установлено расширение, система запомнила «старый» вид формы. При появлении новых реквизитов они могут либо автоматически попасть в список скрытых элементов, либо просто игнорироваться из-за приоритета пользовательской настройки над программной.
Как сбросить настройки формы для пользователя:
После выполнения этих действий форма принудительно перерисуется в соответствии с текущим состоянием метаданных (включая расширение), и новые реквизиты должны появиться.
Проанализируем способ подключения расширения. Если расширение загружается через справочник «Расширения» в режиме «1С:Предприятие», по умолчанию устанавливается флаг «Безопасный режим». В этом режиме работа расширения может быть ограничена: например, могут не срабатывать некоторые обработчики событий или ограничиваться доступ к серверным вызовам, влияющим на отрисовку интерфейса.
Попробуем следующий вариант: в списке расширений снимем галочку «Безопасный режим» и перезапустим сеанс. Также, как советует сообщение №15, крайне рекомендуется выполнять обновление расширения через Конфигуратор. Это гарантирует корректную реструктуризацию таблиц базы данных в SQL-версии, особенно если реквизиты расширения должны хранить данные (флаг «Данные» в свойствах расширения).
Иногда новые реквизиты могут быть не видны из-за того, что они заимствованы вместе со свойствами родительского объекта, которые включают зависимость от Функциональных опций. Проверим, не привязан ли ваш реквизит в расширении к какой-либо системной опции, которая выключена у клиента.
Также разберем программный код управления видимостью, упомянутый автором (реквизит «Заказ будет готов одной датой»). Если видимость управляется в процедуре ПриЧтенииНаСервере или ПриСозданииНаСервере, убедитесь, что в расширении используется правильный тип вызова (&После или &Вместо) и что код учитывает права текущего пользователя. Для отладки можно временно добавить вывод сообщения:
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
Сообщить("Текущий пользователь: " + Пользователи.ТекущийПользователь());
// Проверка доступности реквизита программно
Элементы.Расш1_НовыйРеквизит.Видимость = Истина;
КонецПроцедуры
Подводя итог, можно сказать, что отсутствие видимости реквизитов — это комплексная проблема. Для её успешного решения мы рекомендуем придерживаться следующего чек-листа:
Соблюдение этих шагов позволит избежать большинства проблем с отображением элементов интерфейса в расширениях для 1С:Комплексная автоматизация 2.4.