Как в 1С:Бухгалтерии 3.0 скрыть старые документы от пользователя?

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

Возникает задача — ограничить для определенного пользователя или группы пользователей видимость документов, созданных до некоторой даты. Особенно актуален этот вопрос для облачных баз в сервисе 1С:Fresh, где возможности доработок ограничены. Рассмотрим, можно ли это сделать стандартными средствами, и какие сложности нас ожидают при попытке реализовать такой функционал.

Сразу дадим ключевой ответ: типового, готового "из коробки" способа скрыть документы по дате в 1С:Бухгалтерия 3.0 не существует. Стандартные механизмы для этого не предназначены, а нетиповая реализация сопряжена с серьезными трудностями, особенно в части целостности данных в отчетах.

Почему не подходит "Дата запрета изменения данных"?

Первое, что приходит на ум при работе с документами прошлых периодов — это механизм "Дата запрета изменения данных". Давайте разберемся, почему он не решает нашу задачу.

Этот функционал предназначен для закрытия периода от правок. Кроме того, можно настроить запрет изменения выборочно по пользователям. Когда вы устанавливаете дату запрета, система блокирует:

  1. Редактирование документов.
  2. Проведение и перепроведение.
  3. Отмену проведения (также можно установить запрет изменения даты запрета редактирования).
  4. Пометку на удаление.

Однако, этот механизм не скрывает сами документы. Пользователь, у которого есть права на чтение, по-прежнему сможет открыть любой журнал, найти старый документ, просмотреть его содержимое и все его данные. Для более тонкой настройки можно использовать управление доступом к формам. Таким образом, для задачи "скрыть от глаз" дата запрета бесполезна.

Возможное решение: ограничение доступа на уровне записей (RLS)

Единственный реальный способ реализовать требуемое огранинение — это использовать мощный механизм платформы 1С:Предприятие, который называется ограничение доступа на уровне записей (RLS, Row-Level Security) — для его настройки и проверки есть инструмент анализа прав доступа и RLS.

RLS позволяет создавать гибкие правила, которые будут применяться при каждом обращении к данным в базе. Для нашей задачи можно было бы создать такое правило:

  1. Создать новый профиль групп доступа (удобнее через обработку анализа прав и профилей доступа), например, "Пользователь с ограничением по дате".
  2. В этом профиле для всех нужных объектов (документов) прописать шаблон ограничения доступа.
  3. В тексте запроса шаблона анализировать дату документа (T1.Дата) и сравнивать ее с некой пороговой датой. Если дата документа меньше пороговой, доступ к записи запрещается.

Теоретически, после такой настройки пользователь с новым профилем просто не увидит "старые" документы в журналах. Для него их как будто не существует в базе. Однако на практике все гораздо сложнее.

Главная проблема: движения документов и данные в отчетах

Это ключевая сложность, которая делает простую настройку RLS на документах бессмысленной. Давайте проанализируем ситуацию, на которую справедливо указали участники форума.

Любой учетный документ (например, Реализация товаров и услуг или Поступление на расчетный счет) — это не просто запись в таблице. При проведении он создает движения — записи в регистрах:

Именно на основе данных из этих регистров строятся все без исключения финансовые и управленческие отчеты: оборотно-сальдовая ведомость (ОСВ), анализ счета, книга покупок и продаж, и многие другие.

Что произойдет, если мы скроем только документы? Пользователь не увидит в журнале старую реализацию. Но когда он сформирует ОСВ за тот период, он увидит все проводки по дебету счета 62 и кредиту счета 90, созданные этим документом. Он увидит начальные остатки на счетах на начало "разрешенного" периода, которые будут включать в себя результаты проведения "скрытых" документов. Для решения этой проблемы есть расширение для скрытия документов и их движений в отчетах.

В итоге, задача не будет решена. Более того, это создаст путаницу: пользователь будет видеть в отчетах цифры, происхождение которых не сможет отследить, так как документы-регистраторы будут от него скрыты.

Чтобы реализовать ограничение корректно, необходимо применять RLS не только к документам, но и ко всем связанным с ними регистрам. Нужно написать сложные шаблоны, которые будут ограничивать доступ к записям регистров, анализируя дату документа-регистратора (Регистратор.Дата). Это крайне сложная, трудоемкая задача, которая может серьезно повлиять на производительность системы, так как RLS будет применяться к огромным таблицам движений при построении каждого отчета.

Специфика реализации для 1С:Fresh

Для облачных баз в сервисе 1С:Fresh задача усложняется еще больше.

  1. Только через расширения. Любые доработки, включая настройку RLS, в 1С:Fresh возможны только через механизм Расширений конфигурации. Вы не можете напрямую изменять типовую конфигурацию.
  2. Обязательный аудит. Перед тем как ваше расширение будет установлено в рабочую базу клиента в 1С:Fresh, оно должно пройти обязательную проверку (аудит) со стороны фирмы "1С". Расширение проверят на соответствие стандартам разработки, безопасности и производительности. Сложные правила RLS, которые могут замедлить работу системы, с большой вероятностью не пройдут такой аудит.

Это делает внедрение подобного функционала в облаке долгим, дорогим и не всегда возможным.

Выводы

Подведем итог. Ограничить видимость документов по дате для пользователя — нетривиальная задача с множеством подводных камней.

Таким образом, прежде чем браться за такую доработку, следует тщательно взвесить все риски, трудозатраты и потенциальные проблемы с производительностью и целостностью учета. В большинстве случаев от этой идеи отказываются в пользу организационных мер или использования стандартных прав доступа по организациям или подразделениям.

← На главную