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

17.03.23

Разработка - Универсальные функции

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Функции для обработки произвольной таблицы значений:
.epf 8,69Kb
19 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

Пример:

имеем 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,
                                    "Сотрудник",
                                    Новый Структура(
                                          "Начислено, ВидыРасчетов",
                                          "Сумма(Результат)", "СоединитьСтроки(Массив(Различные ВидРасчета), "";"")")
                                    );

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

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

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

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Универсальные функции Работа с интерфейсом Программист 1С v8.3 Бесплатно (free)

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

14.05.2025    3419    DeerCven    8    

45

Универсальные функции Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    40888    dimanich70    83    

157

Универсальные функции Программист 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    6019    6    John_d    11    

58

Универсальные функции Программист Стажер 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    48995    atdonya    30    

65

Универсальные функции Программист 1С v8.3 Бесплатно (free)

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

30.11.2023    7783    ke.92@mail.ru    17    

66

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    20973    YA_418728146    8    

174
Для отправки сообщения требуется регистрация/авторизация