Рассмотрим процесс подключения механизма Согласования к новому документу на примере конфигурации Управление холдингом 3.0.6.8 с номером версии Библиотеки стандартных подсистем 3.0.1.428.
Для подключения Согласования к новому документу нужно выполнить следующие действия с объектами конфигурации:
1.Определяемый тип ОбъектыДляСогласования: в свойство Тип добавить новую ДокументСсылку.
2.Если при проведении/записи документа предполагается автоматическая отправка на согласование, то в новый документ необходимо добавить реквизит ВнеМаршрута с типом Булево. На форме его можно разместить рядом с полями Номер и Дата, видимость и доступность будет определяться в процедуре УправлениеФормой для пользователя с ролью Суперпользователь (процедура описана ниже в п. 3.9).
3.Форма документа:
3.1. Добавить реквизит формы ЕстьСуперпользователь с типом Булево.
3.2. Командный интерфейс – Командная панель – Согласование: снять галочки в колонках Видимость и Автовидимость.
3.3. Добавить область процедур и функций УниверсальныеПроцессыСогласование, состав (*код процедур и функций можно посмотреть в формах типовых документов конфигурации, например, у документов ЗаявкаНаРасходованиеДенежныхСредств и РеестрПлатежей):
3.3.1.Процедура НарисоватьПанельСогласованияИОпределитьСостояниеОбъекта().
3.3.2.Процедура ПринятьКСогласованию_Подключаемый() Экспорт.
3.3.3.Процедура ИсторияСогласования_Подключаемый() Экспорт.
3.3.4.Процедура СогласоватьДокумент_Подключаемый() Экспорт.
3.3.5.Процедура ОтменитьСогласование_Подключаемый() Экспорт.
3.3.6.Процедура МаршрутСогласования_Подключаемый() Экспорт.
3.3.7.Функция РеквизитСостояниеЗаявки(ФормаВход).
3.3.8.Функция РеквизитСтатусОбъекта(ФормаВход).
3.3.9.Функция РеквизитСогласующий(ФормаВход).
3.3.10.Процедура ОпределитьСостояниеОбъекта().
3.4. Добавить область процедур и функций ВызовыОбщихПроцедурИФункцийСогласованияОбъектов, состав:
3.4.1.Процедура ИзменитьСостояниеЗаявкиКлиент(ВыбранноеЗначение).
3.4.2.Процедура СостояниеЗаявкиОбработкаВыбораПродолжение(Результат, Параметры) Экспорт.
3.4.3.Процедура ПринятьКОбработкеОбщий() Экспорт.
3.4.4.Процедура ПринятьКОбработкеОбщийСервер().
3.4.5.Процедура ОтменитьСогласованиеОбщий() Экспорт.
3.4.6.Процедура ОтменитьСогласованиеОбщийСервер().
3.4.7.Функция СнятьСОбработкиОбщий() Экспорт.
3.4.8.Функция СнятьСОбработкиОбщийСервер().
3.4.9.Функция УтвердитьЭтапСервер(ТекущийЭтап) Экспорт.
3.4.10.Функция ОтклонитьЭтапСервер(ТекущийЭтап) Экспорт.
3.4.11.Функция ИзменитьСостояниеЗаявки(Ссылка, Состояние).
3.4.12.Процедура СтатусОбъектаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка).
3.4.13.Процедура ПроверитьСохранениеИзменитьСтатус(НовоеЗначениеСтатусаВход).
3.5. Добавить код в процедуру ПриСозданииНаСервере:
3.5.1.Вызов процедуры из области УниверсальныеПроцессыСогласование:
НарисоватьПанельСогласованияИОпределитьСостояниеОбъекта();
3.5.2.Для определения реквизита формы ЕстьСуперпользователь, если у документа есть реквизит Организация, можно добавить вызов процедуры ИнициализироватьПараметрыОрганизации. Также эта процедура может вызываться при изменении поля Организация. Текст процедуры:
&НаСервере Процедура ИнициализироватьПараметрыОрганизации() ЕстьСуперПользователь = МодульСогласованияДокументовУХ.ЕстьСуперПользователь(Объект.Организация); УправлениеФормой(ЭтаФорма); КонецПроцедуры
3.6. Если при проведении/записи документа предполагается автоматическая отправка на согласование, то добавить код в процедуру ПередЗаписьюНаСервере:
Если ПараметрыЗаписи.Свойство("НеОтправлятьНаСогласованиеПриПроведении") ТогдаТекущийОбъект.ДополнительныеСвойства.Вставить("НеОтправлятьНаСогласованиеПриПроведении", Истина); КонецЕсли;
3.7. Добавить код в процедуру ПослеЗаписиНаСервере:
ОпределитьСостояниеОбъекта();
3.8. Добавить код в процедуру ОбработкаОповещения (*для ИмяСобытия = «СостояниеЗаявкиПриИзменении» возможно потребуется описать дополнительные действия с формой, помимо вызова процедуры ОпределитьСостояниеОбъекта):
Если ИмяСобытия = "ОбъектСогласован" Тогда ОпределитьСостояниеОбъекта(); ИначеЕсли ИмяСобытия = "ОбъектОтклонен" Тогда ОпределитьСостояниеОбъекта(); ИначеЕсли ИмяСобытия = "МаршрутИнициализирован" Тогда ОпределитьСостояниеОбъекта(); ИначеЕсли ИмяСобытия = "СостояниеЗаявкиПриИзменении" Тогда ОпределитьСостояниеОбъекта(); КонецЕсли;
3.9. Добавить процедуру УправлениеФормой для установки видимости/доступности полей в зависимости от состояния согласования документа и в зависимости от значения реквизита документа ЕстьСуперпользователь. Пример текста кода процедуры:
&НаКлиентеНаСервереБезКонтекста Процедура УправлениеФормой(Форма) Элементы = Форма.Элементы; Если Форма.СтатусОбъекта = ПредопределенноеЗначение("Перечисление.СостоянияСогласования.Утверждена") Тогда Элементы.ПредложенияОбновитьСписок.Доступность = Ложь; Форма.ТолькоПросмотр = Истина; Иначе Элементы.ПредложенияОбновитьСписок.Доступность = Истина; КонецЕсли; Элементы.ВнеМаршрута.Видимость = Форма.ЕстьСуперпользователь; Элементы.ВнеМаршрута.Доступность = Форма.ЕстьСуперпользователь; КонецПроцедуры
4.Модуль объекта:
4.1. Добавить код в процедуру ПередЗаписью для регулирования статуса согласования при установке пометки на удаление документа.
Пример кода процедуры, которая при установке пометки на удаление отменяет согласование, а при записи отправляет документ на согласование:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) Если ЭтотОбъект.ПометкаУдаления И НЕ ЭтотОбъект.Ссылка.ПометкаУдаления Тогда //помечаем на удаление МодульУправленияПроцессамиУХ.ОтменитьСогласованиеПриОтменеПроведения(Ссылка); Иначе //записываем, нужен реквизит документа ВнеМаршрута МодульУправленияПроцессамиУХ.ОтправитьНаСогласованиеПриПроведенииДокумента(ЭтотОбъект, Отказ); КонецЕсли; КонецПроцедуры
4.2. Если при проведении документа предполагается автоматическая отправка на согласование, то добавить код в процедуру ОбработкаПроведения:
Процедура ОбработкаПроведения(Отказ, РежимПроведения) МодульУправленияПроцессамиУХ.ОтправитьНаСогласованиеПриПроведенииДокумента(ЭтотОбъект, Отказ); КонецПроцедуры
4.3. Добавить код в процедуру ОбработкаУдаленияПроведения для регулирования статуса согласования при отмене проведения документа. Пример кода процедуры:
Процедура ОбработкаУдаленияПроведения(Отказ) МодульУправленияПроцессамиУХ.ОтменитьСогласованиеПриОтменеПроведения(Ссылка); КонецПроцедуры
5.Пользовательский режим 1С:Предприятие:
5.1. Справочник Документы ИБ: если среди элементов справочника нет нового документа, нажать Обновить по данным текущей ИБ (рис. 1):
5.2. Справочник Документы ИБ: открыть элемент нового документа и заполнить вкладку Согласование (рис. 2). В примере в конфигурацию добавлен новый документ Предложения по лизингу:
5.3. Справочник Шаблоны универсальных процессов: добавить новый элемент, режим процесса Маршрут согласования, тип объекта Документ текущей ИБ, согласуемый объект Предложения по лизингу (Название нового документа). Записать и закрыть элемент. Открыть заново и настроить маршрут согласования (рис. 3, 4):
5.4. Настроить Матрицу полномочий: меню Процессы и согласование – Настройки – Матрица полномочий (рис. 5, 6):
5.5. Если выбраны согласующие с типом Роли контактных лиц, то необходимо заполнить регистр сведений Ответственные по организациям и задать для каждой роли пользователей (в этом же регистре настраивается роль Суперпользователь).
5.6. При тестировании механизма согласования следует проверить прохождение маршрута/открытие форм обычным пользователем и пользователем с ролью Суперпользователь.