Непрерывный сбор данных из торговых точек для визуализации в Yandex DataLens

05.01.24

Интеграция - Облачные сервисы, хостинг

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

Yandex DataLens — это сервис для бизнес-аналитики. Сервис позволяет подключаться к различным источникам данных, строить визуализации, собирать дашборды и делиться полученными результатами.

С помощью Yandex DataLens вы можете отслеживать продуктовые и бизнес-метрики напрямую из источников, чтобы принимать решения, основанные на данных.

На данный момент Yandex DataLens выложен в общий доступ и его можно развернуть на собственных ресурсах, но на практике и в данной статье лучше использоваться облачный DataLens.

Цель статьи: продемонстрировать сбор данных о продажах в режиме реального времени с множества торговых точек, загрузку этих данных в базу данных, расположенную в сервисе Яндекс.Облако и визуализацию собранных данных в чартах Yandex DataLens.

В качестве демонстрации мы будем использовать бессерверные (serverless) сервисы платформы Яндекс.Облако. Код реализации задачи предоставлен в упрощенном виде, сервисы авторизации не используются.

Изменения в конфигурации 1С

В качестве примера будет использоваться конфигурация 1С: Розница, редакция 3.0. Однако можно использовать любую другую конфигурацию, в том числе 1С:РМК и 1С:Мобильная касса.

Создаем новое расширение ExportToBI. Поскольку расширение изменяет общие модули, безопасный режим следует выключить.

Далее заимствуем следующие объекты конфигурации: Общий модуль ДополнительныеОтчетыИОбработки, Справочники Номенклатура и СтруктурныеЕдиницы, Регистр накопления Продажи

 
 Заимствованные объекты


Для регистрации изменений к выгрузке создается новый план обмена expBI_Обмен, в состав которого включаем заимствованные ранее справочники и регистр накопления. Для упрощения задачи авторегистрацию ставим в режим Разрешить. Разумеется в проде следует не использовать авторегистрацию, а регистрировать изменения через подписки на события
Добавляем в расширение серверный модуль expBI_ОбменДанными со следующими процедурами и функциями:

Для конвертации массивов и структур в формат JSON

 
 СтруктураВJSON
 
Получение узла плана обмена для использования в методах механизмов обмена данными (упрощённый режим, в проде лучше использовать константы или другие средства)
 
 ПолучитьУзел

 

Получение для выгрузки структуры с данными элемента справочника

 
 ДанныеСправочника

 

Получение для выгрузки структуры с данными набора записей регистра накопления

 
 ДанныеРегистраНакопления

 

Подготавливаем пакет с измененными данными для выгрузки. Поскольку используемые для решения задачи сервисы в Яндекс.Облаке имеют ограничения по объему передаваемых данных мы будем использовать для отправки не все данные, а небольшие порции. Опять же предоставленный алгоритм сильно упрощен.

 
 ПодготовитьПакет

 

Создаем объект HTTPСоединение на основании адреса

 
 ПолучитьСоединение

 

Непосредственной процедура обмена.

 
 ВыполнитьОбмен

Обратите внимание на обязательную передачу в HTTPЗапросе заголовка "Content-Type: application/json", иначе в функцию обработке будет передана json-структура, закодированная в base64. Адрес для обмена берем из сервиса API-Gateway, создание которого описано далее.

 

На данный момент разработчики Библиотеки стандартных подсистем не предоставили возможность использовать собственные регламентные задания из расширений, будем использовать костыль. Для этого создаем общий серверный модуль expBI_РегламентноеЗаданиеОбмена со следующими процедурами и функциями

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

 
 КлючРегламентногоЗадания

 

Создание регламентного задания

 
 ДобавитьРегламентноеЗадание

 

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

 
 УстановитьИнтервалОбмена

 

Вызов процедура обмена 

 
 ВыполнитьСинхронзациюВФоне

 

И сам костыль - в заимствованном модуле ДополнительныеОтчетыИОбработки переопределяем процедуру ВыполнитьКоманду директивой &Вместо

 
 &Вместо("ВыполнитьКоманду")


