Имя: Пароль:
1C
1С v8
com-соединение и поиск строк в удаленной базе
0 denco_78
 
31.01.21
15:32
Надо сравнить две одинаковые ТЧ в локальном и удаленном документах и найти различающиеся строки.

С созданием структуры поиска в удаленной базе разобрался, хоть и сломал всю голову. Не могу из массива результата поиска получить найденную строку, чтобы ее удалить из ТЗ. РезультатПоиска.Получить (0) говорит, что метод (Получить) не обнаружен. Хотя УдаленнаяТЗ.НайтиСтроки (УдаленнаяСтруктураПоиска).Получить (0) нормально работает.


<code>
ЛокальнаяТЗ = Объект.Товары.Выгрузить();
УдаленнаяТЗ = УдаленныйОбъект.Товары.Выгрузить();
        
ЧислоЛокальныхСтрок = ЛокальнаяТЗ.Количество();
                
ИндексСтроки = ЧислоЛокальныхСтрок -1;
                
Пока ИндексСтроки >=0 Цикл
    ЛокальнаяСтрока = ЛокальнаяТЗ[ИндексСтроки];
    УдаленнаяСтруктураПоиска = ПолучитьУдаленнуюСтруктуруПоиска (ЛокальнаяСтрока, ИменаКолонокТЧ, ПодключениеКБазе2);
    РезультатПоиска = УдаленнаяТЗ.НайтиСтроки (УдаленнаяСтруктураПоиска);
                    
    Если РезультатПоиска.Количество() > 0  Тогда
        ЛокальнаяТЗ.Удалить (ЛокальнаяСтрока);
        УдаленнаяТЗ.Удалить (РезультатПоиска.Получить (0));
    КонецЕсли;
                    
    ИндексСтроки = ИндексСтроки - 1;
КонецЦикла;


Функция ПолучитьУдаленнуюСтруктуруПоиска (ЛокальнаяСтрока, ИменаКолонокТЧ, УдаленноеПодключение)
    ЧислоКолонок = ИменаКолонокТЧ.Количество();
    
    УдаленнаяСтруктураПоиска = УдаленноеПодключение.NewObject ("Структура");
    
    Для ИндексКолонки = 0 По ЧислоКолонок-1 Цикл
        ИмяКолонки = ИменаКолонокТЧ[ИндексКолонки];
        ЛокальноеЗначение = ЛокальнаяСтрока[ИмяКолонки];
        ТипДанныхXML = XMLТипЗнч (ЛокальноеЗначение);
                
        УдаленнаяСтруктураПоиска.Вставить (ИмяКолонки,
            УдаленноеПодключение.XMLЗначение (УдаленноеПодключение.ИзXMLТипа(ТипДанныхXML.ИмяТипа, ТипДанныхXML.URIПространстваИмен), XMLСтрока (ЛокальноеЗначение)));
    КонецЦикла;
    Возврат УдаленнаяСтруктураПоиска;
КонецФункции
</code>
1 Ахмадинежад
 
31.01.21
15:58
лучше скопируй сюда - и тут сравнивай через врем таблицы в запросе полным соединением.
2 Chameleon1980
 
31.01.21
15:58
используй Get вместо получить - бывает
3 Eeeehhhh
 
31.01.21
16:02
(0) сделай проще
1. приведи объекты к примитивном типу
2. загони в тз на стороне com ЗначениеВСтрокуВнутр на стороне проверки ИзСтроки
3. загони обе ТЗ в запрос и сравни
4 denco_78
 
31.01.21
16:48
(2) Точно, Get. Так и думал, что причина будет дурацкая. :) Спасибо!
(1) , (3)  Да я уже сделал так. На самом деле задача разовая - отследить какие документы поменялись после запуска некоей обработки.
Всем спасибо за советы!
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн