Имя: Пароль:
1C
1С v8
План обмена, синхронизация без правил конвертации, неидентичные конфигурации
0 lg2marvel
 
24.06.19
16:45
Добрый день.
Нужно синхронизировать (на постоянной основе) 2 базы: ЗУП3 и ЗУП3 (сильно допиленный). Создал план обмена, синхронизирую справочники, но дойдя до синхронизации справочника должностей (в ЗУП допиленном добавлены реквизиты) - не загружается. Пишет ошибку:

{ОбщийМодуль.ОбменДаннымиСервер.Модуль(6190)}: Ошибка при вызове метода контекста (ПрочитатьXML)
            Данные = ПрочитатьXML(ЧтениеXML);
по причине:
Ошибка преобразования данных XML: [sfile://C:/Users/karpinskiy/AppData/Local/Temp/Exchange82 {2A29E1EC-52A8-46F2-9F7B-8967FEC6A589}/Message_П2_У1.xml][52,4]

Можно ли это как-то обойти? В приемнике мне не нужно трогать добавленные реквизиты?
1 Beduin
 
24.06.19
16:47
(0) А ты через какую конвертацию отправляешь? 2.0
2 lg2marvel
 
24.06.19
16:48
(1) не использую конвертацию
3 Fragster
 
гуру
24.06.19
16:49
если на значения насрать, то можно через xslt преобразование фигануть и получить валидный xml
4 lg2marvel
 
24.06.19
16:50
Модуль менеджера:
Процедура ПриПолученииНастроек(Настройки) Экспорт
    
    Настройки.Алгоритмы.ПриПолученииВариантовНастроекОбмена   = Истина;
    Настройки.Алгоритмы.ПриПолученииОписанияВариантаНастройки = Истина;

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

Процедура ПриПолученииВариантовНастроекОбмена(ВариантыНастроекОбмена, ПараметрыКонтекста) Экспорт
    
    ВариантНастройки = ВариантыНастроекОбмена.Добавить();
    ВариантНастройки.ИдентификаторНастройки = "";
    ВариантНастройки.КорреспондентВМоделиСервиса = Ложь;
    ВариантНастройки.КорреспондентВЛокальномРежиме = Истина;
    
КонецПроцедуры

Процедура ПриПолученииОписанияВариантаНастройки(ОписаниеВарианта, ИдентификаторНастройки, ПараметрыКонтекста) Экспорт
    
    КраткаяИнформацияПоОбмену = НСтр("ru = 'Позволяет синхронизировать данные между двумя программами 1С:Библиотека стандартных подсистем.
    |Особенностью данного вида синхронизации данных является отсутствие правил конвертации данных и требование идентичности конфигураций у синхронизирующихся программ.'");
    
    ПодробнаяИнформацияПоОбмену = "http://its.1c.ru/db/bspdoc#content:120:1:IssOgl2_Обмен%2520с%2520БСП%2520(без%2520использования%2520правил%2520обмена)";;
    
    ОписаниеВарианта.КраткаяИнформацияПоОбмену   = КраткаяИнформацияПоОбмену;
    ОписаниеВарианта.ПодробнаяИнформацияПоОбмену = ПодробнаяИнформацияПоОбмену;
    
    ОписаниеВарианта.ИмяКонфигурацииКорреспондента          = Метаданные.Имя;
    ОписаниеВарианта.НаименованиеКонфигурацииКорреспондента = НСтр("ru = '1С:Библиотека стандартных подсистем'");
    ОписаниеВарианта.ИмяФайлаНастроекДляПриемника           = НСтр("ru = 'Настройки синхронизации для БСП (без использования правил)'");
    
    ЗаголовокКоманды = НСтр("ru = '1С:Библиотека стандартных подсистем (без использования правил обмена)'");
    ОписаниеВарианта.ЗаголовокКомандыДляСозданияНовогоОбменаДанными = ЗаголовокКоманды;
    
    // Отборы
    СтруктураТабличнойЧастиОрганизации = Новый Структура;
    СтруктураТабличнойЧастиОрганизации.Вставить("Организация", Новый Массив);
    
    ОписаниеВарианта.Отборы.Вставить("ДатаНачалаВыгрузкиДокументов",    НачалоГода(ТекущаяДатаСеанса()));
    ОписаниеВарианта.Отборы.Вставить("Организации",                     СтруктураТабличнойЧастиОрганизации);
    ОписаниеВарианта.Отборы.Вставить("ИспользоватьОтборПоОрганизациям", Ложь);
    
КонецПроцедуры
Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт
    
    Результат = Новый Массив;
    Результат.Добавить("РегистрироватьИзменения");
    Возврат Результат;
    
КонецФункции
5 lg2marvel
 
24.06.19
16:51
(3) не хотелось бы затирать значения которые уже записаны в приемнике
6 Beduin
 
24.06.19
16:53
(5) Он тебе про то, чтобы в xml оставить только реквизиты из приемника
7 Йохохо
 
24.06.19
16:53
(6) а он про двусторонний обмен)
8 unbred
 
24.06.19
16:57
(2) используй
9 bolobol
 
24.06.19
16:57
Я делал при такой ошибке - выгрузку элемента из базы приёмника в тот же формат и сравнивал теги - отсутствующие добавлял, лишние удалял. Дописывал стандартный обмен между идентичными
10 lg2marvel
 
24.06.19
16:57
(7) устраивает и односторонний обмен
11 bolobol
 
24.06.19
17:00
В версионировании на хранилище значений - есть код при сравнении с прошлой версией, когда конфигурация не совпадает - по-тег-овое чтение/сравнение
12 lg2marvel
 
24.06.19
17:01
(9) это хорошо когда один раз сделал синхронизацию и забыл, но нужно синхронизировать ежедневно
13 lg2marvel
 
24.06.19
17:03
попробую с использованием правил конвертации
14 bolobol
 
24.06.19
17:05
(12) Всё что требует ежедневности - разрабатывается, тестируется, внедряется, запускается и забывается
15 bolobol
 
24.06.19
17:06
Я к тому, что - сделайте ежедневную и забудьте.
16 lg2marvel
 
24.06.19
17:12
(11) не подскажите где конкретней можно найти этот код?
17 bolobol
 
24.06.19
17:16
На платформе без встроенного версионирования, например в БУх3, в конфигураторе "пауза" и вывести отчёт об изменении объекта. Код будет очень рядом.
18 Rema Dan
 
24.06.19
17:24
(0) Для корректной сериализации обратно требуется, чтобы полностью совпадали реквизиты передаваемых элементов. Как состав реквизитов, так и порядок реквизитов.
Не проверял, но вроде как при ручной сериализации через "Новый СериализаторXDTO(ФабрикаXDTO)" таких требований нет. Можно попробовать отправку/получение через СериализаторXDTO.ЗаписатьXML(..) и СериализаторXDTO.ПрочитатьXML(..).
19 lg2marvel
 
24.06.19
17:29
(17) спасибо, посмотрю
(18) спасибо, буду иметь в виду
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший