Ручная регистрация данных. Библиотека конвейерного обмена данными.
Интеграция - Перенос данных 1C
Бесплатные
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Узнавайте о новых бесплатных решениях в нашей телеграм-группе Инфостарт БЕСПЛАТНО
Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Ручная регистрация данных в библиотеке Конвейерного обмена данными: пошаговая работа с обработкой
Обработка КОД_РучнаяРегистрация входит в демонстрационное расширение конвейера обмена данными. Для примера нужна отдельная тестовая база с demo и четырьмя заказами начального заполнения версии данных 1: тремя проведенными и одним непроведенным. Предполагается, что их состояния и настройки узлов после заполнения не менялись.
Общая архитектура библиотеки описана в предыдущей статье. Здесь сосредоточимся на работе с обработкой. Статус проверки и границы текущей реализации приведены в разделе «Что учитывать при ручном запуске».
Обработка позволяет выбрать объекты, выполнить для них сценарий обмена и посмотреть результат маршрутизации. Ее можно использовать для повторной подготовки сообщений или для проверки отдельных этапов конвейера.
Пройдем весь путь на одном примере: выберем четыре демо-заказа, проверим их маршруты, затем запустим полный сценарий со связанной регистрацией товаров. В результате увидим отдельно исходные заказы и связанные с ними объекты. Технические детали находятся в спойлерах «Как это устроено» под соответствующими шагами.
Рубрикатор
| Шаг | Что делаем | Что получаем |
|---|---|---|
| 1. Открываем обработку | Знакомимся с областями формы | Доступные объекты, конвейеры и обработчики |
| 2. Выбираем план и объект | Находим демо-заказ в обмене с сайтом | Состав сценария для выбранного направления |
| 3. Подбираем данные | Выбираем отдельные строки или весь результат отбора | Набор ссылок для обработки |
| 4. Настраиваем запуск | Отмечаем конвейер и нужные этапы | Цепочку фильтрации и маршрутизации |
| 5. Выполняем обработку | Выбираем вид расшифровки и запускаем сценарий | Результаты исходного и добавленных связанных заданий |
| 6. Разбираем результат | Проверяем маршруты заказов и включаем регистрацию товаров | Отдельную расшифровку исходных и связанных объектов |
1. Открываем обработку: что находится на форме
Откройте «Ручная регистрация» в тестовой базе с demo. Ее можно найти в подсистеме "Конвейер обмена данными"->Сервис->Ручная регистрация.
При создании формы список доступных сценариев заполняется автоматически.
На форме есть несколько связанных областей:
- Объекты метаданных — дерево планов обмена и участвующих в них типов объектов.
- Конвейеры — варианты выполнения для выбранного объекта.
- Обработчики — этапы выбранного конвейера с отметками включения.
- Список ссылок — конкретные документы или элементы справочника, которые будут переданы на обработку.
- Режим расшифровки — краткое сообщение или подробная таблица результата.

Работа начинается с дерева: его текущая строка определяет, какие конвейеры и обработчики доступны дальше.
Процедура ЗаполнитьПоМетаданнымНаСервере() получает соответствие планов обмена и реестров через КОД_ДиспетчерРегистрацииКОбмену.РеестрыСценариевПоПланамОбмена().
Для каждого реестра вызывается РеестрКонвейеровРегистрации(). Результат разворачивается в таблицу с полями «План обмена», «Объект», «Конвейер», «Обработчик» и «Сценарий». Из нее строятся дерево и связанные таблицы формы.
План обмена
|
v
Реестр сценариев
|
+-- Объект метаданных
|
+-- Сценарий
+-- Конвейер
+-- Обработчики
+-- Параметры
Привязка планов к реестрам находится в модуле КОД_ДиспетчерРегистрацииКОбменуПереопределяемый. Экземпляры реестров создаются через ПолучитьОбъектОбработки() диспетчера, поэтому подключенная в этой точке подмена реализации учитывается и формой.
Состав рабочего места берется из описаний сценариев. После добавления поддерживаемого сценария в подключенный реестр достаточно заново заполнить дерево.
2. Выбираем план обмена и объект
В дереве раскройте план Демо_КОД_ОбменСайтом, затем группу документов и выберите Демо_Заказ. Текущей должна стать строка самого объекта.
Таблица обработчиков покажет этапы сценария заказов — фильтрацию, маршрутизацию, исключение отправителя, связанную регистрацию товаров, преобразование в JSON и запись в очередь.
Пока оставьте состав обработчиков без изменений. Сначала подберем заказы, затем настроим цепочку для нашего примера.
При переходе на другую строку дерева список ссылок очищается. Поэтому сначала выберите план и тип объекта, затем подберите данные для запуска.
Строкам дерева и конвейеров присваиваются UUID. Конвейер хранит идентификатор своей строки дерева, а обработчик — идентификатор своего конвейера.
При выборе объекта процедура ОбновитьКаскадныеОтборы() устанавливает отбор строк таблицы конвейеров. При выборе конвейера аналогично отбираются его обработчики. Общая модель остается в форме; меняется отображаемая часть.
План обмена входит в ключ объекта. Это позволяет показать один тип документа в разных направлениях обмена. На сервере состав запуска также ограничивается выбранной веткой и отметками:
ОтборКонвейеров = Новый Структура;
ОтборКонвейеров.Вставить("ПланОбмена", ИмяПланаОбмена);
ОтборКонвейеров.Вставить("ИдентификаторДерево", ИдентификаторДерева);
ОтборКонвейеров.Вставить("Пометка", Истина);
Функция ВыполнитьРегистрациюПоСсылкамНаСервере() дополнительно проверяет существование строки дерева, ее соответствие плану и объекту и отсутствие дочерних строк. Отмеченный конвейер другого плана в эту операцию не включается.
3. Подбираем данные: отдельные ссылки или весь результат отбора
Нажмите «Добавить ссылки отбором». Откроется форма «Выбор объектов отбором» со списком выбранного типа данных — в нашем случае заказов. Форма заимствована из БСП.
Здесь доступны два способа выбора:
- Отдельные строки. Выделите нужные заказы и передайте их командой выбора текущих данных.
- Все отобранные. Настройте условия отбора и передайте весь соответствующий им набор. Этот вариант удобен, например, для документов за период.
Для нашего примера выберите четыре заказа начального заполнения: по одному проведенному заказу с основным, резервным и региональным складом и один непроведенный заказ с основным складом. Если в базе уже появились другие документы, не включайте их в этот набор.
Непроведенный заказ тоже нужен: на нем мы увидим, как исходный выбор отличается от результата прикладной фильтрации. После передачи данных в основной форме должны находиться четыре ссылки.
При повторном подборе текущий список заменяется. Несмотря на слово «Добавить» в названии команды, накапливать несколько выборок таким способом текущая реализация не позволяет.

