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