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