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