Каталог решений - Функции для обработки произвольной таблицы значений

Функции для обработки произвольной таблицы значений

Функции для обработки произвольной таблицы значений

В наличии

Просто несколько функций для работы с произвольной таблицей значений: Левое соединение, Внутреннее соединение, Свертка таблицы.
Платформа 8.3.20.1674.

Категория:

Описание

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

Пример:

имеем 3 исходных таблицы:

первая функция "Левое соединение"

параметры:

  1. Таблица1,
  2. Таблица2
  3. строка вида "Поле11 = Поле21, Поле12 = Поле22"

(поля Поле11,Поле12 принадлежат первой таблице, Поле21,Поле22 второй, объединять можно только по равенству полей)

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

Результат ниже:

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

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

 

Еще одна часто встречающаяся задача свернуть табличку значений, но так чтобы результат был сгруппирован в виде массива или таблицы значений или еще каким то образом.

следующая написанная функция "СвернутьТаблицуЗначений"

параметры:

  1. таблица значений,
  2. поля для группировки в виде строки, перечислены через запятую
  3. структура, где ключи имена полей, а значения агрегатные функции СКД

 

Пример:

Выберем максимальный период для каждого сотрудника:

таблицаСвернутая  = СвернутьТаблицуЗначений(таблицаТест1, "Сотрудник", Новый Структура("МаксПериод", "МАКСИМУМ(ПериодРегистрации)"));

 

Для каждого сотрудника получим табличку значений, где поля будут ВидРасчета и Сумма:

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

 

Для каждого сотрудника получим массив уникальных значений видов расчетов:

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

Для каждого сотрудника на каждый период получим список строк вида — "Вид расчета, Результат":

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

Для каждого сотрудника получим сумму начислений и список строк уникальных видов расчетов:

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

Функции написаны на основе механизма компоновки данных, СКД формируется программно, за основу взяты статьи

"Программное создание схемы компоновки данных"
//sale.itcity.ru/1c/articles/1179039/

"Агрегатные функции СКД, о которых мало кто знает"
//sale.itcity.ru/1c/articles/1116759/

has been added to your cart:
Оформление заказа