Для интерактивности и отладки создаем общую форму expBI_Настройка с командой ВыполнитьОбмен, реквизитом Интервал.

 
 Форма expBI_Настройка

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

 
 Модуль формы expBI_Настройка

 

На этом расширение конфигурации закончено. Можно переходить к настройкам сервисов облака.

 

Создаем сервисы в Яндекс.Облако

Для нашей задачи будем использовать следующие облачные ресурсы: API-Gateway, Cloud Functions и Базу данных YDB.

Для начала заходим в консоль Яндекс.Облако, создаем новое облако и переходим созданный каталог ресурсов. Подробно о первоначальной настройки описано в документации.

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

 
 Сервисный аккаунт

База данных YDB.

Создаем первый ресурс в облаке - База данных YDB (Managed Service for YDB). В качестве типа базы данных указываем Serverless. Пропускную способность указываем Без ограничения. Нажимаем кнопку Создать базу данных.

В созданной базе данных переходим в раздел навигация и нажимаем справа кнопку Новый SQL-запрос. Вставляем DDL-запросы и жмем Выполнить.

 
 DDL-запросы

Теперь у нас есть таблицы для аналитики. 

В разделе Обзор копируем имя базы данных. Это значение параметра database в пункте Эндпоинт, оно будет вида /ru-central1/*********/***********. Это значение нам понадобится в функции ниже

 
 Сведения о базе данных


Cloud Functions

На локальном компьютере создаем два файла следующего содержания и упаковываем из в zip-архив

 
 index.py

В переменную database подставляем значение параметра database скопированное в предыдущем пункте.

 
 requirements.txt

В консоли в каталоге ресурсов создаем функцию с именем save-db. Переходим в раздел Редактор.

Указываем среду выполнения Python 3.12, способ создания zip-архив. В качестве файла указываем созданный ранее zip-архив. Таймаут ставим 300секунд, память 128Мб, указываем ранее созданный сервисный аккаунт. Нажимаем Сохранить изменения.

 
 Сведения о функции

API-Gateway.

Создаем в каталоге ресурсов API-Gateway (API-шлюз). Указываем следующую спецификацию.

 
 Спецификация


Значение function_id: указываем идентификатор (не имя!) ранее созданной функции, а в service_account_id идентификатор сервисного аккаунта.

Сохраняем изменения. После того как шлюз буден создан, в разделе Общая информация будет доступен Служебный домен, адрес которого необходимо присвоить переменной Адрес в функции expBI_ОбменДанными.ВыполнитьОбмен расширения.

Собственно сервисы готовы. Открываем консоль windows и выполняем команду

curl -X POST -H "Content-Type: application/json" https://********.apigw.yandexcloud.net/data -d"[{\"type\": \"products\",\"guid\": \"abcd\",\"name\": \"Товар\"}]

Сервер должен вернуть: 

{"result":true}

На этом настройку сервисов облака можно считать законченной.

 

Синхронизация

Для первичной синхронизации Складов и Номенклатуры можно зарегистрировать изменения следующим кодом во внешней обработке

 
 Код регистрации объектов к обмену

После чего заходим в раздел Главное конфигурации, находим команду открытия общей формы expBI_Настройка и выполняем синхронизацию. В разделе Навигация базы данных YDB можно увидеть загруженные справочники.

 

Настройка Yandex DataLens

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

Переходим в Yandex DataLens и, в-первую очередь, подключимся к базе данных YDB

 
 Подключение к YDB

 

Теперь необходимо создать датасет. Везде указываем тип связи LEFT JOIN

 
 Настройка связей в датасете

 

Переименовываем необходимые поля датасета, а ненужные скрываем

 
 Настройка полей датасета


Настраиваем чарт. Для примера будем использовать линейную диаграмму с отбором по складу Розничный магазин

 
 Настройка линейной диаграммы

 

Создаем дашборд с настроенным чартом. Для наглядности в настройках дашборда лучше указать автообновление через интервал, скажем, 30 секунд.

На этом настройка нашего тестового стенда выполнены. Пробуем пробить чек или провести продажу по складу Розничный магазин. Через пару минут продажа должна отразится в чарте.

 

