Непрерывный сбор данных из торговых точек для визуализации в 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

См. также

Интеграция 1С с облаком S3 (Amazon, Yandex Object Storage, Ceph Object Gateway S3, MinIO и др.)

Облачные сервисы, хостинг 8.3.14 Конфигурации 1cv8 Россия Платные (руб)

Готовое решение по интеграции 1С с облаком S3 (Amazon, Yandex Object Storage, Ceph Object Gateway S3, MinIO и любое совместимое объектное хранилище). Решение даёт возможность осуществлять как основные операции (получить список, закачать, скачать, удалить и т.д.), так и расширенные (работа с бакетами, генерация ссылок, работа с правами и т.д.) с объектным хранилищем S3 прямо из 1С.

31200 руб.

27.04.2021    18656    24    70    

39

В облако на работу: Все варианты авторизации ОС сервером 1С на базе РЕД ОС 8 в домене windows. Рецепты от Капитана

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

В публикации рассматриваются все варианты авторизации ОС сервером 1С на базе РЕД ОС 8 в домене windows. Как случаи, когда сервер 1С авторизирует веб и обычных клиентов 1С в active directory, так и когда сам сервер является клиентом, например при HTTP запросах выполняемых сервером 1С.

18.03.2024    572    capitan    0    

9

Готовое облако или выделенный сервер? Экономика владения 1С

Облачные сервисы, хостинг Бесплатно (free)

Если вы работаете с 1С, то, скорее всего, используете для этого собственный сервер. Это решение дает больше гибкости: железо всегда под рукой, в любой момент можно поменять конфигурацию или установить дополнительное ПО. Например, чтобы организовать бухгалтеру удаленный рабочий стол. Но насколько этот вариант экономически выгоден для компании? Мы сравнили три варианта развертывания 1С: на собственном сервере, на арендованном в Selectel и в готовом облаке. Какие есть преимущества и недостатки у каждого варианта и что выгоднее — разбираем в статье.

13.03.2024    613    doctor_it    6    

0

Три пингвина под окном… Точки над Ё. Обзор рабочих мест пользователя 1С, собранных на отечественных дистрибутивах linux

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

Прошлая публикация "Три пингвина под окном… Обзор рабочих мест пользователя 1С, собранных на отечественных дистрибутивах linux" набрала более 20К просмотров. В моем случае это абсолютный рекорд. Как и обещал в ней, рассказываю, как установить неподдерживаемый дистрибутив ОС у облачного провайдера.

25.02.2024    2266    capitan    0    

6

Бесплатный митап “1С в облаке: возможности и риски, решения и кейсы”

Облачные сервисы, хостинг Мероприятия Бесплатно (free)

На митапе говорили о переносе 1С в облако: какие решения есть на рынке, их достоинства и недостатки. На примере реальных кейсов узнали особенности перехода, сроки, бюджеты, риски и возможности. В программе митапа 5 докладов и круглый стол.

06.02.2024    2895    0    Infostart    0    

18

Из 1С в S3 и обратно. Работа с объектным хранилищем

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

В данной статье демонстрируется работа с объектным хранилищем 1С с использованием подписанных (pre-signed) ссылок. Загрузка, скачивание и удаление реализованы на "чистом" языке 1С без внешних компонент и сервисов. В качестве провайдера хранилища S3 будем использовать Яндекс.Облако

06.02.2024    4476    Sedaiko    13    

64

В облаке, как дома: Устраиваемся поудобнее. Рабочее место пользователя 1С на базе РЕД ОС (HTTPS и архивирование)

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

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

29.01.2024    793    capitan    5    

6

Интеграция с сервисом "CARDPR". Управление электронными картами лояльности из 1С

Внешние источники данных Облачные сервисы, хостинг Платформа 1С v8.3 8.3.14 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Бытовые услуги, сервис Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Гостиничный бизнес Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Легкая промышленность, мода и одежда Управленческий учет Платные (руб)

Расширение позволяет автоматизировать управление картами лояльности и взаимодействие с покупателями при помощи интеграции корпоративной системы 1С и специализированного облачного сервиса "CARDPR". Автоматическая онлайн синхронизация сведений о владельце электронной карты лояльности и баланса бонусных баллов на карте между корпоративной системой 1С и мобильным устройством покупателя. Оповещение покупателя об изменении баланса его электронной карты лояльности и проведении каких-либо маркетинговых акций в компании при помощи рассылки push-сообщений на его мобильное устройство.

36000 руб.

20.07.2023    2630    0    2    

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

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

Можно напрямую пулять в Cloud Functions, но в этом случае там же нужно реализовать авторизацию. Я же предпочитаю использовать механизмы авторизации через jwt-токены в API-Gateway
JohnyDeath; +1 Ответить
9. malikov_pro 1296 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 580 09.01.24 01:30 Сейчас в теме
(10)
CH не любит удалять данные и тем более апдейтить

Планирую изучить этот вопрос
12. malikov_pro 1296 09.01.24 05:19 Сейчас в теме
(10) (11) Посмотрите как реализовано в https://infostart.ru/marketplace/1755776/. Если есть желание, то можно совместно подобное запилить.
JohnyDeath; +1 Ответить
13. Sedaiko 580 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 580 09.01.24 10:02 Сейчас в теме
(12) (14) в принципе должны подойти движки CollapsingMergeTree и VersionedCollapsingMergeTree для реального времени
16. JohnyDeath 301 09.01.24 11:43 Сейчас в теме
(15) если правильно указать секцию Order By, по которой идет сопоставление.
Ну и вопрос про удаленные проводки тоже остается открытым. Можно, конечно, попытаться вставлять нулевые суммы в таких случаях...
17. malikov_pro 1296 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 580 10.01.24 01:15 Сейчас в теме
(17)Если в BI нужен функционал, полностью совместимый с ORM 1С, то уже проще купить 1С-Аналитика
19. malikov_pro 1296 10.01.24 06:36 Сейчас в теме
(18) У некоторых руководителей непереносимость к 1С в работе. Пытаюсь показать что транспорт из 1С до БД написать не сложно. Грабли начинаются при обеспечении качества данных во внешних системах, нагуглил, самому еще нужно пробовать https://education.yandex.ru/handbook/data-analysis/article/ocenka-kachestva-dannyh
20. malikov_pro 1296 10.01.24 06:40 Сейчас в теме
(18) По поводу YDB перевод делал https://infostart.ru/1c/articles/1618896/, там над структурой данных прежде чем писать подумать надо, это нереляционная БД.
21. Sedaiko 580 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 1296 10.01.24 10:40 Сейчас в теме
(21) непонятно как реализовано, relation - связь, как сделать связь между таблицами с контролем ссылочной целостности непонятно в описании схемы данных YBD не нашел.

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