1С: Конвертация данных 3. Инструкции и примеры. EnterpriseData (универсальный формат обмена)
Интеграция - Файловый обмен (TXT, XML, DBF), FTP
Цель данной статьи - ответить на первые вопросы по КД3 и на простом примере показать как доработать типовые правила. Информация полезна начинающим и тем, кто уже приступил к освоению и появились новые вопросы.
Принятые сокращения в этой публикации
КД2 - конфигурация Конвертация данных, редакция 2.0.
КД3 - конфигурация Конвертация данных, редакция 3.0, конфигурация 3.0.5.3.
ED - универсальный формат обмена EnterpriseData.
Вопросы и ответы
- КД3 это новая версия КД2? Нет! Это другой инструмент, который решает аналогичные КД2 задачи. Каждому инструменту своё применение.
- КД3 лучше КД2? Их нельзя сравнивать, т.к. это разные инструменты и у каждого есть свои плюсы и минусы.
- Для изменения правил обмена КД3 нужно снимать конфигурацию с поддержки? Нет НЕ нужно снимать с поддержки! В типовых конфигурациях можно штатно подключить внешнюю обработку с правилами, а на конфигурациях поддерживающих платформу 8.3.10 и выше можно редактировать правила с помощью расширения.
- Нужно перенести данные из конфигураций собственного изготовления. Для целей изучения можно воспользоваться КД3? Если Вы задаёте этот вопрос, скорее всего нельзя. Для КД3 в составе конфигурации должна быть БСП 2.3 и выше с синхронизацией через универсальный формат. КД2 вам подойдёт 100%, КД3 под вопросом.
- Можно ли использовать КД3 для типовых доработанных конфигураций? Да, можно. Если ваши нетиповые данные можно передать используя ED или реквизит AdditionalInfo, то хорошо. Иначе есть вариант изменения формата обмена (XML схемы). В этом случае возможности КД3 почти сравняются с КД2, но пропадёт основной плюс КД3 - универсальность формата обмена.
- Конфигурации, поддерживающие ED, могут обмениваться между собой? Да! Но для обмена БП 3.0 – БП 3.0 при создании синхронизации нельзя выбрать БП 3.0. Ничего страшного, выбирайте «Другая программа». Если нужен разовый обмен, достаточно воспользоваться обработкой «Выгрузка загрузка EnterpriseData» в меню Все функции.
- После обновления конфигурации нужно загрузить свежие правила из комплекта поставки? Нет! Правила содержаться в модуле конфигурации. Для обмена с другими базами 1С не требуется загружать правила другой базы. Почему? Подробности в этой статье.
- После обновления одной базы необходимо привести в актуальное состояние другую базу, участвующую в обмене? Нет! Не требуется синхронно обновлять все базы, участвующие в обмене. Это один из плюсов КД3.
- Наши конфигурации сильно доработаны, там новые виды документов и справочников, КД3 может их перенести? Есть вероятность, что без изменения формата не сможет. Это один из "минусов" КД3 по сравнению с КД2.
Зачем тогда нужна КД3? Плюсы и минусы
Плюсы КД3
Рассмотрим основной плюс КД3 на примере часто встречающейся задачи. Есть конфигурация УТ 11.3, которая не обновляется по каким либо причинам. Необходимо организовать обмен с БП 3.0, которая постоянно обновляется до актуального релиза.
Нет проблем.
- Универсальный формат обмена, который используется в КД3 предназначен для решения подобных задач.
- Правила обмена в УТ создаются не для обмена с БП а для обмена с универсальным форматом EnterpriseData.
- Если оперировать понятиями КД2, то УТ обменивается с конфигурацией ED, которая не меняется. БП 3.0 тоже обменивается с ED.
У каждой конфигурации свои правила обмена с ED. Таким образом УТ выгружает данные всегда в один и тот же формат. Конфигурация БП 3.0, какая бы она новая не была должна уметь принимать данные из этого формата.
Получается что в УТ не нужно заботится о том, что БП поменяются какие-то реквизиты. Задача простая - выгрузить в ED, а конфигурация БП должна уметь принять данные из этого формата.
- В связи с тем, что конфигурация источник выгружает всегда в одном формате, любая конфигурация приемник может загрузить в себя данные из этого универсального формата.
Т.е. для произвольной комбинации обменов УТ - БП, УТ - КА, УТ - ERP, КА- БП, ERP - БП. не нужно писать индивидуальные правила. В КД3 правила универсальны. Любая конфигурация, поддерживающая обмен в универсальном формате может обмениваться с любой конфигурацией, поддерживающей формат ED.
Отладка алгоритмов и правил доступна в самой конфигурации, т.к. все правила это код общего модуля или внешней обработки. Можно обойтись без КД3 для оперативного исправления ошибки.
Минусы КД2
Правила обмена индивидуальны для каждой пары конфигураций. Для всех вышеперечисленных комбинаций обмена между разными видами конфигураций и разными версиями конфигураций нужны свои правила обмена. Поэтому для решения вышеозвученной задачи обмена УТ 11.3 и БП 3.0 потребуется почти после каждого обновления БП 3.0 отлаживать и дорабатывать правила обмена.
Отладка алгоритмов и правил затруднена для начинающего программиста или для того, кто редко сталкивается с этой задачей. Правила хранятся в xml файле. Быстрое исправление ошибки недоступно. Необходимо загрузить правила в КД2, исправить и выгрузить обратно.
Минусы КД3
Универсальный формат накладывает ограничения на виды документов и справочников. Он разработан для типовых конфигураций. Если у Вас нетиповой реквизит или вид документа, могут возникнуть сложности при обмене.
Для осуществления синхронизации в формате ED конфигурация должна поддерживать эти механизмы. Всё это есть в БСП 2.3 и выше. Это не совсем минус, это скорее особенность.
Основной плюс немного меркнет из-за ограниченных сроков поддержки формата. Это уже ощутили на себе пользователи УТ 11.1, УТ 11.2, которые обмениваются с БП 3.0. Сроки поддержки указаны по этой ссылке. Там сказано, что минимальный гарантированный срок поддержки формата составляет год, фактически около 3-х лет. Таким образом если Вы настроите синхронизацию сегодня, то минимум год можно не обновлять базу УТ 11, а потом либо обновить конфигурацию, либо просто добавить новый формат, внести небольшое изменение в БСП и в правила при необходимости. Как это сделать? Будет указано позднее в этой статье.
Плюсы КД2
Возможности КД2 безграничны. Можно создать правила обмена для любых конфигураций на любой платформе. От 1С 7.7 до последней 8.3. От конфигурации ничего не требуется, БСП не обязательна. Правила могут быть созданы в автоматическом режиме и доработаны.
В связи с вышесказанными плюсами и минусами рекомендуется использовать КД3 для типовых конфигураций. КД2 можно использовать для любых конфигураций, но учитывая её минусы не забывать, что иногда целесообразнее использовать КД3.
Надеюсь пришло понимание зачем нужна КД3, продолжаем по существу.
Принятые сокращения далее
БСП - Библиотека стандартных подсистем.
ПОД - правило обработки данных.
ПКО - правило конвертации объекта.
ПКПД - правило конвертации предопределенных данных.
ПКС - правило конвертации свойства.
Рассмотрим пример - необходимо изменить типовые правила обмена БП 3.0 и УТ 11.3
На желтом фоне указаны шаги из инструкции, которая открывается в КД3. Предложенная в этой статье последовательность шагов другая, чтобы не запутаться и сразу логически завершить начатое действие.
Как изменить правила ED?
- Доработать модуль с правилами обмена прямо в конфигурации. Этот вариант пока не рассматриваем, т.к. для понимания что и где нужно менять, необходимо хотя бы один раз сделать это в КД3. В этом случае будет проще в будущем оперативно решать проблемы, отлаживать в модуле и переносить в КД3 при необходимости.
- Воспользоваться КД3.
Как это делается в КД2? Выгружаем метаданные обеих конфигураций и загружаем в КД2.
Шаг 1. Для КД3 делаем аналогично – в каждой конфигурации в режиме предприятия обработкой \tmplts\1c\Conversion\3_0_5_3\MD83Exp.epf выгружаем метаданные конфигураций,
например, в папку «D:\Правила БП3\БП 3.0.54.15\», имя файла «МД.xml».
Непонятно с какой целью скрыты настройки этой обработки, в результате по умолчанию не выгружаются данные по регистрам сведений. Устраняем этот недочет.
В процедуре ИзменитьРежимОбработки() основной формы комментируем строку
// Элементы.Настройки.Видимость = Ложь;
Сохраняем обработку, открываем в режиме предприятия, ставим флаг на «Выгружать регистры сведений», выгружаем.

Шаг 3. Загружаем ранее созданный файл «МД.xml» в КД3, раздел «Конфигурации» - «Загрузка структуры конфигурации» флаг «В новую версию конфигурации».

Т.к. в КД3 для обмена используется «промежуточная конфигурация» (ED), загружаем и её «метаданные», которые представляют собой XML схему, файл с расширением «xsd». Шаг 2. Взять её можно из конфигурации УТ 11 или БП 3.0. Они одинаковы. Открываем конфигурацию, в строке поиска вводим «enter», видим в дереве Общие - XDTO-пакеты примерно такие пакеты: EnterpriseData_1_3_8, EnterpriseData_1_4_4 и подобные.. Это версии формата 1.3 и 1.4 соответственно и 1.2, 1.1, 1.0 если есть. Правая кнопка мыши на пакете, в контекстном меню выбираем «Экспорт XML-схемы».

Шаг 4. В КД3 раздел Формат данных – «Загрузка структуры формата», выбираем ранее выгруженные файлы с расширением «xsd». Нужно выбирать один файл! Множественный выбор совместно с ExchangeMessage не нужен! Это предлагалось в старых инструкциях КД3 предыдущих версий. В последних КД3 этого не требуется.

После загрузки формата в разделе Формат данных – Дерево объектов формата, выберите версию формата. Если там есть документы и справочники, значит Вы загрузили правильный файл. Если нет, начните всё сначала с новой пустой КД3 и первым делом загрузите формат и проверьте дерево.

Этап 2. После загрузки метаданных в КД3 приступаем к загрузке типовых правил обмена.
Как это делается в КД2? Правила загружаются в конвертацию.
В КД3 почти так же. Выгружаем правила из типовой, создаём конвертацию, а потом загружаем в неё правила.
Выгрузка типовых правил из конфигурации для загрузки в КД3
Конфигурации обмениваются на максимальной общей версии формата обмена. Например, одна конфигурация имеет максимальный формат 1.5, другая 1.6, значит они будут между собой обмениваться в формате 1.5. Поэтому достаточно выгрузить из обеих конфигураций формат 1.5 и загрузить в правила.
Открываем конфигурацию БП 3.0 или УТ 11.3 в режиме конфигуратора, в строке поиска можно ввести «мен уни», открываем общий модуль МенеджерОбменаЧерезУниверсальныйФормат. Если это БП 3.0, то открываем МенеджерОбменаЧерезУниверсальныйФормат13. В открытом модуле переходим в меню Файл – Сохранить копию, сохраняем файл с произвольным именем, например, «D:\Правила БП3\БП 3.0.54.15\Общий модуль МенеджерОбменаЧерезУниверсальныйФормат_ Модуль».
Открываем конфигурацию БП 3.0 или УТ 11.3 в режиме предприятия, открываем обработку \tmplts\1c\Conversion\3_0_5_3\Выгрузка правил синхронизации.epf
Недостаток типовой обработки:
- часто завершается с ошибкой;
- выгружает правила из внешней обработки, подключенной к узлу, а нам нужны типовые правила;
- не работает в БП 3.0.53 и выше.
Доработка модуля основной формы обработки. Вносим изменения в процедуры ПриСозданииНаСервере.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Список выбора версий формата.
ВерсииФормата = Новый Соответствие;
ОбменДаннымиПереопределяемый.ПриПолученииДоступныхВерсийФормата(ВерсииФормата);
Для Каждого ПланОбмена Из ОбменДаннымиПовтИсп.ПланыОбменаБСП() Цикл
Если ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ПланОбмена) Тогда
ВерсииФорматаПланаОбмена = Новый Соответствие;
ВерсияБСП243 = ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СтандартныеПодсистемыСервер.ВерсияБиблиотеки(), "2.4.3.1") >= 0;
МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер");
Если ВерсияБСП243 Тогда
ВерсииФорматаПланаОбмена = МодульОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ПланОбмена, "ВерсииФорматаОбмена");
Иначе
ПланыОбмена[ПланОбмена].ПолучитьВерсииФорматаОбмена(ВерсииФорматаПланаОбмена);
КонецЕсли;
Для Каждого ВерсияПланаОбмена Из ВерсииФорматаПланаОбмена Цикл
МодульМенеджера = ВерсииФормата.Получить(ВерсияПланаОбмена.Ключ);
Если МодульМенеджера = Неопределено
Или МодульМенеджера <> ВерсияПланаОбмена.Значение Тогда
ВерсииФормата.Вставить(ВерсияПланаОбмена.Ключ, ВерсияПланаОбмена.Значение);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Для Каждого ВерсияФормата ИЗ ВерсииФормата Цикл
Элементы.НомерВерсииФормата.СписокВыбора.Добавить(ВерсияФормата.Ключ);
КонецЦикла;
АдресХранилищаВерсииФормата = ПоместитьВоВременноеХранилище(ВерсииФормата, УникальныйИдентификатор);
КонецПроцедуры
- Выбираем «Номер версии формата», например, «1.3»,
- «Каталог обмена» - создадим папку, например, «D:\Правила БП3\БП 3.0.54.15\1.3»
- Нажимаем кнопку «Выгрузить».
Повторяем эти действия для других версий формата и сохраняем в соответствующие папки "1.4", "1.5" и т.п.. Для БП 3.0 достаточно выгрузить все форматы от 1.3 и выше. Для других конфигураций от 1.2 и выше.
Правила выгружены, теперь нужно загрузить их в КД3. В КД2 правила загружаются одновременно с созданием конвертации. В КД3 нужно создать конвертацию и загрузить в неё правила.
В КД3 Раздел Конвертации – Конвертации – Создать. Заполняем поля новой конвертации. Выбираем конфигурацию. Для удобства можно изменить наименование конфигурации, перейдя в режим редактирования элемента. Например, вместо БухгалтерияПредприятия указать «БП 3.0.54.15». Реквизит Имя не нужно менять! Наименование конвертации можно указать таким же, например, «БП 3.0.54.15». В табличную часть выбираем поддерживаемые версии формата. Версии формата те, которые мы выгрузили из базы выше. Сохраняем конвертацию.
Переходим в раздел Конвертация – Загрузка правил синхронизации из файлов.
Пример заполнения полей обработки:
-
Место загрузки : «В существующую конвертацию»
-
Каталог обмена: «D:\Правила БП3\БП 3.0.54.15\1.3»
- Файл с модулем обмена: «D:\Правила БП3\БП 3.0.54.15\Общий модуль МенеджерОбменаЧерезУниверсальныйФормат13_ Модуль.txt»
- Конвертация: «БП 3.0.54.15»
При загрузке правил синхронизации из файлов для УТ 11.3 появляется ошибка "Поле объекта не обнаружено". Причина - для ТекПКО.ИспользоватьДляПолучения=Ложь КД3 требует наличия информации по варианту идентификации при получении. Если в файле правил этого нет, возникает ошибка. Исправляем это недоразумение. Либо снимаем эту форму с поддержки, либо используем расширение.
// Основная форма обработки ЗагрузкаПравилСинхронизацииИзФайлов
// До внесения изменений:
// Процедура загружает правила конвертации объектов
&НаСервере
Процедура ЗагрузитьПКО()
...
ЗаполнитьЗначенияСвойств(ТекПКО, СтруктураАтрибутов);
// Вариант идентификации - особая логика.
ТекПКО.ВариантИдентификации = Перечисления.ВариантыИдентификацииОбъектов[СтруктураАтрибутов.ВариантИдентификации];
ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда // Запись загруженного ПКО.
...
// Изменения помечены "//ED"
// Процедура загружает правила конвертации объектов
&НаСервере
Процедура ЗагрузитьПКО()
...
ЗаполнитьЗначенияСвойств(ТекПКО, СтруктураАтрибутов);
// Вариант идентификации - особая логика.
Если ТекПКО.ИспользоватьДляПолучения Тогда //ED
ТекПКО.ВариантИдентификации = Перечисления.ВариантыИдентификацииОбъектов[СтруктураАтрибутов.ВариантИдентификации];
КонецЕсли;
ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда // Запись загруженного ПКО.
...
Нажимаем кнопку «Загрузить». На сообщение «Обработчики предназначены для другой конвертации: БП 3.0.44 (формат 1.4). Продолжить загрузку?» Нажимаем «Да».
Не закрывая форму выбираем другой «Каталог обмена» и нажимаем кнопку «Загрузить». Повторяем несколько раз загрузку правил для каждого формата в текущую конвертацию.
После успешной загрузки переходим в раздел «Конвертации» – «Настройка правил конвертации», открываем нашу конвертацию из формы списка.
Если видим заполненные ПКО, ПОД и т.п., значит загрузка в КД3 удалась.
Проверка корректности загрузки правил
Это не обязательная операция! Если Вы будете использовать одну версию формата в правилах, добиваться идентичности текста модуля не требуется.
- Открываем конфигуратор БП, создаём новую внешнюю обработку, например, Имя «СинхронизацияEDБП», синоним «Синхронизация ED БП 3.0».
- В КД3 в форме «Настройка правил обмена» нажимаем кнопку «Сохранить модуль менеджера обмена» и вставляем этот код из буфера обмена в нашу новую обработку.
- В конфигураторе БП проверяем модуль на синтаксические ошибки. Сохраняем обработку.
- создаём в БП ещё одну пустую обработку, например, Имя «СинхронизацияEDБПтиповая», синоним «Синхронизация ED БП 3.0 типовая». Копируем текст общего модуля БП МенеджерОбменаЧерезУниверсальныйФормат13 в модуль обработки и сохраняем её.
Сравниваем обе обработки. Меню Файл - Сравнить файлы.

