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