Создание потока данных
Пошаговое руководство по созданию исходящего потока для отправки данных во внешнюю систему.
Сценарий
Создадим поток для отправки заказов клиентов в WMS-систему при проведении документа.
Шаг 1. Создание предопределённого элемента
В Конфигураторе
- Откройте справочник
инт_ПотокиДанных - Перейдите на вкладку Предопределённые
- Добавьте новый элемент:
| Свойство | Значение |
|---|---|
| Имя | ЭкспортЗаказовВWMS |
| Код | ORDER_WMS_EXPORT |
| Наименование | Экспорт заказов в WMS |
Почему предопределённый?
Предопределённые элементы:
- Доступны из кода без поиска по ссылке
- Переносятся вместе с конфигурацией
- Не могут быть случайно удалены
Шаг 2. Настройка в режиме Предприятия
Откройте созданный элемент и заполните реквизиты:
Основные настройки
| Реквизит | Значение |
|---|---|
| Направление потока | Исходящий |
| Активен | ✅ |
Обработчик
Введите BSL-код, формирующий JSON-сообщение:
// Переменная ИсходныеДанные — ссылка на документ ЗаказКлиента
// Переменная Результат — уже объявлена как Соответствие
Объект = ИсходныеДанные.ПолучитьОбъект();
// Основные реквизиты
Результат.Вставить("orderId", Строка(ИсходныеДанные.УникальныйИдентификатор()));
Результат.Вставить("orderNumber", Объект.Номер);
Результат.Вставить("orderDate", Формат(Объект.Дата, "ДФ=yyyy-MM-dd'T'HH:mm:ss"));
Результат.Вставить("status", "NEW");
// Контрагент
Контрагент = Новый Соответствие;
Контрагент.Вставить("id", Строка(Объект.Контрагент.УникальныйИдентификатор()));
Контрагент.Вставить("name", Объект.Контрагент.Наименование);
Контрагент.Вставить("inn", Объект.Контрагент.ИНН);
Результат.Вставить("customer", Контрагент);
// Адрес доставки
Адрес = Новый Соответствие;
Адрес.Вставить("city", Объект.АдресДоставки.Город);
Адрес.Вставить("street", Объект.АдресДоставки.Улица);
Адрес.Вставить("building", Объект.АдресДоставки.Дом);
Результат.Вставить("deliveryAddress", Адрес);
// Товары
Товары = Новый Массив;
Для Каждого Строка Из Объект.Товары Цикл
Товар = Новый Соответствие;
Товар.Вставить("sku", Строка.Номенклатура.Артикул);
Товар.Вставить("name", Строка.Номенклатура.Наименование);
Товар.Вставить("quantity", Строка.Количество);
Товар.Вставить("unit", Строка.ЕдиницаИзмерения.Код);
Товар.Вставить("price", Строка.Цена);
Товар.Вставить("amount", Строка.Сумма);
Товары.Добавить(Товар);
КонецЦикла;
Результат.Вставить("items", Товары);
// Итоги
Результат.Вставить("totalAmount", Объект.СуммаДокумента);
Результат.Вставить("itemsCount", Объект.Товары.Количество());Валидация (опционально)
Если хотите проверять структуру сообщений:
- Создайте схему в справочнике
инт_Схемы - Укажите:
- Валидация: ✅
- Схема данных: Ссылка на созданную схему
- Имя схемы пакета:
Order(имя из components/schemas)
Шаг 3. Добавление подписчика
На вкладке Подписчики потока добавьте получателей:
- Нажмите Добавить
- Выберите подписчика (например, созданный ранее HTTP-подписчик WMS)
Несколько подписчиков
Можно добавить несколько подписчиков — сообщение будет отправлено всем.
Шаг 4. Регистрация триггера
Добавьте вызов регистрации в нужный момент. Например, при проведении документа:
Вариант 1: В модуле объекта
// Документ.ЗаказКлиента.МодульОбъекта
Процедура ОбработкаПроведения(Отказ, Режим)
// ... основная логика проведения ...
// Регистрация для отправки в WMS
ПотокДанных = Справочники.инт_ПотокиДанных.ЭкспортЗаказовВWMS;
Если ПотокДанных.Активен Тогда
РегистрыСведений.инт_ОчередьИсходящихСообщений.ЗарегистрироватьСообщение(
Ссылка,
ПотокДанных
);
КонецЕсли;
КонецПроцедурыВариант 2: Через подписку на событие
// ОбщийМодуль.инт_ПодпискиНаСобытия
Процедура ЗаказКлиентаПриЗаписи(Источник, Отказ) Экспорт
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если Источник.Проведен Тогда
РегистрыСведений.инт_ОчередьИсходящихСообщений.ЗарегистрироватьСообщение(
Источник.Ссылка,
Справочники.инт_ПотокиДанных.ЭкспортЗаказовВWMS
);
КонецЕсли;
КонецПроцедурыШаг 5. Проверка работы
1. Проведите тестовый документ
// В обработке или консоли кода
ДокументОбъект = Документы.ЗаказКлиента.СоздатьДокумент();
// ... заполнение реквизитов ...
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);2. Проверьте очередь
Откройте регистр сведений инт_ОчередьИсходящихСообщений и убедитесь, что появилась запись.
3. Проверьте статус
Откройте регистр инт_ТекущийСтатусИсходящихСообщений:
| Статус | Означает |
|---|---|
Новый | Ожидает формирования |
ГотовоКОтправке | Сформировано, ожидает отправки |
Отправлено | Успешно доставлено |
ОшибкаФормирования | Ошибка в обработчике |
4. Принудительный запуск обработки
Для теста можно вручную запустить регламентные задания:
// Формирование сообщений
инт_ФормированиеИсходящихСообщений.ЗапускМенеджераПотоков();
// Отправка сообщений
инт_ОтправкаИсходящихСообщений.инт_ЗапуститьМенеджерПотоковРассылкиСообщений();Результат
После выполнения всех шагов:
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ ЗаказКлиента │ │ Поток: │ │ WMS API: │
│ Проведение │───▶│ ORDER_WMS_EXPORT│───▶│ POST /orders │
└─────────────────┘ └─────────────────┘ └─────────────────┘Отладка
Просмотр сформированного сообщения
// Получить данные сообщения по ID
ДанныеСообщения = РегистрыСведений.инт_ОчередьИсходящихСообщений
.ПолучитьДанныеОчередиПоИдентификатору(
ИдентификаторСообщения,
"СформированноеСообщение"
);
// Сериализовать в JSON для просмотра
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеСообщения.СформированноеСообщение);
Сообщить(ЗаписьJSON.Закрыть());Просмотр ошибок
// История статусов с ошибками
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ * ИЗ РегистрСведений.инт_ИсторияСтатусовИсходящихСообщений
|ГДЕ ИдентификаторСообщения = &ID";
Запрос.УстановитьПараметр("ID", ИдентификаторСообщения);
// Результат содержит Комментарий с текстом ошибкиЧастые ошибки
"Поток не активен"
Убедитесь, что флаг Активен установлен в карточке потока.
"Нельзя регистрировать входящие потоки"
Проверьте Направление потока — должно быть Исходящий.
Ошибка в обработчике
Проверьте синтаксис BSL-кода в поле Текст обработчика. Выполните тестовый вызов:
Справочники.инт_ПотокиДанных.СформироватьСообщениеПоПотоку(
ТестоваяСсылка,
ПотокДанных
);Следующие шаги
- Настройка подписчиков — создание HTTP-подписчика
- Валидация сообщений — настройка OpenAPI-схем
- Очереди сообщений — механизм очередей