В практике работы с программой 1С:Зарплата и управление персоналом 3.1 часто встречается ситуация, когда внешняя печатная форма, исправно работавшая долгое время, внезапно начинает выдавать ошибку «Недостаточно прав» или неопределенную «Непредвиденную ошибку». Это происходит даже в тех случаях, когда в параметрах регистрации обработки явно указано БезопасныйРежим = Ложь. Разберем подробно причины этого поведения и пошагово проанализируем методы устранения неисправности.
Одной из наиболее распространенных причин является изменение состава данных в информационной базе или настроек RLS (Record Level Security) — ограничения доступа на уровне записей. Если в запросе печатной формы происходит обращение к таблицам, на которые у пользователя установлены ограничения, и при этом в тексте запроса не используется специальное слово, платформа инициирует исключение по правам доступа.
Проанализируем структуру типичного запроса во внешней печатной форме. Рассмотрим пример правильного написания запроса, который позволяет избежать ошибки при неполных правах на часть записей:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Сотрудники.Ссылка КАК Сотрудник,
| Сотрудники.Код КАК Код
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
|ГДЕ
| Сотрудники.Ссылка В(&МассивОбъектов)";
Использование конструкции РАЗРЕШЕННЫЕ указывает платформе, что из базы данных нужно извлечь только те записи, на которые у текущего пользователя есть права. Если это слово отсутствует, а запрос пытается прочитать хотя бы одну «запрещенную» запись (например, сотрудника из другого филиала, к которому у пользователя нет доступа по RLS), система выдаст ошибку прав доступа.
Выясним истинную причину ошибки, не гадая на коде. Для этого нам потребуется стандартный инструмент — Журнал регистрации. При возникновении ошибки «Недостаточно прав» платформа фиксирует событие отказа в доступе.
Рассмотрим порядок действий для анализа:
Часто оказывается, что внешняя печатная форма обращается к служебным объектам, о которых программист мог забыть. Например, при формировании печатных форм часто задействованы механизмы БСП (Библиотеки стандартных подсистем), требующие доступа к справочникам ИдентификаторыОбъектовМетаданных или регистрам сведений, хранящим настройки версионирования и дополнительные сведения.
В современных версиях ЗУП 3.1 реализован механизм автоматической загрузки исправлений (патчей). Проанализируем ситуацию: если в пятницу все работало, а в понедельник возникла ошибка, велика вероятность, что за выходные система применила патч, который изменил логику работы прав доступа или механизмы безопасности БезопасныйРежим.
Чтобы проверить эту версию, выполним следующие действия:
Иногда «непредвиденная ошибка» во внешней печатной форме связана с некорректным кэшированием файла обработки на стороне сервера 1С:Предприятие. Платформа при первом вызове формы извлекает файл .epf из хранилища и помещает его во временную папку.
Рассмотрим алгоритм «принудительного» обновления формы:
Это действие заставляет платформу обновить бинарные данные в базе и сбросить кэшированные версии обработки на всех рабочих серверах кластера. Важно: убедитесь также, что у системной учетной записи, под которой запущена служба 1C:Enterprise 8.3 Server Agent (например, USR1CV8), есть полные права на чтение и запись в папку %TEMP% на сервере.
Если печатная форма построена с использованием Системы компоновки данных (СКД), платформе требуются права не только на Чтение, но и на Просмотр соответствующих объектов метаданных. Посмотрим на типичную ошибку: пользователю дали право на чтение регистра, но забыли поставить галочку «Просмотр» в роли. В этом случае обычный запрос может отработать, но при попытке вывода данных через макет СКД возникнет ошибка прав.
Проанализируем профили групп доступа:
Даже если в коде обработки прописано БезопасныйРежим = Ложь, на уровне Консоли администрирования кластера серверов 1С могут быть настроены жесткие профили безопасности для всей информационной базы. Если администратор включил такой профиль, внешняя обработка будет жестко ограничена в правах, независимо от внутренних настроек программного кода.
Выясним причину через настройки кластера: в свойствах информационной базы проверьте поле Профиль безопасности. Если оно заполнено, необходимо убедиться, что в данном профиле разрешено использование внешних обработок и обращение к тем ресурсам (файлам, COM-объектам), которые задействованы в вашей печатной форме.
Подводя итог, можно сказать, что решение проблемы всегда кроется в системном подходе: от простого добавления РАЗРЕШЕННЫЕ в текст запроса до глубокого анализа логов сервера и состояния временных файлов. Сочетание этих методов позволяет гарантированно восстановить работоспособность внешних печатных форм в 1С:ЗУП 3.1.