1C 8.3 Управляемый XML обмен через план обмена #758559


#0 by Darklight
Возникла потребность выгружать данные в XML файл обмена через функцию "ПланыОбмена.ВыбратьИзменения" (ниже пример из справки): Но в этом случае в файл XML не попадает секция "<v8de:Changes>" Соответственно такой файл нельзя загрузить через "ПланыОбмена.ПрочитатьИзменения" А так же нет возможности передавать изменённую конфигурацию. Можно ли как-то получить эту секцию "<v8de:Changes>" в результирующем XML файле обмена?
#1 by VikingKosmo
РИБ не предлагать?
#2 by Darklight
Что Вы имеете в виду упоминая Распределённые Информационные Базы?
#3 by VikingKosmo
я имею ввиду свойство "Распределенная ИБ" у плана обмена
#4 by Быдло замкадное
сложные методы вы ищете. Лучше стандартный обмен + правила КД, в которых все особенности прописать
#5 by VikingKosmo
он же хочет еще конфигурацию передавать...
#6 by Darklight
Галочка установлена (но в упор не помню за что она отвечает) Что Вы имеете в виду. Написал же в что конфигурация самописаная Проблема возникла в том, что нужен определённый порядок выгрузки видов объектов. Сейчас одно 1С известным способом вызов "ПланыОбмена.ЗаписатьИзменения" записывает изменённые объекты полностью хаотично. Перемешивая регистры и справочники. А нужно - в определённом порядке (он будет важен при загрузке, в которой идёт обработка загружаемых данных). Использование "ПланыОбмена.ВыбратьИзменения" с фильтром позволяет получить нужный порядок, но не позволяет получить секцию <v8de:Changes>, особенно подсекцию "<v8de:Config xmlns:v8md=";
#7 by Darklight
Может, если я сделаю фиктивный узел, у которого не будет зарпегистрированных изменений. Тогда я смогу через "ПланыОбмена.ЗаписатьИзменения" выгрузить все заголовки (включая "<v8de:Config xmlns:v8md=";;) А потом средствами XML выдернуть нужную мне секцию с конфигурацией. Но... это может прокатить если обмен идёт лишь между двумя узлами А если избудет больше - то принятые изменения конфигураций для них будут различные.
#8 by Darklight
Получается, придётся сначала всё выгрузить как обычно через "ПланыОбмена.ВыбратьИзменения" (со всеми хаотичными данными). Из файла выдернуть секцию  "<v8de:Config xmlns:v8md=";, затем уже повторно выгрузить через "ПланыОбмена.ВыбратьИзменения", вручную создав секцию <v8de:Changes>, подсекцию <v8de:Nodes> (и т.п.) вставив секцию "<v8de:Config xmlns:v8md="; Но так получается двойная выгрузка - двойная нагрузка и время. В общем для меня не критично, но всё равно - не красиво...
#9 by Darklight
опечатлася в строке "как обычно через "ПланыОбмена.ВыбратьИзменения"" имелось в виду "ПланыОбмена.ЗаписатьИзменения"
#10 by Darklight
Иной вариант - это xsl преобразование уже выгруженного через "ПланыОбмена.ЗаписатьИзменения" файла xml с целью переупорядочивания его данных. Но для меня это не простое решение. Хотя оно и относительно красивое.
#11 by Живой Ископаемый
"Сейчас одно 1С известным способом вызов "ПланыОбмена.ЗаписатьИзменения" записывает изменённые объекты полностью хаотично. Перемешивая регистры и справочники. А нужно - в определённом порядке (он будет важен при загрузке, в которой идёт обработка загружаемых данных). " Почему это будет важно?
#12 by Darklight
Важен, т.к. есть непрямые (не ссылочные) связи и при загрузке объекты и связи могут изменяться/подменяться/отправляться назад (изменённые/удалённые-отклонённые). Альтернативой является лишь ввод специального регистра сведений, в который буду помещаться ссылки на все загруженные объекты (тут есть сложности, т.к. есть ещё и наборы записей регистров). И, тогда сначала проводить всю загрузку целиком как есть (с заполнением регистра), а лишь потом упорядоченную их обработку из этого регистра, изменяя объекты и после уже выгружая изменения назад.
#13 by Darklight
Попробовал XSL преобразования - намаялся - ничего не заработало.... этот вариант бросил...
#14 by denfil
1. Включить РИБ 2. Отключить авторегистрацию у объектов. 3. Подписаться на событие передзаписью у плана обмена. Регистрировать что нужно и не регистрировать чего не нужно. Образцов в типовых тьма.
#15 by Darklight
1. Включено Вы о чём?
#16 by Darklight
В общем реализовал с двойной выгрузкой Сначала функцией "ПланыОбмена.ЗаписатьИзменения" выгружаю как есть (во временный файл; до узла "v8de:Data") Затем функцией переношу заглавную часть стандартной выгрузки в другой файл (без изменённых объектов данных) затем в него же повторно выгружаю изменённые объекты данных (секция "v8de:Data") здесь Фильтр  - это подготовленный массив объектов метаданных (или самих объектов данных) для выгрузки изменений (упорядоченный нужным образом) и закрываю запись xml Вроде как работает ;)
#17 by Darklight
Добавлю лишь то, что выше Контейнер - получен из ПланыОбмена.СоздатьЗаписьСообщения После основной выгрузки он зкарывается (но перед этим его параметры сохраняются в структуру): и далее уже используется данные из неё при повторной выгрузке через "ПланыОбмена.ВыбратьИзменения(Контейнер.Получатель, Контейнер.НомерСообщения, ЭлементФильтр)"
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С