Обработка настроена на выгрузку и загрузку измененных документов Реализация и Заказ покупателя. В ручном режиме возможно добавить к выгрузке элементы справочников Номенклатура, Контрагенты, Организации.
Требования
- 1С Предприятие 7.7 для SQL
- Наличие внешней компоненты 1cpp.dll (для прямых запрос к SQL)
- Наличие внешней компоненты v7plus.dll (для работы с XML)
- Наличие УРБД (для регистрации измененных данных)
Установка
В режиме конфигуратора, через меню Администрирование — Распределенная ИБ — Управление, добавляем новую периферийную ИБ (код EDI, только получатель). Выгрузку данных не производить.
В режиме конфигуратора, для документов Реализация и Заказ покупателя изменим параметры миграции. Область распространения либо Все информационные базы, либо Место создания и центр с дополнением «EDI». Автоматическая регистрация изменений включена.
В режиме предприятия, запускаем обработку и через кнопку «Дополнительно…» выбираем пункт меню «Активировать новый узел». После активации, необходимо перезапустить базу.
Для программного вызова обмена, нужно открыть форму с параметром «ЗапуститьСинхронизацию». Например:
ОткрытьФорму("Отчет","ЗапуститьСинхронизацию","c:REPOExchangePlan77EnterpriseData_1_2_1.ert");
Техническая информация
Для хранения идентификаторов из периферийного узла, в каталоге ИБ создается файл ref7ref8.DBF.
GUID ссылочных данных в ИБ создается на основании данных функции ЗначениеВСтрокуВнутр.
Каталог обмена и номер последнего полученного пакета сообщения сохраняется в каталоге ИБ, в файле EnterpriseData.cfg.
Номер отправляемого сообщения вычисляется по данным УРБД.
Правильно я понимаю, что «между » УРБД EDI и собственно выгрузкой я смогу вставить сфои фильтры/код, чтобы например избежать ситуации когда «перемещение тмц» (миграция место создания и центр) созданное в центре уйдет только на току-склад-получатель, а не на все точки?
Если вы будете выгружать только через эту обработку, то естественно вы можете контролировать то что выгружаете. Но регистрация изменений всё-равно происходит в соответствии с настройками миграций.
К примеру, в данной версии обработки, стоит фильтр, не выгружать заказы, которые не были ранее загружены из узла «EDI». Хотя все заказы регистрируются в УРБД.
В гите версия посвежее — можно отдельно делать загрузка и выгрузку.
Обновил версию. Парсинг XML через объект XmlLiteReader, компоненты 1С++
прочитал!
Спасибо огромное!
Пишу сейчас нечто аналогичное, ваша обработка очень сильно помогла!
Отдельно хочу отметить, что код просто приятно читать 🙂
Возьму на заметку. Интересно когда клюшки вымрут как шестерка.
(7) XP вон тоже все ждут-ждут.. )
(6)
Спасибо! Стараемся. ))
Небольшое замечание — в обработке не проработана очистка таблицы 1SDWNLDS. Не сильно прирастает записью.
Все красиво, но не могу эту красоту на практике применить. Банальный вопрос 1CPP.dll не хочет регистрироваться#k8SjZc9Dxk
— копировал в папку C:WindowsSysWOW64 библиотеку
— запускал команду : C:WindowsSysWOW64
egsvr32 1CPP.dll
Результат:
ХМЛРидер = СоздатьОбъект(«1cpp.XmlLiteReader»);
{D:………..ENTERPRISEDATA_1_2_1.ERT(1129)}: Неудачная попытка создания объекта (1cpp.XmlLiteReader)
Люди подскажите что не так?
(10)1с++ вроде регистрировать не надо. Положи её в каталог bin или в каталог иб
И да, сначала её надо загрузить…
Может быть версия 1С++ не та.
(11), тоже делал, не помогло
(12)
как посмотреть?
Может быть 3.2.4
Здесь версия без XmlLiteReader
Ну вот почти то, что искал. Реально крутая штука! У меня достаточно трудоемкая задача и явно не на один месяц: перенос из самописанной базы 7.7 для инвесткомпании в новую 8.3. (Новой конфигурации ещё нет 🙂 ) Этот перенос не будет разовым, я подозреваю долгое время две базы будут работать параллельно, в один момент явно не перейти.. Сначала хотел конвертацию данных 2.0, но потом будет стоять задача сверки данных, особенно остатков.. И я хочу в формате EnterpriseData из 8-ки, плюс тот-же формат из 7-ки и дальнейшее сравнение двух файлов. Т.е. желание двух зайцев убить — и перенос, и сравнение.
В пакетах, которые приходят из 8-ки, ожидаются «MessageNo». Как в типовой формат «EnterpriseData» вставляются эти номера? Ну и контроль загрузки в 8-ку какой-нибудь есть? Т.е. Пакет принялся, но сам объект по каким-то причинам не записался. Желательно повторить отправку.
(18)
Номер берётся из плана обмена. Стандартный реквизит.
(18)
Если проблема с записью, то этот объект отобразится в мониторинге как проблемный. Пользователь сам должен разрешить что делать с этим объектом.
Денис, как я понял, обмен нужно выполнять только из самой обработки?
Можно ли воспользоваться стандартным механизмом УРИБ («Управление распределенными данными» — «Выгрузить данные» или «Загрузить данные» или «Автообмен»)?
(20)
Вы хотите делать Выгрузку/загрузку в каком-то вашем формате. Этот формат должен быть где-то описан алгоритмически. Описать его можно в обработке (там сейчас описан формат ED для нескольких типов данных).
Механизм УРИБ в обработке используется для регистрации измененных данных, для определения какие данные нужно будет выгружать при сеансе обмена. Обмен можно запускать программно, код в конце статьи.
Денис, ещё вопрос.
При выгрузке из 8-ки, через план обмена, т.е. с «MessageNo», какой формат используется?
И у меня, кстати, через план обмена не проходит загрузка
{mngbase/DataExchangeReadChanges.lf(90)}: Ошибка при вызове метода контекста (НачатьЧтение)
Message.BeginRead(Reader);
по причине:
Неправильный формат сообщения
Ясно, что надо под новый формат подстраиваться, но неясно какой он..
С последними вопросами я разобрался, а вот с контактной информацией контрагента проблема.
Я пытаюсь вставить строку вида:
«<ЗначенияПолей><КонтактнаяИнформация xmlns=»http://www.v8.1c.ru/ssl/contactinfo» …»
и вот амперсант в самом файле выглядит как
«<ЗначенияПолей><КонтактнаяИнформация ..»
как побороть?