Права доступа и RLS для маркировки в 1С: 6 шагов

Права доступа и RLS для маркировки в 1С: 6 шагов

📅 Опубликовано 18 июля 2026 г.

Коротко: Настройка прав доступа и RLS для маркировки в 1С за 6 шагов включает создание отдельных ролей для операторов маркировки, ограничение видимости складов через RLS, защиту справочника GTIN от изменений, включение журнала регистрации для аудита операций с кодами DataMatrix и настройку автоматических бэкапов базы. На каждый шаг закладывайте время работы специалиста — полный цикл занимает несколько рабочих дней.

  • Отдельная роль для оператора маркировки снижает риск случайного изменения GTIN
  • RLS по складам ограничивает видимость кодов Честного знака только для ответственного подразделения
  • Журнал регистрации фиксирует кто, когда и какой код вывел из оборота — критично при проверках
  • Бэкап базы раз в сутки спасает от потери привязки кодов маркировки к остаткам
  • Полная настройка занимает 2-3 дня, экономит от 50 000 ₽ штрафов за нарушения оборота кодов

Шаг 1-2: Роль оператора маркировки и защита GTIN

Начните с создания отдельной роли для оператора. Не давайте ему полных прав на конфигурацию — только те объекты, что нужны для работы с кодами. В режиме конфигуратора создайте роль ОператорМаркировки и настройте права на уровне объектов метаданных.

Программно проверить, обладает ли пользователь нужной ролью, можно так:

// Проверка наличия роли перед выполнением операции с кодами
Процедура ПроверитьПраваОператора()

    ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();

    Если НЕ ТекущийПользователь.Роли.Содержит(Метаданные.Роли.ОператорМаркировки) Тогда
        ВызватьИсключение "У пользователя нет прав на работу с кодами маркировки!";
    КонецЕсли;

КонецПроцедуры

Для защиты справочника GTIN от случайных изменений используйте подписку на событие ПередЗаписью. Так вы запретите редактирование ключевых реквизитов всем, кроме администратора:

// Обработчик подписки на событие ПередЗаписью справочника GTIN
Процедура ЗапретИзмененияGTIN(Источник, Отказ) Экспорт

    // Разрешаем запись только при наличии полных прав
    Если НЕ Источник.ЭтоНовый() И НЕ ПравоДоступа("Администрирование", Метаданные) Тогда

        СтарыеДанные = Источник.Ссылка.ПолучитьОбъект();

        Если СтарыеДанные.Код <> Источник.Код Тогда
            Отказ = Истина;
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Изменение GTIN запрещено. Обратитесь к администратору.";
            Сообщение.Сообщить();
        КонецЕсли;

    КонецЕсли;

КонецПроцедуры

Шаг 3-4: Настройка RLS по складам

Row Level Security (RLS) — механизм ограничения записей на уровне строк. Для маркировки это значит, что оператор одного подразделения не увидит коды чужого склада. Настройка выполняется в шаблоне ограничений роли.

Классический шаблон RLS для документа приёмки маркированной продукции выглядит так:

ГДЕ Склад В
    (ВЫБРАТЬ
    |    НастройкиДоступаСклады.Склад
    |ИЗ
    |    РегистрСведений.НастройкиДоступаСклады КАК НастройкиДоступаСклады
    |ГДЕ
    |    НастройкиДоступаСклады.Пользователь = &ТекущийПользователь)

Чтобы наполнить регистр сведений соответствиями «пользователь — склад», используйте запрос при первичной настройке. Ниже пример выборки складов, доступных текущему сотруднику:

// Получение списка доступных складов для оператора
Функция ПолучитьДоступныеСклады(Пользователь)

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    НастройкиДоступаСклады.Склад КАК Склад
    |ИЗ
    |    РегистрСведений.НастройкиДоступаСклады КАК НастройкиДоступаСклады
    |ГДЕ
    |    НастройкиДоступаСклады.Пользователь = &Пользователь
    |
    |УПОРЯДОЧИТЬ ПО
    |    Склад.Наименование";

    Запрос.УстановитьПараметр("Пользователь", Пользователь);

    Результат = Запрос.Выполнить().Выгрузить();
    Возврат Результат;

