//Сравнивает две таблицы значений // Функция ТаблицыЗначенийРавны(ТаблицаЗначений1, ТаблицаЗначений2) Экспорт Если ТипЗнч(ТаблицаЗначений1) <> Тип("ТаблицаЗначений") ИЛИ ТипЗнч(ТаблицаЗначений2) <> Тип("ТаблицаЗначений") Тогда Возврат Ложь; КонецЕсли; Если ТаблицаЗначений1.Количество() <> ТаблицаЗначений2.Количество() Тогда Возврат Ложь; КонецЕсли; Если ТаблицаЗначений1.Колонки.Количество() <> ТаблицаЗначений2.Колонки.Количество() Тогда Возврат Ложь; КонецЕсли; // Проверим поля Для каждого Колонка Из ТаблицаЗначений1.Колонки Цикл Если ТаблицаЗначений2.Колонки.Найти(Колонка.Имя) = Неопределено Тогда Возврат Ложь; КонецЕсли; КонецЦикла; Для каждого Колонка Из ТаблицаЗначений2.Колонки Цикл Если ТаблицаЗначений1.Колонки.Найти(Колонка.Имя) = Неопределено Тогда Возврат Ложь; КонецЕсли; КонецЦикла; // сформируем строку индекса для оптимизации поиска по таблице значений СтрокаИндекса = ""; Для каждого Колонка Из ТаблицаЗначений1.Колонки Цикл Если СтрокаИндекса = "" Тогда СтрокаИндекса = Колонка.Имя; Иначе СтрокаИндекса = СтрокаИндекса+","+Колонка.Имя; КонецЕсли; КонецЦикла; // добавим индекс ТаблицаЗначений2.Индексы.Добавить(СтрокаИндекса); // Проверим записи Для каждого СтрокаТаблицы Из ТаблицаЗначений1 Цикл СтруктураПоиска = Новый Структура; Для каждого Колонка Из ТаблицаЗначений1.Колонки Цикл СтруктураПоиска.Вставить(Колонка.Имя, СтрокаТаблицы[Колонка.Имя]); КонецЦикла; СтрокиТаблицы2 = ТаблицаЗначений2.НайтиСтроки(СтруктураПоиска); Если СтрокиТаблицы2.Количество() <> 1 Тогда Возврат Ложь; КонецЕсли; КонецЦикла; // сформируем строку индекса для оптимизации поиска по таблице значений СтрокаИндекса = ""; Для каждого Колонка Из ТаблицаЗначений2.Колонки Цикл Если СтрокаИндекса = "" Тогда СтрокаИндекса = Колонка.Имя; Иначе СтрокаИндекса = СтрокаИндекса+","+Колонка.Имя; КонецЕсли; КонецЦикла; // добавим индекс ТаблицаЗначений1.Индексы.Добавить(СтрокаИндекса); Для каждого СтрокаТаблицы Из ТаблицаЗначений2 Цикл СтруктураПоиска = Новый Структура; Для каждого Колонка Из ТаблицаЗначений2.Колонки Цикл СтруктураПоиска.Вставить(Колонка.Имя, СтрокаТаблицы[Колонка.Имя]); КонецЦикла; СтрокиТаблицы1 = ТаблицаЗначений1.НайтиСтроки(СтруктураПоиска); Если СтрокиТаблицы1.Количество() <> 1 Тогда Возврат Ложь; КонецЕсли; КонецЦикла; Возврат Истина; КонецФункции// СравнитьТаблицыЗначений()