Почему документ в 1С открывается только для чтения в веб-клиенте при переходе из динамического списка?

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

В процессе разработки и сопровождения конфигураций на платформе 1С:Предприятие 8.3, особенно использующих Библиотеку стандартных подсистем (БСП), программисты часто сталкиваются с ситуацией, когда поведение системы в тонком клиенте и веб-клиенте различается. Одной из наиболее запутанных проблем является автоматическая установка свойства формы ТолькоПросмотр в значение Истина при открытии документа из динамического списка в браузере, хотя в других режимах работы документ доступен для редактирования. Рассмотрим подробно причины этого явления и способы его устранения.

Разбор ситуации и первичная диагностика

Представим ситуацию: у нас есть новый вид документа. Пользователь создает его, сохраняет, но при повторном открытии именно из динамического списка в веб-клиенте форма становится недоступной для правки. Если проанализировать код в процедуре ПриСозданииНаСервере, можно заметить, что свойство ЭтаФорма.ТолькоПросмотр уже установлено в Истина еще до выполнения первой строки кода модуля формы. Это означает, что флаг передается платформой или устанавливается на этапе инициализации контекста.

Выясним причину, проанализировав несколько векторов: влияние настроек списка, механизмы прав доступа БСП и специфику работы веб-клиента.

Решение 1: Проверка заполнения ключевых реквизитов (Автор документа)

Как показывает практика (и опыт участников обсуждения), одной из самых частых причин в конфигурациях на базе БСП является работа подсистемы «Управление доступом». В БСП права на редактирование объекта часто завязаны на его владельца или автора. Если по какой-то причине (например, программное создание документа или некорректный перенос данных) реквизит Автор (или аналогичный, используемый в RLS) не заполнен, система может посчитать, что у текущего пользователя нет прав на изменение этого конкретного экземпляра.

Разберем, почему это проявляется именно в веб-клиенте. В веб-интерфейсе механизмы кэширования прав и проверки ограничений на уровне записей (RLS) могут работать более жестко. Если в базе данных есть объект с пустым автором, подсистема доступа может превентивно блокировать форму.

Что нужно сделать:

  1. Проверить, заполнен ли реквизит Автор (или другой реквизит, отвечающий за принадлежность объекта пользователю) в проблемных документах.
  2. Если реквизиты пусты, необходимо выполнить групповое заполнение этих данных.
  3. Убедиться, что при создании нового документа этот реквизит заполняется автоматически.

Пример кода для проверки в процедуре ПриСозданииНаСервере:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Проверим, не пустой ли автор, если документ уже записан
    Если Не Объект.Ссылка.Пустая() И Не ЗначениеЗаполнено(Объект.Автор) Тогда
        // Это может быть причиной установки ТолькоПросмотр = Истина механизмами БСП
        ЗаписатьЛог("У документа отсутствует автор: " + Объект.Ссылка);
    КонецЕсли;

КонецПроцедуры

Решение 2: Наследование свойств динамического списка

Проанализируем поведение платформы при открытии формы. В 1С существует механизм, при котором свойства формы документа могут наследоваться от формы списка, из которой вызывается открытие. Если динамический список имеет установленное свойство ТолькоПросмотр, то при открытии элемента из него веб-клиент может передать этот параметр в открываемую форму.

Посмотрим на настройки динамического списка в веб-клиенте:

  1. Откройте форму списка, где расположен динамический список.
  2. Проверьте свойство ТолькоПросмотр самого элемента формы «Список».
  3. Обратите внимание на свойство СпособРедактирования. Если установлено «В списке», но редактирование запрещено, это может влиять на режим открытия диалога.
  4. Проверьте Условное оформление динамического списка. Если там задано условие, устанавливающее «Только просмотр» для строк, веб-клиент может транслировать это состояние напрямую в свойство открываемой формы.

Решение 3: Специфика веб-клиента и параметры формы

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

Для диагностики можно использовать следующий код:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Если Параметры.Свойство("ТолькоПросмотр") Тогда
        Если Параметры.ТолькоПросмотр = Истина Тогда
            // Флаг пришел извне (из параметров открытия)
            Сообщить("Форма открыта в режиме 'Только чтение' через параметры.");
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

Если вы обнаружили, что параметр передается принудительно, проверьте, как именно вызывается открытие. В веб-клиенте переход по навигационной ссылке (например, клик по номеру документа в списке) может интерпретироваться системой как просмотр, если не настроены стандартные команды редактирования.

Решение 4: Проверка функциональных опций и даты запрета изменения

Поскольку конфигурация использует БСП, в ней наверняка задействованы Функциональные опции и механизмы Даты запрета изменения данных. В веб-клиенте параметры сеанса могут обновляться иначе, чем в тонком клиенте.

Проанализируем ситуацию: если документ попадает под дату запрета, БСП в процедуре ПриСозданииНаСервере (через общие модули, такие как ДатыЗапретаИзменения.ПриСозданииНаСервере) устанавливает форме режим просмотра. Убедитесь, что часовой пояс на сервере 1С, сервере веб-публикации и на компьютере пользователя совпадает. Разница даже в несколько минут может привести к тому, что документ «сегодняшнего» дня в веб-клиенте будет считаться документом «прошлого» периода, на который установлена дата запрета.

Рекомендации по исправлению

Если после всех проверок причина остается неясной, попробуйте следующий алгоритм действий:

  1. Обновите платформу: Версия 8.3.5, упомянутая в обсуждении, имеет ряд известных багов в работе веб-клиента. Переход на актуальные релизы (8.3.22+) часто решает проблемы отрисовки и передачи контекста.
  2. Принудительный сброс: Если бизнес-логика позволяет, в самом конце процедуры ПриСозданииНаСервере можно добавить проверку прав и принудительно установить ТолькоПросмотр = Ложь, если все условия для редактирования соблюдены. Однако это «костыль», и лучше найти корень проблемы в RLS или настройках списка.
  3. Проверка прав доступа: Используйте инструмент «Оценка прав доступа» в конфигураторе, чтобы понять, какие именно ограничения действуют на данный вид документа для конкретного пользователя.

Подводя итог, можно сказать, что проблема чаще всего кроется в незаполненных данных (Автор), которые через фильтры БСП ограничивают доступ в веб-интерфейсе, либо в настройках динамического списка, который передает свойство «Только просмотр» открываемой форме объекта.

← На главную