Наша сегодняшняя статья полностью, касается темы, связанной с программированием с таблицей значение с таблицей значений в системе 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 | Стул деревянный | 4 |
2 | Стол деревянный | 1 |
№ | Товар | Количество |
---|---|---|
1 | Шкаф для одежды | 1 |
2 | Тумба прикроватная | 2 |
и стоит задача их объединить. Самый элементарный способ реализации, который напрашивается: построчно скопировать строки второй таблицы в конец первой:
В результате мы получим таблицу вида:
№ | Товар | Количество |
---|---|---|
1 | Стул деревянный | 4 |
2 | Стол деревянный | 1 |
3 | Шкаф для одежды | 1 |
4 | Тумба прикроватная | 2 |
Но у приведенного выше алгоритма есть один недостаток: он привязан к именам колонок таблиц значений. Чтобы сделать этот код по настоящему универсальным, следует использовать функцию встроенного языка ЗаполнитьЗначенияСвойств(), тогда не понадобится прописывать имена колонок в коде каждый раз при объединении таблиц:
Почему я перенес инициализацию номера строки ниже, думаю, Вы догадаетесь сами. Если нет, рекомендую прорешать данную задачу на практике самостоятельно.
Здравствуйте, уважаемые читатели! Эта одна из статей, касающаяся темы программирования с таблицей значений в системе 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 |
Как видим, после выполнения этой функции произошло объединение двух таблиц значений. Хотя в таблицах встречаются как разные, так и одинаковые элементы в результирующей таблице совпадающие элементы не повторяются.