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

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/

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

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    2689    Abysswalker    7    

41

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

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

14.05.2025    5719    DeerCven    15    

57

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

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

21.05.2024    47017    dimanich70    83    

167

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

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

1 стартмани

18.03.2024    7017    6    John_d    13    

59

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

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

12.02.2024    58345    atdonya    31    

68

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

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

30.11.2023    8769    ke.92@mail.ru    17    

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