Как перенести документы с учетом корректировок и передать значения составных типов в КД 2.0?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Освоение Конвертации данных 2.0 часто сопровождается трудностями, связанными с архитектурой переноса объектов. Рассмотрим, как эффективно решить две ключевые задачи: передачу данных в реквизиты с составным типом и актуализацию сумм документов при наличии корректировок или возвратов.

Решение проблемы передачи данных в составные типы

Частая ошибка при работе с полями, имеющими составной тип (например, МестоУчетаДенежныхСредств, который ссылается на БанковскиеСчета или Кассы), заключается в попытке прямого сопоставления в ПКС без указания источника. Если значение реквизита не является прямым свойством объекта, а вычисляется на основании других данных (например, из договора или регистра сведений), используйте механизм ИсходящиеДанные.

Для корректной передачи значения выполните следующие шаги:

  1. В ПКО документа-источника перейдите в обработчик ПередВыгрузкой.
  2. Выполните запрос к необходимым регистрам сведений, чтобы найти требуемый БанковскийСчет или Кассу.
  3. Запишите полученное значение в ИсходящиеДанные.

Пример реализации кода в ПередВыгрузкой:


// Получаем данные запросом
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Договор.БанковскийСчет КАК Счет ИЗ Справочник.Договоры КАК Договор ГДЕ Договор.Ссылка = &Договор";
Запрос.УстановитьПараметр("Договор", Источник.Договор);
Результат = Запрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда
    ИсходящиеДанные = Новый Структура;
    ИсходящиеДанные.Вставить("МестоУчета", Результат.Счет);
КонецЕсли;

После этого в ПКС для поля МестоУчетаДенежныхСредств установите флаг Получать из входящих данных и укажите имя поля МестоУчета. Это позволяет системе однозначно определить, какое значение передать в приемник.

Актуализация данных при наличии корректировок и возвратов

Когда требуется выгрузить документ не «как есть», а с учетом сторонних корректировок, стандартная выборка может оказаться недостаточной. Наиболее надежный способ — программный расчет итоговой суммы в ПКО.

Разберем процесс по шагам:

  1. В ПКО документа (РеализацияТоваровУслуг) в событии ПередВыгрузкой вычислите текущую сумму с учетом всех корректировок за период.
  2. Используйте ИсходящиеДанные для передачи этой суммы в приемник.
  3. В приемнике, в обработчике ПослеЗагрузки, присвойте переданное значение соответствующему реквизиту объекта.

Код для ПередВыгрузкой:


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

Обеспечение актуальности при изменениях «задним числом»

Часто возникает вопрос: что делать, если документ уже выгружен, а через месяц по нему оформлен возврат? В этом случае обычный обмен не увидит изменений в РТУ. Чтобы решить эту задачу, мы рекомендуем использовать регистрацию изменений в планах обмена.

Проанализируем стратегию действий:

Помните, что использование Произвольного запроса в ПВД — это мощный инструмент, но он требует осторожности, так как исключает стандартный механизм регистрации изменений. Для большинства задач достаточно сочетания стандартной выборки и грамотного использования ИсходящихДанных в обработчиках ПередВыгрузкой.

← На главную