Если в типовом модуле есть процедуры, отсутствующие в наших правилах, значит не для всех форматов данных Вы загрузили правила в конвертацию. При необходимости загружаем в конвертацию правила в недостающем формате и повторяем сравнение наших правил с типовыми. Когда добились идентичности можно смело приступать к доработкам правил. Полной идентичности добиваться не обязательно если Вы знаете какой из форматов обмена не будет использоваться при синхронизации.
Аналогичным способом создаём в КД3 конвертацию для УТ 11.3.
БП 3.0.54.15
- Замечена некорректная загрузка ПКО "Справочник_Пользователи". Необходимо исправить свойства конфигурации. Должно получиться так.
- В ПКО "Документ_ИнвентаризацияТоваров_Отправка" для ПКС "ОтветственноеЛицо" не указано ПКО. Откройте форму редактирования ПКС, перевыберите свойство конфигурации и свойство формата чтобы заполнился их тип, после чего будет доступен выбор в поле "Правило конвертации свойства". Выберите "Справочник_ФизическиеЛица_Отправка".
Рассмотрим пример доработки
Основная цель примера - показать возможности доработок для переноса дополнительных данных, которые не укладываются в формат обмена.
Необходимо перенести реквизит "ВидНоменклатуры" справочника "Номенклатура", тип реквизита "Справочник.ВидыНоменклатуры". Этот вид справочника не переносится типовыми правилами КД3 и не поддерживается форматом ED версии ниже 1.6.
Есть несколько вариантов решения подобной задачи
- Доработка XDTO пакета, добавление в формат объекта "Справочник.ВидыНоменклатуры". В результате теряется основное преимущество универсального формата – он перестаёт быть универсальным. Доработка XDTO пакета потребуется во всех базах, участвующих в обмене.
- Использовать свойство формата "ДополнительныеРеквизиты", которое есть во многих объектах. Этот вариант рассматривать в данной статье не будем ввиду некоторой сложности. Примем к сведению что есть такой способ.
- Реквизит AdditionalInfo. Он присутствует в шапке всех объектов формата. Тип anyType. Предназначен для подобных случаев. Воспользуемся им как самым простым способом.
Перед тем как приступить к доработке типовых правил, создадим в группе правил две группы «Добавлено», «Изменено». Это делается в "Конвертации - Группы правил".
Новые ПОД, ПКО, Алгоритмы и т.п. будем создавать в группе «Добавлено», типовые объекты, в которые вносим изменения, переносим в группу «Изменено». Это облегчит последующую поддержку изменённых правил.
Итак, приступим.
Изменения правил в УТ 11.3
В КД3 в форме «УТ 11.3.4.12 Настройка правил обмена» на вкладке Алгоритмы создаём новый алгоритм
- Имя алгоритма «AdditionalInfoВставить»
- Группа: "Добавлено"
Параметры: «ДанныеXDTO, Имя, ДопЗначение»
Если ДанныеXDTO.Свойство("AdditionalInfo") И ТипЗнч(ДанныеXDTO.AdditionalInfo)=Тип("Структура") Тогда
ДопДанные = ДанныеXDTO.AdditionalInfo;
Иначе
ДопДанные = Новый Структура;
КонецЕсли;
ДопДанные.Вставить(Имя, ДопЗначение);
ДанныеXDTO.Вставить("AdditionalInfo", ДопДанные);
Сохраняем алгоритм и переходим на вкладку «Правила конвертации объектов»
По кнопке «Найти» ищем «Номенклатура», открываем ПКО «Справочник_Номенклатура_Отправка». Переходим на вкладку «При отправке». Там видим поле «Имя обработчика:» «ПКО_Справочник_Номенклатура_Отправка_ПриОтправкеДанных». Можно прямо туда внести изменения.
Более сложный код, требующий отладки можно писать в конфигурации. Ищем в модуле обмена в УТ 11.3 процедуру с именем «ПКО_Справочник_Номенклатура_Отправка_ПриОтправкеДанных» и дорабатываем там.
Для переноса изменений из УТ 11.3 в КД3 копируем всю процедуру в буфер обмена, в КД3 в форме «Настройка правил обмена» нажимаем кнопку «Загрузка обработчиков».
Если ЗначениеЗаполнено(ДанныеИБ.ВидНоменклатуры) Тогда //ED
AdditionalInfoВставить(ДанныеXDTO, "ВидНоменклатуры", Строка(ДанныеИБ.ВидНоменклатуры.УникальныйИдентификатор()));
AdditionalInfoВставить(ДанныеXDTO, "ВидНоменклатурыНаименование", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДанныеИБ.ВидНоменклатуры, "Наименование"));
// AdditionalInfoВставить... //добавляем другие служебные реквизиты
КонецЕсли;
После переноса изменений в КД3 нажимаем кнопку "Сохранить модуль менеджера обмена" и переносим код из буфера в модуль УТ 11.3.
Изменения правил в БП 3.0
Вносим изменения в ПКО "Справочник_Номенклатура_Получение", на вкладке "При конвертации данных XDTO", имя процедуры "ПКО_Справочник_Номенклатура_Получение_ПриКонвертацииДанныхXDTO".
Если ДанныеXDTO.Свойство("AdditionalInfo") И ТипЗнч(ДанныеXDTO.AdditionalInfo)=Тип("Структура") Тогда //ED
ДопДанные = ДанныеXDTO.AdditionalInfo;
Если ДопДанные.Свойство("ВидНоменклатуры") Тогда
ВидНоменклатуры = ОбменДаннымиXDTOСервер.СсылкаОбъектаПоУИДОбъектаXDTO(
ДопДанные.ВидНоменклатуры,
Тип("СправочникСсылка.ВидыНоменклатуры"),
КомпонентыОбмена);
Если ВидНоменклатуры.ПолучитьОбъект()=Неопределено
И ДопДанные.Свойство("ВидНоменклатурыНаименование") Тогда //Создаём новый
ВидНоменклатурыОбъект = Справочники.ВидыНоменклатуры.СоздатьЭлемент();
ВидНоменклатурыОбъект.УстановитьСсылкуНового(ВидНоменклатуры);
ВидНоменклатурыОбъект.Наименование = ДопДанные.ВидНоменклатурыНаименование;
// заполняем другие служебные реквизиты
ЗаполнитьЗначенияСвойств(ВидНоменклатурыОбъект,ДопДанные);
ВидНоменклатурыОбъект.Записать();
ВидНоменклатуры = ВидНоменклатурыОбъект.Ссылка;
КонецЕсли;
ПолученныеДанные.ВидНоменклатуры = ВидНоменклатуры;
КонецЕсли;
КонецЕсли;
Одного кода недостаточно. Необходимо на вкладке "Правила конвертации свойств" добавить ПКС со свойством конфигурации "ВидНоменклатуры" и флажком "Используется алгоритм конвертации".
Переносим модуль менеджера обмена в модуль конфигурации БП 3 или во внешнюю обработку.
Как загрузить доработанные правила КД3 в базу?
В конфигурациях, обменивающихся правилами на КД2 это делается в настройках узла. Для правил, созданных в КД3 мы там увидим только возможность поменять правила регистрации.
Правила, подготовленные в КД3 можно установить в конфигурацию тремя способами
- Снять конфигурацию с поддержки и внести изменения в общий модуль МенеджерОбменаЧерезУниверсальныйФормат;
- На конфигурациях, работающих в режиме совместимости с платформой 8.3.10 и выше можно вносить исправления в общий модуль с помощью расширения.
- Подключить расширение, которое полностью подменяет общий модуль с правилами.
- Не снимая конфигурацию с поддержки подключить к узлу внешнюю обработку с правилами;
С первым вариантом всё понятно, он описан в документации, недостаток - нужно снимать конфигурацию с поддержки. Второй вариант - исправление выбранной процедуры расширением тоже не составит труда для программиста 1С - необходимо сравнить две обработки с типовыми правилами и с доработанными так, как описано выше в этой статье, и внести изменение в нужную процедуру.
Третий вариант - использование расширения с правилами обмена в универсальном формате в настоящее время самый оптимальный. Недостаток пока один - необходимо снимать флаг "Безопасный режим" при подключении данного расширения. Это ограничивает его использование в облачных сервисах. Ждём решения от 1С о порядке замены правил обмена в универсальном формате в 1С фреш.
Суть в том, что необходимо найти в конфигурации участок кода, который отвечает за выбор общего модуля в зависимости от версии формата обмена и заменить выбор модуля на свой модуль. Пример для БП 3.0.67:
////////
// Общий модуль ОбменДаннымиПереопределяемый
&Вместо("ПриПолученииДоступныхВерсийФормата")
Процедура ED_ПриПолученииДоступныхВерсийФормата(ВерсииФормата)
ED_ОбменДаннымиСервер.ПриПолученииДоступныхВерсийФормата(ВерсииФормата);
КонецПроцедуры
////////
// План обмена СинхронизацияДанныхЧерезУниверсальныйФормат: Модуль менеджера
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
&Вместо("ПриПолученииНастроек")
Процедура ED_ПриПолученииНастроек(Настройки)
Настройки.ИмяКонфигурацииИсточника = ОбщегоНазначенияБП.ИмяКонфигурацииИсточника();
Настройки.ЭтоПланОбменаXDTO = Истина;
Настройки.ПредупреждатьОНесоответствииВерсийПравилОбмена = Ложь;
Настройки.ФорматОбмена = "http://v8.1c.ru/edi/edi_stnd/EnterpriseData";
ВерсииФормата = Новый Соответствие;
ED_ОбменДаннымиСервер.ПриПолученииДоступныхВерсийФормата(ВерсииФормата); //ED
Настройки.ВерсииФорматаОбмена = ВерсииФормата;
Настройки.ПланОбменаИспользуетсяВМоделиСервиса = Истина;
Настройки.Алгоритмы.ПриПолученииВариантовНастроекОбмена = Истина;
Настройки.Алгоритмы.ПриПолученииОписанияВариантаНастройки = Истина;
Настройки.Алгоритмы.ПредставлениеОтбораИнтерактивнойВыгрузки = Истина;
Настройки.Алгоритмы.НастроитьИнтерактивнуюВыгрузку = Истина;
КонецПроцедуры
#КонецЕсли
////////
// Общий модуль в расширении ED_ОбменДаннымиСервер
Процедура ПриПолученииДоступныхВерсийФормата(ВерсииФормата) Экспорт
ВерсииФормата.Вставить("1.2", МенеджерОбменаЧерезУниверсальныйФормат);
ВерсииФормата.Вставить("1.3", ED_МенеджерОбменаЧерезУниверсальныйФормат);
ВерсииФормата.Вставить("1.4", ED_МенеджерОбменаЧерезУниверсальныйФормат);
ВерсииФормата.Вставить("1.5", ED_МенеджерОбменаЧерезУниверсальныйФормат);
ВерсииФормата.Вставить("1.6", ED_МенеджерОбменаЧерезУниверсальныйФормат);
КонецПроцедуры
////////
// Общий модуль в расширении ED_МенеджерОбменаЧерезУниверсальныйФормат
// Конвертация БП3.0.44 (формат 1.6) от 27.11.2018 11:23:58
// Доработка для БП 3.0.67.х от 31.12.2018 23:59:59
// (с) //infostart.ru/public/695523/
...
Рассмотрим 4-й вариант, который не описан в документации, т.к. в БСП нет такой возможности. Данный вариант уже устарел. Внешняя обработка с правилами применялась в первых версиях с универсальным форматом обмена. Сейчас 1С постепенно избавляется от этого функционала.
В режиме предприятия, в разделе администрирования переходим по ссылке Синхронизация данных - Настройки синхронизации данных, нажимаем кнопку "Настроить..." если настройка одна или "Изменить", если настроек несколько. Переходим в режим редактирования формы через меню "Ещё - Изменить форму", Разворачиваем "Группа", там включаем скрытый элемент формы "Служебная информация", "ОК".
На вкладке "Служебная информация" выбираем "Путь к менеджеру обмена", подставляем туда нашу обработку с правилами.

