Эту и другие технические статьи написали наши программисты 1С и получили за них премии. Если вы тоже работаете с 1С и любите делиться опытом, приходите разработчиком в Neti →

 

Рассмотрим процесс подключения механизма Согласования к новому документу на примере конфигурации Управление холдингом 3.0.6.8 с номером версии Библиотеки стандартных подсистем 3.0.1.428.

УХ 3.0: Подключение механизма Согласования к новому документу

Для подключения Согласования к новому документу нужно выполнить следующие действия с объектами конфигурации:

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):

УХ 3.0: Подключение механизма Согласования к новому документу

Рис. 1. Обновить по данным текущей ИБ

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

УХ 3.0: Подключение механизма Согласования к новому документу

Рис. 2. Настройка элемента справочника Документы ИБ

5.3. Справочник Шаблоны универсальных процессов: добавить новый элемент, режим процесса Маршрут согласования, тип объекта Документ текущей ИБ, согласуемый объект Предложения по лизингу (Название нового документа). Записать и закрыть элемент. Открыть заново и настроить маршрут согласования (рис. 3, 4):

УХ 3.0: Подключение механизма Согласования к новому документу

Рис. 3. Пример настройки маршрута согласования

УХ 3.0: Подключение механизма Согласования к новому документу

Рис. 4. Пример настройки этапа Согласование

5.4. Настроить Матрицу полномочий: меню Процессы и согласование – Настройки – Матрица полномочий (рис. 5, 6):

УХ 3.0: Подключение механизма Согласования к новому документу

Рис. 5. Настройка матрицы полномочий в форме матрицы

УХ 3.0: Подключение механизма Согласования к новому документу

Рис. 6. Настройка матрицы полномочий в форме списка

5.5. Если выбраны согласующие с типом Роли контактных лиц, то необходимо заполнить регистр сведений Ответственные по организациям и задать для каждой роли пользователей (в этом же регистре настраивается роль Суперпользователь).

5.6. При тестировании механизма согласования следует проверить прохождение маршрута/открытие форм обычным пользователем и пользователем с ролью Суперпользователь.