Добрый день, друзья! Нуждаюсь в совете )
Разделили базу на 2 части, одна типовая, вторя немного измененная.
В измененной добавлено пару реквизитов в справочнике и из-за этого не получается произвести выгрузку и загрузку XML...
Пытаюсь выгрузить основные реквизиты, а самописные обойти, пока не получается) может кто подскажет ?)
вот код:
Разделили базу на 2 части, одна типовая, вторя немного измененная.
В измененной добавлено пару реквизитов в справочнике и из-за этого не получается произвести выгрузку и загрузку XML...
Пытаюсь выгрузить основные реквизиты, а самописные обойти, пока не получается) может кто подскажет ?)
вот код:
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Данные");
Запись.ЗаписатьСоответствиеПространстваИмен("", "http://v8.1c.ru/8.1/data/enterprise/current-config");
Запись.ЗаписатьСоответствиеПространстваИмен("xsd", "http://www.w3.org/2001/XMLSchema");
Запись.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");
Выборка = Справочники.ФизическиеЛица.Выбрать();
Пока Выборка.Следующий() Цикл
СериализаторXDTO.ЗаписатьXML(Запись, Выборка.ПолучитьОбъект()); ////Вот здесь при записи можно ли как то обойти обход при записи этих не типовых реквизитов ?
КонецЦикла;
Запись.ЗаписатьКонецЭлемента();
Текст = Запись.Закрыть();
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(Текст);
Чтение.ПерейтиКСодержимому();
Чтение.Прочитать();
Пока Чтение.ТипУзла<>ТипУзлаXML.КонецЭлемента Цикл
Объект = СериализаторXDTO.ПрочитатьXML(Чтение);
//покажем что прочитали, осталось только записать объект
Сообщить(""+ТипЗнч(Объект)+" - "+Объект);
КонецЦикла;
Чтение.Закрыть();
ПоказатьПо теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) подсказали в 3. разовый обмен в ручную выгружаете каждый реквизит и загружаете через сериализатор или выгружаетет через суриализотор а загружаете построчным чтением (можно все выгружать и загружать пореквизитно)
если это будет постоянно то лучше написать правила и выгружать через сериализатор не опускаясь до структуры
если это будет постоянно то лучше написать правила и выгружать через сериализатор не опускаясь до структуры
(2) Почему же нельзя,
если это
заменить на запись каждого реквизита вручную в xml с той же структурой, что и в типовой базе, то думаю можно будет.
Что-то типа..
Хотя проще и быстрее, на мой взгляд, написать правила обмена через КД и грузить через универсальный обмен xml.
если это
СериализаторXDTO.ЗаписатьXML(Запись, Выборка.ПолучитьОбъект()); ////Вот здесь при записи можно ли как то обойти обход при записи этих не типовых реквизитов ?
заменить на запись каждого реквизита вручную в xml с той же структурой, что и в типовой базе, то думаю можно будет.
Что-то типа..
ЗаписьXML.ЗаписатьНачалоЭлемента(XMLТипЗнч(Объект).ИмяТипа);
ЗаписьXML.ЗаписатьНачалоЭлемента(ИмяРеквизита);
ЗаписатьТекстXML(ЗаписьXML, ЗначениеРеквизита);
ЗаписьXML.ЗаписатьКонецЭлемента();
...........
ЗаписьXML.ЗаписатьНачалоЭлемента(ИмяРеквизита999);
ЗаписатьТекстXML(ЗаписьXML, ИмяРеквизита999);
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьКонецЭлемента();
ПоказатьХотя проще и быстрее, на мой взгляд, написать правила обмена через КД и грузить через универсальный обмен xml.
(3)
(4)
Вот на данный момент у меня так, через выборку и запись каждого элемента и реквизита, но хотелось бы как то оптимизировать это всё. Так как выгружаются физические лица, там и связь с регистром (Документы) и справочником (Сотрудники) и тд. Писать КД и через универсальный обмен не желательно )) У меня всё "Одной" кнопкой делается : Подключение -запись в xml - чтение - Запись в базу
А просто скопировать объект и убрать лишние реквизиты не получится ? или наоборот добавить при записи ?)
(4)
Вот на данный момент у меня так, через выборку и запись каждого элемента и реквизита, но хотелось бы как то оптимизировать это всё. Так как выгружаются физические лица, там и связь с регистром (Документы) и справочником (Сотрудники) и тд. Писать КД и через универсальный обмен не желательно )) У меня всё "Одной" кнопкой делается : Подключение -запись в xml - чтение - Запись в базу
А просто скопировать объект и убрать лишние реквизиты не получится ? или наоборот добавить при записи ?)
(6)
Еще вариант, взять результаты
из двух баз, найти отличия м/у ними и, удалять эти строки после выгрузки..
Можно попробовать что-то вроде:
Еще вариант, взять результаты
СериализаторXDTO.ЗаписатьXML(Запись, Выборка.ПолучитьОбъект());
из двух баз, найти отличия м/у ними и, удалять эти строки после выгрузки..
Можно попробовать что-то вроде:
ЗаписьXML = Новый ЗаписьXML;
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Выборка.ПолучитьОбъект());
СтрXML = ЗаписьXML.Закрыть();
УдалитьЛишнееИзСтроки(СтрXML); //Тут удаляете информацию о лишних реквизитах и приводите структуру к приемнику.
Запись.ЗаписатьТекст(СтрXML);
Вместо
Выборка = Справочники.ФизическиеЛица.Выбрать();
Сделать запрос с нужными полями - это конечно же сложнее, чем придумывать разные костыли по выгрузке каждого реквизита стандартной выборки :)
Чудаки, балин.....
Выборка = Справочники.ФизическиеЛица.Выбрать();
Сделать запрос с нужными полями - это конечно же сложнее, чем придумывать разные костыли по выгрузке каждого реквизита стандартной выборки :)
Чудаки, балин.....
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот