Как ограничить видимость сумм по счету 70 (зарплата) в оборотно-сальдовой ведомости

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

В практике работы с «1С:Бухгалтерией» часто возникает деликатная задача: главный бухгалтер просит ограничить доступ рядовых сотрудников к данным по 70 счету. Проблема заключается в том, что стандартные отчеты, такие как Оборотно-сальдовая ведомость (ОСВ), предназначены для полноценного анализа бухгалтерского учета, и «вырезать» из них один счет без нарушения логики работы системы довольно сложно. Рассмотрим подробнее, какими методами можно решить эту задачу, проанализируем риски каждого подхода и выберем оптимальный путь.

Метод 1. Архитектурный подход: Вынос зарплатного учета в отдельную базу

Проанализируем самый надежный и правильный с точки зрения методологии 1С способ. Если учет заработной платы ведется в той же информационной базе, что и основной бухгалтерский учет, скрыть детализацию практически невозможно. Самым эффективным решением будет использование внешней программы, например, «1С:Зарплата и управление персоналом» (ЗУП).

Выясним, как это работает по шагам:

  1. Весь детальный расчет налогов, взносов и выплат сотрудникам переносится в базу ЗУП.
  2. В «1С:Бухгалтерии» в настройках параметров учета устанавливается признак «Учет расчетов по персоналу ведется во внешней программе».
  3. Данные из ЗУП выгружаются в БП сводно. Вместо детализации по каждому сотруднику (субконто РаботникиОрганизации) в проводках будет фигурировать общая сумма по всей организации.

Преимущество: Бухгалтер видит общую сумму затрат на оплату труда в ОСВ, но не знает, кто конкретно и сколько получил. Это полностью снимает вопрос конфиденциальности персональных данных.

Метод 2. Использование механизма RLS (Record Level Security)

Если вариант с разделением баз не подходит, рассмотрим настройку ограничений на уровне записей (RLS). Этот метод позволяет на уровне SQL-запроса отсекать данные, к которым у пользователя нет доступа.

Чтобы реализовать это, нам потребуется создать отдельную роль и прописать ограничение доступа на чтение для объекта РегистрБухгалтерии.Хозрасчетный. Условие может выглядеть следующим образом:


ГДЕ СчетДт <> ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПерсоналомПоОплатеТруда)
И СчетКт <> ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПерсоналомПоОплатеТруда)

Однако при внедрении RLS мы столкнемся с рядом серьезных проблем:

Метод 3. Программная модификация вывода отчетов на обычных формах

Посмотрим на более «гибкий», но трудоемкий способ — вмешательство в процесс формирования отчета. В обычных формах большинство отчетов строятся с использованием ПостроителяОтчетов или универсального отчета.

Рассмотрим алгоритм доработки:

  1. В процедуре формирования отчета, перед тем как вывести результат в ТабличныйДокумент, мы можем проанализировать данные.
  2. Используем событие ПриВыводеСтроки или программный перебор областей после выполнения метода Вывести().
  3. Если в текущей строке или ячейке обнаружено упоминание счета 70, мы принудительно очищаем значение суммы или заменяем его на символы «***».

Пример фрагмента кода для очистки данных в табличном документе:


Для Каждого ОбластьСтрока Из ТабличныйДокумент.Области Цикл
    Если Найти(ОбластьСтрока.Текст, "70") > 0 Тогда
        // Нашли строку со счетом 70
        // Очищаем ячейки с суммами (нужно знать индексы колонок)
        ОбластьСтрока.Параметры.СуммаОборотДт = 0;
        ОбластьСтрока.Параметры.СуммаОборотКт = 0;
    КонецЕсли;
КонецЦикла;

Важно: Этот метод требует «затыкания дыр» во всех отчетах: ОСВ по счету, Анализ счета, Карточка счета, Обороты счета, Шахматка и Главная книга. Также придется закрыть доступ к универсальному отчету и консоли запросов.

Метод 4. Ограничение выбора счета в настройках

Проанализируем более простой, но менее защищенный вариант. Можно модифицировать форму настройки ОСВ таким образом, чтобы при выборе счета пользователем из определенного списка (или с определенной ролью) счет 70 был недоступен для выбора или автоматически исключался из фильтров.

В модуле формы отчета можно добавить проверку:


Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    Если Не РольДоступна("ПолныеПрава") Тогда
        // Добавляем фиксированный отбор, который пользователь не сможет снять
        Отбор = ПостроительОтчетов.Отбор;
        Если Отбор.Найти("Счет") = Неопределено Тогда
            НовыйОтбор = Отбор.Добавить("Счет");
            НовыйОтбор.ВидСравнения = ВидСравнения.НеВИерархии;
            НовыйОтбор.Значение = ПланСчетов.Хозрасчетный.РасчетыСПерсоналомПоОплатеТруда;
            НовыйОтбор.Использование = Истина;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Этот способ лишь ограничивает удобство, но опытный пользователь сможет увидеть суммы через корреспондирующие счета (например, посмотрев обороты по 51 или 50 счету в дебет 70).

Метод 5. Административные меры и NDA

Выясним, почему технические ограничения не всегда являются лучшим выходом. 1С — это система двойной записи. Если пользователь видит, что со счета 51 (Расчетный счет) ушло 500 000 рублей с назначением платежа «Выплата заработной платы», ему не нужно открывать 70 счет, чтобы понять объем фонда оплаты труда.

Поэтому наиболее эффективным и дешевым способом часто является:

Итог

Если задача стоит критически остро, лучшее решение — переход на сводный учет (Метод 1). Все остальные программные способы (RLS, модификация отчетов) будут либо приводить к ошибкам в балансе, либо потребуют огромных затрат на поддержку при каждом обновлении конфигурации. Помните, что безопасность данных в учетной системе — это всегда баланс между техническими запретами и административным регламентом.

← На главную