Сериализация регистра, подчинённого регистратору¶
Сценарий. Отправить все движения документа по регистру накопления в одном сообщении (пакетная модель).
Особенность
Для регистров накопления, бухгалтерии, расчёта и РС с режимом ПодчинениеРегистратору в Объект передаётся Структура с полем Регистратор — то есть ссылка на документ, а не набор движений. Запрос движений выполняется обработчиком самостоятельно.
Код обработчика¶
Функция Сериализация(Объект, Свойства, ТекстЖурнала, Отказ) Экспорт
Данные = Новый Массив; // одно сообщение = все движения регистратора
Результат = кфкИнтеграция.ПараметрыСообщения();
Результат.Данные = Данные;
Результат.Заголовки.Вставить("ДатаСериализация", ТекущаяУниверсальнаяДата());
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Т.Период КАК period,
| Т.Регистратор КАК recorder,
| Т.Номенклатура КАК item,
| Т.Количество КАК qty
|ИЗ
| РегистрНакопления.ТоварыНаСкладах КАК Т
|ГДЕ
| Т.Регистратор = &Регистратор";
Запрос.УстановитьПараметр("Регистратор", Объект.Регистратор);
Выборка = Запрос.Выполнить().Выбрать();
// Универсальное заполнение через имена колонок
Поля = СтрСоединить(ОбщегоНазначения.ВыгрузитьКолонку(Выборка.Владелец().Колонки, "Имя"), ",");
Пока Выборка.Следующий() Цикл
Запись = Новый Структура(Поля);
ЗаполнитьЗначенияСвойств(Запись, Выборка);
Данные.Добавить(Запись);
КонецЦикла;
Возврат Результат;
КонецФункции
Почему такая модель¶
- Производительность — один запрос вместо обхода набора с отбором в цикле.
- Атомарность — получатель видит все движения документа сразу, а не частями.
- Совместимость с КД 3.1 — при использовании КД 3.1 адаптер сам формирует массив по регистратору.
Настройка продюсера¶
В табличной части «Объекты метаданных» продюсера указывается имя регистра, а не регистратора:
| Поле | Значение |
|---|---|
| Тип объекта | РегистрНакопления.ТоварыНаСкладах |
| Имя топика | movements.goods |
| Тип сериализации | Произвольный обработчик |
При записи документа адаптер сам определит, какие регистры подчинены этому регистратору, и поместит в очередь ссылку на регистратор.
Смотрите также¶
- Сериализация независимого регистра — другая модель для независимых регистров.
- Конвертация данных 3.1 — пакетная модель через КД 3.1.