Имя: Пароль:
1C
1С v8
Сравнение двух объектов
0 1CVERYGOOD
 
17.10.13
13:12
Есть две предположительно одинаковые базы. Для достоверности нужно сравнить некоторые документы. Из одной базы выгрузил РТиУ в xml. Теперь в другой базе по читаю этот xml. По идентификатору нахожу соответствующий документ. А как перебрать и сравнить все реквизиты двух полученных объектов ?
1 alexei366
 
17.10.13
13:17
Метаданные().Реквизиты , СтандартныеРеквизиты, ТабличныеЧасти
2 Maxus43
 
17.10.13
13:17
да выгрузи тоже в файл и сравни 2 файла
3 1CVERYGOOD
 
17.10.13
13:22
(2) Так пробовал уже. Почему то некоторые реквизиты местами поменяны. Так то документы идут a файле один к одному. Вот если бы реквизиты не путались временами то можно было бы построчно сравнить.
4 1CVERYGOOD
 
17.10.13
13:24
А как получить значения Метаданные().Реквизиты для конкретного объекта ?
5 Maxus43
 
17.10.13
13:24
(3) конфигурации значит разные, состав реквизитов всмысле
6 lopus
 
17.10.13
13:26
ТвойОбъект.Метаданные().Реквизиты
7 1CVERYGOOD
 
17.10.13
13:31
Это список реквизитов. А где взять их значения?
8 1CVERYGOOD
 
17.10.13
13:37
Ответ:
НовыйОбъект1[НовыйОбъект1.Метаданные().Реквизиты.Получить(2).Имя]
9 Defender aka LINN
 
17.10.13
13:39
(0) Через COM не проще? Ну и базы таки одинаковые, или нет?
10 1CVERYGOOD
 
17.10.13
13:43
Конфигурации одинаковые, только могут порядком элементов метаданных отличаться.
11 Defender aka LINN
 
17.10.13
13:50
(10) Это уже называется "Разные".
12 1CVERYGOOD
 
17.10.13
15:26
Через COM. Не получается перебирать реквизиты объектов другой базы. Их значение = COM объект. Только если жестко прописывать коды и тп.    


        Сервер = "192.168.0.1";
    БазаДанных   = "***********";
    Пользователь = "************";
    Пароль = "********";
    
    V82 = Новый COMобъект("V82.ComConnector");
    
    СтрокаПодключения =  "srvr='" + СокрЛП(Сервер)
    + "'; ref='" + СокрЛП(БазаДанных)
    + "'; usr='" + СокрЛП(Пользователь)
    + "'; pwd='" + СокрЛП(Пароль) + "';";
    
    БазаИсточник = V82.Connect(СтрокаПодключения);    
    докРабочейБазы = БазаИсточник.Документы.РеализацияТоваровУслуг.Выбрать('20130101','20130331',,"Дата Возр, Номер Возр");
    
    Пока докРабочейБазы.Следующий() Цикл
        докНовойБазы = Документы.РеализацияТоваровУслуг.НайтиПоНомеру(докРабочейБазы.Number, докРабочейБазы.Date);
        Если докНовойБазы = Неопределено ИЛИ докНовойБазы = Документы.РеализацияТоваровУслуг.ПустаяСсылка() Тогда
            Сообщить("В новой базе нет: " + докНовойБазы);
            Продолжить;
        КонецЕсли;                      
        Для Каждого рекв из докНовойБазы.Метаданные().Реквизиты Цикл
            Если докРабочейБазы[рекв.имя] <> докНовойБазы[рекв.имя] Тогда
                Сообщить("!!!Отличие: " + Строка (докРабочейБазы) + "    " +Строка ( докНовойБазы) + "    " + Строка (рекв));
            КонецЕсли;    
        КонецЦикла;
    КонецЦикла;
13 Serg_1960
 
17.10.13
15:32
(11) Одинаковые,но не идентичные :)
14 Euguln
 
17.10.13
15:38
Создай объект, заполни из xml, сравни со ссылкой существующего объекта.
15 1dvd
 
17.10.13
15:39
16 Serg_1960
 
17.10.13
15:40
(я так, только мимо пробегая) В типовом версионирование есть сравнение и выявление отличий версий(объектов).
17 1CVERYGOOD
 
17.10.13
15:47
(14) поскольку порядок реквизитов разный, метод ПрочитатьXML() выдает ошибку при чтении документа xml. Пробовал менять порядок в xml файле - работает.
18 1CVERYGOOD
 
17.10.13
15:47
(16) можно по подробнее ?
AdBlock убивает бесплатный контент. 1Сергей