Часто ли вам встречается задача вида: необходимо реализовать возможность ведения статусов объектов системы с настраиваемой областью переходов, доступностью и уведомлений? Если подобная задача встречалась вам хотя бы однажды, то вы знаете, сколько дней необходимо для ее реализации. Хотите узнать, как реализовать такую задачу за 10-15 минут? Тогда эта статья для вас.

Речь в данной статье пойдет о том, каким образом можно реализовать достаточно распространенную задачу ведения статусов объектов с помощью набора подсистем «Умные таблицы»  (далее – УмТ). В качестве примера мы возьмем типовую конфигурацию «Управление Торговлей 11» с внедренным в нее УмТ и, на примере документа «Возврат товаров поставщику», я покажу, как реализовать данную задачу за 15-20 минут.
Давайте для начала обрисуем задачу. Нам необходимо в некоторый ссылочный объект (справочник, документ, бизнес-процесс, задача) добавить некий атрибут его состояния. В зависимости от его текущего состояния объект может менять доступность, список состояний в которые его можно переводить, список уведомляемых лиц и запрашивать комментарий от пользователя при переводе объекта в новый статус. Так же нам необходимо иметь возможность смотреть историю состояний объекта. Для примера, рассмотрим граф с такой областью переходов:

Дуги и их направления показывают возможность перехода от статуса к статусу, изначальный статус, в который можно перевести документ – «Создан». Значки в виде конверта сигнализируют о том, что при переходе в данный статус нужно уведомить определенных пользователей, под значком указаны те, кого нужно уведомлять. Значок в виде листка с ручкой говорит о том, что необходимо запросить у пользователя комментарий. Доступность объекта по статусам приведена в следующей таблице:

Доступность объекта по статусам

Статус Все пользователи Руководство
Создан Да Да
В работе Да Да
На проверке Нет Да
Проверка контролером Нет Да
Утвержден Нет Да
Сдан в архив Нет Нет

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

Для примера возьмем типовую Управление торговлей 11 с внедренной в нее УмТ и настроим вышеописанную систему статусов для документа «Возврат товаров поставщику».

Первая часть наших изменений должна быть выполнена в Конфигураторе:

  1.  Добавим наш документ в переопределяемый тип УМТ_ТипыОбъектовСтатусов.
  2. В форму объекта добавим 2 реквизита:  КомментарийКСтатусу (Строка) и Статус (СправочникСсылка.УмТ_СтатусыОбъектов).
  3. Реквизит Статус перенесем на форму, укажем для него режим выбора из списка и определим для него 2 события: ПриИзменении и ПриОткрытии.
&НаКлиенте
Процедура СтатусПриИзменении(Элемент)
	УмТ_РаботаСоСтатусамиОбъектовКлиент.ПриСменеСтатуса(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура СтатусОткрытие(Элемент, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	ТабДок = УмТ_РаботаСоСтатусамиОбъектовСервер.ПолучитьОтчетОбИсторииСтатусов(Объект.Ссылка);
	УмТ_ПереопределяемыйКлиент.НапечататьДокумент(ТабДок);
КонецПроцедуры

  1. Теперь нам нужно добавить интерфейсные вызовы подсистемы статусов в предопределенные обработчики событий формы:
    1. ПриСозданииНаСервере :
      УмТ_РаботаСоСтатусамиОбъектовСервер.ПередОткрытием(ЭтотОбъект);
      
    2. ПередЗаписью :
      УмТ_РаботаСоСтатусамиОбъектовКлиент.ПередЗаписью(ЭтотОбъект, Отказ);
      
    3. ПриЗаписиНаСервере :
      УмТ_РаботаСоСтатусамиОбъектовСервер.ПриЗаписи(ЭтотОбъект);
      

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

  1. Создаем список пользователей – Руководство, добавляя в него нужных нам лиц.
  2. Создаем группу справочника «Статусы объектов» — контейней для наших статусов, указав в качестве наименования наш документ. Статус по умолчанию пока оставляем пустым.
  3. Теперь последовательно создаем все статусы из нашего графа, указывая пока только наименования, все настройки оставляем пустыми.

  1. Возвращаемся в созданную группу и указываем наш начальный статус «Создан» как статус по умолчанию.
  2. Начинаем последовательно заполнять наши статусы:
    1. Создан: в параметры перехода добавляем «В работе».
    2. В работе: в параметры перехода добавляем «На проверке», в параметры уведомления строку «Менеджер».
    3. На проверке: в параметры доступа добавляем «Все пользователи, отключив доступ, и список пользователей Руководство, включив доступ, в параметры перехода – «В работе», «Проверка контролером», «Утвержден», в параметры уведомления – Руководство.
    4. Проверка контролером: ставим признак необходимости комментария,  в параметрах доступа Всем пользователям отключаем доступ, а Руководству – включаем, в параметры перехода добавляем «В работе» и «Утвержден».
    5. Утвержден: в параметрах доступа отключаем доступ Всем пользователям и даем доступ Руководству, в параметры перехода добавляем «Сдан в архив» и «В работе».
    6. Сдан в архив: в параметры доступа отключаем у Всех пользователей доступ, в параметры уведомления добавляем строку Менеджер и список пользователей Руководство.

На этом – все, система настроена и готова к эксплуатации.  На все манипуляции у нас ушло менее получаса!

Какие преимущества использования подсистемы:

  1. Настроив форму объекта в конфигураторе один раз, вы вольны менять параметры доступа, уведомления и области перехода при работающей системе.
  2. Вы сокращаете объем кода, который нужно писать, высвобождая свое время на другие задачи.
  3. Вы используете универсальный механизм, а не множество различных механизмов для разных объектов, что существенно упрощает поддержку системы.
  4. За счет широких возможностей интерактивной настройки системы вы можете оперативно реагировать на изменение бизнеса и перестраивать свою систему более оперативно.