Послесловие

В данной статье реализован тестовый пример сбора данных и их визуализации в облачной BI-системе.

Разумеется, описанные алгоритмы и настройки подходят только для целей ознакомления. Для промышленной реализации следует создать дополнительные функции и настройки: авторизация в API-gateway, тонкая настройка сервисных аккаунтов (при необходимости), учесть удаление движений набора записей регистра накопления и т.д.

Для больших баз полную первоначальную синхронизацию через API-gateway сделать вряд ли получится, т.к. имеется ограничение размера для тела запроса. Тут уже лучше использовать обмен через Object Storage.

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

Анализ Дашборд Диаграмма BI-системы Облако ETL

См. также

Бизнес-аналитика (BI) Типовые Бизнес-аналитик Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Бизнес-аналитика в 1С для эффективного управления компанией. Сбор данных и их наглядная визуализация. Система настраиваемых отчетов и дашбордов для детального анализа и принятия решений. Своевременный контроль важных показателей. Возвращаем до 15% бонусами. Заказать в Инфостарт!

12100 руб.

09.02.2021    20693    51    6    

37

Телефония, SIP Облачные сервисы, хостинг Пользователь Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Продукт интеграции возможностей Виртуальной АТС Ростелеком в систему 1С Предприятие 8. Звонки прямо из программы 1С, уведомления о текущих звонках, регистрация пропущенных и завершенных вызовов, динамическая маршрутизация входящих звонков, ведение журнала, анализ использования связи.

12000 руб.

04.02.2021    19980    22    0    

26

Управление взаимоотношениями с клиентами (CRM) Телефония, SIP Облачные сервисы, хостинг Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Продукт интеграции возможностей Облачной АТС Билайн в систему 1С Предприятие 8. Звонки прямо из программы 1С, уведомления о текущих звонках, регистрация пропущенных и завершенных вызовов, ведение журнала, анализ данных об использовании мобильной связи.

12000 руб.

20.03.2019    22678    53    0    

36

Бизнес-аналитика (BI) Программист Бизнес-аналитик Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Я Никита, ведущий 1С-разработчик в в IT-компании, уже два года изучаю инструмент 1С:Аналитика и занимаюсь его внедрением в нашей компании. Хочу сделать небольшой обзор и поделиться опытом с руководителями проектов и аналитиками.

15.07.2024    712    PROSTO-1C    0    

7

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

В данной статье мы рассмотрим назначение аналитической системы BI, работу с аналитической системой BI в 1С:Шина и сбор данных из программного продукта 1С:Шина.

26.06.2024    563    Koder_Line    3    

-1

Бизнес-аналитика (BI) Бизнес-аналитик Россия Бухгалтерский учет Бесплатно (free)

В статье рассматриваются процедуры качественного анализа, применяемые при исследовании фондовой сети - финансовой модели бюизнес-процесса корпорации, построенной на основе ее бухгалтерской отчетности. Статья является продолжением публикаций, начатых https://infostart.ru/1c/reports/1923577/. Предназначена, в первую очередь, для финансовых аналитиков - специалистов BI.

25.06.2024    1784    strannik73    2    

4

Облачные сервисы, хостинг Linux Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

Одна из завершающих публикаций цикла "В облако на работу:.. Рецепты от Капитана" в ходе которых был собран полнофункциональный рабочий контур 1С в сети на отечественной Ред ОС. С веб-серверами, доменной авторизацией, архивированием и прочая прочая... Это основное блюдо, на закуску разберемся с отказоустойчивостью. В этой публикации для PostgreSQL, заодно попробуем сделать это по новому.

17.06.2024    6291    capitan    18    

39

Облачные сервисы, хостинг Linux Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

В прошлых публикациях мы, не торопясь, после настройки персонального рабочего места на РедОС 7.3, посмотрели РедОС 8 и почти полностью собрали рабочую сеть 1С на отечественной ОС подходящую для работы среднего размера компании. С веб-серверами, доменной авторизацией и прочая прочая... Осталось настроить регулярное архивирование, чтобы не потерять нажитое.

