При разработке в среде 1С:Документооборот 2.1 специалисты часто сталкиваются с ситуацией, когда после заимствования формы документа в расширение, дополнительные реквизиты (созданные в режиме «1С:Предприятие») перестают быть доступными для редактирования у обычных пользователей. При этом под правами администратора всё продолжает работать корректно. Рассмотрим эту проблему подробно, проанализируем внутренние механизмы программы и найдем способы её решения.
Для начала разберем, что представляют собой дополнительные реквизиты в 1С:ДО. Это не просто поля в конфигураторе, а часть функционала Библиотеки стандартных подсистем (БСП). Эти реквизиты хранятся в табличных частях объектов, а их описание — в специальных справочниках и планах видов характеристик. На форму документа они выводятся динамически в момент её создания на сервере.
Выясним причину, почему расширение может влиять на этот процесс. Когда мы добавляем форму в расширение, система создает копию метаданных формы. Любое изменение состава элементов или программного кода в расширении может нарушить цепочку вызовов стандартных процедур БСП, которые отвечают за отрисовку и установку прав доступа для этих полей.
В «1С:Документообороте» реализован мощный механизм — Настройка доступности по состоянию. Это специальная матрица, которая определяет, какие поля доступны для редактирования, когда документ находится в статусе «Проект», «На согласовании», «Согласован» и так далее. Для проверки действующих правил подойдёт обработка для анализа настроек доступности по состоянию.
Проанализируем ситуацию: администратор системы обычно игнорирует эти ограничения, в то время как на обычного пользователя они распространяются в полной мере. Рассмотрим пошагово, как проверить эти настройки:
Важный момент: Если форма была заимствована в расширение, система иногда может некорректно сопоставлять программный идентификатор формы с настройками в регистре. Попробуйте временно отключить расширение и проверить, появится ли возможность редактирования. Если появится — проблема в конфликте идентификаторов.
Если в расширении используются собственные роли или заимствованы стандартные, может возникнуть ситуация «потери» прав на метаданные, описывающие дополнительные реквизиты. Разберем, какие объекты метаданных критически важны для работы этого механизма:
ДополнительныеРеквизитыИСведенияНаборыДополнительныхРеквизитовИСведенийЗначенияСвойствОбъектовЕсли пользователь не имеет прав на чтение этих объектов (даже если у него есть права на сам документ), программный код БСП не сможет получить метаданные реквизита и, в целях безопасности, заблокирует его редактирование на форме, установив свойство ТолькоПросмотр = Истина.
Рассмотрим программный код, который часто используется в расширениях. Автор вопроса привел пример использования процедуры ПриОткрытииПосле. Однако, управление видимостью и доступностью в 1С:ДО происходит гораздо раньше — в процедуре ПриСозданииНаСервере.
Посмотрим на типичную ошибку. Если в расширении переопределена процедура ПриСозданииНаСервере (например, через &Вместо) и в ней забыт вызов стандартных обработчиков БСП, то механизм свойств просто не инициализируется. Но даже если используется &После, программное изменение заголовка или других свойств формы может привести к повторной перерисовке или сбросу кэша видимости.
Проанализируем пример правильного вмешательства в логику формы:
&НаСервере
Процедура ext_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Проверяем, что работаем именно с нашим видом документа
v_ЭтоКДК = foo_ПроверитьВидКДКНаСервере(Объект.ВидДокумента);
Если v_ЭтоКДК Тогда
// Изменение свойств формы, не затрагивая механизм БСП
ЭтаФорма.АвтоЗаголовок = Ложь;
ЭтаФорма.Заголовок = Объект.Заголовок;
КонецЕсли;
КонецПроцедуры
Обратите внимание, что лучше использовать ПриСозданииНаСервере, так как на клиенте в ПриОткрытии многие свойства элементов формы уже зафиксированы и их изменение может не дать результата или вызвать конфликт прав.
Выясним причину спора в комментариях форума. Существует большая разница между «Добавить в расширение» и созданием новой формы в расширении. Если вы заимствуете форму (Alt+Shift+F2), вы работаете с контекстом основной конфигурации. Если же форма была просто скопирована или создана заново в расширении, она теряет связь с обработчиками событий, прописанными в модуле менеджера или объекта основной конфигурации.
В 1С:Документообороте 2.1 многие формы документов имеют сложную иерархию групп. Дополнительные реквизиты обычно ищут группу с именем ГруппаДополнительныеРеквизиты. Если в расширении вы случайно изменили имя этой группы, переместили её или удалили — программный код УправлениеСвойствами.ПриСозданииНаСервере не найдет место для вставки реквизитов или вставит их с настройками по умолчанию (только чтение).
Иногда проблема кроется в кэшировании настроек формы. Пользователи часто настраивают форму под себя (колонки, положение полей). Эти настройки сохраняются в системных таблицах. При изменении структуры формы через расширение, старые настройки могут конфликтовать с новыми элементами.
Рассмотрим шаги для исправления:
Подводя итог, если вы столкнулись с тем, что доп. реквизит «заперт» для редактирования в расширении:
УправлениеСвойствами.ГруппаДополнительныеРеквизиты на форме в расширении.&После("ПриСозданииНаСервере") вместо клиентских процедур для логики управления интерфейсом.Соблюдение этих правил позволит вам корректно расширять функционал 1С:Документооборота, сохраняя при этом гибкость использования дополнительных реквизитов.