Недавно в комментариях у нас с подписчиком разгорелся спор, являются ли Регистры в 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 - справочник тестировщика
Пишите в комментариях какой пункт было бы интересно рассмотреть более подробно.
Обязательно прочитайте: Что должен знать и уметь тестировщик
Также будет интересно почитать: Вопросы которые задают на собеседовании тестировщикам