В БП 3.0.52 и выше по неизвестным причинам внешняя обработка с правилами не используется. Интерфейс для подключения обработки остался. Хотя бы на этом спасибо.
Задействовать обработку с правилами можно с помощью расширения. Необходимо внести исправление в общий модуль "ОбменДаннымиXDTOСервер", функцию "ВерсииФорматаОбмена".
Процедура EDм_ПолучитьВерсиюФорматаОбмена(ВерсииФормата, Знач УзелИнформационнойБазы)
Запрос = Новый Запрос(
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| СинхронизацияДанныхЧерезУниверсальныйФормат.ПутьКМенеджеруОбмена КАК ПутьКМенеджеруОбмена,
| СинхронизацияДанныхЧерезУниверсальныйФормат.ВерсияФорматаОбмена КАК ВерсияФорматаОбмена
|ИЗ
| ПланОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат КАК СинхронизацияДанныхЧерезУниверсальныйФормат
|ГДЕ
| СинхронизацияДанныхЧерезУниверсальныйФормат.ПутьКМенеджеруОбмена <> """"
| И СинхронизацияДанныхЧерезУниверсальныйФормат.Ссылка = &Ссылка");
Запрос.УстановитьПараметр("Ссылка", УзелИнформационнойБазы);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ИмяОбработки = Выборка.ПутьКМенеджеруОбмена;
Если НЕ ОбщегоНазначенияКлиентСервер.РежимОтладки() Тогда
ДанныеОбработки = Новый ДвоичныеДанные(ИмяОбработки);
АдресОбработки = ПоместитьВоВременноеХранилище(ДанныеОбработки);
Если ОбщегоНазначения.ЕстьЗащитаОтОпасныхДействий() Тогда
ИмяОбработки = ВнешниеОбработки.Подключить(АдресОбработки, , ,
ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений());
Иначе
ИмяОбработки = ВнешниеОбработки.Подключить(АдресОбработки);
КонецЕсли;
КонецЕсли;
МенеджерОбмена = ВнешниеОбработки.Создать(ИмяОбработки);
ВерсииФормата.Вставить(Выборка.ВерсияФорматаОбмена, МенеджерОбмена);
КонецЦикла;
КонецПроцедуры
&Вместо("ВерсииФорматаОбмена")
Функция EDм_ВерсииФорматаОбмена(Знач УзелИнформационнойБазы)
ВерсииФорматаОбмена = Новый Соответствие;
Если ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда
ИмяПланаОбмена = УзелИнформационнойБазы.Метаданные().Имя;
ВерсииФорматаОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена,"ВерсииФорматаОбмена");
EDм_ПолучитьВерсиюФорматаОбмена(ВерсииФорматаОбмена, УзелИнформационнойБазы);
Иначе
ОбменДаннымиПереопределяемый.ПриПолученииДоступныхВерсийФормата(ВерсииФорматаОбмена);
КонецЕсли;
Если ВерсииФорматаОбмена.Количество() = 0 Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не заданы версии формата обмена.
|Имя плана обмена: %1
|Процедура: ПолучитьВерсииФорматаОбмена(<ВерсииФорматаОбмена>)'"),
УзелИнформационнойБазы.Метаданные().Имя);
КонецЕсли;
Результат = Новый Соответствие;
Для Каждого Версия Из ВерсииФорматаОбмена Цикл
Результат.Вставить(СокрЛП(Версия.Ключ), Версия.Значение);
КонецЦикла;
Возврат Результат;
КонецФункции
Как выполнять отладку правил во внешней обработке
-
В конфигураторе "Сервис -> Параметры -> Запуск 1С:Предприятия -> Параметр запуска", указать параметр "РежимОтладки".
- Ниже приведён код для расширения, для УТ 11.4, КА 2.4, ERP 2.4. Код для БП 3.0 приведён выше. Модуль менеджера плана обмена СинхронизацияДанныхЧерезУниверсальныйФормат.
&Вместо("ПолучитьВерсииФорматаОбмена")
Процедура ED_ПолучитьВерсииФорматаОбмена(ВерсииФормата)
ОбменДаннымиУТ.ДоступныеВерсииУниверсальногоФормата(ВерсииФормата);
Запрос = Новый Запрос("ВЫБРАТЬ РАЗЛИЧНЫЕ
| СинхронизацияДанныхЧерезУниверсальныйФормат.ПутьКМенеджеруОбмена,
| СинхронизацияДанныхЧерезУниверсальныйФормат.ВерсияФорматаОбмена
|ИЗ
| ПланОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат КАК СинхронизацияДанныхЧерезУниверсальныйФормат
|ГДЕ
| СинхронизацияДанныхЧерезУниверсальныйФормат.ПутьКМенеджеруОбмена <> """"");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ИмяОбработки = Выборка.ПутьКМенеджеруОбмена;
Если НЕ ОбщегоНазначенияКлиентСервер.РежимОтладки() Тогда //ED
ДанныеОбработки = Новый ДвоичныеДанные(ИмяОбработки);
АдресОбработки = ПоместитьВоВременноеХранилище(ДанныеОбработки);
Если ОбщегоНазначения.ЕстьЗащитаОтОпасныхДействий() Тогда
ИмяОбработки = ВнешниеОбработки.Подключить(АдресОбработки, , ,
ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений());
Иначе
ИмяОбработки = ВнешниеОбработки.Подключить(АдресОбработки);
КонецЕсли;
КонецЕсли;
МенеджерОбмена = ВнешниеОбработки.Создать(ИмяОбработки);
ВерсииФормата.Вставить(Выборка.ВерсияФорматаОбмена, МенеджерОбмена);
КонецЦикла;
КонецПроцедуры
&Вместо("ДоступныеВерсииФорматаОбмена")
Процедура ED_ДоступныеВерсииФорматаОбмена(ВерсииФормата)
ОбменДаннымиУТ.ДоступныеВерсииУниверсальногоФормата(ВерсииФормата);
Запрос = Новый Запрос("ВЫБРАТЬ РАЗЛИЧНЫЕ
| СинхронизацияДанныхЧерезУниверсальныйФормат.ПутьКМенеджеруОбмена,
| СинхронизацияДанныхЧерезУниверсальныйФормат.ВерсияФорматаОбмена
|ИЗ
| ПланОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат КАК СинхронизацияДанныхЧерезУниверсальныйФормат
|ГДЕ
| СинхронизацияДанныхЧерезУниверсальныйФормат.ПутьКМенеджеруОбмена <> """"");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ИмяОбработки = Выборка.ПутьКМенеджеруОбмена;
Если НЕ ОбщегоНазначенияКлиентСервер.РежимОтладки() Тогда //ED
ДанныеОбработки = Новый ДвоичныеДанные(ИмяОбработки);
АдресОбработки = ПоместитьВоВременноеХранилище(ДанныеОбработки);
Если ОбщегоНазначения.ЕстьЗащитаОтОпасныхДействий() Тогда
ИмяОбработки = ВнешниеОбработки.Подключить(АдресОбработки, , ,
ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений());
Иначе
ИмяОбработки = ВнешниеОбработки.Подключить(АдресОбработки);
КонецЕсли;
КонецЕсли;
МенеджерОбмена = ВнешниеОбработки.Создать(ИмяОбработки);
ВерсииФормата.Вставить(Выборка.ВерсияФорматаОбмена, МенеджерОбмена);
КонецЦикла;
КонецПроцедуры
Отладку проще всего вести в файловой базе. Точку останова ставим в обработке с правилами. Чтобы найти нужную процедуру, используем КД3. Находим ПКО, ПОД или Алгоритм, смотрим "Имя обработчика" или "Имя алгоритма", ищем эту процедуру в модуле правил. После правки модуля не забываем скопировать процедуру в буфер и в КД3 нажать кнопку "Загрузка обработчиков". Будьте внимательны, должна быть открыта эта же конвертация.
На этом пока всё. Данной информации для программиста 1С уже достаточно чтобы самостоятельно освоить КД3 и поддерживать в рабочем состоянии современный способ синхронизации между базами 1С. Если остались белые пятна, спрашивайте, статья будет дополняться и Вы можете вернуться к ней если что-то забыли.
Общеизвестные ссылки на документацию по КД3:
- 1С: Общее описание формата
- ИТС: Методика работы с конфигурацией "Конвертация данных 3.0"
- Помощник быстрого освоения - открывается в КД3
- ИТС: Описания, сроки поддержки и xsd-схемы актуальных версий формата «EnterpriseData»
- ИТС, БСП: Как настраивать обмен
- ИТС, БСП 3.0: Спецификация сообщения обмена
- ИТС, Обмен данными через веб-сервисы в формате EnterpriseData
Курсы по КД3
- Курсы-по-1с. "КОНВЕРТАЦИЯ ДАННЫХ 3.0" Насипов Фарит и Евгений Гилев, ООО "ОдинКурс" - /1c-v8/dataconv-3/
- 1С-Учебный центр №3, "Конвертация данных 3.0" - http://www.1c-uc3.ru/konvert30.html
Расширить сферу применения КД3 Вы можете используя эти публикации:
- [ED2] Обмен УТ 10.3, КА 1.1, УПП 1.3 с EnterpriseData (универсальный формат обмена), обработка - конфигурации предыдущих версий на платформе 8.2 и ниже превращаются в совместимые с ED.
Сэкономить время и воспользоваться готовыми правилами для последних версий конфигураций можно здесь
- [ED3] Обмен ERP 2, УТ 11, КА 2, БП 3 и другими с EnterpriseData (универсальный формат обмена), правила обмена - расширенный функционал, исправления замеченных ошибок.
Вступайте в нашу телеграмм-группу Инфостарт
КД 3.0 КД3 КД 3 EnterpriseData универсальный формат обмена БП 3.0 УТ 11.3 отладка КД3
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 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 194753 479 310
Перенос данных 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 192520 383 296
SALE! 10%
Перенос данных 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 164992 1009 329
Перенос данных 1C Взаиморасчеты Оптовая торговля Логистика, склад и ТМЦ Файловый обмен (TXT, XML, DBF), FTP Системный администратор Разработчик 1С:Предприятие 8 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Управленческий учет Платные (руб)
Можно проверить до покупки, оставьте заявку! Воспользовались более 268 компаний! Перенос данных из УТ 10.3 в УТ 11 | из УТ 10.3 в КА 2 | из УТ 10.3 в ERP. Решение для перехода с УТ 10.3. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам.
50200 руб.
24.04.2015 211429 186 254
Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Разработчик 1С:Предприятие 8 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 Бухгалтерский учет Управленческий учет Платные (руб)
Переносите справочную информацию, остатки и документы из УПП 1.3 в ERP 2.6 и КА 2.6 с помощью готовых правил. Переносится более 60 видов документов. Простой интерфейс и понятные настройки.
42000 руб.
24.06.2020 73114 108 35
Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Разработчик 1С:Предприятие 8 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)
Переносите справочную информацию, остатки и документы из УПП 1.3 в Бухгалтерию 3.0 с помощью готовых правил. Переносится более 50 видов документов. Простой интерфейс и понятные настройки.
42000 руб.
15.12.2021 37104 268 68
Операции по ВЭД Файловый обмен (TXT, XML, DBF), FTP Разработчик Бухгалтер 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Бухгалтерский учет Платные (руб)
Федеральная таможенная служба России давно поддерживает унифицированный формат электронных документов для обмена с информационными системами предприятий. xmlns="urn:customs.ru:Information:ExchangeDocuments:". Структура, утвержденная комиссией Таможенного союза. Осталось только сделать загрузку в 1С из этого формата. На выходе - два документа ГТД по импорту и Поступление (акты, накладные) Обработка актуализирована на начало 2026 года (ставка НДС 22%)
24400 руб.
09.08.2016 97831 380 379
Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Разработчик 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)
Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 3, УНФ 3 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.
27572 руб.
18.02.2016 209225 686 559
Почему такой отзыв?
В планах в этой же статье описать КД 3.1.5. Описание для КД 3.0 в каждом абзаце разместить рядом, спрятанное в свёрнутом блоке.
Каша будет ещё больше, если все подряд читать.
Или другую статью писать? Вот в чем вопрос.
При получении образования выше школьного преподаватели учат студентов в первую очередь уметь искать недостающую информацию.
>Учитесь у низамутдинова
Подумаю над предложением. пмсм учитель достоин того, чтобы его фио писали с большой буквы. )
Цитата Ильяса:
Очевидно одно, статья не для новичков в конвертации. Понимаю, уметь объяснять так чтобы было понятно ВСЕМ и без лишних поисков, которые могут породить еще больше вопросов может не каждый. Искать конечно надо многое самому, не спорю. Я изначально говорил про саму манеру вашего изложения. Ладно, проехали)
Есть два варианта решения подобной задачи
Гилевский курс подсказывает еще вариант и еще более универсальный: использовать свойство формата ДополнительныеРеквизиты в номенклатуре да и во всех др справочниках тоже оно есть в EnterpriseData_1_4_4
Курс я проходил, информации там конечно же больше и рассчитано это примерно на пару недель неторопливого изучения.
Так уж и быть поправлю, что есть несколько вариантов решения. Подробно описывать всё, наверное нецелесообразно.
Пока думаю нужно ли усложнять, т.к. после старта специалист может сам во всём разобраться.
Как вариант, можно в здесь комментариях описать подробности.
(4)
Конфликтов не возникнет. Главное, чтобы у обеих баз был общий формат.
Если БСП конфигурации не поддерживает формат 2, можно 1 оставить. Но если там захотите формат 1.10 использовать, некоторые процедуры в БСП нужно будет поправить.
То ли дело в КД3. Написал выгрузку в простой формат ED и пусть конечная база сама разбирает ))
Саму КД3 мне пришлось допилить - генерирует готовую обработку.
Можно выделить несколько элементов ПКО и т.п. и включить в другие конвертации. Исправляешь код в одной конвертации, автоматом изменения распространяются на другие аналогичные.
Это конечно не большая доработка, но все же.
А вот КД3 - это дно. У меня была задача чуть-чуть поменять логику обмена реализациями между УТ и БП. Вот тогда мне стало ясно, что даже маленькое изменение скорее всего затронет код модуля МенеджерОбменаЧерезУниверсальныйФормат в обоих конфигурациях, и тут профит универсальности растворяется.
При этом правил обмена между УТ и БП для КД2 уже нет и по-человечески сделать доработку не получится. Ох, как же у меня бомбило тогда.
Нет проблем.
Тут автор лукавит, либо не до конца разобрался. У нас именно такой пример как и описано, только не все так радостно, после очередного обновления БП 3 из нее убрали поддержку формата 1.1 и БП при загрузке ругается что формат обмена данными 1.1 не поддерживается и на этом весь обмен и заканчивается.
В примере УТ 11.3 не случайно. Проблема с поддержкой формата в УТ 11.1 решаема, чем собственно я и занимаюсь.
ок. Укажу в статье один из подобных минусов. Несколько лет можно быть спокойным, а потом обновить формат в базе на последний и ещё на несколько лет успокоиться. ))
1С декларировали что поддержка младших форматов будет и в этом основной плюс КД3. Но сами же против этого принципа пошли.
Если судить по обращениям ко мне, этой проблемы не видно совершенно. У меня есть продукт для УТ 11.1. После того как в БП 3 сделали такую засаду, никто не обращался. Видимо все как-то сами справляются.
Спасибо за информацию. Задавайте вопросы, глядишь ещё на пол страницы наберётся о чём написать. Ответы у меня есть, вопросы собираются.
Где-то в коде указать что есть такой-то формат 1.3, 1.4, 1.5, например.
Загрузить правила из УТ 11.1 в КД3, проанализировать изменения в формате и доработать правила для совместимости с новым форматом. Готовые правила вернуть обратно. В некоторых местах нужно будет поправить БСП - исправить критические ошибки. И всё, делов-то ;) Кое что скоро опишу в статье. ))
Вообще имхо эта КД3 бред и изврат чудовищный. Если ради крошечной правки обмена надо курочить типовые, исправлять баги БСП и внешек, то какая уж к чертям универсальность. Почитал про всякие копипасты модулей туда-сюда. Ваще зашибись.
Совершенно не понимаю, как делать код, отрабатывающий на загружающей стороне. В КД2 это события стороны загрузки, а тут что, менять модуль загружающей конфы?
Спасибо за труд, но авторов сего "изделия" хочется приложить чем-нито тяжёленьким. Себе они жизнь облегчили, на остальных наплевали.
Нелогично. Зачем заботится о целостности УТ 11.1 и боятся снять её с поддержки, если она не обновляется? Если нужно сохранить конфигурацию на 99%, то у меня есть такой вариант. Если нужен бесплатный совет как сделать самому, то проще всего снять с поддержки и доработать... Крошечную правку в БП 3 можно внести без снятия с поддержки.
Ну оставили бы КД2, пришлось бы каждый месяц дорабатывать правила. Было бы лучше? А так как минимум на год универсальный формат текущей версии будет поддерживаться и всё это время не нужно дорабатывать УТ 11.1.
Вся гадость в том, что этот движок намертво завязан на БСП, а значит, при каждом её обновлении придётся прыгать и с нетиповыми тоже, и дело не в форматах и xdto, а в коде. Он просто рискует не заработать при старой БСП. Где я неправ?
Вообще имхо эта КД3 бред и изврат чудовищный. Если ради крошечной правки обмена надо курочить типовые, исправлять баги БСП и внешек, то какая уж к чертям универсальность. Почитал про всякие копипасты модулей туда-сюда. Ваще зашибись.
Совершенно не понимаю, как делать код, отрабатывающий на загружающей стороне. В КД2 это события стороны загрузки, а тут что, менять модуль загружающей конфы?
Спасибо за труд, но авторов сего "изделия" хочется приложить чем-нито тяжёленьким. Себе они жизнь облегчили, на остальных наплевали.
поддерживаю
мне недавно например заказчик просил перевести на битрикс, а за обновление зажал бабло и до сих пор сидит на самописном сайте с самописным обменом с копеечной конверсией этого самого сайта :)))
а другому заказчику который исправно платит автоматизировал всё так, что он даже сам не верит , что из затрачиваемых каждый день 16-18 часов на 1С и сайт он теперь 2-3 часа тратит, а остальное время занимается управленческими вопросами которые тоже со следующей недели буду автоматизировать и соответственно и прибыль выросла пока почти в 2 раза, но дальше будет больше ;), а жмот как говорится платит дважды и без копья сидит :)))
Кто-то настраивал обмен КД3 в КА1? Есть обработки по выгрузке данных, в них нет XDTO пакета. Выгрузка формируется с ошибками. Можно ли из модуля обработки получить недостающие файлы?
использовать типовой обмен + остальное дополнительными обработками переносить в фоновом режиме + что не получится автоматом дополнительными обработками переносить вручную опять-таки дополнительными обработками
Используя КД2 вместе с обработкой УниверсальныйОбменДанными я мог делать выгрузку напрямую через СОМ. Выгрузка занимала времени = время выгрузки/загрузки данных + время СОМ подключения. Выгрузка данных шла по расписанию.
Теперь в КД 3 мне приходится писать 2 правила: 1) источник - объектный слой EnterpriseData и 2) объектный слой - Приемник.
Вопросы:
1) не увеличивается ли время общей выгрузки данных при КД 3?
2) поскольку пакеты xdto могут содержать довольно неожиданный состав свойств , то приходится при написании правил не только хорошо разбираться в метаданных источника и приемника , но волей не волей курить содержание xdto, а главное писать дополнительно конвертации из метаданных в этот объектный слой. Почему 1C не сделала конструктора или книги с описанием назначения свойств пакетов xdto ? Или описание есть?
Пока КД 3 местами вызывает у меня недоумение своей недоделанностью.
У меня стойкое ощущение, что 1С пытается через разные редакции ED нащупать путь к полноценной шине. Только как обычно ставит опыты на нас.
В КД2 тоже пишутся 2 правила - чтобы выгрузить из базы источника чтобы загрузить.в базу приемника. Одно правило на пару баз. И бесчисленное количество комбинаций правил на каждый вид конфигурации и релиз.
В КД3 одно правило на одну базу.
1) Даже если com обмен, всё равно нужно, выполнить те же операции, например, выгрузить данные запросом из документа в каком-то виде и загрузить их. Большой разницы нет. Специально не сравнивал, но по ощущениям выгрузка из УПП идёт быстрее штатной выгрузки. Вероятно это не от формата зависит, а от замудрённости типовых алгоритмов подготовки данных для выгрузки.
2) Есть описание. Есть сравнение разных форматов. В КД3 смотрим на дерево формата, там есть вся информация по типам.
В типовых правилах появилась функция ЗначениеВИнструкциюПКО - помогает быстро подобрать нужную инструкцию по типу данных. Конструктор бы не помешал. Если его пока нет это не недостаток формата, это пока недостаток инструмента для работы с форматом ED.
Мне пока не понравилась сортировка строк ПКС в ПКО. Сидишь, раскладываешь ПКС в том же порядке как они в дереве формата, при выгрузке в правила они как попало расположены. Загружаешь обратно из правил в КД3, порядок не тот.
таково развитие любых систем - чтобы внешний интерфейс сделать универсальным, удобным, дружелюбным, внутренний интерфейс алгоритмов и взаимосвязей должен быть сложным. почувствовал это на собственных разработках для клиентов - сейчас перестал делать универсальные алгоритмы и механизмы, теперь только решаю конкретные узкоспецифичные задачи, но уже и другим предложить нельзя - не подходит. когда система развивается, нет времени писать описания...так что уповаем на первопроходцев и форум Инфостарт.
Опять же в КД 2.1 все как то проще.
Но это дело привычки. Опять же возникает вопрос : почему нельзя было сделать конструктор для КД 3.0 загрузки ?
А для загрузки правил в КД3 наверное когда-нибудь сделают одну кнопку. Себе сделал такую )) Подключается к базе, вытаскивает модуль, метаданные конфигурации, правила всех форматов и загружает всё в КД3.
Если конфигурация (КД3) неудобная это не значит что идея с ED плохая. Просто инструмент не готов.
Не все так грустно :)
У меня несколько раз так было, что делал тяжелую выгрузку, а при попытке загрузить в базу-приемник оказалось, что там с последним обновлением что-то ломалось. Тогда можно открыть файл выгрузки, исправить в коде ошибку и при повторной попытке успешно загрузить информацию в базу-приемник. И не нужно было в КД2 делать повторную выгрузку исправленных правил и повторно тратить время на выгрузку одних и тех же данных из базы-источника. Так что "Быстрое исправление ошибки" вполне даже доступно. А если пользоваться средствами работы с XML-файлами (я предпочитаю FirstObject XML Editor), то можно даже данные по быстрому исправить :)
А исправить код КД3 в отладчике может любой. Даже не зная КД3 можно отладить участок с ошибкой и она не будет повторяться.
P.S. Очевидно, что править файл выгрузки можно, но для закрытия вопроса в будущем нужно исправить ошибку в правилах обмена.
Поэтому можно считать мнение автора статьи его личным мнением. Можно не соглашаться, у автора такое видение ситуации. ;)
Каждый случай уникальный кто-то 10500 раз правил файл выгрузки КД2 и уверен что это намного проще, чем связываться с КД3.
Любой программист первым делом ставит в конфигураторе остановку по ошибке, запускает в предприятие обмен и попадает на строку с ошибкой. Исправить ошибку в этой ситуации мне кажется проще прямо в коде конфигуратора. Опытный же программист может вспомнить, что это исправляется правкой файла выгрузки. Гуру не запуская конфигуратор по строке ошибки открывает файл и моментально позиционируется на проблемное место. )) В этом случае согласен с Вами...
За прошедший месяц здесь был один вопрос, который стоит рассмотреть - как восстановить синхронизацию УТ 11.2, УТ 11.2 с БП 3.0 через ED.
По другим каналам часто спрашивают как изменить правила регистрации.
Если кратко, то выгружаем правила регистрации из настроек в файл, загружаем в КД2, открываем документ, в "Обработчики событий - Перед обработкой" в первую строку вставляем "Отказ = Истина;" Выгружаем правила регистрации из КД2 в файл, загружаем в настройку обмена.
Потом опишу это в статье с картинками.
Я выгрузил стандартные правила регистрации в КД2, удалил в них все кроме 1 и загрузил обратно в план обмена по универсальному формату.
Флаг в настройках отправки НСИ оставил "выгружать всю" (не вижу других вариантов).
Потом сделал свои правила для отправки (только для 1 справочника) и заменил обработчик.
Однако в плане обмена по прежнему регистрируются все справочники и соответственно при синхронизации ошибка - "нет ПОД" для выгружаемого объекта.
Что не так, почему загруженные правила игнорируются ? Неужели нужно в типовых для всех объектов ставить Отказ = Истина ?
Ivan Panteleev:
Формат используется для синхронизации данных между программными продуктами самой фирмы «1С». На настоящий момент этот формат поддерживают следующие продукты:
«1C:ERP Управление предприятием 2.0»,«Бухгалтерия предприятия», редакция 3.0,«Бухгалтерия предприятия КОРП», редакция 3.0,«Розница», редакция 2.0,«Управление торговлей базовая», редакция 11,«Управление торговлей», редакция 11,«Зарплата и управление персоналом КОРП», редакция 3.
А "1C : Управляние холдингом" то поддерживает объектный слой EnterpriseData ???
Повышение абстракции до бизнес-сущностей - направление правильное, но увы, любая абстракция "потечет" рано или поздно. Как с этим справляется КД 3 мне пока не очень понятно. В то время как в шине - построенной на базе КД2 - можно было бы легко повышать уровни: до бизнес-сущностей, до связанных кластеров бизнес-сущностей, до чего угодно! Также становились доступными распределенные транзакции и т.п.
Причем, вещь-то очевидная. Но у Сами Знаете Кого есть принцип "Изучать чужой опыт, но думать своей головой", да.
Принцип отличный, но, увы, первая часть его, зачастую, игнорируется наглухо.
//Эта процедура выполняет преобразование данных
Процедура ПреобразоватьДанные(ПараметрыДанных)
//
КонецПроцедуры(41) Вы оказались неправы во всём.
Гарантированный срок поддержки формата указан здесь.
* БП снимать с поддержки не нужно. Для изменения кода общего модуля используется расширение.
* БСП синхронно обновлять в обеих базах не нужно.
На примере УТ 11.1 От БСП требуется принять файл и отправить его. БСП может быть древней версии 2, например. В БП 3 БСП 4-й версии и это никак не мешает синхронизации. Нет никакой жесткой привязки.
Обмениваться можно с чем угодно, главное, чтобы файл был в универсальном формате версии не ниже поддерживаемой конечной базой 1С. Таким образом БП 3 может обмениваться даже с железным холодильником, регистрировать приход и расход продуктов если холодильник предоставит соответствующий xml файл.
Расширение не предлагайте, не смешите. Я говорю о серьёзных надёжных коммерческих продуктах, а как себя ведёт кривая глючная поделка, называемая "расширением", я, уж поверьте, прекрасно убедился на своём опыте, и больше клиентам подкладывать такую свинью не намерен, и так на компанию уже в суд подавали. Нарасширялся уже, ещё во времена 8.3.6-8.3.7, хватит. Ну и вообще, я про общий модуль говорю, а не про формы. Какое нафиг расширение?
Я не про синхронно обновлять, а про исправлять ошибки, при которых вся эта замечательная механика косячить будет. Сами же в публикации указываете - тут поправь, там подчисти, итд.
Идея КД3 мне ясна, а вот воплощение, как это в последние годы у 1С водится, странноватое.
Не желаете расширение, воспользуйтесь штатным функционалом. К узлу подключается внешняя обработка с правилами от КД3. Чем это хуже КД2, где так же правила подключаются отдельно? Так же стоит посмотреть на возможности платформы 8.3.10 и выше - там можно дорабатывать общие модули в расширении.
Затраты на настройку синхронизации разовые. Если ошибки исправлены, то как писал выше гарантируется работа синхронизации более года на примере обмена УТ 11.1 - БП 3.0.
Кто даст гарантию, что сегодня внедренный обмен на КД2 будет работать год при обновлении БП 3.0? Это даже 1С не гарантирует.
И я не спорю что лучше КД2 или КД3. У каждого продукта своя ниша и нужно уметь пользоваться тем, что есть. Другого не дано. ;)
чувствую в Якове прожженного бывалого 1сника - уже не верящего в чудеса новаторства 1с и местами утомленный от постоянного изменения интерфейсов
Яков, вы не одиноки в своих умозаключениях... но прогресс не умолим
Про внешнюю обработку внятно не расписано, можете указать ссылку? Везде только упоминания вскользь о такой возможности.
Максим, да я знаю прекрасно, что написано про 10-й релиз и общие модули. Вы сами-то попробуйте, а потом расскажете) И я вам посочувствую. Не работает оно нормально. Типовые общие модули эта хрень заимствует через раз, содержимое их то режет, то не видит, то не компилит; свои вообще при попытке сохранить вызывает падение платформы. Ага, щастье жизни.
Почитайте: и вам сразу станет ясно, стоит ли связываться с этой дрянью.
Разовые затраты? Ха-ха. Старая песня от 1С. На самом деле послезавтра появится какая-нибудь новая супер-идея, треть БСП под неё срочно переколбасят, и будете вы пилить её во всех своих конфах. Было уже многократно, заходите в личку, расскажу)
Вы можете тешить себя мыслью, что КД2 и КД3 разные вещи. А потом всем нам ультимативно скажут, что КД2 использовать нельзя. Ну, например, из-за повышенной уязвимости при их применении; или что клиент-серверное взаимодействие утомляется, или что очередной браузер этого потребовал. Отмазка будет любая. И всех добровольно-принудительно погонят на КД3, ибо так "правильно". Это уже было, и с обычными/"управляемыми" формами, и с обычными/"немодальными" окнами. Никто, конечно, не запрещает, но почему-то больше низя.)))
Проблемы с 1С решаю по мере возникновения. Всё написанной мной выше подтверждается опытом. ;) Расширения иногда кое у кого глючат, согласен. 1С выбрала этот путь, придётся ждать когда всё наладится. КД2 будет работать до тех пор, пока не запретят запуск внешних обработок. Маловероятно что от КД2 откажутся.
По поводу устойчивости КД3 на испытание временем. Например, задачу синхронизации УТ 10.3.8 и БП 3.0 решил ещё в 15-м году. Работает до сих пор. Обращались в начале 2017-го, обновил во внешней обработке формат на 1.3. На данный момент в обработке требуется заменить макет ExchangeMessage и ничего более. Конфигурация УТ с 15-го года не меняется. БП 3.0 мы не трогаем, клиент использует типовую.
Напомню, что для примера синхронизации УТ 11.1 и БП 3.0 менять правила в БП 3.0 не требуется. Это нужно лишь для обмена нетиповыми данными и исправления ошибок, если они есть.
Если изначально грамотно всё впаять, то потом доработки минимальны, у меня несколько конвертаций годами работают и не чихают.
МенеджерОбменаЧерезУниверсальныйФормат не нужно из УТ 11.4 выдирать, оставляете тот что есть.
Добавляете новый xdto пакет в конфигурацию, в БСП в коде указываете на него и запускаете обмен. По тексту ошибки можно понять требуется ли доработка правил.
Это описано в документации на БСП. Это рассказывается на курсах по КД3. От КД3 уже не отвертеться. Всем, кто занимается обменами нужно изучить этот вопрос. ))
Это нифига не описано в документации по БСП. Всё перекопал, что касается доступных официальных источников. А почти все курсы говорят только о БСП, начиная с 2.3.2, а не с моей 2.3.1. Так что не надо дезинформации, ага. Придётся каждый раз мучительно копать и обновлять БСП. Нахрена такое "удобство", простихосспади...
В старых БСП нет этой синхронизации. Так что это не дезинформация.
Вы же писали что у Вас УТ 11.2?. А теперь вдруг другая крайность.
Если в древней УТ 11 нет ED, то самый простой выход - купить у меня обработку для УТ 11.1, но это наверное не для этого топика. ))
Если "бесплатно", нужно внедрять новое БСП. Последствия непредсказуемые. Для этого действия действительно нет описания как частично обновить БСП, сделав винигрет разных версий.
Какая крайность? У меня 11.2, которую тянули через несколько фрагментарных обновлений. Никаких крайностей, суровая правда жизни.
Если "бесплатно", нужно внедрять новое БСП. Последствия непредсказуемые. Для этого действия действительно нет описания как частично обновить БСП, сделав винигрет разных версий.
Ну как всегда. Как доходишь до конкретных вопросов, так автор публикации либо намекает на денежку, либо заявляет, что на самом-то деле описаний нету) Зачем тогда было громко заявлять, что
Вот, пожалуйста, ссылки для БСП 2.2.
По этой ссылке читаем текст:
Пример реализации функций можно посмотреть в демонстрационной конфигурации в плане обмена _ДемоСинхронизацияДанныхЧерезУниверсальныйФормат.
Информации полно. Если решать узкую задачу - наладить синхронизацию в ED для старой базы и нет желания штудировать маны по внедрению БСП 2.2, 2.3, 2.4 и хочется всё и сразу, то...
«Быстро, качественно, недорого». Выбирайте первый или третий вариант. Второй я уже выбрал - качественно. ;).
Процедура ДобавитьПКО_Документ_РеализацияТоваровУслугВПеремещениеТоваров_Отправка(ПравилаКонвертации)
ПравилоКонвертации = ОбменДаннымиXDTOСервер.ИнициализироватьПравилоКонвертацииОбъекта(ПравилаКонвертации);
ПравилоКонвертации.ИмяПКО = "Документ_РеализацияТоваровУслугВПеремещениеТоваров_Отправка "; //строка >50 символов
ПравилоКонвертации.ОбъектДанных = Метаданные.Документы.РеализацияТоваровУслуг;
ПравилоКонвертации.ОбъектФормата = "Документ.ПеремещениеТоваров";
ПравилоКонвертации.ПриОтправкеДанных = "ПКО_Документ_РеализацияТоваровУслугВПеремещениеТоваров_Отпр авка_ПриОтправкеДанных";
В данном примере длинная строка с именем ПКО при записи в ИмяПКО обрезалось до 50 символов, в итоге ПКО не находилось в этой таблице по этому имени и не отрабатывало совсем.
Так совпало что отрезался хвостик "_Отправка", и в обрезанном виде не бросалось в глаза.
Причина бага нашлась в общем модуле ОбменДаннымиXDTOСервер
Функция ТаблицаПравилКонвертации(XMLСхема, МенеджерОбмена , НаправлениеОбмена, ПравилаОбработкиДанных, ВерсияФорматаМенеджераОбмена)
// Инициализация таблицы правил конвертации.
ПравилаКонвертации = Новый ТаблицаЗначений;
ПравилаКонвертации.Колонки.Добавить("ИмяПКО", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(50))); //строка с ограничением в 50 символов
P.S. Заглянул в свежую БП 3.0 - там тоже присутствует этот баг.
А вот фишка в том, что приведённая Вами ссылка требует авторизации, логина-пароля-все дела) Просто так это посмотреть не получится.
Так что "информации полно" - это громковато сказано. Желание штудировать-то есть, да общедоступных материалов маловато)))
И для создания серьёзных надёжных коммерческих продуктов, о которых Вы выше писали, не плохо было бы иметь доступ к документации )) Любой массовый продукт 1С должен содержать в себе БСП, иначе это несерьёзный продукт как мне кажется. ;)
(57) Для конечного пользователя технология легкая - не нужно греть голову с бесконечными версиями правил обмена. Для ED нужны правила для текущей конфигурации нужного формата, вариантов меньше чем если подбирать правила КД2.
Для программистов - другой вопрос. Излагать весь курс по КД3 в общедоступном месте конечно же не вариант да и никто не читает длинные статьи. В сжатом виде по возможности напишу, основываясь на вопросах.
Если вернуться к ED и КД3, то они тесно связаны с БСП. Поэтому если какое-то решение желает обмениваться с типовыми базами 1С, нужно либо внедрить туда БСП, либо изобрести свой велосипед. А чтобы знать как сделать лучше, желательно понять как это сделано в БСП. ))
{Обработка.ПомощникИнтерактивногоОбменаДанными.Форма.Форма.Форма(2600)}: Ошибка при вызове метода контекста (ЗаполнитьЗначенияСвойств)
ЗаполнитьЗначенияСвойств(ЭтотОбъект, РезультатВыполненияМетода,
по причине:
Недопустимое значение параметра (параметр номер '2').
Где искать причину ошибки?
Без внешней обработки с правилами ошибка есть? Если да, попробуйте в настройках обмена обеих баз выключить архивирование, удалите файлы из папки для обмена и повторите синхронизацию. Это какой-то баг 1С - теряются файлы после извлечения из архива.
Можно статью расширить FAQ. Встречающиеся ошибки и способы их решения.
Просьба делиться информацией.
Не так много желающих собрать вопросы и подготовить ответы. Пользуйтесь моментом.
Если так нельзя, останется вариант создать свой план обмена и доработать в расширении типовой модуль получения зарегистрированных к выгрузке объектов. Добавить к типовой выборке выборку из другого плана обмена...
Выборка = Запрос.Выполнить().Выбрать();
по причине:
{(295, 2)}: Таблица не найдена
и что с этим делать, не допиливать же обработку эту. не серьёзно как-то костыли лепить
КА 2.4.1.248
Расширение_ОбменБП: Значение контролируемого свойства Состав у объекта ПланОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат не совпадает со значением в расширяемой конфигурации, Ошибка проверки состава плана обмена СинхронизацияДанныхЧерезУниверсальныйФормат: свойства элемента Документ.ПринятиеКУчетуОС2_4 не совпадают в конфигурации и расширении
Каким образом вы добавили документ в план обмена?
На 8.3.11 экспериментов пока не проводил.
Чтобы вы посоветовали?
БСП и БП к сожалению не поддерживают подключение внешней обработки с правилами. Как это исправить описано в статье в абзаце Подключение внешней обработки с правилами к БП 3.0.52 и выше
УТ 11.4, КА 2.4 и ERP 2.4 пока ещё поддерживают.
Я на основе Вашей статьи делаю публикацию по переносу данных из 7ки в 8ку . Создал ПКО, делаю другие кассовые и банковские документы в ЕРП. Хочу сослаться на Вашу публикацию так как использую из нее приемы для создания документа «Расходный кассовый ордер». Потребуется настройка «Конвертации данных 3.0» для принимающей стороны (современной системы, в которую я переношу данные).
Придётся сделать такой механизм. ;)
Либо нужно в расширение устанавливать весь модуль, генерируемый в КД3 и подменять типовую функцию, где устанавливаются соответствия версии формата и модуля правил, если много доработок.
(157)
И еще момент, а как мне теперь сделать если у меня из торговли выгрузка в две разных бухгалтерии по двум совершенно разным правилам? с модулем легко, с расширениями *** невероятная
Да и вообще расширения сильно переоценены, обновлять их логику намного сложнее и соответственно сложнее избежать ошибок, по опыту годичного активного их использования принято решение все текущие доработки производить расширениями а в момент обновления переносить их на рабочую базу переоценив их полезность и актуальность. Естественно это касается базы снятой с поддержки по тем или иным причинам. Да и то если база не используется пользователями круглосуточно в некоторых случаях тоже лучше сразу менять конфигурацию. А расширения в основном оставим для клиентов с минимальными изменениями конфигураций.
Надо выгрузить правила синхронизации.
Открываю обработку \tmplts\1c\Conversion\3_0_5_3\Выгрузка правил синхронизации.epf
(предварительно закомментировав код в общем модуле ОбменДаннымиСервер
ПланыОбмена[ИмяПланаОбмена].ПриПолученииНастроек(НастройкиПланаОбмена);( ИмяПланаОбмена = "АвтономнаяРабота") , потому что выдает ошибку при открытии обработки)
Обработка открывается, в поле "номер версии формата" ничего не предлагается выбрать.
Кто знает, подскажите, из ЗУП 3.x вообще правила синхронизации выгружаются?
ВерсииФормата = Новый Соответствие;
//ОбменДаннымиПереопределяемый.ПриПолученииДоступныхВерсийФормата(ВерсииФормата); - там теперь пустая функция
ВерсииФормата = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена("СинхронизацияДанныхЧерезУниверсальныйФормат","ВерсииФорматаОбмена"); // эта что-то возвращает, но без соответствующего менеджера, правила загрузить не удаётся.В БСП той же версии все в норме. Зачем БСП в ЗУП испортили, непонятно.
В базе приемнике такое соответствие сработает. В Базе источнике - нужно проверять.
И как вариант в правилах источника, в ПКО Справочник_Номенклатура_Отправка все ПКС сделать "Используется алгоритм конвертации", в процедуре ПКО_Справочник_Номенклатура_Отправка_ПриОтправкеДанных заполнять программно ДанныеXDTO
Функция КомпонентыОбмена(НаправлениеОбмена)
…
ВерсииФормата = ПолучитьИзВременногоХранилища(АдресХранилищаВерсииФормата);
Если ВерсииФормата=Неопределено Тогда // часто встречающаяся необъяснимая ошибка
Следует использовать хранилище формы, простое хранилище живет 2 серверных вызова
АдресХранилищаВерсииФормата = ПоместитьВоВременноеХранилище(ВерсииФормата, ЭтаФорма.УникальныйИдентификатор);
Добавил общий модуль в расширение, прописал
&Вместо("ВерсииФорматаОбмена")
Функция EDм_ВерсииФорматаОбмена(Знач УзелИнформационнойБазы)Программа не заходит в эту функцию..
Первый раз открыла Конвертацию, начала изучать эту статью.
Цель - догрузить документы из ЗУП2.5 в ЗУП3.1,
при полном переносе данных, регистры перенеслись, документы - нет.
На 2-ом шаге застряла.
Обработка \tmplts\1c\Conversion\3_0_5_3\MD83Exp.epf
не подключается не к ЗУП2.5 не к ЗУП3.1
Проблем не обнаружено. Нужно открывать через главное меню. Файл-открыть.
В (103) уже размышлял по поводу выгрузки правил. Пока не нашел решения. В ЗУП зачем-то БСП изменили до нетипового состояния. Можно в самой 1С спросить и написать что они ответили, полезно будет всем.
Из ЗУП3.1 выгрузила только одну, так же как и в примере 1_3_8,
почему-то загрузилось в Конвертацию 3, три версии формата:1.2, 1.3, 1.4.
В дереве во всех них есть справочники, но в справочниках почему-то нет
справочника Сотрудники, а он же - один из основных в зарплатных конфигурациях. Зато есть склады, единицы измерения, упаковки, типы цен ;-)
EnterpriseData* нет в ЗУП25
получается Конвертацией 3 нельзя пользоваться для зарплатных конфигураций, переносить через COM или тексты с разделителями?
По зарплате есть такие объекты формата:
Справочник "Физические лица"
Справочник "Виды документов физических лиц"
Справочник "Виды работ сотрудников"
Справочник "Документы физических лиц"
Справочник "Должности"
Справочник "Способы отражения зарплаты в финансовом учете"
Зарплата и кадры, документы
Документ "Начисление оценочных обязательств по отпускам"
Документ "Отражение зарплаты в финансовом учете"
(125) ЗУП 2.5 не содержит в себе БСП и поэтому не совместима с EnterpriseData штатным способом. Теоретически можно сделать обработку, которая добавляет в ЗУП 2.5 возможность обмена в EnterpriseData.
Если Вам нужен разовый перенос всех данных из ЗУП 2.5 в ЗУП 3, то целесообразнее воспользоваться КД2.
Смысла регулярного обмена ЗУП - ЗУП я не вижу, это редко кому нужно. Видимо 1С тоже не видит в этом смысла. Для обмена ЗУП - БП, например, можно использовать КД3 в том объёме данных, который предоставляет формат.
Результат выгрузки из базы - это xml файл и не важно какими правилами КД2 или КД3 он подготовлен. Этот файл может быть отправлен через COM напрямую в базу или через каталог, например.
Придётся дорабатывать правила для обеих баз, участвующих в обмене.
Сделать можно примерно так.
Сотрудник выгружается в формат ED в справочник физ лиц, ФИО="Справочник.Сотрудники", в additionalinfo записываем остальные реквизиты сотрудника.
В правилах принимающей базы создаём два ПКО - для физлица и для сотрудников, в ПОД проверяем ФИО, если оно равно "Справочник.Сотрудники", соответственно меняем переменную ИспользованиеПКО для разрешения ПКО_Сотрудники и запрещения ПКО_физлица.
С документами аналогично.
Открываю ЕРП 2.4, запускаю "Выгрузка правил синхронизации.epf", выходит ошибка "Метод объекта не обнаружен (ПриПолученииНастроек)". Нашел откуда идет ошибка, при переборе планов обмена вызываются их методы "ПриПолученииНастроек", но первый план в конфигураторе "ИнтеграцияС1СДокументооборотом" оказывается не заполненым, модуль менеджера пустой.
В замере производительности можно глянуть выполняется ли обработка. Если нет и модуль в конфигурации не выполняется, значит расширение не работает.
Ещё один способ отладки внешней обработки - это использование обработки "Выгрузка загрузка Enterprisedata".
Как вариант можно в ПКО_Справочник_Контрагенты_Получение_ПриКонвертацииДанныхXDT
Не помню используются ли пустые значения для поиска.
Обычно в КД3 штатно добавляют несколько вариантов поиска. Первый - все ключевые поля, потом инн кпп, потом наименование...
Нашел на сайте ИТС информацию:
"Переход к следующему варианту осуществляется в двух случаях:
1. У загружаемого объекта не заполнено какое-либо из полей, которое указано в варианте поиска.
2. Вариант поиска не дал результата."
В типовой БП 3.0 при получении контрагента используются такие поля поиска:
Процедура ДобавитьПКО_Справочник_Контрагенты_Получение(ПравилаКонвертации)
...
ПравилоКонвертации.ПоляПоиска.Добавить("ИНН,КПП,ЭтоГруппа");
ПравилоКонвертации.ПоляПоиска.Добавить("НаименованиеПолное,ЭтоГруппа");
ПравилоКонвертации.ПоляПоиска.Добавить("Наименование,ЭтоГруппа");
...
Получается, что ИП-шник никогда не будет найден по ИНН (у него всегда КПП пустой), будет производиться поиск по наименованию? Это очень странно.
Буду тестировать этот вопрос. Более корректными видятся такие поля поиска:
ПравилоКонвертации.ПоляПоиска.Добавить("ИНН,КПП,ЭтоГруппа");
ПравилоКонвертации.ПоляПоиска.Добавить("ИНН,КПП");
ПравилоКонвертации.ПоляПоиска.Добавить("ИНН");
ПравилоКонвертации.ПоляПоиска.Добавить("НаименованиеПолное,ЭтоГруппа");
ПравилоКонвертации.ПоляПоиска.Добавить("НаименованиеПолное");
ПравилоКонвертации.ПоляПоиска.Добавить("Наименование,ЭтоГруппа");
ПравилоКонвертации.ПоляПоиска.Добавить("Наименование");Если не получится добиться корректного результата с такими полями поиска, буду "курить" ПКО_Справочник_Контрагенты_Получение_ПриКонвертацииДанныхXDT
Спасибо)
или в коде примерно там ПКО_Справочник_Номенклатура_Получение_ПередЗаписьюПолученных
Анализируем ДанныеИБ и ПолученныеДанные и программно что-нибудь делаем.
Целиком отменить перезапись можно так:
Если НЕ ДанныеИБ=Неопределено Тогда // Не замещать существующие объекты в приемнике при загрузке, а только создавать новые и заполнять их
ПолученныеДанные = Неопределено;
КонецЕсли;Если не перезаписывать реквизит, то масса вариантов на выбор или восстанавливать наименование или отменить перезапись всего объекта и перенести только нужные данные или воспользоваться процедурой "ЗаполнитьРеквизиты" из типовых правил.
В копилку странностей поведения типовых правил - из БП отвратительно работает с иностранными банками, SWIFT игнорирует при наличии а БИКом искренне хочет считать мифический национальный код, который ограничен 9 символами БИК, туда даже SWIFT не помещается
Нужно лишь в БП сделать правила для отправки. Правила для получения в БП есть.
Да, если нет в составе плана обмена, нужно туда включить и не забыть включить в подписки на событие. Или можно обойтись обработкой Выгрузка загрузка ED, чтобы не меняя конфигурацию выгрузить документ используя свои правила.
Пожелания принимаются, дополнение статьи будет.
Ну или
Процедура ДобавитьПКО_Документ_ПеремещениеТоваров_Получение(ПравилаКонвертации)
ПравилоКонвертации = ОбменДаннымиXDTOСервер.ИнициализироватьПравилоКонвертацииОбъекта(ПравилаКонвертации);
ПравилоКонвертации.ИмяПКО = "Документ_ПеремещениеТоваров_Получение";
ПравилоКонвертации.ОбъектДанных = Метаданные.Документы.ПеремещениеТоваров;
ПравилоКонвертации.ОбъектФормата = "Документ.ПеремещениеТоваров";
ПравилоКонвертации.ПриКонвертацииДанныхXDTO = "ПКО_Документ_ПеремещениеТоваров_Получение_ПриКонвертацииДан ныхXDTO";
ПравилоКонвертации.ПередЗаписьюПолученныхДанных = "ПКО_Документ_ПеремещениеТоваров_Получение_ПередЗаписьюПолуч енныхДанных";
ПравилоКонвертации.ВариантИдентификации = "ПоУникальномуИдентификатору";
Показатьпоменять на
Процедура ДобавитьПКО_Документ_ПеремещениеТоваров_Получение(ПравилаКонвертации)
ПравилоКонвертации = ОбменДаннымиXDTOСервер.ИнициализироватьПравилоКонвертацииОбъекта(ПравилаКонвертации);
ПравилоКонвертации.ИмяПКО = "Документ_ПеремещениеТоваров_Получение";
ПравилоКонвертации.ОбъектДанных = Метаданные.Документы.ПеремещениеТоваров;
ПравилоКонвертации.ОбъектФормата = "Документ.ПеремещениеТоваров";
ПравилоКонвертации.ПриКонвертацииДанныхXDTO = "ПКО_Документ_ПеремещениеТоваров_Получение_ПриКонвертацииДан ныхXDTO";
ПравилоКонвертации.ПередЗаписьюПолученныхДанных = "ПКО_Документ_ПеремещениеТоваров_Получение_ПередЗаписьюПолуч енныхДанных";
ПравилоКонвертации.ПослеЗагрузкиВсехДанных = "ОтложеннаяОбработка_ПеремещениеТоваров"; //Забыли, перепутали
ПравилоКонвертации.ВариантИдентификации = "ПоУникальномуИдентификатору";
Показать
По примерам своих публикаций убедился в том что люди после скачивания готовых практически боевых правил, не знают что с ними дальше делать, и глупые вопросы задают люди которые по 5-10 лет сидят на этом ресурсе
Соответсвенно весь код с AdditionalInfo - не работает. Пойду искать про ДополнительныеРеквизиты. Имеется конечно вариант снять с поддержки а базовый тип объекта в пакете указать вручную - но это уже не "универсальный формат"
В формате 1.6, в объекте формата "Документ.ОтчетКомиссионера" есть обязательный к заполнению реквизит "Контрагент", который дублируется в ключевых свойствах и в шапке.
Способ исправления:
//1) в ПКО оставить ПКС с контрагентом (без признака "Используется алгоритм конвертации");
//2) в обработчике ПриОтправкеДанных добавить код:
ДанныеXDTO.Вставить("Контрагент", ДанныеXDTO.КлючевыеСвойства.Контрагент);На просьбу добавить в состав плана обмена виды номенклатуры пока не отреагировали
Обработка распаковывается в файлы, подменяется общий модуль и собирается в обработку epf.
Планирую выложить расширение для КД3 с дополнительным функционалом.
Конфигурация "из коробки" сделана "на отвяжись", лишь бы было. Много чего не хватает. Например, как в КД2 переход на ПКО из ПКС и т.п.
Разбираюсь с обменом УНФ 1.6.7.63 и свежей БП 3.0. Никак не могу понять, можно ли с минимальными затратами сделать, чтобы из УНФ выгружалась НСИ только та, что содержится в передаваемых документах? Совсем не хочется перегонять десятки тысяч номенклатур, если используется по данной организации только несколько сотен. Причем со стороны БП есть такая настройка, а вот со стороны УНФ почему-то нет.
Пример:
Есть ГК Соседи из ИП Иванов с обособкой Иванова дочка и ИП Петров с обособкой Петрова дочка
Данные в 4 базах УТ.
Обмены: дочки папам выгружают все реализации один в один.
Папы меняются документами зеркально - Реализация приезжает в ПТиУ.
На КД 2 это было бы 2 обмена - "папа-дочка" и "Сосед-сосед".
На КД 3 вроде как правила одни - для выгрузки/загрузки в едином формате.
Как надо в правилах шаманить, чтобы на КД 3 такой обмен заработал?
Вариант 1. Выгружаем в ED один в один Реализацию в реализацию, на стороне загрузки есть ПОД, там решаем какое ПКО использовать для загрузки - реализацию или поступление. Соответствующие настройки можно привязать к узлу или к организации и т.п.
Вариант 2. Аналогично из настроек узла или базы или организации в ПОД решаем какое ПКО использовать для выгрузки. На стороне загрузки грузим один в один.
В этом случае получаются одни правила на все варианты обмена.
Где-бы узнать что это значит и какие планы у 1С? Доступ к партнерскому форуму имеется.
Понятно, что можно воспользоваться расширением, чтобы не менять конфигурацию. Но пока большинству непонятно куда засунуть код правил обмена.
Изучаю этот вопрос, деваться некуда, придётся найти решение. Не хотелось раньше времени демонстрировать "велосипед". Вдруг у 1С появится типовой вариант.
В выгрузках правил синхронизации в xml файлах этих правил и не хватает. Возможно сама обработка выгрузки работает некорректно? Хотя вносил в нее изменения как описано в статье. В чем может быть проблема?
ВерсииФормата = Новый Соответствие;
ВерсииФормата.Вставить("1.2", МенеджерОбменаЧерезУниверсальныйФормат);
ВерсииФормата.Вставить("1.3", МенеджерОбменаЧерезУниверсальныйФормат13);
ВерсииФормата.Вставить("1.4", МенеджерОбменаЧерезУниверсальныйФормат13);
ВерсииФормата.Вставить("1.5", МенеджерОбменаЧерезУниверсальныйФормат13);
ВерсииФормата.Вставить("1.6", МенеджерОбменаЧерезУниверсальныйФормат13);
Соответственно так и нужно загружать правила.
МенеджерОбменаЧерезУниверсальныйФормат13.
Изначально загружал только правила в формате 1.3 и выше с МенеджерОбменаЧерезУниверсальныйФормат13.
Если не используете этот формат, то не стоит заморачиваться и стремиться к идентичности с типовыми правилами.
Если есть отличия, можно их озвучить хотя бы некоторые. Есть вероятность что они из старого формата и в обмене никак не участвуют.
Либо я не все ошибки обработки опубликовал. ;)
например когда в типовой поменяется заполнение налоговых или еще каких утвержденных законодательством печатных форм которые через вереницу общих модулей заполняются!
Процедура ПКО_..._Получение_ПередЗаписьюПолученныхДанных(
Если НЕ ДанныеИБ=Неопределено Тогда // Не замещать существующие объекты в приемнике при загрузке, а только создавать новые и заполнять их
ПолученныеДанные = Неопределено;
КонецЕсли;Моя ситуация:
Обмен БП<-->УНФ. Счета на оплату создаются исключительно в УНФ. Переходят в БП. И по ним в БП уже разносят оплату.
Так вот такое платежи надо загружать. Тут все норм.
А вот если платеж был сделан и привязан к счету, которого нет в УНФ, то нужно отказаться от записи этого документа вообще.
В процедуре Получение_ПриКонвертацииДанныхXDTO
я анализирую эти заказы и ищу их в базе. и добавляю ссылку на заказа в ПолученныеДанные.ДополнительныеСвойства.
Затем в Получение_ПередЗаписьюПолученныхДанных
беру эту структуру и анализирую нужным мне образом.
Но нигде нет признака отказа от записи. Как это сделать?
Поле объекта не обнаружено (КЛюч)
Место в процедуре ЗаполнитьТаблицуПКС:
...
Для Каждого ДанныеПКСТЧ ИЗ СтрокаТаблицы.СвойстваТабличныхЧастей Цикл
ИмяТЧ = ДанныеПКСТЧ.КЛюч;
...
{ВнешняяОбработка.ВыгрузкаПравилСинхронизацииЧерезУниверсальныйФормат.Форма.Форма.Форма(88)}: Значение не является значением объектного типа (Получить)
КомпонентыОбмена.МенеджерОбмена = ВерсииФормата.Получить(Объект.НомерВерсииФормата);
Общий модуль ОбменДаннымиXDTOСервер
Процедура ED_ПолучитьВерсиюФорматаОбмена(ВерсииФормата, Знач УзелИнформационнойБазы)
Запрос = Новый Запрос(
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| СинхронизацияДанныхЧерезУниверсальныйФормат.ПутьКМенеджеруОбмена КАК ПутьКМенеджеруОбмена,
| СинхронизацияДанныхЧерезУниверсальныйФормат.ВерсияФорматаОбмена КАК ВерсияФорматаОбмена
|ИЗ
| ПланОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат КАК СинхронизацияДанныхЧерезУниверсальныйФормат
|ГДЕ
| СинхронизацияДанныхЧерезУниверсальныйФормат.ПутьКМенеджеруОбмена <> """"
| И СинхронизацияДанныхЧерезУниверсальныйФормат.Ссылка = &Ссылка");
Запрос.УстановитьПараметр("Ссылка", УзелИнформационнойБазы);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ИмяОбработки = Выборка.ПутьКМенеджеруОбмена;
ФайлОбработки = Новый Файл(ИмяОбработки);
Если НЕ ФайлОбработки.Существует() Тогда
Продолжить;
КонецЕсли;
Если НЕ ОбщегоНазначенияКлиентСервер.РежимОтладки() Тогда
ДанныеОбработки = Новый ДвоичныеДанные(ИмяОбработки);
АдресОбработки = ПоместитьВоВременноеХранилище(ДанныеОбработки);
Если ОбщегоНазначения.ЕстьЗащитаОтОпасныхДействий() Тогда
ИмяОбработки = ВнешниеОбработки.Подключить(АдресОбработки, , ,
ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений());
Иначе
ИмяОбработки = ВнешниеОбработки.Подключить(АдресОбработки);
КонецЕсли;
КонецЕсли;
МенеджерОбмена = ВнешниеОбработки.Создать(ИмяОбработки);
ВерсииФормата.Вставить(Выборка.ВерсияФорматаОбмена, МенеджерОбмена);
КонецЦикла;
КонецПроцедуры
&Вместо("ВерсииФорматаОбмена")
Функция ED_ВерсииФорматаОбмена(Знач УзелИнформационнойБазы)
ВерсииФорматаОбмена = Новый Соответствие;
ИмяПланаОбмена = "";
Если ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда
ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы);
ВерсииФорматаОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ВерсииФорматаОбмена");
ED_ПолучитьВерсиюФорматаОбмена(ВерсииФорматаОбмена, УзелИнформационнойБазы);
Иначе
ОбменДаннымиПереопределяемый.ПриПолученииДоступныхВерсийФормата(ВерсииФорматаОбмена);
КонецЕсли;
Если ВерсииФорматаОбмена.Количество() = 0 Тогда
Если ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не заданы версии формата обмена.
|Имя плана обмена: %1
|Процедура: ПолучитьВерсииФорматаОбмена(<ВерсииФорматаОбмена>)'"),
ИмяПланаОбмена);
Иначе
ВызватьИсключение НСтр("ru = 'Не заданы версии формата обмена.
|Процедура: ОбменДаннымиПереопределяемый.ПриПолученииДоступныхВерсийФормата(<ВерсииФорматаОбмена>)'");
КонецЕсли;
КонецЕсли;
Результат = Новый Соответствие;
Для Каждого Версия Из ВерсииФорматаОбмена Цикл
Результат.Вставить(СокрЛП(Версия.Ключ), Версия.Значение);
КонецЦикла;
Возврат Результат;
КонецФункции
ПоказатьМогли бы сделать в узле ссылку на доп обработки, которые подключаются штатно в предприятии. Тогда сервер сам бы правильно разрулил права.
Непонятно зачем сделали и сами же запретили использовать обработки с правилами для обработки "Выгрузка загрузка EnterpriseData". Даже выбор файла с правилами работает и потом сообщают, что 'Внешняя обработка отладки, загружаемая из файла на диске, не поддерживается.'. Ну так если нельзя, можно было просто заблокировать поле выбора файла. Эту проблему тоже можно исправить расширением - заменить в модуле обработку Функция КомпонентыОбмена( на работающий вариант из прошлых версий.
о, там оказывается еще и свой менеджер выгрузки можно подключать в режиме разработчика, круто
У меня 2 базы Бух 3.0 и 1 база УТ 11.4(две организации). Соответственно в УТ две синхронизации.
Версия формата: 1.3. Правила типовые с небольшими доработками.
Нужно сделать в УТ условие, в МенеджерОбменаЧерезУниверсальныйФормат, чтобы доработка работала только для обмена с Бух №1, а для Бух №2 не выполнялась.
Каким образом можно реализовать или куда смотреть?
Например есть строковый реквизит на узле ВариантНастройки
Чтобы не ломать типовые механизмы можно например доп сведение попробовать добавить к узлу.
В КД 2.0 - выгрузил правила отключил обработку выгрузки, загрузил обратно и все как надо работает.
ps.
Давно в планах мысль поделиться расширениями для разных конфигураций для подобных целей и для КД3. Может кто аватарку нарисует? Для "", а то их уже много одинаковых на разные публикации.
Выгружал из базы Розница, редакция 2.2 (2.2.9.20). Загрузил в конвертацию данных 3.0.5.3, сделал как описано в статье.
В КД выгрузил модуль менеджера обмена, как описано в разделе "Проверка корректности загрузки правил".
У меня отличие в отсутствии одной процедуры "ПКО_ПКО_АТТ_ОтчетОРозничныхПродажах_ПриОтправкеДанных"
Решил проделать тоже самое, только с базой УТ. У меня там еще больше больше отличий. Не пойму что не так?
Штатно и так выгружаются проведённые. За это отвечают правила регистрации. Вроде так было.
И если выгружается проведённый документ, то и так ясно, что он не помечен на удаление и проведён ;)
Чтобы дополнить этими реквизитами, без AdditionalInfo не обойтись.
УТ 11.4.6.174. Выгрузил конфиг, правила синхронизации. Загрузил в КД 3.0. Из КД 3.0 выгрузил во внешнюю обработку ("Сохранить модуль менеджера обмена"). Стандартные из общего модуля УТ тоже выгрузил во внешнюю. Сравниваю их, а они - не равны.
Разбираясь заметил интересную деталь, если запускать предприятие с ключом РежимОтладки то выгрузка проходит корректно. Оказалось, что неверно заполняется Значение в соответствии ВерсииФормата(см. картинку) в функции ПоддерживаемыеОбъектыФормата. В итоге в расширение пришлось добавить еще одну функцию
&Вместо("ПоддерживаемыеОбъектыФормата")
Функция РКМК_ПоддерживаемыеОбъектыФормата(ИмяПланаОбмена, Режим = "ОтправкаПолучение", УзелОбмена = Неопределено) Экспорт
ТаблицаОбъекты = Новый ТаблицаЗначений;
ИнициализироватьТаблицуПоддерживаемыхОбъектовФормата(ТаблицаОбъекты, Режим);
//ВерсииФормата = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ВерсииФорматаОбмена"); оригинал
ВерсииФормата = РКМК_ВерсииФорматаОбмена(УзелОбмена); //из расширения
Для Каждого Версия Из ВерсииФормата Цикл
Если СтрНайти(Режим, "Отправка") Тогда
КомпонентыОбмена = ИнициализироватьКомпонентыОбмена("Отправка");
КомпонентыОбмена.ВерсияФорматаОбмена = Версия.Ключ;
КомпонентыОбмена.МенеджерОбмена = Версия.Значение;
КомпонентыОбмена.XMLСхема = ФорматОбмена(ИмяПланаОбмена, КомпонентыОбмена.ВерсияФорматаОбмена);
ИнициализироватьТаблицыПравилОбмена(КомпонентыОбмена);
ЗаполнитьПоддерживаемыеОбъектыФорматаПоКомпонентамОбмена(ТаблицаОбъекты, КомпонентыОбмена);
КонецЕсли;
Если СтрНайти(Режим, "Получение") Тогда
КомпонентыОбмена = ИнициализироватьКомпонентыОбмена("Получение");
КомпонентыОбмена.ВерсияФорматаОбмена = Версия.Ключ;
КомпонентыОбмена.МенеджерОбмена = Версия.Значение;
КомпонентыОбмена.XMLСхема = ФорматОбмена(ИмяПланаОбмена, КомпонентыОбмена.ВерсияФорматаОбмена);
ИнициализироватьТаблицыПравилОбмена(КомпонентыОбмена);
ЗаполнитьПоддерживаемыеОбъектыФорматаПоКомпонентамОбмена(ТаблицаОбъекты, КомпонентыОбмена);
КонецЕсли;
КонецЦикла;
ЕстьАлгоритм = ОбменДаннымиСервер.ЕстьАлгоритмМенеджераПланаОбмена(
"ПриОпределенииПоддерживаемыхОбъектовФормата", ИмяПланаОбмена);
Если ЕстьАлгоритм Тогда
ПланыОбмена[ИмяПланаОбмена].ПриОпределенииПоддерживаемыхОбъектовФормата(ТаблицаОбъекты, Режим, УзелОбмена);
КонецЕсли;
Возврат ТаблицаОбъекты;
КонецФункции
ПоказатьПонять почему неверно заполняется значение в соответствии ВерсииФормата не получилось ((
Добавил в табличную часть документа новый реквизит (справочникСсылка) не могу зарегистрировать элементы этого справочника на обмен.
И в любом случае этот вид справочника должен быть в составе плана обмена и в подписках.
Ручная регистрация не должна работать, если не ошибаюсь.
Процедура ЗагрузитьПКО()
...
// Вариант идентификации - особая логика.
Если ТекПКО.ИспользоватьДляПолучения Тогда //ED
ТекПКО.ВариантИдентификации = Перечисления.ВариантыИдентификацииОбъектов[СтруктураАтрибутов.ВариантИдентификации];
КонецЕсли;Если допиливать правила, где указана галка отправить, то сохранить их не дает пока не заполнишь реквизит "ВариантИдентификации".
А он на форме ПКО виден, только если поставить галку получать или отправить и получать.
Далее нужно выбрать какой-то вариант вручную заполнял "Сначала по УИД, потом по полям поиска".
Проблема была в том что, если это условие не дописать, то вариант идентификации мог быть пустой и правила вообще не грузились...
ВариантИдентификации = ПредопределенноеЗначение("Перечисления.ВариантыИдентификацииОбъектов." + СтруктураАтрибутов.ВариантИдентификации);
Если Не ЗначениеЗаполнено(ВариантИдентификации) Тогда
ВариантИдентификации = ПредопределенноеЗначение("Перечисления.ВариантыИдентификацииОбъектов.ПоУникальномуИдентификатору");
КонецЕсли;
ТекПКО.ВариантИдентификации = ВариантИдентификации;А вот с таким кодом этот реквизит будет всегда заполнен и проблем с редактированием элементов не возникнет.
Хотя возможно проблема возникла еще раньше, когда заполнялась структура "СтруктураАтрибутов"?
Посмотрел по коду, действительно проблема возникла еще раньше. Когда мы выгрузили файлы "PKO.xml" в частности, то там много где указан текст
Поэтому и ошибку выбивало. Надо смотреть почему так вышло...
Посмотрел...
В модуле "МенеджерОбменаЧерезУниверсальныйФормат" есть процедура "ЗаполнитьПравилаКонвертацииОбъектов" и там где НаправлениеОбмена = "Отправка" тихий ужас.
И у всех наверно процедур нет заполнения реквизита "ВариантИдентификации" в структуре "ПравилоКонвертации". Что по итогу и дает проблему.
Посмотрел в конфигураторе Значение заполнения = "ПоУникальномуИдентификатору".
Выходит, если вручную создавать ПКО, то этот реквизит будет заполнен, но похоже разработчики 1С все это генерировали программно и забыли про него.
Как итог предложенный код будет решением проблемы.
увидел такую доработку:
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) //ED
Если НЕ ЭтотОбъект.ИспользоватьДляПолучения И НЕ ПроверяемыеРеквизиты.Найти("ВариантИдентификации")=Неопределено Тогда
ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("ВариантИдентификации"));
КонецЕсли;
КонецПроцедурыВидимо забыл отразить в статье. Будет поправлено.
// УТ 10.3 ПКО_Справочник_Файлы_Отправка_ПриОтправкеДанных
Если СтекВыгрузки.Количество() > 1 Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(ДанныеИБ.Объект)=Тип("СправочникСсылка.Номенклатура") Тогда
ВладелецФайла = Новый Структура("Значение, ИмяПКО", ДанныеИБ.Объект, "Справочник_Номенклатура_Отправка");
КонецЕсли;
ДанныеXDTO.Вставить("ВладелецФайла", ВладелецФайла);
Если ДанныеИБ.ВидДанных=Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение Тогда
ХранимыйФайл = Base64Строка(ДанныеИБ.Хранилище.Получить().ПолучитьДвоичныеДанные());
Иначе
ХранимыйФайл = Base64Строка(ДанныеИБ.Хранилище.Получить());
КонецЕсли;
ДанныеXDTO.Вставить("ХранимыйФайл", ХранимыйФайл);
РасширениеИмениФайла = ОбщегоНазначенияКлиентСервер.ПолучитьРасширениеИмениФайла(ДанныеИБ.ИмяФайла);
Если ПустаяСтрока(РасширениеИмениФайла) Тогда
Если ДанныеИБ.ВидДанных=Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение Тогда
РасширениеИмениФайла = "jpg";
Иначе
РасширениеИмениФайла = "tmp";
КонецЕсли;
КонецЕсли;
ДанныеXDTO.Вставить("Расширение", РасширениеИмениФайла);
Если ЗначениеЗаполнено(ДанныеИБ.ТекстФайла) Тогда
Описание = ДанныеИБ.ТекстФайла.Получить();
Если НЕ ПустаяСтрока(Описание) Тогда
ДанныеXDTO.Вставить("Описание", Описание);
КонецЕсли;
КонецЕсли; ПоказатьВопросы |
|---|
| 1. Не корректно работает обработка \tmplts\1c\Conversion\3_0_5_3\Выгрузка правил синхронизации.epf
Процедура формы обработки "ПриСозданииНаСервере" устарела и для новых конфигураций код будет выдавать ошибку. Прикрепил вариант обработки из коробки и после доработки. После доработки файлы правил успешно выгрузились. 2. Далее возникла проблема с загрузкой этих правил через обработку конфигурации "ЗагрузкаПравилСинхронизацииИзФайлов" В форме обработки есть процедура "ЗагрузитьПКО", пришлось ее мофифицировать так: // Основная форма обработки ЗагрузкаПравилСинхронизацииИзФайлов
// До внесения изменений:
// Процедура загружает правила конвертации объектов
&НаСервере
Процедура ЗагрузитьПКО()
...
ЗаполнитьЗначенияСвойств(ТекПКО, СтруктураАтрибутов);
// Вариант идентификации - особая логика.
ТекПКО.ВариантИдентификации = Перечисления.ВариантыИдентификацииОбъектов[СтруктураАтрибутов.ВариантИдентификации];
ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда // Запись загруженного ПКО.
...
// Изменения помечены "//ED"
// Процедура загружает правила конвертации объектов
&НаСервере
Процедура ЗагрузитьПКО()
...
ЗаполнитьЗначенияСвойств(ТекПКО, СтруктураАтрибутов);
// Вариант идентификации - особая логика.
Если ТекПКО.ИспользоватьДляПолучения Тогда //ED
ТекПКО.ВариантИдентификации = Перечисления.ВариантыИдентификацииОбъектов[СтруктураАтрибутов.ВариантИдентификации];
КонецЕсли;
ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда // Запись загруженного ПКО.
... Показать3. Пункт 2 порождает следующую проблему. При редактировании правила конвертации объекта только с галочкой использовать для отправки, на форме не виден реквизит "ВариантИдентификации". Согласно пункту 2 он будет пустой. А в справочнике "ПравилаКонвертацииОбъектов" этот реквизит обязательный для заполнения и если создавать элемент вручную, то "ВариантИдентификации" будет заполнен значением "ПоУникальномуИдентификатору". Выводы: а. Доработать справочник "ПравилаКонвертацииОбъектов", чтобы не было проверки на заполненность реквизита "ВариантИдентификации", если только реквизит "ИспользоватьДляОтправки" равен "Истина". б. Пункт 2 доработать, чтобы заполняло "ВариантИдентификации" значением по умолчанию "ПоУникальномуИдентификатору". в. Проблема кроется еще глубже, в типовых конфигурациях есть общий модуль "МенеджерОбменаЧерезУниверсальныйФормат", там процедура "ЗаполнитьПравилаКонвертацииОбъектов" и там где НаправлениеОбмена = "Отправка" у всех наверно процедур нет заполнения реквизита "ВариантИдентификации" в структуре "ПравилоКонвертации". Что по итогу и дает проблему. Если в структуру "ПравилоКонвертации" добавить свойство "ВариантИдентификации" и заполнить его значением по умолчанию "ПоУникальномуИдентификатору", то проблем с пунктом 2 и 3 не будет. |
Они решают проблемы, озвученные в п.1 и 2, без необходимости модификации конфигурации Конвертация данных и менеджеров обмена типовых конфигураций.
ЗагрузкаПравилСинхронизацииИзФайлов.epf
Подскажите, пожалуйста, кто сталкивался:
У нас в плане обменов ED имеется узел, для которого изменены правила регистрации. Теперь появилась необходимость формирования нового узла и редактирования, для него, типовых правил регистрации по иной логике. Но когда пытаюсь менять правила регистрации для одного узла, они автоматически изменяются и у второго, т.е. настройка правил регистрации для одного узла применяется как бы для всех узлов, входящих в план обмена ED.
Не могу сообразить, корректна ли логика, или я что-то не то делаю....
И если логика корректна, может у кого есть готовый велосипед? Буду признателен)
В ПОД (модуль "При отправке") в типовых правилах активно используются следующие методы (алгоритмы) для отключения выгрузки/загрузки объектов:
УстановитьИспользованиеПКО(ИспользованиеПКО, Ложь);ОчиститьИспользованиеПКО(ИспользованиеПКО);Не могу сообразить, в чем принципиальное различие подходов, если в обоих случаях результат аналогичен? Подскажите, пожалуйста.
Если использование ПКО установить в ложь, то в обмен могут выгружаться команды УдалениеОбъекта по этим ПКО.
Если очистить, то ПКО как бы и не было. Ничего не происходит.
А если в текущем формате не поддерживается какое-либо ПКО, то его нужно удалить, иначе может возникнуть ошибка.
Я думал, что для того, чтобы в базе приёмника удаления объекта не происходило, нужно всегда значение параметра правила обработки ""ОчисткаДанных", при отправке, устанавливать в Ложь.
Нам потребовалось ограничить состав объектов для обмена между базами, при этом корректировка правил регистраций явилась невозможной, т.к. правила подвязываются к плану обмена, а в базах имеются и иные узлы, для которых выборочное отключение регистрации не требуется.
Было принято решение отключать выгрузку/загрузку объектов непосредственно в ПОД. И я везде использовал метод
УстановитьИспользованиеПКО(ИспользованиеПКО, Ложь);В ПОД в КД3 есть флаг "Выгружать очистку по неиспользуемым ПКО". Если он не выбран, то удаление не должно выгружаться. Эта опция не работала в старых версиях БСП, несмотря на наличие флажка.
Случайно сейчас выявил неприятную особенность.
Имею два узла в плане обмена ED, один работает по типовым правилам и обменивается УТ<=>БУХ, а по второму (УТ<=>КА) на основании типовых правил с использованием КД 3.0 написал обработку и указал её в узле в поле "Путь к менеджеру обмена".
После тестирования, решил я модуль из обработки перенести в расширение и подключить к обмену для единственного узла. Однако в процессе анализа кода выявилось, что обработка установленная в одном узле начинает работать для всех узлов, входящих в состав плана обмена ED и работающих по той же самой версии формата. И плевать обмену, что в этих узлах внешние обработки не подключены))
Подскажите, пожалуйста, сталкивались ли Вы с этой особенностью? Просто, если не иметь ввиду данного нюанса и на рабочей базе подключить внешнюю обработку к единственному узлу - есть риск наделать делов при обмене по другим узлам того же плана, если таковые имеются и работают в типовом режиме.
И ещё хотел поинтересоваться, не подключали ли Вы ранее собственный модуль правил к конкретному узлу, а не к версии формата?
В расширение добавил:
1. Общий модуль "ED_МенеджерОбменаЧерезУниверсальныйФормат" с переписанными типовыми правилами;
2. Добавил регистр сведений "ОбщиеНастройкиУзловИнформационныхБаз" - для получения на стороне расширения префикса узла;
3. Для общего модуля "ОбменДаннымиXDTOСервер" были изменены/добавлены следующие процедуры/функции:
3.1 Изменена функция - МенеджерОбменаВерсииФормата |
|---|
&Вместо("МенеджерОбменаВерсииФормата")
Функция ED_МенеджерОбменаВерсииФормата(Знач ВерсияФормата, Знач УзелИнформационнойБазы)
Результат = ВерсииФорматаОбмена(УзелИнформационнойБазы).Получить(ВерсияФормата);
//++ / ED
// Переопределяем модуль менеджера обмена в зависимости от текущего узла
УстановитьПривилегированныйРежим(Истина);
Если НЕ Результат = Неопределено
И ЗначениеЗаполнено(УзелИнформационнойБазы)
И ТипЗнч(УзелИнформационнойБазы) = Тип("ПланОбменаСсылка.СинхронизацияДанныхЧерезУниверсальныйФормат") Тогда
Если ПустаяСтрока(УзелИнформационнойБазы.ПутьКМенеджеруОбмена) Тогда
// Исправление некорректной работы обмена, когда к текущему узлу, без подключенной внешней обработки,
// подставляется внешняя обработка, подключенная к другому узлу того же плана обмена.
Результат = МенеджерОбменаЧерезУниверсальныйФормат;
// Замена модуля менеджера обмена на измененный
Выборка = РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.Выбрать(Новый Структура("УзелИнформационнойБазы", УзелИнформационнойБазы));
Если Выборка.Следующий()
И Выборка.ПрефиксКорреспондента = "ЦБ" Тогда
Результат = ED_МенеджерОбменаЧерезУниверсальныйФормат;
КонецЕсли;
// Из-за обращения к повторно используемому модулю в режиме отладки наблюдались ситуации, когда для узла
// с подключенной внешней обработкой попадал общий модуль "МенеджерОбменаЧерезУниверсальныйФормат"
Иначе
ED_ПроверитьОбработкуМенеджераОбмена(Результат, УзелИнформационнойБазы);
КонецЕсли;
// P.S.: При подключении нескольких разных внешних обработок к узлам обмена ED под одной версией формата,
// в процессе обмена, для таких узлов, будет использоваться последняя попавшаяся обработка, которая определяется
// в процедуре "ДоступныеВерсииФорматаОбмена" модуля менеджера плана обмена "СинхронизацияДанныхЧерезУниверсальныйФормат".
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
//-- / ED
Если Результат = Неопределено Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не определен Менеджер конвертации для версии формата обмена <%1>.'"),
ВерсияФормата);
КонецЕсли;
Возврат Результат;
КонецФункции Показать |
3.2 Изменена функция - ПоддерживаемыеОбъектыФормата |
|---|
&Вместо("ПоддерживаемыеОбъектыФормата")
Функция ED_ПоддерживаемыеОбъектыФормата(ИмяПланаОбмена, Режим = "ОтправкаПолучение", УзелОбмена = Неопределено) Экспорт
ТаблицаОбъекты = Новый ТаблицаЗначений;
ИнициализироватьТаблицуПоддерживаемыхОбъектовФормата(ТаблицаОбъекты, Режим);
ВерсииФормата = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ВерсииФорматаОбмена");
//++ / ED
// Переопределяем модуль менеджера обмена в зависимости от текущего узла
УстановитьПривилегированныйРежим(Истина);
Если ЗначениеЗаполнено(УзелОбмена)
И ТипЗнч(УзелОбмена) = Тип("ПланОбменаСсылка.СинхронизацияДанныхЧерезУниверсальныйФормат") Тогда
ТекущаяВерсияФормата = УзелОбмена.ВерсияФорматаОбмена;
ТекущийМенеджерОбмена = ВерсииФормата.Получить(ТекущаяВерсияФормата);
Если ПустаяСтрока(УзелОбмена.ПутьКМенеджеруОбмена) Тогда
// Исправление некорректной работы обмена, когда к текущему узлу, без подключенной внешней обработки,
// подставляется внешняя обработка, подключенная к другому узлу того же плана обмена.
Для Каждого Версия Из ВерсииФормата Цикл
ВерсииФормата.Вставить(Версия.Ключ, МенеджерОбменаЧерезУниверсальныйФормат);
КонецЦикла;
// Замена модуля менеджера обмена на измененный
Если НЕ ТекущийМенеджерОбмена = Неопределено Тогда
Выборка = РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.Выбрать(Новый Структура("УзелИнформационнойБазы", УзелОбмена));
Если Выборка.Следующий()
И Выборка.ПрефиксКорреспондента = "ЦБ" Тогда
ВерсииФормата.Вставить(ТекущаяВерсияФормата, ED_МенеджерОбменаЧерезУниверсальныйФормат);
КонецЕсли;
КонецЕсли;
// Из-за обращения к повторно используемому модулю в режиме отладки наблюдались ситуации, когда для узла
// с подключенной внешней обработкой попадал общий модуль "МенеджерОбменаЧерезУниверсальныйФормат"
ИначеЕсли НЕ ТекущийМенеджерОбмена = Неопределено Тогда
ED_ПроверитьОбработкуМенеджераОбмена(ТекущийМенеджерОбмена, УзелОбмена);
ВерсииФормата.Вставить(ТекущаяВерсияФормата, ТекущийМенеджерОбмена);
КонецЕсли;
// P.S.: При подключении нескольких разных внешних обработок к узлам обмена ED под одной версией формата,
// в процессе обмена, для таких узлов, будет использоваться последняя попавшаяся обработка, которая определяется
// в процедуре "ДоступныеВерсииФорматаОбмена" модуля менеджера плана обмена "СинхронизацияДанныхЧерезУниверсальныйФормат".
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
//-- / ED
Для Каждого Версия Из ВерсииФормата Цикл
Если СтрНайти(Режим, "Отправка") Тогда
КомпонентыОбмена = ИнициализироватьКомпонентыОбмена("Отправка");
КомпонентыОбмена.ВерсияФорматаОбмена = Версия.Ключ;
КомпонентыОбмена.МенеджерОбмена = Версия.Значение;
КомпонентыОбмена.XMLСхема = ФорматОбмена(ИмяПланаОбмена, КомпонентыОбмена.ВерсияФорматаОбмена);
ИнициализироватьТаблицыПравилОбмена(КомпонентыОбмена);
ЗаполнитьПоддерживаемыеОбъектыФорматаПоКомпонентамОбмена(ТаблицаОбъекты, КомпонентыОбмена);
КонецЕсли;
Если СтрНайти(Режим, "Получение") Тогда
КомпонентыОбмена = ИнициализироватьКомпонентыОбмена("Получение");
КомпонентыОбмена.ВерсияФорматаОбмена = Версия.Ключ;
КомпонентыОбмена.МенеджерОбмена = Версия.Значение;
КомпонентыОбмена.XMLСхема = ФорматОбмена(ИмяПланаОбмена, КомпонентыОбмена.ВерсияФорматаОбмена);
ИнициализироватьТаблицыПравилОбмена(КомпонентыОбмена);
ЗаполнитьПоддерживаемыеОбъектыФорматаПоКомпонентамОбмена(ТаблицаОбъекты, КомпонентыОбмена);
КонецЕсли;
КонецЦикла;
ЕстьАлгоритм = ОбменДаннымиСервер.ЕстьАлгоритмМенеджераПланаОбмена(
"ПриОпределенииПоддерживаемыхОбъектовФормата", ИмяПланаОбмена);
Если ЕстьАлгоритм Тогда
ПланыОбмена[ИмяПланаОбмена].ПриОпределенииПоддерживаемыхОбъектовФормата(ТаблицаОбъекты, Режим, УзелОбмена);
КонецЕсли;
Возврат ТаблицаОбъекты;
КонецФункции Показать |
3.3 Добавлена процедура - ED_ПроверитьОбработкуМенеджераОбмена |
|---|
Процедура ED_ПроверитьОбработкуМенеджераОбмена(ТекущийМенеджерОбмена, УзелОбмена)
Если НЕ Найти(Строка(ТипЗнч(ТекущийМенеджерОбмена)), "Внешняя обработка объект:") = 1 Тогда
ИмяОбработки = УзелОбмена.ПутьКМенеджеруОбмена;
Если НЕ ОбщегоНазначенияКлиентСервер.РежимОтладки() Тогда
ДанныеОбработки = Новый ДвоичныеДанные(ИмяОбработки);
АдресОбработки = ПоместитьВоВременноеХранилище(ДанныеОбработки);
Если ОбщегоНазначения.ЕстьЗащитаОтОпасныхДействий() Тогда
ИмяОбработки = ВнешниеОбработки.Подключить(АдресОбработки, , ,
ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений());
Иначе
ИмяОбработки = ВнешниеОбработки.Подключить(АдресОбработки);
КонецЕсли;
КонецЕсли;
ТекущийМенеджерОбмена = ВнешниеОбработки.Создать(ИмяОбработки);
КонецЕсли;
КонецПроцедуры Показать |
Возник следующий вопрос: как в КД3 сделать при выгрузке отбор, и в зависимости от него выгружать/не выгружать данные?
В том числе при выгрузке по ссылке, т.е. если выгружается документ, в котором указана номенклатура, не удовлетворяющая условию, то она не должна выгружаться.
В КД2 это можно сделать в обработчике ПКО "Перед выгрузкой".
В КД3 я прописал в ПОД "ПриОбработке":
Если КакоеТоУсловие Тогда
ИспользованиеПКО.Справочник_Номенклатура_Отправка = Ложь;
КонецЕсли;но в таком случае по ссылке номенклатура все равно выгружается.
Перегружаем данные из УПП 1.3 в ЕРП 2.4 с правилами для ED 1.5, дорабатывали правила, все вроде боле менее нормально.
Вдруг понадобилось из базы БП подгружать некоторые данные в УПП1.3. Но БП выгружала только для ED 1.6 (внутри была верcия 1.6.21). В УПП обновил XDTO пакеты до 1.6.21, но при загрузке в УПП документа выскакивает ошибка:
{ВнешняяОбработка.ОбменEnterpriseDataУПП1_3.МодульОбъекта(1706)}: Ошибка при вызове метода контекста (ПрочитатьXML)
МояФабрикаXDTO.Тип(КомпонентыОбмена.ФайлОбмена.URIПространстваИмен, КомпонентыОбмена.ФайлОбмена.ЛокальноеИмя));
по причине:
Ошибка проверки данных XDTO:
Значение: 'ОблагаетсяНДС' не соответствует простому типу: {}Налогообложение
Значение не соответствует значениям фасета перечисления
Чтение данных из файла обмена завершено с ошибками!
Я проверил пакеты в УПП и в БП на предмет расходжений описания типа Налогообложение, все сходится. Проверил в отладке, из БП выгружается тоже правильно, как НалогообложениеНДСПродавца.
Другие документы, где отсутствует поле "Налогообложение" загружаются идет нормально.
Голову сломал, не пойму где еще крутнуть надо?
Управление регистрацией объектов осуществляется правилами регистрации. Их можно штатно выгрузить в режиме предприятия, загрузить в КД2.
На выбранном объекте добавить код Отказ = Истина; Если нужно го объекта в правилах регистрации нет, добавьте его, иначе по умолчанию он будет регистрироваться к обмену.
Т.е. правила регистрации для КД3 надо делать через КД2? И как их потом подгрузить к БП3 для выгрузки только нужных объектов?
Вероятно в КД3 появится возможность редактирования правил регистрации.
Правила регистрации нужно выгрузить из настройки БП 3., загрузить в КД2, поправить, выгрузить из КД2 и загрузить в настройку БП 3.
В окне "Настройки синхронизации данных" - Настроить - Параметры синхронизации данных - Загрузить правила регистрации объектов.
Там можно выгрузить типовые и потом загрузить доработанные.
В БП3 выгрузил типовые првила, в КД2 загрузил их, отключил все доки кроме нужных, сохранил в файл, загрузил это в БП3.
Регистрирую отключенный документ, например АвансовыйОтчет, он заходит в файл обмена и загружается в приемную базу.
Отключаю по кнопке подсвеченной в панели, отключенные серые, включенные чёрные.
Где что не так делаю?
Если необходимо разрешить выгрузку при любых условиях, правило регистрации удаляют или отменяют.
Вероятно в КД3 появится возможность редактирования правил регистрации.
Правила регистрации нужно выгрузить из настройки БП 3., загрузить в КД2, поправить, выгрузить из КД2 и загрузить в настройку БП 3.
А как же быть в этим?
По умолчанию всё регистрируется к обмену. Правила регистрации задают правило, на основании которого регистрация отменяется.
Если необходимо разрешить выгрузку при любых условиях, в правиле регистрации ставят флажок "Отключить" .
Если необходимо запретить выгрузку при указанных в этом правиле условиях, в правиле регистрации снимают флажок "Отключить", т.е. "включить".
ВерсииФорматаПланаОбмена = МодульОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ПланОбмена.Имя, "ВерсииФорматаОбмена");иначе ошибка:
Несоответствие типов (параметр номер '1') (Неверный тип параметра. Допустимы только примитивные типы, ссылки, Структура)Когда сохраняю в УТ 11.4 новую версию общего модуля "МенеджерОбменаЧерезУниверсальныйФормат" - все в порядке. Когда в БП 3 сохраняю этот же текст в "МенеджерОбменаЧерезУниверсальныйФормат13", то выдает кучу ошибок. Например:
{ОбщийМодуль.МенеджерОбменаЧерезУниверсальныйФормат13.Модуль(604,31)}: Переменная не определена (ВзаиморасчетыСервер)
РасчетыВУсловныхЕдиницах = <<?>>ВзаиморасчетыСервер.РасчетыВУсловныхЕдиницах(Соглашение); (Проверка: Сервер)
{ОбщийМодуль.МенеджерОбменаЧерезУниверсальныйФормат13.Модуль(20950,6)}: Переменная не определена (ВзаиморасчетыСервер)
= <<?>>ВзаиморасчетыСервер.ВидДоговораКонтрагента(ДанныеИБ.Ссылка, Неопределено, Перечисления.ХозяйственныеОперации.ПоступлениеОплатыОтКлиента); (Проверка: Сервер)
{ОбщийМодуль.МенеджерОбменаЧерезУниверсальныйФормат13.Модуль(14679,15)}: Переменная не определена (УчетНДСУПКлиентСервер)
ПроцентНДС = <<?>>УчетНДСУПКлиентСервер.ПолучитьСтавкуНДС(ДанныеИБ.СтавкаНДСВознаграждения); (Проверка: Сервер)
{ОбщийМодуль.МенеджерОбменаЧерезУниверсальныйФормат13.Модуль(15859,17)}: Переменная не определена (ПартнерыИКонтрагенты)
Контрагент = <<?>>ПартнерыИКонтрагенты.ПолучитьКонтрагентаПартнераПоУмолчанию(Строка.Партнер); (Проверка: Сервер)
{ОбщийМодуль.МенеджерОбменаЧерезУниверсальныйФормат13.Модуль(18088,27)}: Переменная не определена (ДоходыИРасходыСервер)
РасшифровкаДопРасходов = <<?>>ДоходыИРасходыСервер.РаспределениеРасходовНаСебестоимостьТоваров(ДанныеИБ.Ссылка); (Проверка: Сервер)
Это общие модули, которых нет в БП 3, но они есть в УТ 11. Получается, текст модуля обмена для БП 3 должен быть не таким, как для УТ 11? Хотя из статьи получается, что должен быть одинаковым.
Для каждой конфигурации свой модуль с правилами. Если сам модуль проходит синтаксический контроль, почему он же в этой же конфигурации, перенесённый во внешнюю обработку не проходит синтаксический контроль?
Я столкнулся с проблемой. Я переношу доп реквизиты справочника Контрагенты с помощью AdditionalInfo.
Переносится в Бухгалтерию при загрузки в процедуре ПКО_Справочник_Контрагенты_Получение_ПередЗаписьюПолученныхД
Такое ощущение, что если использовать AdditionalInfo, объект при обмене не перезаписывается.
...
3. Подключить расширение, которое полностью подменяет общий модуль с правилами.
...
Еще раз спасибо за статью.
В статье это не упоминается. Но появилась задача при отправки данный (после выгрузке) изменить выгружаемый документ.
В процедуру ***_Отправка_ПриОтправкеДанных. вроде не совсем правильно.
Может подскажите в какую процедуру обмена правильнее код разместить?
Да, можно фиксировать попытку отправки примерно там:
Процедура ПКО__Отправка_ПриОтправкеДанных
Но в любом случае это не гарантирует, что отправленное доставлено.
После принятия ответа при отмене регистрации можно как-то перехватить процесс - там будет правильнее, но это не в правилах, а где-то в общих модулях конфигурации.
Понимаем что нужно изменить и дорабатываем руками модуль в конфигурации.
Из правил для КД3 нельзя получить правила для КД2.
В правилах для КД2 содержится информация по метаданным обеих конфигураций. КД3 содержит информацию только об одной конфигурации - своей базы. И не обязана знать в какую конфигурацию будут загружаться данные.
Подскажите каким наилучшим образом можно решить задачу:
Отказаться принимать изменения справочника (не менять значения реквизитов).
Пока решаю задачу так -
В процедуре ПКО_Справочник_ИмяСправочника_ПередЗаписьюПолученныхДанных
Добавил код
МассивИсключений = КонвертацияСвойств.ВыгрузитьКолонку("СвойствоКонфигурации");
// Заменяем свойства, которые получили из XDTO.
ЗаполнитьНеПустыеСвойстваШапкиОбъекта(КонвертацияСвойств, ПолученныеДанные, ДанныеИБ, МассивИсключений);
ПолученныеДанные = Неопределено;
Но есть подозрение, что можно по другому сделать.
Ну и интересно, в КД 3.1 кто уже пробовал расширение формата делать? Тоже ничего не взлетает пока.
Хотелось бы прояснений - "будет ли расширение формата задействовано при обмене через планы обмена?"
Смотрю БСП - пример расширения формата в XDTO-пакетах есть, но оно дальше нигде не используется и расширенные данные не выгружаются в файл. Справку по этому вопросу не нашел.
Расширение формата можно будет применять и для расширения возможностей доработанного формата.
Однако кое-что не совсем хорошо укладывается в голове, а именно - момент с самими правилами обмена (теми, что выгружаются специальной обработкой). Если я захотел изменить что-то в них, а не в коде обработчиков (допустим, как-то поменять/добавить ПКС), то как мне выгрузить измененные правила из КД 3 и как загрузить их в базу? Этот момент остается совсем неочевидным, и мне кажется, что доработки такого плана подразумеваются нежелательными/недопустимыми в рамках синхронизации, работающей на КД3, и править допускается лишь код обработчиков в специальном общем модуле. Прав ли я в этом, или я что-то упустил?
Либо можно с помощью расширение полностью переопределить типовой общий модуль на другой который в расширении.
Либо третий вариант, когда требуется небольшое исправление - выбранную процедуру или функцию общего модуля переопределить в расширении и взять из КД3 только эту процедуру, а не весь модуль.
Подключать внешние обработки с правилами - это плохой вариант, т.к. появляется множество проблем с доступом к файлу, который может исчезнуть или быть недоступным для другого пользователя.
Задача такая: из типовой конфигурации ЗУП 3.1 в типовую ЕРП 2.5 нужно выгружать справочник Сотрудники и РС КадроваяИсторияСотрудников, если было зафиксировано изменение в регистре КадроваяИсторияСотрудников.
Так вот ни в Формате обмена EnterpriseData ни в составе Плана обмена нет справочника Сотрудники и регистра КадроваяИсторияСотрудников.
Получается что нужна доработка не только правил конвертации но и формата обмена и плана обмена?
У меня в планах есть доработать формат для целей использования в ЗУП.
"Доработать" план обмена не проблема - это делается в расширении - добавить в состав плана обмена и подписок на событие новые объекты.
Да, так и делал.
Можно свой формат обмена сделать и в расширении конфигурации добавить свой модуль с правилами, пакет XDTO и переопределить функцию получения версий формата.
В другом расширении конфигурации расширить состав плана обмена, добавить макет с правилами регистрации и переопределить обращение к макету. чтобы из конфигурации не цеплялся типовой. Расширение с регистрацией нужно только для базы источника, если обмен односторонний.
Если обмен между однотипными конфигурациями, для документов и справочников сделал объект формата Документ.УниверсальныйДокумент и Справочник.УниверсальныйСправочник и набор универсальных процедур. Переносятся все реквизиты и табличные части один в один.
Есть ещё вариант - использование расширения формата. Пока нет документации в БСП на эту технологию и как его использовать при обмене через планы обмена.
З.Ы Какая сейчас последняя версия КД 3 и где вы её берете? ИТС?
Универсальность у КД3 остаётся в рамках тех конфигураций, где установлен доработанный формат. Если формат типовой, та же самая конфигурация с доработанным форматом будет обмениваться типовым форматом.
КД2 сделать обмен между двумя базами проще и быстрее, но когда баз много или одна часто обновляется, а другая нет, в КД2 появляется дополнительная работа.
В КД3 доработку нужно делать только в той конфигурации, которая обновляется или добавляется.
Например для 4-х баз нужно сделать 4 правила на КД3 и 6 на КД2.
При обновлении одной базы нужно поправить одно правило для КД3 и 4 правила для КД2.
Последняя версия КД 3.1.1.4 при наличии подписки ИТС можно скачать через web итс.
Конечно будет актуализировано.
Тестовая версия появилась в конце 2020 года. сходу перейти на КД 3.1 с 3.0 не удалось, т.к. за почти 5 лет у меня было множество доработок.
Переход до сих пор не закончен, но работа в КД 3.1 некоторое время назад началась. Нарабатывается опыт.
Есть некоторые вопросы.
Зачем в ПОД, ПКО и т.п. строку Объект выборки и объект конфигурации сделали справочником? Теперь получается, что идентичные ПОД и ПКО для ERP, КА, УТ формально разные, но объединить в один элемент конвертации их можно.
Из коробки у меня кое что не заработало, поэтому нужно некоторое время, чтобы понять - это только у меня или это общая проблема, которую нужно отразить в статье.
Эта статья для КД 3.0 появилась через несколько лет практического её использования. Поэтому для КД 3.1 нужна некоторая выдержка. )
После изменения правил мы конфигурацию (например БП) возвращаем только модуль. Почему так?
На сколько мне известно, правила синхронизации, которые мы выгружаем из БП, как раз и формируются из этого модуля. Что-то у меня паззл не складывается.
При загрузке правил в ПКО теряются связи с процедурами отложенного проведения.
Когда релизов в конфигураций в КД 3.1 более одного начинаются проблемы, например с объединением одинаковых ПКО для разных конвертаций.
Если выделить ПКО после объединения, теряются все ПКС в копии ПКО.
Если объединить одинаковые ПОД, то при выгрузке модуля некоторые ПОД теряются, т.к. объект выборки (объект конфигурации) это ссылка и может принадлежать к другому релизу. В КД 3.0 это была строка и проблем не было.
Быстродействие КД 3.1 не улучшилось. Чем больше конвертаций и релизов в базе, тем медленнее и в конце концов работать становится невозможно.
КД 3.0 я кастомизировал несколько лет. КД 3.1 дорабатывал почти год. Проблемы до сих пор исправляются.
Для обычных пользователей КД 3.1 рекомендуется работать с одной конвертацией и одним релизом конфигурации. Можно работать с отдельными несвязанными конвертациями и релизами.
Как накопится небольшой опыт практического использования КД 3.1, опишу это в статье - какой код и где исправить. Надеюсь ждать не долго - несколько недель.
Остаётся загадкой как готовятся правила в самой 1С для типовых конфигураций, т.к. модули правил отличаются от того, что выдаёт типовая КД 3.1.1.4
В связи со вчерашним выходом КД 3.1.1.5 обещанные сроки могут измениться. Изучаем всё заново.
На демо базе проверил баг "Выделить элемент из состава конвертаций". Все ПКС исчезают из нового ПКО. Ошибка не исправлена.
Пробежался по ПКС для получения, "Обработчики событий - После загрузки всех данных" Алгоритм пустой.
Это из прошлой версии пришло или баг остался, нужно проверять. Сходу проверить не удалось. Конвертации - Загрузка модуля менеджера зависает, проходится принудительно закрывать базу. Способ исправления - закомментировать разбор буфера обмена при открытии этой обработки.
Чтобы не откладывать в долгий ящик, напишу то, что планировал описать в статье для КД 3.1.1.4.
При загрузке в ПКО теряются связи с обработками отложенного проведения.
Способ исправления:
Модуль обработки ЗагрузкаМодуляМенеджера
Процедура ЗагрузитьПКО(
...
ПКООбъект.ОбменДанными.Загрузка = Истина; //ED
Для Сч = 1 По ЧислоСтрок Цикл
ТекСтрока = СтрПолучитьСтроку(СтрокаРезультат.ТекстМодуля, Сч);
Если Лев(ТекСтрока, 2) = "//" Или СокрЛП(ТекСтрока) = "" Тогда
Продолжить;
КонецЕсли;
Если СтрНайти(ТекСтрока, ".ОбъектДанных") > 0 Тогда
...
ПКООбъект.ГруппаПравил = "Получение";
КонецЕсли;
ПКООбъект.ОбменДанными.Загрузка = Ложь; //ED
СчетчикПКО = СчетчикПКО + 1;
ПКООбъект.Записать();
Если ПравилоСоздано Тогда
...
ПоказатьИсправление помечено //ED
Этого уже достаточно, чтобы начать работать в КД 3.1 - загружать правила и редактировать их. Объединять элементы конвертации с другими конвертациями пока не нужно.
Плюс выхода 3.1.1.5 всё же есть. Раз написали, что в новой версии исправлены замеченные ошибки, значит их стало меньше. :)
Вот это не понял как воспроизвести, на 3.1.1.5 вроде загружаются имена процедур в "После загрузки всех данных".
Или что-то другое имеется ввиду?
У меня протестировать загрузку в типовую сходу не удалось, зависло. Пользуюсь доработанной 3.1.1.5, исправляю другие проблемы.
Основная проблема сейчас в 3.1.1.5 - поддержка множества релизов конфигураций разных видов. Например, в Рознице, БП, КА, ERP есть множество одинаковых ПОД, ПКО. Штатно объединяем их все в одно ПОД, ПКО. Это удобно тем, что при доработке не нужно вносить изменения в десяток конвертаций, достаточно поменять в одной и протестировать работу всех..
И тут всплывает проблема. объект конфигурации это ссылка, а не строка как в КД 3.0. Ссылается на релиз конфигурации.
Генерируем модуль правил и ПОД теряются.
Удалить старый релиз конфигурации становится проблемой.
Получается нынешняя КД 3.1 подходит для выпуска новых версий правил для новых релизов конфигураций, чем собственно 1С и занимается.
Старая ламповая КД 3.0 была хоть и с недостатками, но работала. А КД 2 была сделана гениальными людьми. Это не в упрёк нынешним программистам КД 3.1. Просто так звезды сошлись. Видимо недостаточно активных пользователей, которые требуют что-то от 1С в этой части, вот и выходят редкие обновления.
Чтобы долго не ждать, исправление в модуле обработки ЗагрузкаМодуляМенеджера такое:
Процедура ЗагрузитьПОД(
...
Для Сч = 1 По ЧислоСтрок Цикл
ТекСтрока = СтрПолучитьСтроку(СтрокаРезультат.ТекстМодуля, Сч);
Если Лев(ТекСтрока, 2) = "//" Или СокрЛП(ТекСтрока) = "" Тогда
Продолжить;
КонецЕсли;
Если СтрНайти(ТекСтрока, ".ОбъектВыборкиМетаданные") > 0 Тогда
ИмяОбъектаВыборки = ТекстПослеРавно(ТекСтрока);
Если ИмяОбъектаВыборки="Неопределено" Тогда //ED
Продолжить;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ИмяОбъектаВыборки) Тогда
Возврат;
КонецЕсли;
...
ИначеЕсли СтрНайти(ТекСтрока, ".ВыборкаДанных") > 0 Тогда //ED
ПОДОбъект.АлгоритмВыборкаДанных = ТекстПослеРавно(ТекСтрока);
ПОДОбъект.СпособВыборки = 1;
ПОДОбъект.ИспользоватьДляОтправки = Истина;
ПОДОбъект.ИспользоватьДляПолучения = Ложь;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(СтрокаРезультат.Область) Тогда
...
ПоказатьМой код выше проверялся пошагово в отладке на загрузке типовых, выгрузке в модуль и сравнении с исходным модулем. Проблем пока не обнаружено.
И заметьте у меня в отдельном условии Продолжить, а у Вас в одном условии Возврат.
А возврат прерывает разбор модуля и часть информации теряется.
Попробуйте выгрузить модуль из конвертации и сравните с исходным. Сравнивать внешние обработки с модулем правил. Пример - типовая БП 3.0.100 и выше.
Если НЕ ЗначениеЗаполнено(ПОДОбъект.ОбъектВыборки) Тогда
Возврат;
КонецЕсли;
выходит из процедуры, если не смог однозначно сопоставить объект выборки с метаданными конфигурации. Соответственно, в "пролёте" все правила, которые выбирают данные произвольным алгоритмом.
Моё исправление
Если НЕ ЗначениеЗаполнено(ПОДОбъект.ОбъектВыборки)
И ИмяОбъектаВыборки <> Строка("Неопределено") Тогда
Возврат;
КонецЕсли;
выходит из процедуры, если не смог однозначно сопоставить объект выборки с метаданными или имя объекта владельца не равно строке "Неопределено".
То есть, для ПОД выбирающих данные без привязки к конкретному объекту метаданных (ИмяОбъектаВыборки = "Неопределено" ) продолжает выполнятся алгоритм заполнения параметров.
Обработки - ЗагрузкаМодуляМенеджера - МодульОбъекта в Процедура ЗагрузитьПОД заменить
Если НЕ ЗначениеЗаполнено(ПОДОбъект.ОбъектВыборки) Тогда
Возврат;
КонецЕсли;
на
Если НЕ ЗначениеЗаполнено(ПОДОбъект.ОбъектВыборки)
И ИмяОбъектаВыборки <> Строка("Неопределено") Тогда
Возврат;
КонецЕсли;
Если использовать Возврат как у Вас, то эта часть кода не будет выполнена:
ИначеЕсли СтрНайти(ТекСтрока, ".ВыборкаДанных") > 0 Тогда //EDМожете считать Ваш пример верным, мне без разницы.
Давайте подождём исправления от 1С, если есть сомнения как делать правильно.
Точно строка разобрана? Выделенный жирным фрагмент типового кода ни о чём Вам не говорит?
Если СтрНайти(ТекСтрока, ".ОбъектВыборкиМетаданные") > 0 Тогда
ИмяОбъектаВыборки = ТекстПослеРавно(ТекСтрока);
Если НЕ ЗначениеЗаполнено(ИмяОбъектаВыборки) Тогда
Возврат;
КонецЕсли;
ПОДОбъект.ОбъектВыборки = ОбъектКонфигурацииПоСтроке(ИмяОбъектаВыборки, Конфигурация);
Если НЕ ЗначениеЗаполнено(ПОДОбъект.ОбъектВыборки) Тогда
Возврат;
КонецЕсли;
ПОДОбъект.ИспользоватьДляОтправки = Истина;
ПОДОбъект.ИспользоватьДляПолучения = Ложь;
ИначеЕсли
Показать(344)
Ещё раз, какой "Возврат"?! Вы точно умеете читать и понимать написанный код? Ни разу не сталкивались с конструкцией "<>" в условиях? Не понимаете, что она обозначает и как выполняется обработка?
(344)
У меня то сомнений нет. Я лишь в мягкой форме Вам намекнул ещё раз перечитать типовой код.
Далее при разборе "ИначеЕсли СтрНайти(ТекСтрока, ".ВыборкаДанных") > 0 Тогда //ED" можно однозначно установить, что "ПОДОбъект.ИспользоватьДляОтправки = Истина;" и т.п.
Выше Вы написали, что "При таком "исправлении" загрузка правила же не корректно отработает."
На что был ответ, что всё работает Если пересмотреть предложенное исправление целиком, а не только одно условия сравнения с "Неопределено"
Ваш Вариант тоже работает при условии, что есть разбор сроки ".ВыборкаДанных". Про "Возврат" невнимательно посмотрел.
Мне проще было поставить отдельное условие и не трогать типовой код. Это в будущем ускорит сравнение с новой версией от 1С.
И конструкция <> лично мне не нравится, вместо неё пмсм лучше НЕ =
Подождём ещё немного новых версий КД 3. ;)
А то пока не хочется тратить время - затирать обновлением мои исправления, чтобы потом восстановить их обратно.
ПКО_АннулированиеПодарочныхСертификатов_Получение_ПриКонверт
ПКО_АннулированиеПодарочныхСертификатов_Получение_ПередЗапис
В Конвертации алгоритмы хранятся в справочнике с длиной кода 50 (ограничение платформы вроде бы), то есть обрезаются в обоих случаях до
ПКО_АннулированиеПодарочныхСертификатов_Получение_
ПКО_АннулированиеПодарочныхСертификатов_Получение_
При обратной загрузке в МенеджерОбменаЧерезУниверсальныйФормат13 получаются процедуры с одинаковыми именами.
Что я делаю не так? Как штатно обходить эту проблему?
Наименование справочника ПКО - это АннулированиеПодарочныхСертификатов_Получение и оно загрузилось нормально.
Пока 3.1.1.4 завтра попробую на 3.1.1.6 (если время будет). Это был пример. ВСЕ наименования ПКО отрезаются до 50 символов.
ПКО_АннулированиеПодарочныхСертификатов_Получение_ПередЗапис
После загрузки смотрю КД. Там они обе
ПКО_АннулированиеПодарочныхСертификатов_Получение_
ну реально так получается. И при загрузке обратно в рабочую конфу имею десятки процедур с одинаковыми номерами.
В конфигурации КД3 не должно быть ни одного справочника с именем или кодом ПКО_АннулированиеПодарочныхСертификатов_Получение_ПриКонверт
В Справочнике ПКО содержится только такое имя: АннулированиеПодарочныхСертификатов_Получение
А "ПКО_АннулированиеПодарочныхСертификатов_Получение_ПриКонвер
общего модуля ОбменДаннымиXDTOСервер, заполнение свойств происходит по полям указанным в ПравилоКонвертации, ну а там в нашем случае нет тч Расшифровка, и она не заполняется. Что сделать для того что бы данные залить в тч Расшивровка. может какой то еще можно обработчик подключить?
А ещё есть процедура ОтложенноеПроведение_ там на всякий случай проверить не устанавливаются ли нужные реквизиты значениями по умолчанию без проверки их заполненности.
Переносим модуль менеджера обмена в модуль конфигурации БП 3 или во внешнюю обработку.
вот тут как раз и вопрос
у вас по коду также используется объект ПолученныеДанные
код из публикации
ПолученныеДанные.ВидНоменклатуры = ВидНоменклатуры;
осталось понять как пкс исправить. )
Не очень понял в чем же цинус AdditionalInfo, если им воспользоваться универсально не получается, я заполнил ПолученныеДанные, но они не попадут в ДанныеИБ. Или я чего то не понимаю? Недавно в этой теме, хотелось бы разобраться!
Либо можно самостоятельно написать
Если НЕ ДанныеИБ=Неопределено Тогда
ДанныеИБ.ВидНоменклатуры = ПолученныеДанные.ВидНоменклатуры;
КонецЕсли;AdditionalInfo для обмена дополнительными данными. В файле обмена данные появились, же. А как ими распорядится программист - другое дело. Это не недостаток технологии КД 3, это особенности типовых решений и умений программиста ;)
ПКО_Документ_РКОНаБанковскийСчет_Получение_ПриКонвертацииДан
нет еще объекта ДанныеИБ, он появляется только в ЗаполнитьДанныеИБПоПолученнымДанным(ДанныеИБ, ПолученныеДанные, ПравилоКонвертации)
Далее сплошные минусы.
Загрузить правила из буфера или из файла в формате модуля 1 нельзя - требуется доработка. Доработал, позже поделюсь.
Заниматься поддержкой правил для нескольких конфигураций практически нельзя.
Например: Загрузили в КД3 релиз УТ 11.4.13.201, загрузили правила, потом вышел новый релиз УТ 11.4.13.301 - загрузили его в КД3, объединили с правилами.
Через год накопилось много лишних релизов. И тут начинаются проблемы. Все ПОД, ПКО ссылаются на элементы справочников релиза. В КД 3.0 там была просто строка. КД становится медленной. удалить релиз занимает очень много времени, возможно рабочий день. Не засекал, т.к. создал свой алгоритм быстрого удаления релиза. Но это не выход. Все ПОД и ПКО становятся с битыми ссылками.
Правила регистрации имеют те же проблемы - ссылки на справочники релиза. И там нельзя так же как для ПКО и ПОД объединить ПРО из нескольких релизов.
Порядок работы в КД 3.1 как я понял предназначен для разработчиков типовых конфигураций. Вместо загрузки нового релиза там есть механизмы для загрузки изменённых метаданных текущего релиза. Т.к. поддерживать старые релизы и правила для них нет необходимости.
Если кто-нибудь занимается поддержкой множества старых релизов конфигураций, хотелось бы обменяться опытом. Удалось ли воспользоваться КД 3.1? Мне с большим трудом и множеством доработок это удалось, но конца и края не видно до идеала.
Данная публикация описывает типовой вариант КД3, поэтому вопрос - КД 3.1 из коробки можно рекомендовать для работы? ;)
Не могли бы вы дать совет по другой задаче?
На этапе выгрузки документа Реализация товаров и услуг надо проводить анализ и не выгружать его при соблюдении некоторых условий. Решение задачи через ограничение регистрации на обмен не подходит.
Через какой обработчик это можно сделать?
Предполагаю, что через ПКО_Документ_РеализацияТоваровУслуг_Отправка_ПриОтправкеДанн
В КД 2 это решалось через Отказ = Истина в обработчиках, предшествующих выгрузке. А вот в КД 3 пока не ясно мне.
Отказаться от выгрузки можно в ПОД.
Процедура ПОД_Документ_РеализацияТоваровУслуг_Отправка_ПриОбработке(...
ОчиститьИспользованиеПКО(ИспользованиеПКО);
или
ИспользованиеПКО.Документ_РеализацияТоваровУслуг = Ложь;
или
УстановитьИспользованиеПКО(ИспользованиеПКО, Ложь);Нафига козе баян, в целом-то?..
Об этом написано в статье. Может быть это нужно как-то по другому преподнести.
Если релиз не обновляется, ничего не нужно допиливать в этой базе с КД3.
В случае с КД2, если в любой из баз, участвующих в обмене меняется релиз, нужно допиливать все правила для обмена с этой базой.
В Б2 изменили релиз.
Если используется КД3, то в Б2 вероятно потребуется доработка правил, в Б1 - не требуется. Т.е. правила меняются в одной базе.
Если используется КД2, то вероятно потребуется доработка правил, которые нужно обновить в обеих базах.
Возможны, как мы знаем, следующие случаи: изменение настроек ПВД, ПКО, ПКС/ПКГС; изменение алгоритмов; изменение принципиальное (обычно при больших пертурбациях с метаданными).
Так вот, в случае КД2 это правка правила. Которое может лежать как файл или быть куда-нибудь засунуто. Ни о каком "обновлении в базах" нет речи, базы типовые на поддержке. Подчёркиваю, ни одна база не меняется и не страдает.
В случае же КД3 что нам придётся - как минимум в одной из баз, находящихся на поддержке, покурочить общий модуль, хдто-пакет, итд. Базу-получатель полюбому приходится колбасить. А если поменялись сами ED, то и базу-отправитель тоже. Я верно понял?
В любом варианте если, например Б1 никогда не обновляется, в Б2 постоянно обновляется, то при использовании КД3 можно 5 лет ничего не делать с правилами, с КД2 так не получится.
У ED несколько форматов. Если появляется новый, то это не влияет на старую Б1, т.к. для обмена она использует тот формат, который есть у неё.
Это простой пример обмена между 2-мя базами. Если их более десятка, то КД3 как раз для этого и придумали - обновляем только те правила, где поменялся релиз, все остальные десяток баз не трогаем.
Я правильно понял, что, если Б1 закидывает данные в формат ED 1.1.1, то Б2 будет его нормально читать и обрабатывать все пять лет, хотя актуальным уже давно считается ED 6.6.6?
На примере: таб.часть "Услуги" документа "Счёт на оплату". У меня ED под рукой нет, но сам факт - передавались данные в старый вариант, и передаются. С определённой логикой дообработки поля "Содержание", к примеру. И вот бац, услуги переносят в товары.
Как это 5 лет можно не трогать?
Из Б1 выгружаем в ED и не беспокоимся.
Как распорядится этой информацией на стороне Б2 зависит только от правил на стороне Б2. Если поменялась логика, то меняем правила загрузки из ED в Б2.
Теперь следующий момент: если для КД2 выгружать описание приходилось только при изменениях метаданных, то для КД3 выгружать надо при каждом релизе, т.к. меняются модули, верно? Да ещё и надо знать, что выгружать, какие модули, и ничего не попутать? Часть из предприятия, обработкой, часть из конфигуратора? Так?
В КД 3.1 все правила можно загрузить из буфера обмена. Метаданные из файла. Всего два действия.
Если метаданные не менялись, то не требуется их загружать в КД3. Достаточно при необходимости доработать правила.
В КД 3.0 загружать правила не так удобно.
КД3 - это всего лишь инструмент для подготовки правил для использования формата ED.
Можно бесконечно долго пытаться искать недостатки конфигурации КД 3. Они есть. Но это не означает, что технология обмена через ED ущербная. И это не означает, что она лучше или хуже xml обмена (КД2). Это разные технологии. Сама конфигурация КД2 проработана лучше. Нужно лишь уметь правильно применять технологии к месту.
При использовании зоопарка разных баз и при минимальной квалификации специалиста по КД3, использовать формат ED предпочтительнее. Если у кого-то есть непонимание, это проблема квалификации специалиста, а не технологии обмена.
Если изменился релиз, следуя вашим же словам, надо допиливать. Цитирую: "если поменялась логика, то меняем правила загрузки". Так? Как это соотносится с вашим же утверждением, что "5 лет можно ничего не делать"?
Возможно, я совсем тупой и "не понял" про КД3, но ваши слова я читаю "как есть", и вот их пока действительно понять не могу. Что-то чему-то противоречит.
Если вы говорите раздельно про Б1 и Б2, то выходит, что в Б2 править надо всё равно. И тогда какая разница, где эту правку делать - для правила хмл-обмена, где всё просто, прозрачно и легко отслеживаемо или в текстах громоздких модулей типовой конфигурации? Менять-то всё одно каждый релиз надо...
То же самое и для Б1 - эта база не знает какая на той стороне база и этого не требуется, её зона ответственности - формат ED. Б1 умеет выгружать в ED и загружать из ED и не важно какая там логика у Б1 и неважно где хранятся реквизиты.
Подытожим. КД3 - это некая извратная хрень, насаждаемая "гуру" из 1С-центральной как очередная (и имхо провальная) попытка выработки концепции действительно единой шины. Эта хрень требует применения кривого и сырого инструмента со многими багами и оговорками. Эта хрень требует гораздо больших трудозатрат, нежели КД2, даже при самом мелком изменении. Никакого выигрыша она не даёт, т.к. рекламируемая "стабильность" - мнимая. а точнее, пиар-обманка - ибо по сути пилить что-то всё равно надо, каждый релиз.
В целом наблюдаемое явление сродни внедрению "якобы асинхрона", или вообще управляемых форм. Сперва громкие анонсы и активное "пропихивание", а потом выясняется, что и трудозатраты неоправданно высоки, и отдача низковата, и вообще концепция далеко не айс.
А, ну и, конечно, идёт любимый "аргумент" в таких случаях - апелляция к "квалификации". Из серии "не умеешь готовить". Этот аргумент ничтожен, ибо легко опровергается экспериментальным замером трудозатрат специалиста, равно владеющего сравниваемыми технологиями. И подобно тому, как разработка кода под "якобы асинхрон" или УФ вдвое-втрое дольше, нежели в толстом клиенте синхронно под ОФ, а выигрыш сомнителен в 90% случаев, ровно так же, подозреваю, узка реально выигрышная область применения КД3. Во всём же остальном владеющий равно правкой КД2 и правкой модулей под КД3 конечно же быстрее и проще решит проблему средствами КД2. Вот просто уверен в этом.
Осталось пожалеть, что ещё несколько лет (пока 1С не стрельнет в голову что-то новое или пока они сами не запарятся иметь дело с собственным "шедевром"), нам с этим мучиться.
Спасибо за разъяснения.
Есть силы поддерживать все свои проекты на толстом клиенте с обменом на КД2, пожалуйста. Был бы спрос.
Когда появилась КД2 мне точно так же говорили коллеги, что обмен через txt и dbf намного удобнее и проще в обслуживании.
Подготовить правила в КД2 быстрее, чем для КД3 - с этим никто не спорит.
Обслуживать правила на КД3 сложнее. Но их преимущество в том, что при доработке множества конфигураций достаточно сосредоточится именно на них и не заниматься поддержкой обмена со старыми конфигурациями, т.к. при изменении метаданных в любой базе из десятка потребуется оперативно исправлять правила во всех базах с КД2.
Если дорабатывается несколько разных конфигураций, то в случае с КД2 может потребуется доработать (загрузить новые) правила не только в этих конфигурациях, а и для всех, которые обмениваются с этими базами. На примере выше - придётся каждый раз в старую базу Б1 загружать новые КД2.
С КД3 при доработке конфигурации дорабатывается правила только в этой базе, в других не нужно дорабатывать. Отсюда и эффект. Доработали одну базу с правилами из сотни, обмены работают. Если везде кд2, то все обмены рухнут, если не обновить во всех базах правила.
Получается надежное обслуживание. Сегодня обновляем одну базу, завтра вторую, через 100 дней последнюю 100-ю и обмен не прекращается.
Если то же самое делать с КД2, то практически невозможно обеспечить обмен.
Например, Б10 такая же как Б20, они обе обмениваются с К90 и с К100. Б10 обновили, Б20 нет. Какие правила КД2 нужно установить в К90 и К100?
Так. Возможно, я что-то путаю. Давайте пока без КД2.
Вот есть К90 и К100, и есть изменение логики обмена. Придётся ведь менять модуль, и ставить изменённую конфу или расширение и на К90, и на К100, так?
Не понял. В обеих базах, К90 и К100, изменился справочник. Реквизит переименовали. Изменения в обе базы надо накатить сегодня, бизнес требует. И что же, можно в одной актуализировать процедуру установки значения этого справочника сегодня, а в другой - через неделю? Это как?
Если есть техническая возможность в один день обновить обе базы К90 и К100, пожалуйста. Если нет и баз не две, а с десяток, то это без ущерба для кд3 обмена можно сделать не за день, а за несколько.
Есть настроенный обмен:
Б10 - К90
Б10 - К80
Б10 - К100
Базы К огромные. Сегодня обновили метаданные и правила в К90, а в К100 не успели. Обмен нужен круглосуточный.
Какие правила нужно установить в Б10, если используется КД2?
А если, не всё так однозначно
Б10 - К90 - логика обмена 1.20
Б10 - К80 - логика обмена 1.8
Б10 - К100 - логика обмена 1.20
Есть возможность для Б10 установить две версии правил КД2 для разных настроек синхронизации?
Для конечного пользователя важнее результат. Если обслуживающий обмен специалист оперативно решает вопросы, выполняет запросы бизнеса, то им не важно как устроен обмен. Можно и через Excel.
Да правда? Заимствовать несколько модулей типовой конфы в расширение, влепить им полную замену "Вместо" или прыгать-геморроиться каждый раз по "ИзменениеИКонтроль", отслеживать изменения, сопрягать-обновлять (дабы компилилось нормально), или же фрагментарно изменить и тоже каждый раз колбасить - это проблема квалификации специалиста? Да неужели?)))
И это ладно сейчас. КД3 сделали, когда расширений ещё и не было почти, уж точно не было как магистрального направления. Тогда вообще советовали колбасить типовую или уродоваться через внешки. Это тоже проблема квалификации, да?))
Если изменений много, можно полностью подменить модуль с правилами.
Если специалисту удобнее с КД2, пусть с ней и работает. Но при условии, что КД3 он освоил и имеет представления о её возможностях.
Вы уверены, что "полностью подменить модуль с правилами" - это хороший совет и не кончится граблями? Это я без сарказма, всерьёз спрашиваю.
Про КД3 я пока понял лишь, что её возможности более узкие, менее гибкие, что она гораздо капризнее, трудозатратнее, и не универсальна.
КД2 рассматривается в - 4-ая тема. XML-технологии.
КД3 рассматривается в - 5-ая тема. XML-схемы. Механизм XDTO.
то настройку синхронизации данных надо пересоздать, удалить старую и создать заново. Где то запоминаются все существующие правила обмена на момент создания настройки и новые игнорируются.
Раз уж тут лекция по КД 3.0 позвольте спросить.
Конвертация данных последняя. Правила обмена стандартные для синхронизации между УТ 10.3 и БП 3.0.
При загрузке правил в КД 3.0 Выдает ошибку (см. скин).
В КД 2.0 все загружается нормально, но похоже она не дружит с движком 1С 8.3.18.1208. там выдает при записи ошибку
о несоответствии версий.
Хотелось бы поработать с КД 3.0, но как исправить эту ошибку?
По КД 3 иногда спрашиваю в партнерском форуме. Либо нет ответа, либо есть, но нет решения.
План обмена СинхронизацияДанныхЧерезУниверсальныйФормат. ЗУП КОРП 3.1.22.86
Имеем 2 узла. В одном нужно выгрузить ТОЛЬКО Физлиц, в другом - Только подразделения организаций.
Как это сделать ? С учетом того, что в Регистре сведений Правила для обмена данными указан план обмена СинхронизацияДанныхЧерезУниверсальныйФормат???
То есть правила надо дорабатывать как суперпозицию требований всех узлов?
Спасибо за исправления.
Взял xsd схему EnterpriseData_1_8_6 из erp, попытался загрузить - получил что на фото (а в ЖР вообще пусто!).
Что-то мне эта КД совсем не заходит. За час уже 2 ошибки, а я даже до правил не добрался. Жесть.Как тут люди работают я не понимаю.
Потом выгрузить в модуль и сравнить, чтобы увидеть что потерялось.
Например, группа справочника номенклатуры - в ПКО нужно указать, что правила для группы справочника.
В документах могут потеряться процедуры отложенного заполнения.
Так вот как вы считаете, стоит сделать новый обмен через ED на основании уже имеющегося (для БП РФ, правда я не знаю, чем БП РФ отличается от Беларуси), или всё же пойти проведенным и более универсальным способом через правила обмена КД2 (где я комфортно себя чувствую)?
С другой - если есть желание освоить что-то новое, можно попробовать.
ED появилась примерно в 2015-м году, вроде тогда не было БСП 3. Но и формата 1.8 и 1.10 не было, а они требуют некоторых доработок. Либо можно поискать БП РФ с такой же БСП как у Бух Беларуси и взять правила тех лет за основу. Отличие будет в формате менеджера обмена - тогда был 1, сейчас 2. В ERP может быть БСП 3 и формат менеджера 2, это не мешает обмениваться. Главное общий формат обмена.
Как-то пробовал делать правила для других стран. Формат обмена в части НДС там отличался и правила тоже.
Как победили данную ошибку и удалось ли ?
Там ниже уже дан ответ (427) через буфер обмена можно.
Мне тоже непонятно зачем держать в дистрибутиве неработающий функционал, а где-то на просторах интернета сообщить какой из вариантов рабочий и как исправить некоторые ошибки той версии, которая выложена для всех.
Пользуясь случаем сообщу, что в ознакомительной версии КД 3.1.3.14 от 23.09.22 появился функционал деления кода правил - вместо одного мега модуля можно сделать несколько.
А так же давно практикуется размещать правила регистрации в общем модуле МенеджерРегистрации. В КД 3 есть выгрузка правил регистрации в этот модуль, а загрузки из него в КД3 нет.
Получается странная ситуация - "вы там как хотите, так и редактируйте типовые правила, а исходники у производителя есть". Правила регистрации в макете ещё есть, но в УТ 11.5 они для ERP и при сохранении в модуль МенеджерРегистрации они не работают, приходится вычищать лишнее.
Получается инструмент КД 3 развивается, но пока есть множество замечаний.
Еще вопросик по ED.
Как известно, объекты по ссылкам не выгружаются.
Воооот....
Как минимальными затратами выгрузить документ реализации , если ДоговорКонтрагента=<Объект не найден>, Номенклатура=<Объект не найден> и далее везде.
?????????
Может, это откровение для разработчиков, но <Объект не найден> = нарушение целостности базы.
P.S. За это время можно разработать две-три нормальные конвертации и прикрутить их к обмену. Не то чтобы я жалуюсь, но времени жалко.
P.P.S. Принцип Keep it simple, stupid в данном случае не работает.
Примерно так:
Почему в типовых конфигурациях не развивают эту обработку, вопрос к 1С.
>За это время можно разработать две-три нормальные конвертации
Можно.Никто не спорит. ;) Но потом то же время понадобится для доработки правил при изменении любой конфигурации.
ИначеЕсли СтрНайти(ТекСтрока, ".ПослеЗагрузкиВсехДанных") > 0 Тогда
ПКООбъект.АлгоритмПослеЗагрузкиВсехДанных = ТекстПослеРавно(ТекСтрока);
//ТСВ
ИначеЕсли СтрНайти(ТекСтрока, ".ПравилоДляГруппыСправочника") > 0 Тогда
ПКООбъект.ПравилоДляГруппыСправочника = ТекстПослеРавно(ТекСтрока);
КонецЕсли;В своих доработках для клиентов я не включаю эту возможность, т.к. клиенты однажды додумались подключить для серверной базы обработку со своего рабочего стола ноутбука.
Для обработки "Выгрузка загрузка EnterpriseData" в типовом варианте подключение модуля из обработки не работает, но для целей отладки такую возможность сделал в доработанных правилах.
Добрый день!
Если через буфер обмена - пишет "Ошибка передачи файлов структуры формата на сервер"
Но база Конвертации - файловая.
Случайно попробовал загрузить на другом, тестовом ПК , на платформе 8.3.18.... и ошибки при загрузке структуры формата не было.
Сделал все манипуляции на 18 платформе, выгрузил Dt и перенес в рабочую базу.
Но обязательно нужно указывать два файла - ЕD и EM.
Пока грешу на платформу 8.3.22.1704 на рабочем ПК, но подтвердить и проверить на 8.3.22.1709 - пока нет возможности.
В исправления 1709 что то пишут , про Код ошибки: 60003623 ... но связано это как то или нет пока затрудняюсь ответить
Преобразование строки в число с плавающей точкой в операциях XDTO
Код ошибки: 60003623
Статус: Исправлена в выпущенной версии Зарегистрирована: 27.10.2022
Исправлена: "Технологическая платформа", версия 8.3.20.2180
Исправлена: "Технологическая платформа", версия 8.3.21.1624
Исправлена: "Технологическая платформа", версия 8.3.22.1709
Описание:
В операциях XDTO при преобразовании строки в число с плавающей точкой, если в качестве разделителя дробной части используется запятая, происходит ошибка вида
Ошибка преобразования данных XDTO:
НачалоСвойства: {}Structure Форма: Элемент Тип: {}Structure
по причине:
Ошибка преобразования данных XDTO:
Значение: 4923,46 Тип: {}float
по причине:
Ошибка отображения типов:
Отображение типа '{}float' в тип 'Число'"
Установил 8.3.22.1709 на рабочем ПК - ошибка при загрузке осталась.
Почему на другом компьютере, на платформе 8.3.18.... ошибка не воспроизводилась и все сработало без сообщений на ошибки
- вопрос открытый (;
"Ошибка проверки модели XDTO: xdto-package-3.3 пакет:
Импортируемый пакет типов 'http://www.1c.ru/SSL/Exchange/Message' не определен
Если выбираю вместе с ExchangeMessage, ошибка:
"по причине:
Набор схем не может содержать схемы с одинаковыми целевыми пространствами имен"
То есть даже версию формата загрузить не могу... КД 3.1.2.16.
Я видел ответ (442) про копирование из модуля. Но разве там версия формата? тем более версий уже более 10.
Вероятно чего-то не понимаю. Подтолкните в правильную сторону. Спасибо!
Сейчас потребовалось доработать обмен (добавить в обмен объекты на выгрузку, изменить заполнение полей в приемнике...) :
Источник - УТ 11.5.8.383.
Приемник - БП 3.0.126.18.
Вроде как там обмен еще и обратный есть каких-то сущностей, но это пока не точно.
И у меня вопрос - с чего начать ? )
Нужно ли мне брать последнюю 3.1 от 30.01.23 или взять последнюю 3.0 и этого будет достаточно ?
Если брать 3.1, то не возникнет ли проблем, если типовой обмен разрабатывался во времена 3.0 ?
Используемый формат EnterpriseData_1_10_8, и мне не понятно на какой версии он разрабатывался.
Вообще есть купленный когда-то и не пройденный курс по 3.0, но вероятно он уже не актуален.
Есть ещё версия менеджера формата - 1 или 2. Если использовалась 1, то в КД 3.1 правила некорректно загружались. Исправлено ли это в последней КД 3.1, не знаю пока.
В ваших конфигурациях используется 2.
Для загрузки правил в КД 3.1 достаточно выгрузить модуль с правилами в файл или скопировать в буфер обмена и загрузить в КД.
Есть ещё версия менеджера формата - 1 или 2. Если использовалась 1, то в КД 3.1 правила некорректно загружались. Исправлено ли это в последней КД 3.1, не знаю пока.
В ваших конфигурациях используется 2.
Для загрузки правил в КД 3.1 достаточно выгрузить модуль с правилами в файл или скопировать в буфер обмена и загрузить в КД.
Верно ли я понимаю, что до этой операции нужно сделать следующее? :
1. Выгрузить при помощи обработки конфигурации УТ и БП в файлы, а затем загрузить в КД3.
2. Выгрузить ED и ExchangeMessage из, например УТ, и загрузить в КД3.
3. Тут мне не понятно что делать ) Может уже тут и надо модуль подгружать.
И такой вопрос: файл правил это, как я понял общий модуль - МенеджерОбменаЧерезУниверсальныйФормат13.
Так вот в УТ этот модуль допилен через расширение - подменены вызовы процедур на доработанные.
Мне, получается - надо собрать единый модуль смержив все это вручную ? Это выглядит очень неудобно или я что-то не так понял )
1. Для выгрузки метаданных конфигурации нужна обработка, в которой включена выгрузка регистров сведений как описано в статье.
2. да.
3. Достаточно в конфигураторе открыть модуль с правилами и сохранить как текстовый файл. Потом его загрузить в КД 3.1
Да, как-то собрать в один модуль, либо загрузить МенеджерОбменаЧерезУниверсальныйФормат13 и потом через буфер обмена копировать измененные модули и в режиме редактирования правил загружать из буфера.
В УТ 11.5.8 и выше и подобных ERP, КА правила обмена хранятся в общем модуле. Загрузка в КД не предусмотрена, выгрузка есть.
Тут придётся загружать макет с правилами, который ещё есть в УТ, после загрузки удалять лишнее, которое относится к ERP, т.к. после выгрузки правил регистрации в модуль появляются ошибки в УТ.
В КД 3.1.3 модуль с правилами может делится на несколько модулей. Как его выгружать - понятно, как загружать в КД, нужно проверять.
смотрю темка живее остальных веток)
подскажите пжл, а как можно при выгрузке документа подставить определенную организацию?
в КД 2.0 решалось одной строчкой кода в правилах обмена, а здесь что то никак не получается подменить организацию при выгрузке документа...
Здесь тоже достаточно одной строчки. Какая из одной строки подойдёт зависит от того ключевое это поле или нет. ;)
Процедура ПКО_Документ_КорректировкаРеализации_Отправка_ПриОтправкеДанных(
Если СтекВыгрузки.Количество() > 1 Тогда
ДанныеXDTO.Вставить("Организация", ДанныеИБ.Организация);
Возврат;
КонецЕсли;
ДанныеXDTO.КлючевыеСвойства.Вставить("Организация", ДанныеИБ.Организация);
// и не забыть указать, что используется алгоритм
Процедура ДобавитьПКО_Документ_КорректировкаРеализации_Отправка(
ДобавитьПКС(СвойстваШапки, "Организация","Организация", 1 , "Справочник_Организации_Отправка");
Показатьа есть еще ссылки на организацию в справочниках...
а просто подставить организацию при выгрузке именно организации нельзя?
СвойстваШапки = ПравилоКонвертации.Свойства;
ДобавитьПКС(СвойстваШапки, "", "ДатаСостояния", 1);
ДобавитьПКС(СвойстваШапки, "", "Заказ", 1, "Документ_ЗаказКлиента_Отправка");
ДобавитьПКС(СвойстваШапки, "", "СостояниеЗаказа", 1);
ДобавитьПКС(СвойстваШапки, "", "СостояниеЗаказаСтрокой", 1);
в плане обмена регистрируется и запись регистра сведений и заказ клиента, поэтому Документ_ЗаказКлиента_Отправка
отрабатывает нормально, но в заказе клиента в тч товары есть номенклатура, которая при отправке прописана в заказе так:
СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "", "Товары");
ДобавитьПКС(СвойстваТЧ, "", "Номенклатура", 1, "Справочник_Номенклатура_Отправка");
и вот это свойство Справочник_Номенклатура_Отправка имеет процедуры ПриОтправке и ПриОбработке, а так как номенклатура в регистрацию плана обмена не попала, то и вызова этих процедур не происходит. как же тогда отрулить загрузку номенклатуры, не регистрировать же ее каждый раз, что бы эти процедуры выполнялись? В этих процедурах прописана небольшая корректировка наименования для выгрузки на сайт, и вот получается, если записать номенклатуру она улетает как надо, а при изменении статуса заказа залетает наименование без исправлений и на сайте становится кривым.
Процедура ПКО_Справочник_Номенклатура_Отправка_ПриОтправкеДанных(
Это вызывается всегда
Перед этой частью кода
Если СтекВыгрузки.Количество() > 1 Тогда
Возврат;
КонецЕсли;можно вставить свой код. И не забыть указать в ПКО, что для наименования используется алгоритм.
Для обмена с сайтом, вероятно правила на КД2? Там всё по другому и это другая тема получается. )
так вот в этом и проблема, что ПКО ПриОтправкеДанных не вызывается, до тех пор, пока номенклатура, не попадет в регистрацию, если только зарегистрировать номенклатуру, то вызов процедур происходит и все норм. обмен кд3
&После("ПКО_Справочник_Номенклатура_Отправка_ПриОтправкеДанных")
Процедура Доп1С_ПКО_Справочник_Номенклатура_Отправка_ПриОтправкеДанных (ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки)
Если КомпонентыОбмена.ПараметрыКонвертации.ВариантНастройки <> Доп1СИнтеграцияУТ.ИдентификаторВариантаНастройкиОбмена() Тогда
Возврат;
КонецЕсли;
Если СтекВыгрузки.Количество() > 1 Тогда
Возврат;
КонецЕсли; Показатьну вот в этой процедуре вставлены свои корректировки, они то как раз и не выполняются.
ДанныеXDTO.Вставить("Описание", ДанныеИБ.Описание);
ДанныеXDTO.КлючевыеСвойства.Вставить("НаименованиеПолное", ДанныеИБ.Наименование);
//ДанныеXDTO.Вставить("НаименованиеПолное", ДанныеИБ.Наименование);После некоторых изысканий стало понятней, Процедура пко ПриОтправкеДанных все таки вызывается, но в этой части кода
Если СтекВыгрузки.Количество() > 1 Тогда
Возврат;
КонецЕсли;заворачивается выполнение, посмотрел и обнаружил внутри СтекВыгрузки несколько строк, в чем смысл этой проверки?
СтекВыгрузки.Количество() > 1 почему стоит возврат и все последующие действия игнорируются, подозреваю, что неодназначное определение ДанныхИб по отношению к ХДТО
Если номенклатура выгружается по ссылке (из документа, например), то нет смысла готовить данные для полной выгрузки, т.к. они будут проигнорированы.
Для отладки необходимо в конфигураторе указать ключ запуска РежимОтладки
Спасибо, что показали на место вставки кода, я уж думал, что процедуры просто не вызываются, теперь картинка сложилась.
добрый день
странное поведение, загружаемые организации записались последовательно в организацию базы приемника, и соответственно, какая последняя записалась поверх, та и осталась в приемнике.
но новые организации не добавились)
буду ковырять загрузку на стороне приемника)
Выше уже был этот пример.
Если НЕ ДанныеИБ=Неопределено Тогда // Не замещать существующие объекты в приемнике при загрузке, а только создавать новые и заполнять их
ПолученныеДанные = Неопределено;
Возврат;
КонецЕсли;
1. из источника нужно выгрузить документ с ТЧ а в приемник нужно по каждой строке ТЧ загружать документ.
2. Хотим контролировать информацию на отправку. например никогда не выгружать договоры. Набор разрешенных к выгрузке объектов должен настраиваться в пользовательском режиме.
1. Примеры можно в типовых правилах посмотреть.
Можно в базе источнике формировать документ. Пример в ERP, КА УТ, в ПОД Документ_УстановкаЦенНоменклатуры_Отправка
ОбменДаннымиXDTOСервер.ВыгрузкаОбъектаВыборки(КомпонентыОбмена, ДанныеИБСтруктура,
ПравилоУстановкаЦенОтправка);
Или на стороне приемника пример там же ПОД Документ_ВводОстатков_Отправка - создаём несколько ПКО, первая строка УстановитьИспользованиеПКО(ИспользованиеПКО, Ложь); или ОчиститьИспользованиеПКО(ИспользованиеПКО); и потом при условии установить истина для ПКО или вставить имя ПКО.
2. В доработанных платных правилах обмена это есть. Все доработки в расширении.
Направление: Получение.
ПОД: Документ_ОтчетОРозничныхПродажах_Получение.
ПКО: Документ_ОтчетОРозничныхПродажах_Получение.
Объект: Документ.ОтчетОРозничныхПродажах.
Событие: Получение.
Объект: Документ объект: Отчет о розничных продажах, Отчет о розничных продажах 00ВЭ-001055 от 20.12.2023 20:18:37 ().
Ошибка конвертации свойств.
Ошибка конвертации свойства объекта XDTO, имя свойства: <БонуснаяКарта>.
Событие: Получение.
Обработчик: ПриКонвертацииДанныхXDTO.
Объект: Справочник объект: Дисконтные карты, <> ().
Ошибка выполнения обработчика.
Поле объекта не обнаружено (ПрограммаЛояльности)
Подскажите, пожалуйста, как это исправить? Не могу понять где должно быть это поле ПрограммаЛояльности?
Быстро не подскажу, к сожалению. УНФ - это какая-то конфигурация сама в себе. Там всё не так. Качество типовых правил хуже, чем у других. Розница и Управление Торговлей вроде бы пересекаются, но с этими дисконтными картами всё с ног на голову поставлено.
А связать обменом УНФ и Розницу - это взрывная смесь. Несколько недель только по дисконтным картам я переделывал формат обмена и правила обмена.
Как наладить обмен в типовом варианте.
Первое, что нужно понимать - совместно с документом не выгружаются связанные справочники. Так работает любой обмен через планы обмена. Перед обменом документами нужно обменяться всеми связанными справочками.
Если справочники согласованы и проблема осталась, нужно из каждой конфигурации выгружать каждый справочник, который связан по этому вопросу и смотреть что выгружается в какой объект формата, анализировать как из этого объекта формата загружается, чтобы понять что по дороге теряется.
Обработка Конфигурации - загрузка структуры конфигурации из XML/EDT
Если правила обмена, которые Вы готовите для одной задачи и они никогда более не понадобятся, то целесообразнее использовать КД2.
В последней конфигурации КД 3.1 появилось много проверок. Иногда это неудобно.
КД3, XDTO, EnterpriseData подойдёт, например, если сегодня Вы сделали правила для УТ 11.1 и УТ 11.5. А потом Вам понадобился перенос в ERP 2.6, например. Делаете правила для ERP 2.6, а для УТ 11.1 уже не нужно делать.
Автогенерация соответствия реквизитов (ПКС) возможна. ПОД и ПКС придётся создавать вручную.
Но не забывайте, что для КД3 нужно два комплекта правил.
1. Из исходной выгрузка в -> ED
2. Из ED -> загрузка в конечную.
Если загружать планируется в типовую базу, то можно воспользоваться преимуществом КД3 - Вам понадобится сделать правила только для выгрузки из Вашей базы в ED. И не нужно будет заморачиваться как заполнить данные в типовой базе.
Так для этого и создана данная статья, чтобы прояснить в чем отличие. )
В обмене XML участвуют только 2 базы определенной версии.
А единожды создав правила xdto для текущей базы можно обеспечить обмен с любой базой, поддерживающей этот формат.
После обновления конфигурации одной из типовых баз, участвующих в обмене, XML обмен может поломаться, XDTO - нет, т.к. он для этого и предназначен - независимость от версии правил и конфигурации в другой базе.
Если делать для себя, то решать самому - делать на том, на чём будет приемлемый результат. Если нет опыта в ED, то не рисковать если сроки поджимают.
Настроен типовой обмен между ЕРП и БП. Некоторые документы не нужно чтобы перегружались, например "Ведомость в банк", "Ведомость в кассу" и "Ведомость на счета".
Раньше делал это отключением регистрации в правилах регистрации на стороне ЕРП. Но почти при каждом обновлении эти правила требовалось актуализировать, плюс бывало, что после правки правил регистрации вообще зарегистрировалось много лишнего (по организациям не указанным для обмена). Наверняка что-то сам сделал не так, но суть в том, что хочу найти другой способ решения.
Все эти 3 документа в ЕРП грузятся в один документ в БП - "ВедомостьНаВыплатуЗарплаты".
В модуле "МенеджерОбменаЧерезУниверсальныйФормат13" через расширение заменил процедуру "ПКО_Документ_ВедомостьНаВыплатуЗарплаты_Получение_ПередЗапи
&Вместо("ПКО_Документ_ВедомостьНаВыплатуЗарплаты_Получение_ПередЗапи
Процедура Расш_ПКО_Документ_ВедомостьНаВыплатуЗарплаты_Получение_Перед
ПолученныеДанные = Неопределено; //не загружать объекты
КонецПроцедуры
Проверил на копии, и вроде бы оно корректно работает. Но есть сомнения. Прошу подсказать допустимо ли такое решение или нет. И что может пойти не так.
Знаю что похожий способ применяется для справочников, чтобы существующие не замещались, к примеру:
Если НЕ ДанныеИБ = Неопределено Тогда // Не замещать существующие объекты в приемнике при загрузке, а только создавать новые и заполнять их
ПолученныеДанные = Неопределено;
КонецЕсли;
(488)
Добрый день!
Оба варианта можно применять как для справочников, так и для документов.
_Отправка_ПриОбработке( может отсутствовать у некоторых объектов, т.к. код там не задан и процедура в правила не добавляется.
В последних ERP уже есть штатная возможность по документам указать что не выгружать.
Здравствуйте. Огромное спасибо!
Если можете, подскажите пожалуйста что за штатная возможность? Вижу что в настройке синхронизации можно задать отбор по типам документов (выбрано "Казначейство"). Но где можно более детально задать/отключить конкретные документы - не вижу.
Процедура ПОД_Документ_РеализацияТоваровУслуг_Отправка_ПриОбработке(...
ОчиститьИспользованиеПКО(ИспользованиеПКО);
или
ИспользованиеПКО.Документ_РеализацияТоваровУслуг = Ложь;
или
УстановитьИспользованиеПКО(ИспользованиеПКО, Ложь);
К примеру, в моем случае:
Процедура ПОД_Документ_ВедомостьНаВыплатуЗарплатыПереч_Отправка_ПриОбр
ОчиститьИспользованиеПКО(ИспользованиеПКО);
КонецПроцедуры
Это уже получается на стороне отправляющей стороны - ЕРП.
Но заметил что для "ВедомостьНаВыплатуЗарплатыПереч" есть процедура с "ПриОбработке" в конце, а для двух остальных (ВедомостьВБанк и ВедомостьВКассу) такой процедуры нет.
-<Отбор>
-<Свойство Имя="Упаковка">
-<Ссылка Нпп="92">
+<Свойство Имя="{КлючПоискаВИБИсточнике}">
+<Свойство Имя="{ИмяТипаВИБИсточнике}">
+<Свойство Имя="{ИмяТипаВИБПриемнике}">
+<Свойство Имя="{УникальныйИдентификатор}">
+<Свойство Имя="Владелец" Тип="СправочникСсылка.Номенклатура">
+<Свойство Имя="Числитель">
</Ссылка>
</Свойство>
</Отбор>
+<СтрокиНабораЗаписей>
</НаборЗаписейРегистра>
-
Откуда возникает этот отбор? Как его отключить в правилах?
Во-первых, Максим, благодарю Вас за помощь с моим первым ED обменом!
Решил поделиться решением проблемы, которая у меня возникла с КД 3.1.5.
Выполнив инструкции и заменив МенеджерОбменаЧерезУниверсальныйФормат в БП 2.1.54.6 и УТ 3.5.12.270 (для Беларуси) получил ничего не значащую ошибку при обмене в УТ:
Не удалось выполнить отправку данных. Подробности см. в журнале регистрации
Опять же Максим, в одном из топиков, обратил внимание, что ошибка описана в журнале выше.
Ошибка была такой:
{ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(8535)}:Отбор.Вставить("Объект", ТипОбъекта.Имя);
{ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(2793)}:ЗаполнитьПоддерживаемыеОбъектыФорматаПоКомпонентамОбмена(ТаблицаОбъекты, КомпонентыОбмена);
В отладке узнал о каком ПКО идет речь: им оказался Справочник_НомерГТД.
Причиной оказалось, что это ПКО при отправке не содержит ТипXDTO (см.скриншот).
Сравнил упоминание ПКО Справочник_НомерГТД в модуле МенеджерОбменаЧерезУниверсальныйФормат до трансформации через КД 3.1.5 и нашел разницу в процедуре ЗаполнитьПравилаКонвертацииОбъектов.
В результате понял, что при загрузке ошибочно определен признак Отправка. Снял его и все заработало.
Дело в том, что у меня при обмене используется ED 1.6 в котором нет справочника НомераГТД.
Первое, что на ум приходит - по префиксу номера (для документов) настроить ПРО.
Второе - проверять в ПРО наличие ссылки в "Публичные идентификаторы синхронизируемых объектов".
Но, может есть штатная фишка и не надо велики изобретать?
(конфы свежие)
для базы-приемника использовать сови правила регистрации, с отменой всех объектов к регистрации или по вашему отбору
- если новых объектов нет в XDTO необходимо их добавить. касается нетиповой конфы. Пакеты XDTO могут по сути быть разными в разных конфигурациях?
- необходимо разработать 2 комплекта правил. один для отправки (нетиповая), для загрузки (если не найду нужных правил). В конфигурацию КД 3 для разработки правил надо будет загружать правила из нетиповой и из отраслевой? И по ним уже пытаться состыковать обмен?
- если правила надо будет изменять, надо будет изменять код в модуле МенеджерОбменаЧерезУниверсальныйФормат? смотря конечно какие правила надо будем изменять (для отправки или приема).
Рейтинг: 3151
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 695523
Создание 19.11.17 20:37
Обновление 19.01.19 15:49
Просмотры 437322
Загрузки 0
Рейтинг
1232
Комментарии 501
Код открыт Да
Рубрики Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP
Кому Разработчик
Тип файла Нет файла
Платформа 1С:Предприятие 8
Конфигурация 1С:Конвертация данных
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)