Меню Закрыть

1С сложить две таблицы значений

Описание:

Таблица значений — это несохраняемый в базе данных объект, который позволяет строить динамические наборы значений и манипулировать ими (добавлять, редактировать, удалять элементы, сортировать). Он может быть наполнен значениями любого типа, т.е. в одной таблице типы хранимых значений могут быть разными. Одним из примеров использования данного объекта может служить организация представления в форме списка элементов справочника, отобранных по сложному алгоритму.

Необходимо отметить, что таблица значений, связанная с элементом управления ТабличноеПоле, будет иметь все колонки, имеющиеся в табличном поле, с соответствующими именами. Кроме того, таблица значений может иметь также и собственные колонки, не отображаемые в табличном поле, при этом их имена должны отличаться от имен колонок табличного поля.

Элементы коллекции: СтрокаТаблицыЗначений

Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции.

Возможно обращение к элементу коллекции посредством оператора [. ]. В качестве аргумента передается индекс строки (нумерация с 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.СоздатьКолонки();

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

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

Функция СлитьТЗ(ТЗ1, ТЗ2, КолонкаПоиска) возвращает таблицу значений в которой обединены все элементы
из таблиц значений ТЗ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 . СоздатьКолонки ( ) ;

НомерПоступления НомерДокумента
08090/0053975 23
GAI0363031 24
GAI0363032 25
НомерПоступления НомерДокумента
GAI0363031 24
GAI0363032 251
GAI0363032 205
НомерПоступления НомерДокумента
08090/0053975 23
GAI0363031 24
GAI0363032 25
GAI0363032 251
GAI0363032 205

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

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.