4. Настраиваем запуск: конвейер и состав обработчиков
Вернитесь к таблицам конвейеров и обработчиков. Оставьте отмеченным базовый конвейер регистрации и настройте его состав:
| Обработчик | Отметка в нашем примере | Результат этапа |
|---|---|---|
| Фильтр заказов | Включен | Заказы, соответствующие условиям обмена |
| Маршрутизатор заказов | Включен | Пары «заказ — узел» |
| Остальные обработчики | Отключены | В этом запуске не выполняются |
Получится цепочка Filter → Router. Она позволит проверить состав объектов и получателей. Преобразование в JSON и запись сообщений в очередь в этом примере не запускаются.
Отметки относятся к выбранной операции. Они не изменяют описание сценария в реестре и не задают новый состав последующих автоматических запусков.
В текущем запуске отметки задают состав сценариев исходного типа объектов — заказов. Для связанных товаров используются сценарии из реестра того же выбранного плана. Для первой проверки маршрутов обработчик связанной регистрации также оставляем выключенным.
На сервере форма повторно получает реестр выбранного плана и находит сценарий объекта. Из отмеченных строк собирается массив обработчиков, которым заменяется соответствующее поле копии сценария:
СценарийДляВыполнения = Новый Структура(Сценарий);
СценарийДляВыполнения.Вставить("Обработчики", ОбработчикиКонвейера);
СценарийДляВыполнения = Новый ФиксированнаяСтруктура(
СценарийДляВыполнения);
Отмеченный конвейер без выбранных обработчиков пропускается. Сборка выполняется в функции ВыполнитьРегистрациюПоСсылкамНаСервере() основной формы.
Подготовленные сценарии заменяют запись исходного типа в реестре выбранного плана. Сценарии остальных типов сохраняются для связанных заданий. Отметки, ранее установленные в строках других типов, при таком запуске не подменяют их сценарии.
Обработчики передают наборы данных через временные таблицы общего менеджера:
Filter | | ВТ_СсылкиПослеФильтра v Router | | ВТ_СсылкиПоУзлам v Расшифровка результата
В полной цепочке результат маршрутизации используется и последующими этапами. Поэтому для нашего запуска оставлены оба первых обработчика: маршрутизатору нужен выход фильтра, а расшифровке — таблица маршрутов.
5. Выполняем обработку выбранных данных
Выберите режим «Детально (Ссылка + Узлы)». Проверьте, что текущим объектом остается демо-заказ в плане обмена с сайтом, в списке находятся четыре ссылки, а отмечены только фильтр и маршрутизатор выбранного конвейера.
Нажмите «Выполнить регистрацию по ссылкам». Форма передаст выбранный набор на сервер как исходное задание очереди. Диспетчер выполнит его и задания, которые добавят обработчики. При успешном завершении всей очереди откроется табличный документ «Результаты регистрации». В нашей цепочке Filter → Router связанные задания не создаются.
В рассматриваемом примере оба обработчика работают с временными таблицами. Если в другом запуске включить подготовку сообщения и отправитель в очередь, будут созданы записи очереди. Само название команды или режим ручной регистрации запись данных не отключают.

