Enterprise Data (КД3) на костылях расширений: Большая шпаргалка по выживанию в модуле обмена

08.05.26

Интеграция - Перенос данных 1C

Забудьте про визуальные конвертации — переходим на темную сторону кода. Большая шпаргалка по низкоуровневой доработке Enterprise Data в расширениях: от перехвата ПОД/ПКО и хирургии XDTO до многоэтажной маршрутизации (1 XML = 3 документа 1С), синхронизации статусов и хаков с ДополнительнымиСвойствами. Без воды, только боевой код и паттерны, спасающие рассудок при интеграциях.

Enterprise Data на костылях расширений: Большая шпаргалка по выживанию в модуле менеджера обмена

Привет, коллега. Если ты открыл эту статью, значит, в твой проект пришла беда, или, как это называют в сметах, «интеграция по Enterprise Data». Если раньше ты спокойно рисовал правила конвертации в удобной древовидной форме КД 2.0, попивая кофе, то теперь перед тобой монструозный модуль МенеджерОбменаЧерезУниверсальныйФормат, зубодробительный XDTO и требование «не менять типовой конфигурации, делать в расширении».

Добро пожаловать в адский уют низкоуровневого программирования обмена данными.

Я провел сотни часов, дебажая этот модуль, матерясь на пустые значения в XDTO и пытаясь понять, почему документ, который должен был создаться, мистически исчез. На основе реального боевого кода интеграции транспортной подсистемы (УАТ) с ERP я написал эту огромную шпаргалку. Здесь нет воды, только хардкор, паттерны и обходные пути.

Забудь всё, что ты знал про визуальные редакторы. Мы будем писать код.

 

ГЛАВА 1. Анатомия вмешательства: Как влезть в типовой обмен и не убить конфигурацию

Первое правило клуба обмена: не трогай типовой код модуля менеджера. Ни единого символа. Вся наша магия строится на расширениях. У нас есть три заклинания для перехвата управления:

 

1.1 &После — Тихий сосед

Мы добавляем свой код после того, как отработает типовая процедура. Идеально для добавления новых правил обработки (ПОД) или конвертации (ПКО).

&После("ЗаполнитьПравилаОбработкиДанных")
Процедура ЧИС_ЗаполнитьПравилаОбработкиДанных(НаправлениеОбмена, ПравилаОбработкиДанных)
    // Типовой код уже сформировал свои правила, мы просто докидываем свои
    ДобавитьПОД_Справочник_ЧИС_ВидыТранспортнойРаботы_Получение(ПравилаОбработкиДанных);
КонецПроцедуры

Риск: Минимальный. При обновлении конфигурации типовая процедура может измениться, но твой код просто добавится после неё.

 

1.2 &ИзменениеИКонтроль — Узурпатор

Мы полностью заменяем типовую процедуру своей. При этом платформа будет ругаться предупреждениями при обновлении конфигурации, если типовой код изменился. Это знак тебе: «Эй, проверь, не сломал ли обновление твою логику!».

&ИзменениеИКонтроль("ДобавитьПОД_Документ_ПередачаМатериаловВПроизводство_Отправка")
Процедура ЧИС_ДобавитьПОД_Документ_ПередачаМатериаловВПроизводство_Отправка(ПравилаОбработкиДанных)
   // Типовой код НЕ ВЫПОЛНИТСЯ. Мы пишем с нуля или копируем типовое и дописываем.
   ПравилоОбработки = ПравилаОбработкиДанных.Добавить();
   // ...
   #Вставка
   ПравилоОбработки.ИспользуемыеПКО.Добавить("Документ_ПередачаМатериаловВПроизв_Отправка");
   #КонецВставки
КонецПроцедуры

Риск: Высокий. Если 1С добавит новую галочку в типовую процедуру, твой код её потеряет, пока ты не синхронизируешь изменения, будь внимателен при вставке кода, анализатор очень ревностно проверяет строчки, нельзя отклоняться даже от пробелов, сразу прилетит эрор.

 

1.3 &Вместо — Хирург

Мы врезаемся в типовую процедуру. Можем выполнить код до, после или вместо типового, используя ПродолжитьВызов(). Редко используется для правил, чаще для обработчиков, но знать стоит.

 

ГЛАВА 2. Два столпа обмена: ПОД и ПКО

