Найти тему

Регистры в 1С как аналог OLAP-кубов

Оглавление

Недавно в комментариях у нас с подписчиком разгорелся спор, являются ли Регистры в 1С OLAP кубами или нет?

Так это или нет, но справедливо будет рассмотреть что такое Регистры, ведь это действительно хороший функциональный инструмент.

Пишите в комментариях, что вы думаете по поводу являются ли Регистры в 1С полноценными OLAP кубами?

Регистры в 1С выполняют роль хранилищ данных и могут использоваться для аналитической обработки данных, схожей с OLAP-кубами (Online Analytical Processing). В системе 1С есть несколько типов регистров, основными из которых являются регистры накопления и регистры сведений. Эти регистры можно использовать для многомерного анализа данных — подобно тому, как OLAP-кубы применяются для построения сложных аналитических отчетов.

Типы регистров в 1С (перечислены не все)

1. Регистры накопления:

Основная цель — хранить информацию о количественных и стоимостных изменениях (движениях) ресурсов (например, товарных запасов или денежных средств).

Делятся на два типа:

Остатки — предназначены для хранения данных об остатках на определенный момент времени.
Обороты — фиксируют изменения остатков (приход и расход) за определенные периоды.

  • Важно: Регистры накопления обязательно должны иметь регистраторов — документы, которые создают записи (движения) в регистре. Без указания хотя бы одного регистратора регистр не сможет корректно функционировать.
  • Могут использоваться для построения отчетов, которые требуют анализа изменений во времени (например, анализ продаж, движения товаров на складе).

2. Регистры сведений:

Хранят информацию, которая не изменяется так часто, как данные в регистрах накопления, но которая может быть полезна для аналитики.

  • Регистраторы для регистров сведений не являются обязательными — данные могут быть записаны вручную или через код.
  • Могут использоваться для хранения справочной информации, тарифов, курсов валют и других данных, которые могут меняться во времени и влиять на обработку.

OLAP-функциональность регистров в 1С

Регистры в 1С можно рассматривать как многомерные структуры данных, которые могут быть использованы для создания отчетов, схожих с OLAP-кубами. Основные возможности, которые поддерживают эту функциональность:

1. Многомерность:

Регистры могут содержать измерения (например, товары, склады, контрагенты) и ресурсы (например, количество, сумма).
Измерения в регистрах аналогичны измерениям в OLAP-кубах (например, измерение по времени, по товарам и т.д.).

2. Агрегация данных:

В отчетах на базе регистров можно выполнять агрегацию данных по различным измерениям (например, суммировать продажи по месяцам, кварталам, годам, по складам и контрагентам).
Агрегация может быть выполнена по различным уровням детализации.

3. Историчность (хранение данных по периодам):

Регистры накопления и регистры сведений могут содержать данные за разные периоды времени, что позволяет строить временные ряды и анализировать изменения во времени.
Важной особенностью является возможность построения отчетов с учетом временных границ (например, остатки на начало и конец периода).

4. Формирование отчетов:

На базе регистров можно создавать сложные отчеты, которые позволяют анализировать данные по различным срезам и измерениям. Это можно сравнить с "разрезанием" OLAP-куба для получения нужной информации.
Для этого в 1С используются механизмы
Схемы Компоновки Данных (СКД), которые позволяют гибко настраивать отчеты, в том числе с использованием группировок, фильтров и вычисляемых полей.

5. Оптимизация производительности:

Регистры оптимизированы для работы с большими объемами данных, что позволяет быстро получать агрегированные данные.
Это делает регистры эффективным инструментом для создания аналитических отчетов, похожих на OLAP-кубы.

СКД (Схема Компоновки Данных)

СКД — это инструмент в 1С, который позволяет создавать сложные аналитические отчеты на основе регистров. С помощью СКД можно:

  • Определять источники данных (например, регистры накопления или регистры сведений);
  • Настраивать измерения (размерности) и ресурсы (агрегируемые показатели);
  • Конфигурировать группировки, фильтры, сортировки и вычисляемые поля;
  • Формировать итоговые таблицы и диаграммы;
  • Включать возможность "проваливания" в данные для детализированного анализа (Drill-Down).

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


Пример использования регистров для OLAP-анализа