27.05.2024    1037    capitan    6    

9
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. sapervodichka 6867 05.01.24 20:56 Сейчас в теме
Круто описал "под ключ"
SP2000; asg.aleks; Sedaiko; +3 Ответить
2. Saipl 7 06.01.24 06:05 Сейчас в теме
Мало кто из руководства одобрит сливать данные продаж сторонним сервисам.
3. Sedaiko 585 06.01.24 10:46 Сейчас в теме
(2) Причем скопировать и продать данные гораздо проще из локальных баз. Обычно так и происходит :)
6. vikad 130 07.01.24 10:35 Сейчас в теме
4. JohnyDeath 301 06.01.24 23:44 Сейчас в теме
А почему не пошли по пути выгрузки в облачный ClickHouse (который, кстати, тоже как и DataLens, можно развернуть локально)? Она также прекрасно дружит с DataLens. И можно было бы избавиться от прослойки Cloud Functions.
Т.е. из базы сразу отправлять все изменения в ClickHouse, к которому уже прикручена DataLens.
Плюс первоначальную выгрузку можно будет делать без Object Storage
5. Sedaiko 585 07.01.24 03:06 Сейчас в теме
(4) Это тема отдельной публикации. Тем более что в статье дан упор на использование serverless сервисов
7. JohnyDeath 301 07.01.24 13:27 Сейчас в теме
(5) Я бы с удовольствием прочитал статью по этому поводу.
Потому что сейчас выглядит всё как-то громоздко и не очень понятно с прослойками в виде Cloud Functions и API-Gateway. Вообще неплохо было бы описать за что отвечает каждый из сервисов в данной связке.
И почему нельзя пулять данные сразу в YDB?
8. Sedaiko 585 08.01.24 04:07 Сейчас в теме
(7)
И почему нельзя пулять данные сразу в YDB?

Для работы с YDB нет REST API. Поэтому нужна "прослойка" между ним и 1С. Логичнее ее держать на сервере, а не на множестве клиентов.

Можно напрямую пулять в Cloud Functions, но в этом случае там же нужно реализовать авторизацию. Я же предпочитаю использовать механизмы авторизации через jwt-токены в API-Gateway
JohnyDeath; +1 Ответить
9. malikov_pro 1314 08.01.24 21:10 Сейчас в теме
(7) И CF и YDB имеют бесплатный лимит, с CH нужно будет платить за аренду.
Если локальная установка, то Postgresql, сам использую PostgREST хотя и по ADODB работать с ним вариант. У DataLens за выборку данных не из облака бесплатно.
10. JohnyDeath 301 08.01.24 21:19 Сейчас в теме
(9) если локально, то можно сразу CH и DataLens поднимать. У меня стоят, например. Но пока DataLens пока только для ознакомления.
Кстати, если выгружать данные в ClickHouse, то у меня есть большая непонятка что делать с изменёнными данными, которые ранее уже выгружались. CH не любит удалять данные и тем более апдейтить. Может кто подскажет свое видение решения данной проблемы?
11. Sedaiko 585 09.01.24 01:30 Сейчас в теме
(10)
CH не любит удалять данные и тем более апдейтить

Планирую изучить этот вопрос
12. malikov_pro 1314 09.01.24 05:19 Сейчас в теме
(10) (11) Посмотрите как реализовано в https://infostart.ru/marketplace/1755776/. Если есть желание, то можно совместно подобное запилить.
JohnyDeath; +1 Ответить
13. Sedaiko 585 09.01.24 05:54 Сейчас в теме
(12) Есть пару мыслей. Как проверю, свяжусь
14. JohnyDeath 301 09.01.24 08:48 Сейчас в теме
(12) Посмотрел видео из этого решения.
Насколько я понял, там автор использует движок ReplacingMergeTree с партицированием по дате(месяцу года) и букве (для примера с товаром).
Скорее всего механизм такой:
1. в очередь на стороне 1С добавляется запись со значением период, от которого вычисляется значение для "партиции". 2. Далее обработчик очереди собирает все данные из 1с по заданной партиции (периоду)?
3. Выгружаем в КХ все данные по партиции
4. Движок КХ ReplacingMergeTree уже сам обрабатывает слияние

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