6. Разбираем результат: краткая и подробная расшифровка
Подробный отчет содержит таблицу «Исходные объекты» с колонками «Ссылка», «План обмена» и «Узлы». Если связанные объекты получили маршруты, ниже выводится отдельная таблица «Связанные объекты» с такими же колонками.
В первом запуске мы оставили только фильтр и маршрутизатор: связанных объектов в результате нет, поэтому нижняя таблица не выводится. Для исходных четырех заказов с неизмененными настройками demo по коду ожидается следующая картина:
| Исходный заказ | Состояние | Ожидаемые узлы |
|---|---|---|
| Основной склад | Проведен | WEB, B2B |
| Резервный склад | Проведен | MARKET |
| Региональный склад | Проведен | B2B |
| Основной склад | Не проведен | Нет маршрутов |
Три проведенных заказа проходят фильтр. Для заказа с основным складом определяются два получателя. Непроведенный заказ остается в отчете с пустыми колонками плана и узлов: он был в исходном наборе, но не прошел фильтрацию.
Порядок перечисления кодов узлов может отличаться. Отчет показывает наличие маршрутов; отдельного объяснения причины их отсутствия в нем нет.
Для компактного представления выберите режим «Кратко» и повторите тот же запуск с фильтром и маршрутизатором. Ожидаемый текст:
Зарегистрировано исходных объектов: 3 из 4; связанных объектов: 0. Всего узлов: 3
В этой строке отдельно считаются исходные объекты с маршрутами и связанные объекты с маршрутами. Число узлов общее для обеих групп. В нашем первом запуске получились три исходных объекта с маршрутами, ни одного связанного и три различных узла. Пар «заказ — узел» при этом четыре, поскольку один заказ предназначен двум получателям.

Текущая расшифровка показывает результат маршрутизации. Слово «зарегистрировано» в кратком сообщении не подтверждает запись сообщений в очередь или их доставку. В нашем примере отправитель в очередь вообще не выполнялся.
Включаем связанную регистрацию товаров
Теперь на тех же четырех заказах выполним полный сценарий:
- Оставьте выбранными прежний план, объект и список заказов. Отметьте все обработчики сценария заказов, включая связанную регистрацию товаров, преобразование в JSON и отправитель в очередь.
- Выберите подробную расшифровку и выполните регистрацию по ссылкам.
- Сопоставьте две таблицы отчета: сверху — четыре исходных заказа, снизу — связанные товары, получившие маршруты.
- В «Исходящей очереди сообщений (Демо)» проверьте новые записи обоих типов: Документ.Демо_Заказ и Справочник.Демо_КОД_Товары.
При неизмененном начальном заполнении три проведенных заказа содержат шесть различных товаров. Все они проходят товарный фильтр, поэтому ожидаются четыре строки исходных объектов и шесть строк связанных. Непроведенный заказ остается без маршрутов. Для того же полного запуска краткий режим должен показать:
Зарегистрировано исходных объектов: 3 из 4; связанных объектов: 6. Всего узлов: 3
Если общий товар встречается в нескольких заказах или повторяется в строках, в расшифровке он показывается один раз, с объединенным набором узлов. Связанный объект без маршрутов в нижнюю таблицу не попадает.
Для сравнения можно снять только обработчик связанной регистрации и повторить запуск. Новые сообщения товаров тогда не появятся, а таблица связанных объектов в новом отчете не будет выведена. Прежние записи исходящей очереди при этом сохраняются.


Что учитывать при ручном запуске
- Вся очередь ограничена выбранным планом. Связанные задания используют подготовленный реестр этой операции. Если в нем нет сценария для типа связанного объекта, такой тип не обрабатывается. Отметки исходного типа не отключают этапы в сценариях других типов.
- Состав цепочки должен сохранять необходимые входы. Проверки зависимостей обработчиков в форме нет. Отсутствие таблицы маршрутов само по себе теперь дает пустую расшифровку: например, можно выполнить только фильтр. Но запуск маршрутизатора без подготовленного входа по-прежнему может завершиться ошибкой.
- Подбор рассчитан на ссылочные объекты. Выбор наборов записей явно отклоняется. При переходе по дереву список ссылок очищается; для нового выбора подберите данные заново.
- Запуск выполняется синхронно. Весь выбранный набор передается одним массивом. Форма не организует порции, фоновое выполнение и общую транзакцию на все выбранные сценарии; полный откат операции при ошибке не гарантируется.
Реестр операции. Контекст предназначен для одного запуска. Реестр и вложенные сценарии подготавливаются до его создания и не должны изменяться во время обработки очереди. Пустой реестр ничего не запускает и не заменяется стандартными настройками.
Идентификация сценариев. Ключ строки конвейера включает план, объект и имя обработки-конвейера. Несколько сценариев с одинаковым конвейером для одной пары план/объект объединятся; при выполнении будет найден первый подходящий сценарий. Для их независимого выбора нужен устойчивый идентификатор сценария.
Форма выбора. В модуле ВыборОбъектовОтбором сохранен заголовок Copyright © 2020, ООО «1С-Софт» с указанием лицензии CC BY 4.0. Эта атрибуция относится к использованному коду формы выбора.
Проверено на следующих конфигурациях и релизах:
- 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.12.335
Вступайте в нашу телеграмм-группу Инфостарт