Предположим, у вас есть задача анализировать продажи товаров по различным измерениям, таким как:

  • Товар — наименование товара;
  • Контрагент — покупатель;
  • Склад — место хранения;
  • Период — временной аспект (например, день, месяц, год).

Для этого вы можете использовать Регистр Накопления "Продажи", который будет содержать следующие поля:

  • Измерения: Товар, Контрагент, Склад.
  • Ресурсы: Количество, Сумма.

Далее на основе этого регистра можно создать отчет с использованием СКД, в котором можно будет агрегировать данные по следующим срезам:

  • Продажи по товарам;
  • Продажи по контрагентам;
  • Продажи по складам;
  • Продажи по месяцам/годам.

Отчет может включать возможность "проваливания" в данные для получения более детализированной информации.

Как использовать регистры в 1С: создание регистров, запросы и получение данных

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

1. Создание регистра в 1С

Регистры можно создать в конфигураторе 1С. Для этого нужно выполнить следующие шаги:

1.1. Создание регистра накопления

1.Открытие конфигуратора:

Войдите в конфигуратор 1С.

2. Выбор типа регистра:

В дереве объектов конфигурации выберите раздел Регистры накопления.

3. Создание нового регистра:

Щелкните правой кнопкой мыши по "Регистры накопления" и выберите "Добавить".
Назовите регистр (например, "Продажи").

4. Настройка измерений:

Перейдите на вкладку "Измерения" и добавьте измерения, по которым будет вестись аналитический учет (например, "Товар", "Контрагент", "Склад").
Для каждого измерения укажите тип данных (например, для "Товара" — это справочник "Номенклатура", для "Контрагента" — справочник "Контрагенты").

5. Настройка ресурсов:

Перейдите на вкладку "Ресурсы" и добавьте ресурсы, которые будут агрегироваться (например, "Количество", "Сумма").
Укажите тип данных для каждого ресурса (например, "Количество" — это число, "Сумма" — это число с двумя десятичными разрядами).

6. Указание регистратора:

  • Обязательно укажите, какие документы будут выступать регистраторами. Перейдите на вкладку "Документы" и выберите документы, которые будут создавать записи в регистре (например, "Реализация товаров", "Поступление товаров").

7. Параметры регистра:

Укажите, будет ли регистр хранить остатки или обороты. Например, для анализа продаж регистр должен учитывать Обороты.

8. Запись регистра:

Нажмите "Записать" и "Закрыть".

1.2. Создание регистра сведений

Регистры сведений создаются аналогично регистрам накопления, но с некоторыми отличиями:

1. В дереве объектов конфигурации выберите раздел Регистры сведений.

2. Создайте новый регистр сведений, как и в случае с регистром накопления.

3. Добавьте поля как Измерения (ключевые поля) и Реквизиты (данные, которые будут храниться).

4. Укажите, будет ли регистр сведений периодическим (например, если данные могут меняться со временем).

2. Написание запросов к регистрам

Для получения данных из регистров вам понадобятся запросы, которые можно писать в модуле 1С или использовать в отчетах (например, с помощью СКД). Запросы позволяют агрегировать данные, фильтровать их и выполнять сложные вычисления.

Пример запроса для регистра накопления

Допустим, у вас есть регистр накопления "Продажи" с измерениями "Товар", "Контрагент", "Склад" и ресурсами "Количество", "Сумма". Вам нужно получить данные о продажах товаров за определенный период.

ВЫБРАТЬ
Продажи.Товар,
Продажи.Контрагент,
СУММА(Продажи.Количество) КАК КоличествоПродано,
СУММА(Продажи.Сумма) КАК СуммаПродаж
ИЗ
РегистрНакопления.Продажи.Обороты КАК Продажи
ГДЕ
Продажи.Период МЕЖДУ &ДатаНачала И &ДатаКонца
СГРУППИРОВАТЬ ПО
Продажи.Товар,
Продажи.Контрагент

Объяснение запроса:

  • РегистрНакопления.Продажи.Обороты: это источник данных — регистр накопления "Продажи". Мы выбираем данные из регистра оборотов (поскольку анализируем изменения).
  • СУММА(Продажи.Количество): агрегируем данные по количеству проданных товаров.
  • СУММА(Продажи.Сумма): агрегируем данные по сумме продаж.
  • ГДЕ Продажи.Период МЕЖДУ &ДатаНачала И &ДатаКонца: условие фильтрации по периоду.
  • СГРУППИРОВАТЬ ПО Продажи.Товар, Продажи.Контрагент: группируем данные по товарам и контрагентам (анализируем, кому и что продали).

