Modber Сообщество
профессионалов по 1С

Как объединить две таблицы значений в системе 1С:Предприятие 8?



Платформы: 1С:Предприятие 8.3, 1С:Предприятие 8.2, 1С:Предприятие 8.1
Конфигурации: Другие конфигурации
2014-04-30
4750 
maxdzhavala
0  

Наша сегодняшняя статья полностью, касается темы, связанной с программированием с таблицей значение с таблицей значений в системе 1С:Предприятие 8. Здесь вы встретите темы, связанные с использованием функции, которая способствовала бы слиянию двух таблиц значения в одну, в которой нельзя встретить повторяющиеся строки. 

Функция СлитьТЗ(ТЗ1, ТЗ2, КолонкаПоиска) используется для того, чтобы возвратить таблицу значений в которой ранее были объединены абсолютно все элементы из таблиц значений ТЗ1 и ТЗ2 по полю КолонкаПоиска.
 

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

Теперь, к примеру, не только создадим две таблицы значений ТаблицаЗначений1 и ТаблицаЗначений2, но еще и заполним их какими то значениями. 

ТаблицаЗначений1 = Новый ТаблицаЗначений;
    ТаблицаЗначений2 = Новый ТаблицаЗначений;
 
    // Создать нужные колонки. 
    ТаблицаЗначений1.Колонки.Добавить("НомерПоступления"); 
    ТаблицаЗначений1.Колонки.Добавить("НомерДокумента"); 
    
    // Добавить новую строку и задать значения в колонках таблицы. 
    НоваяСтрока = ТаблицаЗначений1.Добавить(); 
    НоваяСтрока.НомерПоступления = "08090/0053975"; 
    НоваяСтрока.НомерДокумента = "23"; 
    
    // Добавить новую строку и задать значения в колонках таблицы. 
    НоваяСтрока = ТаблицаЗначений1.Добавить(); 
    НоваяСтрока["НомерПоступления"] = "GAI0363031"; 
    НоваяСтрока["НомерДокумента"] = "24";
    
    НоваяСтрока = ТаблицаЗначений1.Добавить(); 
    НоваяСтрока["НомерПоступления"] = "GAI0363032"; 
    НоваяСтрока["НомерДокумента"] = "25";

    
    // Создать нужные колонки. 
    ТаблицаЗначений2.Колонки.Добавить("НомерПоступления"); 
    ТаблицаЗначений2.Колонки.Добавить("НомерДокумента"); 
    
    // Добавить новую строку и задать значения в колонках таблицы. 
    НоваяСтрока = ТаблицаЗначений2.Добавить(); 
    НоваяСтрока["НомерПоступления"] = "GAI0363031"; 
    НоваяСтрока["НомерДокумента"] = "24";
    
    НоваяСтрока = ТаблицаЗначений2.Добавить(); 
    НоваяСтрока["НомерПоступления"] = "GAI0363032"; 
    НоваяСтрока["НомерДокумента"] = "251";
    
    НоваяСтрока = ТаблицаЗначений2.Добавить(); 
    НоваяСтрока["НомерПоступления"] = "GAI0363032"; 
    НоваяСтрока["НомерДокумента"] = "205";

    // Создадим новую обработку и вставим на форму
    // три табличных поля, затем отобразим на них наши таблицы
    ЭлементыФормы.ТабличноеПоле1.Значение = ТаблицаЗначений1;
    ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();

    ЭлементыФормы.ТабличноеПоле2.Значение = ТаблицаЗначений2;
    ЭлементыФормы.ТабличноеПоле2.СоздатьКолонки();
    
    ЭлементыФормы.ТабличноеПоле3.Значение = 
    СлитьТЗ(ТаблицаЗначений1, ТаблицаЗначений2, "НомерДокумента");
    ЭлементыФормы.ТабличноеПоле3.СоздатьКолонки();


 

В результате можно наблюдать, что после того, как мы выполнили эту функцию произошло объединение двух таблиц значений. Случилось это даже несмотря на то, что в таблицах встречаются как разные, так и одинаковые элементы, а вот в результирующей таблице, в свою очередь так называемые совпадающие элементы повторяться не будут. 




Бесплатная юридическая
консультация по телефону

8 (499) 350-80-26(Москва)
8 (812) 627-15-62(Спб)

звонок бесплатный

В центре внимания

Комментарии (1)