Вся твоя работа сведется к манипулированию двумя структурами: Правилами Обработки Данных (ПОД) и Правилами Конвертации Объектов (ПКО). Запомни разницу навсегда, иначе сойдешь с ума.

 

2.1 ПОД (Правила обработки данных) — ЭТО ЧТО мы грузим и КОГДА

ПОД отвечает за выборку объектов из базы при отправке и за включение/выключение ПКО при получении.

Сценарий 1: Добавить выгрузку нового документа Ты просто добавляешь ПОД, указываешь метаданные и какие ПКО в нем используются.

Процедура ДобавитьПОД_Документ_ЗаказНаВнутреннееПотребление_Отправка(ПравилаОбработкиДанных)
   ПравилоОбработки = ПравилаОбработкиДанных.Добавить();
   ПравилоОбработки.Имя = "Документ_ЗаказНаВнутреннееПотребление_Отправка";
   ПравилоОбработки.ОбъектВыборкиМетаданные = Метаданные.Документы.ЗаказНаВнутреннееПотребление;
   ПравилоОбработки.ОчисткаДанных = Ложь;
   ПравилоОбработки.ИспользуемыеПКО.Добавить("Документ_ЗаказНаВнутреннееПотребление_Отправка"); 
КонецПроцедуры

Сценарий 2: Отфильтровать мусор (Секретное оружие) У тебя есть ПОД, но ты не хочешь выгружать непроведенные документы. Не лезь в ПКО! Используй обработчик ПриОбработке в ПОД.

Процедура ПОД_Документ_ЗаказНаВнутреннееПотребление_Отправка_ПриОбработке(ДанныеИБ, ИспользованиеПКО, КомпонентыОбмена)
     // Если документ не проведен - отключаем все ПКО для него. Он просто не попадет в файл выгрузки!
     ИспользованиеПКО.Документ_ЗаказНаВнутреннееПотребление_Отправка = ДанныеИБ.Проведен;
КонецПроцедуры

 

2.2 ПКО (Правила конвертации объектов) — ЭТО КАК мы преобразуем данные ПКО мапит поля источника на поля приемника. 

Процедура ДобавитьПКО_Документ_ЗаказНаПроизводство2_2_Получение(ПравилаКонвертации)
   ПравилоКонвертации = ОбменДаннымиXDTOСервер.ИнициализироватьПравилоКонвертацииОбъекта(ПравилаКонвертации);
   ПравилоКонвертации.ИмяПКО = "Документ_ЗаказНаПроизводство2_2_Получение";
   ПравилоКонвертации.ОбъектДанных = Метаданные.Документы.ЗаказНаПроизводство2_2;
   ПравилоКонвертации.ОбъектФормата = "Документ.уатРемонтныйЛист"; // Входящий XML-объект
   СвойстваШапки = ПравилоКонвертации.Свойства;
   ДобавитьПКС(СвойстваШапки, "Организация", "Организация", , "Справочник_Организации_Получение", "http://v8.1c.ru/edi/...");
КонецПроцедуры

Если ты не добавишь ДобавитьПКС для какого-то поля, оно просто не заполнится, даже если в XML оно есть. Платформа не угадывает.

 

ГЛАВА 3. Маршрутизация: Как один документ превратить в три разных

Это самая частая боль. В периферийной базе (например, УАТ) есть один документ уатРемонтыйЛист. А в центральной базе (ERP) он должен распасться на:

  1. ЗаказНаПроизводство (если ремонт своей бригадой)
  2. ЗаказПереработчику (если отдаем на сторону запчасти)
  3. ЗаказНаРемонт (если отдаем машину целиком в сервис)

 

Шаг 1. В ПОД добавляем ВСЕ возможные ПКО-назначения:

ПравилоОбработки.ИспользуемыеПКО.Добавить("Документ_ЗаказПереработчику_Получение");
ПравилоОбработки.ИспользуемыеПКО.Добавить("Документ_ЗаказНаПроизводство2_2_Получение");
ПравилоОбработки.ИспользуемыеПКО.Добавить("Документ_ЗаказНаРемонт_Получение");

 

Шаг 2. В обработчике ПОД  ПриОбработке рубим лишние ПКО: По умолчанию все ПКО отключены. Мы читаем входящие данные XDTO и включаем только нужное.

