Функции для обработки произвольной таблицы значений
Просто несколько функций для работы с произвольной таблицей значений: Левое соединение, Внутреннее соединение, Свертка таблицы.
Платформа 8.3.20.1674.
- Описание
- Подробнее
Описание
Каждому программисту приходилось работать с таблицей значений, очень часто ее надо объединить с другой таблицей, как вариант запихиваешь их в запрос и объединяешь — код довольно громоздкий и проделывать одно и тоже надоедает. Иногда надо свернуть таблицу значений, но результат должен быть как то сгруппирован, допустим одно поле сотрудник, а другое массив значений с какими то данными по нему. Давно хотел сделать что то, чтобы взять произвольную таблицу и объединить с другой или сгруппировать ее и чтобы это можно было это выполнять в одну строчку, вот написал несколько функций для обработки таблиц.
Пример:
имеем 3 исходных таблицы:



первая функция "Левое соединение"
параметры:
- Таблица1,
- Таблица2
- строка вида "Поле11 = Поле21, Поле12 = Поле22"
(поля Поле11,Поле12 принадлежат первой таблице, Поле21,Поле22 второй, объединять можно только по равенству полей)
таблицаЛевоеСоединение = ЛевоеСоединение(таблицаТест1, таблицаТест2, "Сотрудник = Сотрудник");
Результат ниже:

таблицаВнутреннееСоединение = ВнутреннееСоединение(таблицаТест1, таблицаТест2, "Сотрудник = Сотрудник");

таблицаВнутреннееСоединение1 = ВнутреннееСоединение(таблицаТест1, таблицаТест3, "Сотрудник = Сотрудник, ВидРасчета = Начисление");

Еще одна часто встречающаяся задача свернуть табличку значений, но так чтобы результат был сгруппирован в виде массива или таблицы значений или еще каким то образом.
следующая написанная функция "СвернутьТаблицуЗначений"
параметры:
- таблица значений,
- поля для группировки в виде строки, перечислены через запятую
- структура, где ключи имена полей, а значения агрегатные функции СКД
Пример:
Выберем максимальный период для каждого сотрудника:
таблицаСвернутая = СвернутьТаблицуЗначений(таблицаТест1, "Сотрудник", Новый Структура("МаксПериод", "МАКСИМУМ(ПериодРегистрации)"));

Для каждого сотрудника получим табличку значений, где поля будут ВидРасчета и Сумма:
таблицаСвернутая1 = СвернутьТаблицуЗначений(таблицаТест1, "Сотрудник", Новый Структура("ТаблицаРасчетов", "ТаблицаЗначений(ВидРасчета КАК Начисление, Результат КАК Сумма)"));

Для каждого сотрудника получим массив уникальных значений видов расчетов:
таблицаСвернутая2 = СвернутьТаблицуЗначений(таблицаТест1, "Сотрудник", Новый Структура("ВидыРасчетов", "Массив(Различные ВидРасчета)"));

Для каждого сотрудника на каждый период получим список строк вида — "Вид расчета, Результат":
таблицаСвертка3 = СвернутьТаблицуЗначений(таблицаТест1, "ПериодРегистрации, Сотрудник", Новый Структура("Начисления", "СоединитьСтроки(ТаблицаЗначений(ВидРасчета, Результат), "";"", "","")"));

Для каждого сотрудника получим сумму начислений и список строк уникальных видов расчетов:
таблицаСвертка4 = СвернутьТаблицуЗначений(таблицаТест1, "Сотрудник", Новый Структура("Начислено, ВидыРасчетов", "Сумма(Результат)", "СоединитьСтроки(Массив(Различные ВидРасчета), "";"")"));

Функции написаны на основе механизма компоновки данных, СКД формируется программно, за основу взяты статьи
"Программное создание схемы компоновки данных"
//sale.itcity.ru/1c/articles/1179039/
"Агрегатные функции СКД, о которых мало кто знает"
//sale.itcity.ru/1c/articles/1116759/
