Пример 1: Консолидация данных из разных источников и веб-отчеты
Пример 2: Статистические функции языка R и HTML-виджеты
Области применения программы DataReducer:
Консолидация данных |
Публикация отчетов в веб |
|
DataReducer позволяет объединять данные из разных источников: информационные базы 1С, таблицы Excel, базы данных SQL, XML-документы, файлы множества других форматов. | DataReducer включает веб-приложение, предназначенное для передачи аналитической информации другим пользователям по сети. Данные 1С могут быть быстро опубликованы в виде веб-отчета. | |
Визуализация данных |
Интеграция 1С с другими системами |
|
R обладает мощными графическими возможностями. Вы можете создавать интерактивные диаграммы на основе данных из 1С и автоматически встраивать их в страницы сайта или корпоративного портала. | Веб-приложение DataReducer автоматически конвертирует данные в форматы XML и JSON и предоставляет к ним доступ по HTTP. DataReducer можно использовать как сервис интеграции с 1С. | |
Статистический анализ |
Предварительная обработка данных |
|
Ко множеству сфер применения R относятся статистика, эконометрика, финансовые исследования, машинное обучение. Если перед вами стоит задача статистического анализа данных 1C, то лучшего инструмента чем R не найти. | DataReducer можно использовать для извлечения и обработки данных перед их передачей в 1С. Возможности R по работе с различными API и форматами данных превосходят аналогичные возможности платформы 1С. |
Системные требования
- Операционная система: Windows 10 x64 / DEB-based Linux x64
- 1C:Предприятие 8 — Версия 8.3.9 или старше
Схема развертывания
Процесс развертывания DataReducer состоит из следующих этапов:
- Публикация интерфейса OData информационных баз 1С на веб-сервере.
- Запуск сервисов rserve и rapport в Docker-контейнерах.
- Установка и настройка приложения DataReducer Console.
Эти этапы подробно описаны в Руководстве пользователя.
Интерфейс главного окна программы
1. Список информационных баз | 4. Наборы данных скрипта R | 7. Область вывода графики |
2. Дерево метаданных | 5. Область вывода сообщений | |
3. Вкладка скрипта R | 6. Таблица данных |
Пример 1: Консолидация данных из разных источников и веб-отчеты
Требуется выполнить план-фактный анализ поступлений денежных средств компании за квартал. Компания состоит из двух юридических лиц — организаций «УноФарма» и «ПортоФарма». Бухгалтерский учёт организаций ведётся в двух разных информационных базах «1С:Бухгалтерия предприятия 3.0»:
Запланированные значения поступлений необходимо получить из таблицы Excel, в которой отражены суммарные данные по всем организациям:
Шаги решения поставленной задачи в программе «DataReducer Console»
- Добавляем настройки подключения к информационным базам «УноФарма» и «ПортоФарма». Интерфейс OData этих баз предварительно должен быть опубликован на веб-сервере и настроен в соответствии с документацией платформы «1С:Предприятие». В DataReducer можно одновременно работать с данными любого количества информационных баз. Список подключенных баз отображается в главном окне программы.
- После подключения информационной базы, DataReducer Console выводит дерево её метаданных. Дерево метаданных включает все сущности, доступные через интерфейс OData (справочники, регистры, виртуальные таблицы и пр.). Для свойств сущностей выводится их тип. Для свойств с ссылочным типом выводится связанная сущность.
- Создаём новый скрипт R и открываем его. Каждый скрипт открывается в отдельной вкладке.
- Находим в дереве метаданных информационной базы «УноФарма» виртуальную таблицу оборотов регистра бухгалтерии «Хозрасчётный» и через контекстное меню добавляем её в наборы данных скрипта R. Повторяем для информационной базы «ПортоФарма». Любой набор данных можно открыть в отдельном окне и загрузить данные для просмотра.
- Поочерёдно открываем окна созданных наборов данных и вводим настройки запросов. Перечень доступных настроек зависит от типа объекта, которому соответствует набор данных. Начало и конец периода получения оборотов регистра бухгалтерии «Хозрасчетный» задаём в виде параметров ${periodBegin} и ${periodEnd}. Значения этих параметров будут общими для всех наборов данных скрипта R.
- Пишем код на языке R (см. листинг). Обращение к наборам данных осуществляется по их именам.
- Выполняем скрипт. На экран выводятся сообщения о ходе выполнения, в том числе сформированные запросы REST-сервису «1С:Предприятия». В области вывода графики выводится построенная диаграмма. Результаты выполнения скрипта (таблицу данных и диаграмму) можно сохранить в файлы, используя методы языка R.
Листинг примера 1
На данном примере были продемонстрированы основные инструменты программы «DataReducer Console» для импорта данных информационных баз «1С:Предприятия» и некоторые методы языка R для обработки этих данных. Были консолидированы данные из трёх разных источников: двух информационных баз «1С: Бухгалтерия предприятия 3.0» и файла Excel. С помощью пакета ggplot2 была построена столбчатая диаграмма, отображающая отклонения фактических значений показателей от плановых.
Теперь опубликуем веб-отчет, содержащий результаты анализа.
В строке №96 листинга скрипта изменяем каталог сохранения файлов на /mnt/webapp-files , соответствующий каталогу файлов веб-приложения.
На вкладке «Веб-доступ» скрипта ставим галочку «Веб-доступ». При необходимости на этой вкладке можно изменить имя веб-ресурса и определить роли доступа.
В главном меню программы выбираем «Файл → Загрузить модель на сервер». Список ресурсов модели, к которым открыт веб-доступ, появится на главной странице веб-приложения:
Страница отчета с шаблоном по умолчанию:
Добавим на страницу ресурса период отчета, ссылку на скачивание данных в формате Excel и сгенерированную в R диаграмму. Для этого внесём изменения в шаблон страницы ресурса.
На вкладке «Веб-доступ» скрипта снимаем галочку «Шаблон по умолчанию». После этого шаблон страницы можно редактировать:
Добавляем в контейнер <body> следующие элементы:
<p><i>Период: с ${periodBegin?keep_before('T')} по ${periodEnd?keep_before('T')}</i></p>
<p><a href="/rapport/files/${resourceName}/${requestId}/ПланФакт.xlsx">Сохранить в Excel</a></p>
<p><img src="/rapport/files/${resourceName}/${requestId}/chart.png" class="img-responsive"></p>
После повторной загрузки модели на сервер мы увидим новую страницу ресурса:
Пример 2: Статистические функции языка R и HTML-виджеты
Основное назначение языка R – статистические вычисления. Если перед вами стоит задача статистического анализа данных «1С:Предприятия», то лучшего инструмента, чем R не найти.
В данном примере мы попробуем предсказать значение показателя прибыли от продаж по значениям показателей дебиторской и кредиторской задолженностей при помощи линейной регрессии.
Также мы построим интерактивный график, на который выведем как известные, так и прогнозные значения показателей. График будет иметь формат HTML и может быть опубликован в веб-отчете DataReducer.
Для построения регрессионной модели воспользуемся данными учета компании за 16 предыдущих кварталов. Эти данные мы получим из информационной базы «1С:ERP Управление предприятием 2».
Введём обозначения переменных и определим источники данных.
prib — Прибыль от продаж (зависимая переменная)
Прибыль от продаж = Выручка от продаж — Себестоимость продаж — Коммерческие и управленческие расходы
Источники данных: обороты регистров накопления «Выручка и себестоимость продаж» и «Прочие расходы».
deb — Дебиторская задолженность (независимая переменная)
Источники данных: остатки регистра накопления «Расчеты с клиентами по документам».
kred — Кредиторская задолженность (независимая переменная)
Источники данных: остатки регистра накопления «Расчеты с поставщиками по документам».
Таким образом, каждому кварталу будет соответствовать четыре набора данных по числу запросов к регистрам информационной базы. Необходимо получить данные по 16-ти периодам, значит, всего будет выполнено 64 запроса.
Формируем наборы данных, используя дерево метаданных информационной базы и конструкторы запросов.
Наблюдение по каждому кварталу и итоговую таблицу данных для анализа создаём следующим образом:
001 # Получаем значения показателей для каждого квартала 002 Q1_2014 <- data.frame( 003 period = "${Q1_2014_end}", 004 prib = Q1_2014_ВыручкаИСебестоимость[1, c("СуммаВыручкиTurnover")] - 005 Q1_2014_ВыручкаИСебестоимость[1, c("СтоимостьTurnover")] - 006 Q1_2014_ПрочиеРасходы[1, c("СуммаTurnover")], 007 deb = Q1_2014_РасчетыСКлиентами[1, c("ДолгBalance")], 008 kred = abs(Q1_2014_РасчетыСПоставщиками[1, c("ДолгBalance")]) 009 ) 010 Q2_2014 <- data.frame( 011 period = "${Q2_2014_end}", 012 prib = Q2_2014_ВыручкаИСебестоимость[1, c("СуммаВыручкиTurnover")] - 013 Q2_2014_ВыручкаИСебестоимость[1, c("СтоимостьTurnover")] - 014 Q2_2014_ПрочиеРасходы[1, c("СуммаTurnover")], 015 deb = Q2_2014_РасчетыСКлиентами[1, c("ДолгBalance")], 016 kred = abs(Q2_2014_РасчетыСПоставщиками[1, c("ДолгBalance")]) 017 ) (...) 131 # Объединяем все наблюдения в одну таблицу 132 df <- rbind(Q1_2014, Q2_2014, Q3_2014, Q4_2014, Q1_2024, Q2_2024, Q3_2024, Q4_2024, 133 Q1_2024, Q2_2024, Q3_2024, Q4_2024, Q1_2024, Q2_2024, Q3_2024, Q4_2024)
«Q1_2014_ВыручкаИСебестоимость», «Q1_2014_ПрочиеРасходы» и пр. — это имена, которые мы дали наборам данных, соответствующим виртуальным таблицам регистров накопления. «СуммаВыручкиTurnover», «СтоимостьTurnover» и пр. — имена полей этих таблиц, формируемые платформой 1С. Периоды задаем в виде параметров.
Смотрим полученную таблицу данных:
Создадим интерактивный график изменения показателей по кварталам. Для этого воспользуемся пакетом «dygraphs», предоставляющем R-программисту возможности одноименной JavaScript-библиотеки:
135 # Приводим данные к формату xts 136 library(xts) 137 data_xts <- xts(df[,-1], order.by=as.POSIXct(df[,1])) 138 139 # Строим график 140 library(dygraphs) 141 graph <- dygraph(data_xts, width=750, height=350) %>% 142 dySeries("prib", label = "Прибыль") %>% 143 dySeries("deb", label = "Деб_зад") %>% 144 dySeries("kred", label = "Кред_зад") %>% 145 dyOptions(drawPoints=TRUE, pointSize=2, drawAxesAtZero=TRUE, labelsKMB=TRUE) %>% 146 dyRangeSelector() 147 148 # Сохраняем виджет с графиком 149 library(htmlwidgets) 150 saveWidget(graph, file="/mnt/host/prib.html", selfcontained = TRUE)
Создаём линейную модель и предварительно оцениваем её:
155 model <- lm(data=df, prib~deb+kred) 156 paste(capture.output(print(summary(model))), collapse=' ')
Как видно из последнего столбца таблицы, коэффициенты при переменных deb и kred статистически значимо отличаются от нуля при p < 0.01 и p < 0.001, соответственно. Это указывает на то, что и дебиторская и кредиторская задолженности влияют на показатель прибыли от продаж. Взятые вместе, они на 57% описывают изменения показателя (Multiple R-squared: 0.571).
Теперь проверим данные и посмотрим, можем ли мы нашу модель улучшить.
Для этого воспользуемся методами, реализованными в пакете car (пакет уже установлен в Docker-контейнере rserve).
Проверим, что ошибки регрессии нормально распределены (одна из предпосылок линейной регрессии, которые должны выполняться, чтобы мы могли считать модель адекватной). Выполним это графически, построив Q-Q график, или график Квантиль-Квантиль:
160 library(car) 161 qq <- qqPlot(model, labels = row.names(df), simulate = TRUE, main = "Q-Q plot") 162 print(qq) 163 dev.off()
На графике хорошо видно, что одно из наблюдений выпадает из доверительных границ (изображенных пунктирными линиями) — это т. н. «выброс», т. е. наблюдение, которое плохо предсказывается моделью.
Удаляем «выброс» и снова оцениваем модель:
165 # Удаляем "выброс" 166 df1 <- df[-c(12),] 167 168 # Снова оцениваем модель 169 model1 <- lm(data=df1, prib~deb+kred) 170 paste(capture.output(print(summary(model1))), collapse=' ')
Как мы видим, после удаления «выброса» значимость коэффициентов при независимых переменных увеличилась и модель в целом стала лучше соответствовать данным (Multiple R-squared: 0.793).
Проверим выполнение всех остальных предпосылок линейной регрессии при помощи функции gvlma() из пакета gvlma.
173 library(gvlma) 174 gvmodel <- gvlma(model1) 175 paste(capture.output(print(summary(gvmodel))), collapse=' ')
Воспользуемся моделью для предсказания прибыли от продаж за три последующих квартала:
177 # Создаем таблицу с плановыми данными дебиторской и кредиторской задолженностей 178 # и приводим её к формату xts 179 q1_2024_plan <- data.frame(period="2024-03-31T23:59:59", deb=${deb_plan1}, kred=${kred_plan1}) 180 q2_2024_plan <- data.frame(period="2024-06-30T23:59:59", deb=${deb_plan2}, kred=${kred_plan2}) 181 q3_2024_plan <- data.frame(period="2024-09-30T23:59:59", deb=${deb_plan3}, kred=${kred_plan3}) 182 plan_df <- rbind(q1_2024_plan, q2_2024_plan, q3_2024_plan) 183 plan_xts <- xts(plan_df[,-1], order.by=as.POSIXct(plan_df[,1])) 184 185 # Предсказываем прибыль от продаж 186 predicted <- predict(model1, newdata=plan_xts, interval="prediction")
Предсказанные значения показателя, а также доверительные интервалы, выводим на интерактивный график:
191 # Объединяем все наборы данных 192 combined <- cbind(data_xts, plan_xts, predicted) 193 194 # Строим новый график 195 graph1 <- dygraph(combined, width=750, height=350) %>% 196 dySeries("prib", label = "Прибыль", color="red") %>% 197 dySeries("deb", label = "Деб_зад", color = "blue") %>% 198 dySeries("kred", label = "Кред_зад", color = "green") %>% 199 dySeries("deb.1", label = "Деб_зад_план", color = "blue", strokePattern="dashed") %>% 200 dySeries("kred.1", label = "Кред_зад_план", color = "green", strokePattern="dashed") %>% 201 dySeries(c("lwr", "fit", "upr"), label = "Прибыль_прогноз", color = "red", strokePattern="dashed") %>% 202 dyEvent("2024-03-31", "Прогноз", labelLoc = "bottom", color="red", strokePattern="dotted") %>% 203 dyLegend(width = 300) %>% 204 dyOptions(drawPoints=TRUE, pointSize=2, drawAxesAtZero=TRUE, labelsKMB=TRUE) %>% 205 dyRangeSelector() 206 207 # Создаем каталог для хранения файлов в точке монтирования /mnt/webapp-files, 208 # соответствующей каталогу файлов веб-приложения. 209 requestDir <- '/mnt/webapp-files/${resourceName}/${requestId} 210 dir.create(requestDir, recursive=TRUE) 211 212 # Сохраняем виджет с новым графиком в каталоге для публикации 213 graphPath <- paste(requestDir, 'prib_predicted.html', sep='/') 214 saveWidget(graph1, file=graphPath, selfcontained = TRUE)
Подробнее о методах, используемых в данном примере:
- Лысенко М.В., Лысенко Ю.В., Якушев А.А., Согрина Н.С. «Cтатистический анализ дебиторской и кредиторской задолженности при оперативном прогнозировании прибыли от продаж» // Фундаментальные исследования. – 2024. – № 12-4. – С. 884-890
- Цикл видео-лекций Демешева Б.Б. по курсу Эконометрики
- Кабаков Р.И. «R в действии. Анализ и визуализация данных в программе R» / пер. с англ. Полины А. Волковой. – М.: ДМК Пресс, 2014. – 588 с.: ил.
Достоинства
Интеграция с 1С через REST-интерфейс |
Конструктор запросов к 1С |
|
Способ взаимодействия DataReducer с «1С:Предприятием» не требует запуска клиента 1С и программирования на стороне 1С. | DataReducer позволяет конструировать HTTP-запросы к REST сервису «1С:Предприятия» при помощи графических средств. Результаты выполнения каждого запроса можно посмотреть в отдельном окне. | |
Кэширование ресурсов 1С |
Открытый исходный код |
|
Данные, импортированные из 1С, сохраняются в кэше. Это значительно сокращает время повторного обращения к ресурсам и выполнения скриптов R. | Программа имеет открытый исходный код и распространяется по лицензии GNU GPL v2. | |
Кроссплатформенность |
Простая установка из Docker-образов |
|
Программа DataReducer написана на Java и работает под управлением операционных систем Windows и Linux. | Серверные компоненты DataReducer распространяются в виде Docker-образов, что упрощает установку и работу с программой. |
Техническая поддержка
Вы можете свободно обращаться к автору по любым вопросам, касающимся использования программы.
Также предлагаю расширенную техническую поддержку, которая может включать:
- Решение конкретных задач с помощью DataReducer (см. Области применения программы)
- Создание внешних обработок для двусторонней интеграции DataReducer с 1С
- Подготовка индивидуальных Docker-образов (например, с нужными вам пакетами R)
- Доработки программы по вашему техническому заданию
Автор будет рад, если в комментариях вы расскажете о вашем опыте использования DataReducer или R для анализа данных 1С!
Сравнение версий
Изменения в версиях
DataReducer 1.1.14 (22.04.19)
- Исправление ошибок
Руководство пользователя 2.2 (22.04.19)
- Добавлен раздел "Двусторонняя интеграция с 1С" и новый пример использования
DataReducer 1.1.13 (31.03.19)
- Изменен формат ввода параметров. Подробности в п. 3.4 Руководства пользователя
- Набор конфигурационных файлов Docker-контейнера datareducer_rapport дополнен файлами server.xml и log4j2.xml
- В схему ответа сервера на запрос данных в форматах XML или JSON добавлен атрибут типа поля
- Другие небольшие доработки и исправление ошибок
Руководство пользователя 2.1 (31.03.19)
- Документация актуализирована
Гарантия возврата денег
ООО «Инфостарт» гарантирует Вам 100% возврат оплаты, если программа не соответствует заявленному функционалу из описания. Деньги можно вернуть в полном объеме, если вы заявите об этом в течение 14-ти дней со дня поступления денег на наш счет.
Программа настолько проверена в работе, что мы с полной уверенностью можем дать такую гарантию. Мы хотим, чтобы все наши покупатели оставались довольны покупкой.
Для возврата оплаты просто свяжитесь с нами.