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