Процедура ПОД_Документ_уатРемонтныйЛист_Получение_ПриОбработке(ДанныеXDTO, ИспользованиеПКО, КомпонентыОбмена)
    // Сначала отключаем вообще всё!
    УстановитьИспользованиеПКО(ИспользованиеПКО, Ложь);
    // Читаем признак из входящего XML
    Если ДанныеXDTO.СпособРемонта.Значение = "РемЗона" Тогда
         ИспользованиеПКО.Документ_ЗаказНаПроизводство2_2_Получение = Истина;
    ИначеЕсли ДанныеXDTO.СпособРемонта.Значение = "РемонтЗапчастей" Тогда
         ИспользованиеПКО.Документ_ЗаказПереработчику_Получение = Истина;
    ИначеЕсли ДанныеXDTO.СпособРемонта.Значение = "Автосервис" Тогда
         ИспользованиеПКО.Документ_ЗаказНаРемонт_Получение = Истина;
    КонецЕсли;
КонецПроцедуры

Итог: Платформа создаст ровно тот документ, который нужен, используя один и тот же входящий пакет XML.

 

ГЛАВА 4. События ПКО: Кровеносная система обмена

ПКО — это не просто маппинг. Это программа, исполняемая событиями. Зная их порядок и фишки, ты спасешь себе сотни часов отладки.

 

4.1. ПриКонвертацииДанныхXDTO (Получение) — Хирургия входящих данных

Срабатывает до того, как данные лягут в объект. Здесь ПолученныеДанные — это еще не объект ИБ, это структура или объект XDTO, который можно калечить.

Зачем нужен:

  • Установить реквизиты, которых нет в XML (дефолты).
  • Заполнить перечисления.
  • Сгенерировать табличные части на лету.

Пример из жизни: В XML нет Хозяйственной операции, но в ERP без нее документ не проведется. Ставим дефолт:

Процедура ПКО_Документ_ЗаказПереработчику_Получение_ПриКонвертацииДанныхXDTO(ДанныеXDTO, ПолученныеДанные, КомпонентыОбмена)
    ПолученныеДанные.ХозяйственнаяОперация = ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ПроизводствоУПереработчика2_5");
КонецПроцедуры

Продвинутая техника: Формируем ТЧ из входящего массива Часто в XML приходит плоская таблица, а в 1С надо разнести её по разным табличным частям, добавив дефолтные колонки.

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

ПолученныеДанные.ДополнительныеСвойства. Это твой единственный способ передать данные между событиями ПКО. Записал здесь — достанешь в ПередЗаписьюПолученныхДанных

4.2. ПриОтправкеДанных(Отправка) — Контроль выгрузки

Срабатывает при формировании XML. Здесь ДанныеИБ — это объект 1С, а ДанныеXDTO — это формируемый пакет.

Зачем нужен:

  • Вставить кастомные теги в XML.
  • Выгрузить статус вместо всего документа (для синхронизации состояний).

Пример: Выгрузка флага статуса Нам не нужно выгружать весь документ ПринятиеКУчетуОС, нужно только сказать периферийной базе, что он проведен.

Процедура ПКО_Документ_ПринятиеКУчетуОС2_4_Отправка_ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки)
   // Просто дописываем кастомный тег в XML
   ДанныеXDTO.Вставить("ИзменитьСтатус", Истина);
КонецПроцедуры

 

4.3. ПослеЗагрузкиВсехДанных  / Отложенная обработка — Постфактум

Самый мощный и опасный обработчик. Вызывается после того, как все объекты пакета уже загружены и записаны.

Зачем нужен:

  • Создать связанные объекты, которых не было в XML.
  • Провести документ, если он завис от ссылок на другие объекты, которые только что создались.
  • Сгенерировать задачи пользователям.

Пример из кода: После загрузки документа ввода в эксплуатацию создаем бизнес-процесс Задание, чтобы пользователи не забыли заполнить реквизиты:

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

 

ГЛАВА 5. Черная магия XDTO: Как читать то, чего не понимаешь

Иногда формат Enterprise Data меняется, и ты получаешь структуру, которая ни в какое ПКС не помещается. Или тебе нужно прочитать составной тип данных.

 

5.1. Чтение составных ссылок

В Enterprise Data ссылка на объект передается как структура с полями ТипЗначения, Значение и т.д. Как понять, что прилетело?

