1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
//Сравнивает две таблицы значений // Функция ТаблицыЗначенийРавны(ТаблицаЗначений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 Тогда Возврат Ложь; КонецЕсли; КонецЦикла; Возврат Истина; КонецФункции// СравнитьТаблицыЗначений() |