Имя: Пароль:
1C
1С v8
Сравнение двух ТаблицЗначений типа ДанныеФормаКолекция
0 alekosansey
 
19.05.16
08:42
Добрый день. Подскажите пожалуйста как сравнить две ТаблицыЗначений (тип ДанныеФормаКолекция) не бегая на сервер, а все делая на клиенте.
1 zak555
 
19.05.16
08:44
Атгоритм сравнения тз видел?
2 alekosansey
 
19.05.16
08:48
Если ТипЗнч(ТаблицаЗначений1) <> Тип("Таблицазначений") ИЛИ ТипЗнч(ТаблицаЗначений2) <> Тип("ТаблицаЗначений") Тогда
        Возврат Ложь;
    КонецЕсли;
    
    Если ТаблицаЗначений1.Количество() <> ТаблицаЗначений2.Количество() Тогда
        Возврат Ложь;
    КонецЕсли;

    Если ТаблицаЗначений1.Колонки.Количество() <> ТаблицаЗначений2.Колонки.Количество() Тогда
        Возврат Ложь;
    КонецЕсли;
    
    // Проверим поля
    Для каждого Колонка Из ТаблицаЗначений1.Колонки Цикл
        Если ТаблицаЗначений2.Колонки.Найти(Колонка.Имя) = Неопределено Тогда
            Возврат Ложь;
        КонецЕсли;
    КонецЦикла;
    Для каждого Колонка Из ТаблицаЗначений2.Колонки Цикл
        Если ТаблицаЗначений1.Колонки.Найти(Колонка.Имя) = Неопределено Тогда
            Возврат Ложь;
        КонецЕсли;
    КонецЦикла;
    
    // сформируем строку индекса для оптимизации поиска по таблице значений
    СтрокаИндекса = "";
    Для каждого Колонка Из ТаблицаЗначений1.Колонки Цикл
        Если СтрокаИндекса = "" Тогда
            СтрокаИндекса = Колонка.Имя;
        Иначе
            СтрокаИндекса = СтрокаИндекса+","+Колонка.Имя;
        КонецЕсли;
    КонецЦикла;
    // добавим индекс
    ТаблицаЗначений2.Индексы.Добавить(СтрокаИндекса);
    
    // Проверим записи
    Для каждого СтрокаТаблицы Из ТаблицаЗначений1 Цикл
        СтруктураПоиска = Новый Структура;
        Для каждого Колонка Из ТаблицаЗначений1.Колонки Цикл
            СтруктураПоиска.Вставить(Колонка.Имя, СтрокаТаблицы[Колонка.Имя]);
        КонецЦикла;
        СтрокиТаблицы2 = ТаблицаЗначений2.НайтиСтроки(СтруктураПоиска);
        Если СтрокиТаблицы2.Количество() <> 1 Тогда
            Возврат Ложь;
        КонецЕсли;
3 alekosansey
 
19.05.16
08:49
Но так как у ДанныеФормыКолекции нету Колонок. Я не знаю как к ним оброщаться
4 los_hooliganos
 
19.05.16
08:51
Проще всего обе ТЗ отправить на сериализацию и сравнить побитно 2 сериализованных объекта.
5 alekosansey
 
19.05.16
09:17
Хорошо попробую. Спасибо
Независимо от того, куда вы едете — это в гору и против ветра!