Почему в 1С:Документооборот дополнительные реквизиты становятся недоступными для редактирования при использовании расширений?

Программист 1С v8.3 (Управляемые формы) 1С:Документооборот IT и автоматизация бизнеса
← На главную

При разработке в среде 1С:Документооборот 2.1 специалисты часто сталкиваются с ситуацией, когда после заимствования формы документа в расширение, дополнительные реквизиты (созданные в режиме «1С:Предприятие») перестают быть доступными для редактирования у обычных пользователей. При этом под правами администратора всё продолжает работать корректно. Рассмотрим эту проблему подробно, проанализируем внутренние механизмы программы и найдем способы её решения.

Понимание механизма дополнительных реквизитов

Для начала разберем, что представляют собой дополнительные реквизиты в 1С:ДО. Это не просто поля в конфигураторе, а часть функционала Библиотеки стандартных подсистем (БСП). Эти реквизиты хранятся в табличных частях объектов, а их описание — в специальных справочниках и планах видов характеристик. На форму документа они выводятся динамически в момент её создания на сервере.

Выясним причину, почему расширение может влиять на этот процесс. Когда мы добавляем форму в расширение, система создает копию метаданных формы. Любое изменение состава элементов или программного кода в расширении может нарушить цепочку вызовов стандартных процедур БСП, которые отвечают за отрисовку и установку прав доступа для этих полей.

Решение 1: Проверка настройки доступности по состояниям

В «1С:Документообороте» реализован мощный механизм — Настройка доступности по состоянию. Это специальная матрица, которая определяет, какие поля доступны для редактирования, когда документ находится в статусе «Проект», «На согласовании», «Согласован» и так далее. Для проверки действующих правил подойдёт обработка для анализа настроек доступности по состоянию.

Проанализируем ситуацию: администратор системы обычно игнорирует эти ограничения, в то время как на обычного пользователя они распространяются в полной мере. Рассмотрим пошагово, как проверить эти настройки:

  1. Перейдем в раздел Настройка и администрирование — Настройка доступности по состояниям.
  2. Найдем вид документа, с которым возникла проблема.
  3. Проверим конкретное состояние документа (например, «Проект»).
  4. Убедимся, что в колонке «Дополнительные реквизиты» для нужных ролей пользователей стоит разрешение на редактирование.

Важный момент: Если форма была заимствована в расширение, система иногда может некорректно сопоставлять программный идентификатор формы с настройками в регистре. Попробуйте временно отключить расширение и проверить, появится ли возможность редактирования. Если появится — проблема в конфликте идентификаторов.

Решение 2: Права доступа на объекты БСП в расширении

Если в расширении используются собственные роли или заимствованы стандартные, может возникнуть ситуация «потери» прав на метаданные, описывающие дополнительные реквизиты. Разберем, какие объекты метаданных критически важны для работы этого механизма:

Если пользователь не имеет прав на чтение этих объектов (даже если у него есть права на сам документ), программный код БСП не сможет получить метаданные реквизита и, в целях безопасности, заблокирует его редактирование на форме, установив свойство ТолькоПросмотр = Истина.

Решение 3: Особенности обработки событий формы в расширении

Рассмотрим программный код, который часто используется в расширениях. Автор вопроса привел пример использования процедуры ПриОткрытииПосле. Однако, управление видимостью и доступностью в 1С:ДО происходит гораздо раньше — в процедуре ПриСозданииНаСервере.

Посмотрим на типичную ошибку. Если в расширении переопределена процедура ПриСозданииНаСервере (например, через &Вместо) и в ней забыт вызов стандартных обработчиков БСП, то механизм свойств просто не инициализируется. Но даже если используется &После, программное изменение заголовка или других свойств формы может привести к повторной перерисовке или сбросу кэша видимости.

Проанализируем пример правильного вмешательства в логику формы:


&НаСервере
Процедура ext_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    // Проверяем, что работаем именно с нашим видом документа
    v_ЭтоКДК = foo_ПроверитьВидКДКНаСервере(Объект.ВидДокумента);
    Если v_ЭтоКДК Тогда
        // Изменение свойств формы, не затрагивая механизм БСП
        ЭтаФорма.АвтоЗаголовок = Ложь;
        ЭтаФорма.Заголовок = Объект.Заголовок;
    КонецЕсли;
КонецПроцедуры

Обратите внимание, что лучше использовать ПриСозданииНаСервере, так как на клиенте в ПриОткрытии многие свойства элементов формы уже зафиксированы и их изменение может не дать результата или вызвать конфликт прав.

Решение 4: Проблема заимствования формы («Добавлена» vs «Заимствована»)

Выясним причину спора в комментариях форума. Существует большая разница между «Добавить в расширение» и созданием новой формы в расширении. Если вы заимствуете форму (Alt+Shift+F2), вы работаете с контекстом основной конфигурации. Если же форма была просто скопирована или создана заново в расширении, она теряет связь с обработчиками событий, прописанными в модуле менеджера или объекта основной конфигурации.

В 1С:Документообороте 2.1 многие формы документов имеют сложную иерархию групп. Дополнительные реквизиты обычно ищут группу с именем ГруппаДополнительныеРеквизиты. Если в расширении вы случайно изменили имя этой группы, переместили её или удалили — программный код УправлениеСвойствами.ПриСозданииНаСервере не найдет место для вставки реквизитов или вставит их с настройками по умолчанию (только чтение).

Решение 5: Очистка кэша и пользовательских настроек

Иногда проблема кроется в кэшировании настроек формы. Пользователи часто настраивают форму под себя (колонки, положение полей). Эти настройки сохраняются в системных таблицах. При изменении структуры формы через расширение, старые настройки могут конфликтовать с новыми элементами.

Рассмотрим шаги для исправления:

  1. Зайти в документ под проблемным пользователем.
  2. Нажать Еще — Изменить форму.
  3. В открывшемся окне нажать Еще — Установить стандартные настройки.
  4. Если не помогло, администратору следует зайти в Настройки — Настройки пользователей и прав — Очистка настроек и удалить настройки формы для данного пользователя. Если операцию очистки требуется выполнить для большого количества сотрудников, задачу можно автоматизировать с помощью платформы для создания программных роботов OneRPA.

Итоговые рекомендации

Подводя итог, если вы столкнулись с тем, что доп. реквизит «заперт» для редактирования в расширении:

  1. Проверьте Настройку доступности по состояниям — это самая частая причина в 1С:ДО.
  2. Убедитесь, что в расширении не перекрыты процедуры БСП УправлениеСвойствами.
  3. Проверьте наличие группы ГруппаДополнительныеРеквизиты на форме в расширении.
  4. Используйте &После("ПриСозданииНаСервере") вместо клиентских процедур для логики управления интерфейсом.

Соблюдение этих правил позволит вам корректно расширять функционал 1С:Документооборота, сохраняя при этом гибкость использования дополнительных реквизитов.

← На главную