ТипДокументаРеализации = Неопределено;
Если ДанныеXDTO.Свойство("Контрагент")
И ТипЗнч(ДанныеXDTO.Контрагент) = Тип("Структура")
И ДанныеXDTO.Контрагент.Свойство("ТипЗначения", ТипДокументаРеализации) Тогда
    ИмяПКО = "";
    Если ТипДокументаРеализации = "Контрагент" Тогда
         ИмяПКО = "Справочник_Контрагенты_Получение";
    КонецЕсли;
    Если НЕ ИмяПКО = "" Тогда
         // Формируем инструкцию для платформы, какой ПКО использовать для поиска ссылки
         Инструкция = Новый Структура("Значение, ИмяПКО", ДанныеXDTO.Контрагент, ИмяПКО);
         ПолученныеДанные.ДополнительныеСвойства.Вставить("Контрагент", Инструкция);
    КонецЕсли;
КонецЕсли;

 

5.2. Поиск ссылки по UID в базе

В отложенных обработчиках тебе часто нужно найти объект, который только что загрузился, по его уникальному идентификатору из XML.

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

Секрет: При обмене через Enterprise Data ссылки регистрируются в РС ПубличныеИдентификаторыСинхронизируемыхОбъектов. Ищи там, если не можешь найти объект обычным путем.

 

ГЛАВА 6. Синхронизация статусов без дублей документов

Это отдельный вид боли. В периферийной базе (УАТ) есть документ уатВводВЭксплуатацию. В центральной (ERP) в ответ на это должны быть созданы документы ПринятиеКУчетуОС и ПараметрыНачисленияТранспортногоНалога.

А когда в ERP эти документы проводят, нужно передать статус обратно в УАТ, чтобы там закрыли документ-источник. Как сделать это так, чтобы не выгружать весь ПринятиеКУчетуОС целиком (ведь УАТ его не поймет)?

Паттерн "Пустой ПКО для статуса"

  1. Создаем ПКО, который выгружает только ключевые свойства (Организация, Номер, Дата) и кастомный флаг ИзменитьСтатус.
Процедура ДобавитьПКО_Документ_ПринятиеКУчетуОС2_4_Отправка(ПравилаКонвертации)
   // ...
   ДобавитьПКС(СвойстваДокумента, , "ИзменитьСтатус",1, , ПространствоИмен);
КонецПроцедуры
Процедура ПКО_Документ_ПринятиеКУчетуОС2_4_Отправка_ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, ...)
   ДанныеXDTO.Вставить("ИзменитьСтатус", Истина);
КонецПроцедуры
  1. На стороне получения вешаем ПКО на документ уатВводВЭксплутацию, и в обработчике ПриКонвертацииДанныхXDTO просто меняем статус, если видим флаг.
Если ДанныеXDTO.Свойство("ИзменитьСтатус") И ДанныеXDTO.ИзменитьСтатус Тогда
     // Логика изменения статуса у полученного документа
КонецЕсли;

Таким образом, ты шлешь минимальный трафик, только сигнальные флаги, не засоряя базу-приемник лишними данными.

 

ГЛАВА 7. Кастомные объекты формата

А что, если твоего объекта вообще нет в Enterprise Data? Например, справочник ЧИС_НомрмативыОбслуживанияТС. Его нет в формате, но мы обязаны его передать.

Мы можем использовать любой подходящий объект формата (например, Справочник.ЛюбойСправочник) или создать свой ПКО, который будет упаковывать данные в кастомный XML-тег.

В коде это выглядит так:

Процедура ДобавитьПКО_РСЗапись_ЧИС_НормативыОбслуживанияТС_Отправка(ПравилаКонвертации)
    // ...
    ПравилоКонвертации.ОбъектФормата = "Справочник.ЧИС_НормативыОбслуживанияТС";
    // ...
    ДобавитьПКС(СвойстваШапки, "", "СписокЗапчастей", 1,, "http://v8.1c.ru/edi/...");
КонецПроцедуры

А в обработчике ПриОтправкеДанных мы вручную формируем структуру, превращая регистр сведений в подобие справочника с нужными тегами, а в ПриКонвертацииДавнныхXDTO на приемнике — разбираем эту структуру и пишем в регистр сведений.

 

ГЛАВА 8. Удаление объектов из правил (Горячий хирургический нож)

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

Мы не можем удалить типовое ПОД из расширения, но мы можем вырезать его на лету!

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

Осторожно: Удалять элементы коллекции в цикле Для Каждого небезопасно (может быть смещение индексов). Надежнее собирать массив на удаление и удалять во втором цикле. Но для расширений обменов этот хак часто используют.

 