Работа с регистратором при записи движений

Для регистров накопления при проведении документа обязательно создаются движения в регистре с указанием регистратора.

Пример кода для записи движений в модуле документа:

Процедура ПриПроведенииДокумента()
Движения = Регистры.Накопления.Продажи.СоздатьНаборЗаписей();
Движения.Отбор.Регистратор.Установить(ЭтотОбъект);
НоваяЗапись = Движения.Добавить();
НоваяЗапись.Товар = ТекущийТовар;
НоваяЗапись.Количество = КоличествоТовара;
НоваяЗапись.Сумма = СуммаТовара;
НоваяЗапись.Склад = СкладТовара;
Движения.Записать();
КонецПроцедуры

Объяснение:

  • Создаем набор записей Движения = Регистры.Накопления.Продажи.СоздатьНаборЗаписей().
  • Через Движения.Отбор.Регистратор.Установить(ЭтотОбъект) указываем, что текущий документ является регистратором.
  • Добавляем записи в набор движений (например, информацию о проданных товарах).
  • После заполнения данных регистр обновляется через Движения.Записать().

Пример запроса для регистра сведений

Допустим, у вас есть регистр сведений "ЦеныНоменклатуры", который содержит информацию о ценах товаров. Вам нужно получить текущие цены на товары.

ВЫБРАТЬ
ЦеныНоменклатуры.Товар,
ЦеныНоменклатуры.Цена
ИЗ
РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ГДЕ
ЦеныНоменклатуры.Актуальность = ИСТИНА

Объяснение запроса:

  • РегистрСведений.ЦеныНоменклатуры: это источник данных — регистр сведений "ЦеныНоменклатуры".
  • ГДЕ ЦеныНоменклатуры.Актуальность = ИСТИНА: условие фильтрации, которое выбирает только актуальные (действующие) цены.

3. Использование СКД (Схема Компоновки Данных)

Для создания отчетов в 1С можно использовать специальный механизм — Схема Компоновки Данных (СКД). СКД позволяет визуально настроить отчет, используя данные из регистров. Вы можете задать источники данных, произвести группировку, фильтрацию и создать вычисляемые поля.

Пример использования СКД:

1. Создание отчета с СКД:

В конфигураторе создайте объект "Отчет".
В свойствах отчета укажите, что он использует СКД.
Перейдите в редактор СКД, где можно настроить источники данных и компоновку.

2. Настройка источников данных:

В качестве источника данных выберите регистр накопления "Продажи".
Укажите, какие измерения и ресурсы будут использоваться в отчете (например, "Товар", "Контрагент", "Количество", "Сумма").

3. Группировка и фильтрация:

Настройте группировку по товарам и контрагентам, если требуется.
Добавьте фильтры по периоду или другим полям (например, фильтрация по складу или контрагенту).

4. Форматирование отчета:

Укажите, как должны выводиться данные: в виде таблицы или диаграммы.
Настройте отображение итогов и промежуточных итогов по группам.

5. Запуск отчета:

После настройки СКД отчет можно запустить из пользовательского интерфейса, и он автоматически сгенерирует данные на основе введенных фильтров и настроек.


4. Получение данных из регистров в коде

Если вы хотите получить данные из регистра прямо в коде, можно использовать объект Запрос в языке 1С.

Пример запроса в коде:

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

Объяснение кода:

  • Создается объект Запрос, в который добавляется текст SQL-запроса.
  • Устанавливаются параметры для фильтрации (например, дата начала и конца периода).
  • Выполняется запрос, и результат обрабатывается в цикле для вывода данных.

Вместо заключения

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

Если Вам интересно, что еще можно найти на канале QA Helper, прочитайте статью: Вместо оглавления. Что вы найдете на канале QA Helper - справочник тестировщика?

Не забудьте подписаться на канал, чтобы не пропустить полезную информацию: QA Helper - справочник тестировщика

Пишите в комментариях какой пункт было бы интересно рассмотреть более подробно.

Обязательно прочитайте: Что должен знать и уметь тестировщик

Также будет интересно почитать: Вопросы которые задают на собеседовании тестировщикам