helpf.pro
Регистрация
 0 
Распечатать

Библиотека кода: Сравнить две таблицы значений

Код 1C v 8.х
 

//Сравнивает две таблицы значений
//
Функция ТаблицыЗначенийРавны(ТаблицаЗначений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 Тогда
            Возврат Ложь;
        КонецЕсли; 
    КонецЦикла;
    
    Возврат Истина;
    
КонецФункции// СравнитьТаблицыЗначений()


Разместил:   Версии: | 8.x |  Дата:   Прочитано: 289
 0 
Распечатать
Возможно, вас также заинтересует
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 15
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно...
1C и Google Maps 13
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во...
1Cv8.1CD - Файл данных достиг максимального размера! 5
1С выдает предупреждение " Файл данных достиг максимального размера" . Подскажите из - за чего это и как можно решить ? Превышен размер файла, обычно это сообщение возникает, когда размер файла 1Cv8.1CD приближается к 10...
1С 7.x : Как получить курсы валют с сайта НБУ http://www.bank.gov.ua/ за любую дату ? 4
Функция ПолучитьТаблицуКурсовНБУ(ДатаКурса, Ежедневно = 1) // если в качестве второго параметра указать число отличное от 1 - получем валюты, которые котируются на ежемесячной основе Перем Reader, Url, Точки, HtmlTab, Строк, Р,...
COM-подключение к базе 7.7 из 8.2 1С 5
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе="...
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.