ГЛАВА 9. Генерация объектов на лету

Обмен — это не просто перенос данных. Это обеспечение целостности. Если пришел ремонтный лист, а в базе нет нужной спецификации или контактного лица, обмен упадет. Что делать? Создавать объекты на лету прямо в обработчиках ПКО!

Пример: Создание Контактного Лица В XML пришел реквизит Ответственный, но в базе нет такого контактного лица у контрагента. Мы создаем его.

УИДКонтактногоЛица = Новый УникальныйИдентификатор(ДанныеXDTO.Ответственный.Ссылка.Значение);
СсылкаКЛ = Справочники.КонтактныеЛицаПартнеров.ПолучитьСсылку(УИДКонтактногоЛица);
Если ОбщегоНазначения.СсылкаСуществует(СсылкаКЛ) Тогда
    ПолученныеДанные.КонтактноеЛицо = СсылкаКЛ;
Иначе
    КЛОбъект = Справочники.КонтактныеЛицаПартнеров.СоздатьЭлемент();
    КЛОбъект.Наименование = ДанныеXDTO.Ответственный.Наименование;
    КЛОбъект.УстановитьСсылкуНового(СсылкаКЛ);
    КЛОбъект.Владелец = ДанныеИБ.Партнер; // Заполняем владельца по контрагенту
    КЛОбъект.ОбменДанными.Загрузка = Истина; // Обязательно!
    КЛОбъект.Записать();
    ПолученныеДанные.КонтактноеЛицо = КЛОбъект.Ссылка;
КонецЕсли;

Секрет: Используй УстановитьСсылкуНового(). Это гарантирует, что при повторной загрузке этого пакета объект не задвоится, а платформа найдет его по GUID.

 

ГЛАВА 10. Тонкости отправки: Внедрение в типовые документы

Частая задача: в типовой документ (например, РеализацияУслугПрочихАктивов) нужно добавить выгрузку кастомного реквизита расширения.

Мы используем &ИзменениеИКонтроль для процедуры добавления ПОД, добавляем свое ПКО в список используемых, а в обработчике ПриОбработке включаем его:

Процедура ЧИС_ПОД_Документ_РеализацияУслугПрочихАктивов_Отправка_ПриОбработке(ДанныеИБ, ИспользованиеПКО, КомпонентыОбмена)
   // ...
   ИзменитьСтатус = ПроверитьПроведениеСписанияИРеализации(ДанныеИБ);
   ИспользованиеПКО.Документ_РеализацияУслугПрочихАктивов_Статус_Отправка = ИзменитьСтатус;
КонецПроцедуры

А в ПКО Документ_РеализацияУслугПрочихАктивов_Статус_Отправка в ПриОтправкеДанных мы допишем нужные теги в формируемый XDTO.

 

ЭПИЛОГ: Правила выживания

  1. Отладчик — твой лучший друг. Встань точкой останова на ЧИС_ВыполнитьПроцедуруМодуляМенеджера и следи, как летят данные. Без отладчика написать обмен невозможно.
  2. ДополнительныеСвойства — твой багажник. Не пытайся всё сделать в одном событии. Собирай данные в структуру, клади в ДополнительныеСвойства, доставай в ПередЗаписью.
  3. УстановитьИспользованиеПКО(Ложь) — твой рубильник. Сначала отключай всё, потом включай точечно. Так ты избежишь создания фантомных документов.
  4. ОбменДанными.Загрузка = Истина. Если создаешь объекты на лету в обработчиках, всегда ставь этот флаг, иначе 1С нарисует тебе кучу лишних проведений и движений.
  5. UID — царь обмена. Если объекты не находятся, 99% проблема в том, что платформа не может сопоставить GUID из XML с объектом в базе. Используй ПубличныеИдендификаторыСинхронизиуемыхОбъектов.

Обмен данными через Enterprise Data на уровне кода — это как игра на пианино в слепую. Но если ты понимаешь архитектуру (ПОД -> ПКО -> События -> XDTO), ты начинаешь слышать музыку. Удачи в бою, разработчик. Да пребудет с тобой стабильный обмен без ошибок идентификации!

Вступайте в нашу телеграмм-группу Инфостарт