КонецФункции

Важно: после включения RLS обязательно протестируйте работу под каждой ролью. Ошибка в шаблоне может либо полностью заблокировать доступ, либо, наоборот, открыть чужие коды. Проверяйте выборку остатков маркированной продукции — оператор должен видеть только свой склад.

Шаг 5-6: Журнал регистрации и бэкапы

Журнал регистрации — ваш основной инструмент при проверках оператором «Честного знака» или налоговой. Он фиксирует каждую операцию вывода кода из оборота. Убедитесь, что в настройках журнала включён уровень регистрации «Информация» для нужных событий.

Программно записать событие в журнал регистрации при выводе кода из оборота можно так:

// Фиксация операции с кодом маркировки в журнале регистрации
Процедура ЗафиксироватьВыводИзОборота(КодМаркировки, Документ)

    ТекстСобытия = "Код " + КодМаркировки
        + " выведен из оборота документом " + Строка(Документ);

    ЗаписьЖурналаРегистрации(
        "Маркировка.ВыводИзОборота",
        УровеньЖурналаРегистрации.Информация,
        Метаданные.Документы.ВыводИзОборотаМаркировки,
        Документ,
        ТекстСобытия);

КонецПроцедуры

Для анализа журнала за период применяйте выгрузку через метод ВыгрузитьЖурналРегистрации. Это удобно для формирования отчёта по операциям с кодами:

// Выгрузка событий маркировки за период
Функция ПолучитьСобытияМаркировки(ДатаНачала, ДатаОкончания)

    ОтборСобытий = Новый Структура;
    ОтборСобытий.Вставить("События", "Маркировка.ВыводИзОборота");
    ОтборСобытий.Вставить("ДатаНачала", ДатаНачала);
    ОтборСобытий.Вставить("ДатаОкончания", ДатаОкончания);

    ТаблицаСобытий = Новый ТаблицаЗначений;
    ВыгрузитьЖурналРегистрации(ТаблицаСобытий, ОтборСобытий);

    Возврат ТаблицаСобытий;

КонецФункции

Последний шаг — автоматические бэкапы. Потеря базы означает потерю привязки кодов DataMatrix к остаткам, а восстановить это вручную практически невозможно. Настройте регламентное задание для выгрузки данных раз в сутки в нерабочее время.

// Регламентное задание резервного копирования (для файловой базы)
Процедура ВыполнитьРезервноеКопирование() Экспорт

    ИмяФайла = "backup_"
        + Формат(ТекущаяДата(), "ДФ=yyyyMMdd_HHmmss")
        + ".dt";

    ПутьКопии = "D:\Backups\" + ИмяФайла;

    // Логируем начало операции
    ЗаписьЖурналаРегистрации(
        "Обслуживание.РезервноеКопирование",
        УровеньЖурналаРегистрации.Информация,
        ,
        ,
        "Запуск копирования в " + ПутьКопии);

КонецПроцедуры

Совет: для клиент-серверных баз PostgreSQL или MS SQL используйте штатные средства СУБД (pg_dump или планы обслуживания SQL Server), а не выгрузку в .dt — это надёжнее и не требует монопольного доступа.

Типичные ошибки при настройке

  • Забыли про роль администратора в RLS. Полные права должны обходить ограничения, иначе даже вы не увидите все коды.
  • Не протестировали под каждым пользователем. Всегда проверяйте доступ через сеанс конкретного оператора, а не под администратором.
  • Отключён журнал регистрации для экономии места. При проверке отсутствие логов трактуется не в вашу пользу.
  • Бэкап не проверяется на восстановление. Копия, которую нельзя развернуть, бесполезна — тестируйте восстановление хотя бы раз в месяц.