В общем, надо садиться и пробовать.
15. Sedaiko 585 09.01.24 10:02 Сейчас в теме
(12) (14) в принципе должны подойти движки CollapsingMergeTree и VersionedCollapsingMergeTree для реального времени
16. JohnyDeath 301 09.01.24 11:43 Сейчас в теме
(15) если правильно указать секцию Order By, по которой идет сопоставление.
Ну и вопрос про удаленные проводки тоже остается открытым. Можно, конечно, попытаться вставлять нулевые суммы в таких случаях...
17. malikov_pro 1314 09.01.24 18:19 Сейчас в теме
(16) Вариант удалить всю партицию и залить заново. CH не гарантирует моментальное обновление данных, при принудительном использовании команды merge снижается производительность.

Если использовать CH ради развития навыков, то интересно. У меня на данный момент работает связка PG локально + DataLens на 10+ торговых точек хватает лихвой, прогрузка продаж за год менее 5 мин.
Принцип тот же самый при обновлении оборотов, снести блок, залить заново (у меня не сделано), т.к. при обновлении не убираются строки, либо чистить по дате изменения, что несколько костыльно.

Все уже пройдено (пакетирование, отправка контроль), в том же БИТ.Адаптер (по внешним признакам), осталось самим освоить технологию (формирования пакетов) и применить у себя на проектах.
Добавить к этому использование ИсторияДанных вместо ПланыОбмена и будет неблокирующаяся быстрая система (надеюсь.)

У CH отсутствует контроль внешних ссылок. В качестве "словарей" может использовать ся тот же PG.

При разговоре с спецами "Экстрактор" технологию показали, а на специфике с данными закопались.
Пример, как выгрузить иерархию справочника, при том что BI не умют в иерархию "родитель"-"элемент", только по колонкам раскладывать.
Еще пример, как разложить доп реквизиты для группировок (объект,свойство,значение не поддерживается BI). с CH проще, можно пересобрать таблицу, но как себя после этого поведет BI хз. В PG если только через SQL нужно использовать crosstab-query. Либо через ADODB из 1С изменять таблицы.
18. Sedaiko 585 10.01.24 01:15 Сейчас в теме
(17)Если в BI нужен функционал, полностью совместимый с ORM 1С, то уже проще купить 1С-Аналитика
19. malikov_pro 1314 10.01.24 06:36 Сейчас в теме
(18) У некоторых руководителей непереносимость к 1С в работе. Пытаюсь показать что транспорт из 1С до БД написать не сложно. Грабли начинаются при обеспечении качества данных во внешних системах, нагуглил, самому еще нужно пробовать https://education.yandex.ru/handbook/data-analysis/article/ocenka-kachestva-dannyh
20. malikov_pro 1314 10.01.24 06:40 Сейчас в теме
(18) По поводу YDB перевод делал https://infostart.ru/1c/articles/1618896/, там над структурой данных прежде чем писать подумать надо, это нереляционная БД.
21. Sedaiko 585 10.01.24 07:07 Сейчас в теме
(20) В документации заявлена поддержка реляционной модели данных (https://ydb.tech/docs/ru/concepts/)
22. JohnyDeath 301 10.01.24 08:11 Сейчас в теме
(20) YDB для OLAP не очень подходит, об этом даже в документации к этому движку написано:
В дизайн YDB заложена поддержка разных сценариев нагрузки, таких как OLTP и OLAP. В текущей реализации поддержка аналитических запросов ограничена. Поэтому можно говорить, что в данный момент YDB — это OLTP-база данных.
23. malikov_pro 1314 10.01.24 10:40 Сейчас в теме
(21) непонятно как реализовано, relation - связь, как сделать связь между таблицами с контролем ссылочной целостности непонятно в описании схемы данных YBD не нашел.

(22) Если готовить как обычную реляционную, то да. Метод приготовления как DynamoDB наверно даст более интересные скорости, но даже после перевода как готовить у меня только общие представления.
Оставьте свое сообщение