Enterprise Data КД 3.0 обмен данными расширения 1С МенеджерОбменаЧерезУниверсальныйФормат ПКО ПОД XDTO программирование правил доработка обмена ПриКонвертацииДанныхXDTO ДополнительныеСвойства интеграция 1С Универсальный формат маршрутизация данных конвертация данных синхронизация статусов каскадное создание документов обработчики ПКО правила конвертации

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Перенос данных 1C Программист 1С:Предприятие 8 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

58000 руб.

04.08.2015    187040    442    302    

451

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27633 руб.

12.06.2017    160344    967    317    

482

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Переносите справочную информацию, остатки и документы из УПП 1.3 в Бухгалтерию 3.0 с помощью готовых правил. Переносится более 50 видов документов. Простой интерфейс и понятные настройки.

42000 37800 руб.

15.12.2021    33963    257    64    

194

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

50050 руб.

25.02.2015    187942    357    289    

417

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

58000 руб.

29.10.2018    62643    81    132    

80

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 10 учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

84000 руб.

05.10.2022    13331    15    8    

16

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

58000 руб.

15.04.2019    83833    224    175    

161
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. DmitryKSL 186 08.05.26 09:10 Сейчас в теме
Забудьте про визуальные конвертации — переходим на темную сторону кода

Всегда так и делал, даже не помню как КД3 выглядит. Помню меня на курсы записали по КД3, сам Дмитрий Гончаров вел, так он сказал - на практике большинство чисто в модуле сидят, конфу КД вообще не открывают.
2. amiralnar 9 08.05.26 09:24 Сейчас в теме
Пожалуйста, не публикуйте генеративные статьи!
Каждый из нас сегодня может сгенерировать такую статью в чате с нейросетью.
Это обесценивает площадку и сообщество.
3. war41k 644 08.05.26 09:28 Сейчас в теме
(2) Статья написана на реальном примере расширения, информация развивает сообщество, ИИ это инструмент, пользоваться им или нет дело каждого
Прикрепленные файлы:
4. DmitryKSL 186 08.05.26 09:30 Сейчас в теме
Кстати, многие не знают про "AdditionalInfo", в статье тоже не увидел. Можете перекинуть что угодно простых типов без блекджека... Смотришь чужой обмен, кто во что горазд. Одни в комментарий пихают, другие дополнительные сведения.
Вот простой пример.
База источник
&После("ПКО_Документ_ОтчетКомитенту_Отправка_ПриОтправкеДанных")
Процедура ОбменБП_ПКО_Документ_ОтчетКомитенту_Отправка_ПриОтправкеДанн­ых(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки)
	
	ДанныеXDTO.Вставить("AdditionalInfo", Новый Структура("СуммаНДСВознаграждения", ДанныеИБ.СуммаНДСВознаграждения));
	
КонецПроцедуры


База приемник
Процедура ДополнительныеСвойстваИзAdditionalInfo(ДанныеXDTO, ПолученныеДанные)

	Если ДанныеXDTO.Свойство("AdditionalInfo") И ТипЗнч(ДанныеXDTO.AdditionalInfo) = Тип("Структура") Тогда
		Для каждого Элемент Из ДанныеXDTO.AdditionalInfo Цикл
			ПолученныеДанные.ДополнительныеСвойства.Вставить(Элемент.Ключ, Элемент.Значение);
		КонецЦикла;
	КонецЕсли;		

КонецПроцедуры

&После("ПКО_Документ_ОтчетКомитентуОПродажах_Получение_ПриКонвертац­ииДанныхXDTO")
Процедура ОбменУТ_ПКО_Документ_ОтчетКомитентуОПродажах_Получение_ПриКо­нвертацииДанныхXDTO(ДанныеXDTO, ПолученныеДанные, КомпонентыОбмена)
	
	ДополнительныеСвойстваИзAdditionalInfo(ДанныеXDTO, ПолученныеДанные);
	
КонецПроцедуры

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

КонецПроцедуры
Показать
smit1c; war41k; +2 Ответить
5. xnd 99 08.05.26 09:51 Сейчас в теме
анализатор очень ревностно проверяет строчки, нельзя отклоняться даже от пробелов, сразу прилетит эрор.

Практика и ИТС с вами несогласны:
https://its.1c.ru/db/v8322doc#bookmark:dev:TI000002149
Во время проверки применимости игнорируются пробелы и символы табуляции в начале и конце каждой строки метода, а также пустые строки (или строки, состоящие только из символов пробел и табуляция) в теле метода.
Для отправки сообщения требуется регистрация/авторизация