Обработка с интеграцией под различные конфигурации (Реализация паттерна Стратегия обработками в макетах)
Разработка - Инструментарий разработчика
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
На текущем месте работы я занимаюсь разработкой как раз такой внешней обработки, предназначенной для интеграции сервиса компании с различными конфигурациями клиентов. Это и типовые семейства ERP/КА2/УТ11, и их более старые версии на обычных формах УТ10/КА1.1, семейство УНФ/Розница, а также другие решения, основанные на перечисленных типовых и оригинальных тиражных решениях. Поддерживается даже работа с собственными уникальными конфигурациями (нетленки) с возможностью реализовать интеграцию самостоятельно.
Как паттерны нам могут помочь при разработке внешней обработки с интеграцией под разные конфигурации?
Вспомним паттерн Стратегия. Он позволяет для одного и того же Контекста реализовать различные Стратегии. Верно?
Давайте представим нашу внешнюю обработку Контестом (я не стал выделять Контекст в отдельную сущность для упрощения). Наша обработка знает, что хочет сделать в базе. Например, создать Заказ клиента. Но она может позволить себе не знать, что в конкретной конфигурации этот документ называется _ДемоСчетНаОплатуПокупателю. Ей это и не интересно.
Тогда интеграция с каждой конфигурацией - это Стратегия. Каждая Стратегия интеграции может реализовать создание Заказа клиента в своей конкретной конфигурации, потому что именно для этого и создана.
Мы разрабатываем внешнюю обработку, поэтому стратегии мы тоже можем реализовать на внешних обработках. Эти стратегии можно хранить в макетах двоичных данных нашей основной обработки.
Итак, познакомимся с нашей внешней обработкой СозданиеЗаказов.epf
В ней есть две формы: Форма (обычная) и ФормаУправляемая, назначенные соответственно основной и дополнительной формами.
Обработка содержит реквизиты Отладка и ПараметрыКонтекста - служебные для нашего контекста. Реквизиты Контрагенты, ДатаДокумента и СсылкаНаСозданныйЗаказ, а также табличная часть Товары - прикладные. Все они (кроме Отладки) служат для подготовки данных контекста, чтобы передать их в нужную стратегию.

Самое интересное для нас то, что в макетах ИнтеграцияКаркаснойКонфигурации, ИнтеграцияДемоБСП и ИнтеграцияЗаказыКлиентовОФ хранятся внешние обработки для интеграции с конфигурациями.
В табличном макете МанифестОбъектов хранится описание для всех макетов обработки. Он очень важен. С его помощью обработка определяет какую стратегию использовать и из какого макета её взять.
Логика работы форм простая.
Кнопка Новый заказ очищает Контрагента, Ссылку на созданный заказ и табличную чать Товары. После заполнения пользователем всех данных кнопкой Записать заказ на основе введённой информации создаётся документ, и ссылка на него отображается в соответствующем реквизите. При этом снова становятся не доступными кнопка Записать заказ и поля для ввода данных.
При установке флага Отладка появляется возможность выбрать, куда сохранить обработки с нашими стратегиями для их отладки. Тут нужно обязательно упомянуть, что для отладки обработок интеграции они должны находиться в одном каталоге с основной обработкой. Этот каталог должен быть доступен с сервера 1С при работе в клиент-серверном варианте в тонком клиенте.
Посмотрим как происходит обращение к нашим стратегиям.
При открытии обработки в событиях ПриСозданииНаСервере() в управляемых или ПередОткрытием() в обычных формах выполняется подготовка контекста обработки: восстанавливаются сохраненные настройки (значение флага Отладка) и инициализируются параметры контекста. Помните про реквизит ПараметрыКонтекста? Как раз в нем мы запоминаем АдресМодуляИнтеграции, подключенного как внешняя обработка из макета или сохраненного в одном каталоге с главной обработкой.
Первое обращение к модулю интеграции (нашей стратегии)
Тут же вызывается первый метод нашей стратегии для получения типов данных. Наша основная обработка не знает в каком справочнике конфигурации хранятся Контрагенты и Номенклатура. Как и не имеет ни малейшего понятия о виде документа. Поэтому реквизит обработки Контрагент и реквизит ТЧ Номенклатура имеют тип СправочникСсылка, а реквизит обработки СсылкаНаСозданныйЗаказ - ДокументСсылка.
Точные типы данных нам и сообщает наша Стратегия. При этом она имеет доступ к Контексту через переменную своего модуля ГлавныйКонтекст, в котором хранится объект нашей основной обработки.
А значит, может напрямую изменять реквизит обработки ПараметрыКонтекста(тип Структура), в частности, заполнив его свойство ТипыДанныхДляРеквизитов.
После инициализации параметров контекста в событии формы ПриОткрытии() устанавливаются соответствующие ограничения типов для элементов формы.
Второе обращение к стратегии
После нажатия кнопки Создать заказ на сервере вызывается метод обработки СоздатьЗаказВИнтеграции(), в котором происходит обращение к методу нашей стратегии СоздатьЗаказ(). После успешного создания документа стратегия (модуль интеграции) передаёт ссылку через вызов процедуры ЗавершитьСозданиеЗаказа() нашего контекста (главной обработки).
Как это добро отлаживать и дорабатывать?
Главное, что нужно - это заранее включить Отладку в обработке и выгрузить обработки из макетов.
Как добавить новый модуль интеграции для ещё одной конфигурации?
Какие выгоды мы получаем от такой реализации?
- Теперь мы не нарушаем стандарт #std669.
- Легко дорабатывать и отлаживать интеграции.
- Просто добавить интеграцию с новой конфигурацией.
- Можно вести параллельную разработку разных интеграций (с использованием различных систем контроля версий).
- При необходимости модули интеграции (Стратегии) можно использовать в другой обработке (Контексте). Например, обработка для загрузки заказов из внешней системы, которая работает в регламентном задании.
- Для каждого модуля интеграции можно написать отдельные юнит-тесты.
- Если основная обработка должна поставляться без исходных кодов или с обфускацией, то модули интеграции можно оставить открытыми для доработки и даже добавлять новые под конкретную конфигурацию.
- Проще перейти на разработку в EDT, но и в Конфигураторе разрабатывать удобней.
- Использование EDT открывает дополнительные возможности в виде проверки на лету, строгой типизации и доступа к 1С:Напарник.
Проект и все обработки, а также выгрузку базы крутейшейтестовой конфигурации ЗаказыКлиентовОбычныеФормы можно скачать на GitHub.
Проверено на следующих конфигурациях и релизах:
- 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.11.309
Вступайте в нашу телеграмм-группу Инфостарт

















