Перейти к содержанию

Сериализация регистра, подчинённого регистратору

Сценарий. Отправить все движения документа по регистру накопления в одном сообщении (пакетная модель).

Особенность

Для регистров накопления, бухгалтерии, расчёта и РС с режимом ПодчинениеРегистратору в Объект передаётся Структура с полем Регистратор — то есть ссылка на документ, а не набор движений. Запрос движений выполняется обработчиком самостоятельно.

Код обработчика

Функция Сериализация(Объект, Свойства, ТекстЖурнала, Отказ) Экспорт

    Данные = Новый Массив; // одно сообщение = все движения регистратора

    Результат = кфкИнтеграция.ПараметрыСообщения();
    Результат.Данные = Данные;
    Результат.Заголовки.Вставить("ДатаСериализация", ТекущаяУниверсальнаяДата());

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Т.Период       КАК period,
        |    Т.Регистратор  КАК recorder,
        |    Т.Номенклатура КАК item,
        |    Т.Количество   КАК qty
        |ИЗ
        |    РегистрНакопления.ТоварыНаСкладах КАК Т
        |ГДЕ
        |    Т.Регистратор = &Регистратор";
    Запрос.УстановитьПараметр("Регистратор", Объект.Регистратор);
    Выборка = Запрос.Выполнить().Выбрать();

    // Универсальное заполнение через имена колонок
    Поля = СтрСоединить(ОбщегоНазначения.ВыгрузитьКолонку(Выборка.Владелец().Колонки, "Имя"), ",");
    Пока Выборка.Следующий() Цикл
        Запись = Новый Структура(Поля);
        ЗаполнитьЗначенияСвойств(Запись, Выборка);
        Данные.Добавить(Запись);
    КонецЦикла;

    Возврат Результат;

КонецФункции

Почему такая модель

  1. Производительность — один запрос вместо обхода набора с отбором в цикле.
  2. Атомарность — получатель видит все движения документа сразу, а не частями.
  3. Совместимость с КД 3.1 — при использовании КД 3.1 адаптер сам формирует массив по регистратору.

Настройка продюсера

В табличной части «Объекты метаданных» продюсера указывается имя регистра, а не регистратора:

Поле Значение
Тип объекта РегистрНакопления.ТоварыНаСкладах
Имя топика movements.goods
Тип сериализации Произвольный обработчик

При записи документа адаптер сам определит, какие регистры подчинены этому регистратору, и поместит в очередь ссылку на регистратор.

Смотрите также