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