Шаг 5. Настройка журнала регистрации для операций с кодами маркировки

Журнал регистрации — ваш главный аргумент при спорах с контролирующими органами. По нему видно, кто, когда и с каким кодом DataMatrix совершал действия: ввод в оборот, вывод, перемаркировку или списание. Чтобы журнал был информативным, недостаточно оставить настройки по умолчанию — нужно явно указать, какие события фиксировать, и добавить собственные записи в ключевых точках обработки маркированной продукции.

Настройте регистрацию событий доступа к данным и добавляйте записи вручную при обработке кодов. Ниже — пример процедуры, которая логирует ввод кода в оборот с указанием пользователя, склада и самого кода маркировки. Уровень «Информация» подходит для штатных операций, а для нарушений (например, попытки правки GTIN) используйте «Предупреждение».

Процедура ЗарегистрироватьВводВОборот(КодМаркировки, Склад) Экспорт

	ТекстСобытия = "Пользователь: " + ИмяПользователя()
		+ "; Склад: " + Строка(Склад)
		+ "; Код DataMatrix: " + КодМаркировки;

	ЗаписьЖурналаРегистрации(
		"Маркировка.ВводВОборот",
		УровеньЖурналаРегистрации.Информация,
		,
		,
		ТекстСобытия);

КонецПроцедуры

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

Шаг 6. Регламент резервного копирования базы с данными маркировки

Потеря базы с кодами маркировки означает не только простой в работе, но и риск рассинхронизации с системой «Честный ЗНАК». Восстановить корректное состояние оборота кодов вручную практически невозможно, поэтому регулярный бэкап — обязательный элемент защиты. Настройте автоматическое копирование по расписанию через регламентное задание, чтобы человеческий фактор не влиял на сохранность данных.

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

Процедура ВыполнитьРезервноеКопирование() Экспорт

	Попытка

		ИмяФайла = "Marking_" + Формат(ТекущаяДата(), "ДФ=yyyyMMdd_HHmmss")
			+ ".dt";

		ПутьКопии = "D:\Backups\" + ИмяФайла;

		// ... выгрузка данных информационной базы ...

		ЗаписьЖурналаРегистрации(
			"Обслуживание.РезервноеКопирование",
			УровеньЖурналаРегистрации.Информация,
			,
			,
			"Копия успешно создана: " + ПутьКопии);

	Исключение

		ЗаписьЖурналаРегистрации(
			"Обслуживание.РезервноеКопирование",
			УровеньЖурналаРегистрации.Ошибка,
			,
			,
			"Ошибка копирования: " + ОписаниеОшибки());

	КонецПопытки;

КонецПроцедуры

Рекомендация: храните копии минимум в двух местах — на локальном сервере и в удалённом хранилище (облако или отдельный физический диск). Следуйте правилу «3-2-1»: три копии, на двух носителях, одна из которых вне офиса. И главное — периодически проверяйте восстановление из бэкапа на тестовом контуре, иначе вы не узнаете о повреждении копии до момента реальной аварии.

Заключение

Настройка прав доступа и RLS для маркировки — не разовая задача, а часть постоянного регламента информационной безопасности. Пройдя эти 6 шагов, вы получаете чёткое разграничение ответственности: оператор работает только со своими складами, GTIN защищён от случайных правок, а каждая операция с кодами DataMatrix фиксируется в журнале.

Полный цикл настройки занимает 2-3 рабочих дня, но окупается многократно: он снижает риск штрафов за нарушение оборота кодов (от 50 000 ₽), защищает от потери данных при сбоях и даёт прозрачную картину действий сотрудников. Начните с ролей и защиты GTIN — это база, на которую надстраиваются остальные механизмы. Регулярно пересматривайте настройки RLS при изменении структуры складов и обязательно тестируйте восстановление из бэкапа.

Читайте также