INFOSTART EVENT 2018 EDUCATION

Второй тур голосования за доклады.
Окончание 5 сентября.

Кантер Андрей | Руководитель отдела, зам директора по работе с учебными заведениями | ООО НПФ "Форус"

«Новые кадры никто не завезет»

Мы попали в интересную ситуацию на рынке, когда число возможных проектов превысило число потенциальных исполнителей. Кадры нужны всем, но где же их взять? Нужны сегодняшние студенты, которые станут нашими сотрудниками завтра. В докладе я расскажу: 1. Как меняется подход работодателей к работе со студентами и почему уже нельзя позвонить в деканат и попросить "Дайте мне кого-нибудь умного"; 2. Как мы создали студенческое предприятие совместно с ВУЗом, в котором трудятся более 10 человек. Студенты получают реальных клиентов, опыт и стаж по специальности без отрыва от учебы. Но выгодна ли эта схема партнеру 1С? 3. Как набирать 15 человек в год на вакансии программистов и консультантов через ВУЗы. Крутых человек, которые через 3-4 года становятся ведущими. 4. Как не растерять студентов за время их обучения ("отвал" не более 50% - и почему это все равно выгоднее, чем искать на рынке); 5. Как построить для студентов систему мотивации, адаптации и обучения в компании. Нам есть с чем сравнивать: год назад мы потеряли почти всех, в этом году - почти всех удержали. Покажу в чем была разница; 6. Выжать максимум. Зачем писать со студентами дипломные проекты? Действительно ли они не могут сделать ничего серьезного? 7. Студенты кончились. Что дальше? Школьники!

DataReducer Console — R-консоль для «1С:Предприятия»

Программирование - Инструментарий

28
Программа для обработки, анализа и визуализации данных информационных баз «1С:Предприятия» с использованием возможностей языка программирования R.

R — это одно из наиболее популярных современных программных средств для работы с данными. Ко множеству областей применения R относятся статистика, эконометрика, финансовые исследования, машинное обучение. R обладает мощными графическими возможностями, с помощью которых можно строить сложные схемы и диаграммы. Функциональность базовой версии R может быть расширена при помощи дополнительных пакетов (на настоящий момент их насчитывается более 10 тысяч).

DataReducer Console предоставляет инструменты формирования наборов данных для их последующей передачи в вычислительную среду R. Данные для обработки импортируются из информационных баз «1С: Предприятия» и любых других источников, поддерживаемых R и его расширениями. К таким источникам относятся таблицы Excel, базы данных SQL, XML-документы, файлы множества других форматов.

Для доступа к данным информационных баз используется протокол OData. DataReducer Console позволяет конструировать HTTP-запросы к REST веб-сервису «1С:Предприятия» при помощи графических средств. Результаты выполнения каждого запроса можно просмотреть в отдельном окне.

Полученные ресурсы информационных баз сохраняются в кэше, реализованном с использованием документоориентированной СУБД OrientDB. Это значительно сокращает время повторного обращения к ресурсам и выполнения скриптов R.

Результаты выполнения кода интерпретатором R выводятся на экран в главном окне DataReducer Console или записываются в файлы стандартными средствами R.

Системные требования

  • Операционная система: Windows 7 x64 / Windows 10 x64 / DEB-based Linux x64.
  • 1C:Предприятие 8 - версия 8.3.9 или старше.

Схема развертывания

Процесс развертывания DataReducer Console состоит из следующих этапов:

  • Публикация интерфейса OData информационных баз на веб-сервере.
  • Запуск интерпретатора R и сервера Rserve в Docker-контейнере.
  • Установка и настройка приложения DataReducer Console.

Все этапы подробно описаны в Руководстве пользователя.

Для удобства развертывания среды R для работы с DataReducer Console подготовлен Docker-образ datareducer/rserve. Образ включает интерпретатор R, сервер Rserve, ряд других библиотек и пакетов.

Интерфейс главного окна программы

  1. Список информационных баз — можно работать с данными нескольких информационных баз одновременно.
  2. Дерево метаданных включает все сущности, доступные через интерфейс OData (справочники, регистры, виртуальные таблицы и пр.).
  3. Вкладка скрипта R — каждый скрипт открывается в отдельной вкладке.
  4. Наборы данных скрипта R — наборы данных можно открывать в отдельных окнах и загружать данные для просмотра.
  5. Область вывода сообщений о ходе выполнения, в том числе сформированные запросы REST-сервису «1С:Предприятия».
  6. Таблица данных — результат выполнения скрипта R.
  7. Область вывода графики — если R формирует изображения, DataReducer Console получает их и выводит в главном окне.

Пример 1: Агрегация данных из разных источников

Требуется выполнить план-фактный анализ поступлений денежных средств компании за квартал. Компания состоит из двух юридических лиц — организаций «УноФарма» и «ПортоФарма». Бухгалтерский учёт организаций ведётся в двух разных информационных базах «1С:Бухгалтерия предприятия 3.0».

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

Шаги решения поставленной задачи в программе DataReducer Console:

  1. Добавляем настройки подключения к информационным базам «УноФарма» и «ПортоФарма». Интерфейс OData этих баз предварительно должен быть опубликован на веб-сервере и настроен в соответствии с документацией платформы «1С:Предприятие». С помощью DataReducer Console можно одновременно работать с данными любого количества информационных баз. Список подключенных баз отображается в главном окне программы.
  2. После подключения информационной базы, DataReducer Console выводит дерево её метаданных. Дерево метаданных включает все сущности, доступные через интерфейс OData (справочники, регистры, виртуальные таблицы и пр.). Для свойств сущностей выводится их тип. Для свойств с ссылочным типом выводится связанная сущность.
  3. Создаём новый скрипт R и открываем его. Каждый скрипт открывается в отдельной вкладке.
  4. Находим в дереве метаданных информационной базы «УноФарма» виртуальную таблицу оборотов регистра бухгалтерии «Хозрасчётный» и через контекстное меню добавляем её в наборы данных скрипта R. Повторяем для информационной базы «ПортоФарма». Любой набор данных можно открыть в отдельном окне и загрузить данные для просмотра.
  5. Поочерёдно открываем окна созданных наборов данных и вводим настройки запросов. Перечень доступных настроек зависит от типа объекта, которому соответствует набор данных. Начало и конец периода получения оборотов регистра бухгалтерии «Хозрасчетный» задаём в виде параметров «&periodBegin» и «&periodEnd». Значения этих параметров будут общими для всех наборов данных скрипта R.
  6. Пишем код на языке R (см. листинг ниже). Обращение к наборам данных осуществляется по их именам.
  7. Выполняем скрипт. На экран выводятся сообщения о ходе выполнения, в том числе сформированные запросы REST-сервису «1С:Предприятия». В области вывода графики выводится построенная диаграмма. Результаты выполнения скрипта (таблицу данных и диаграмму) можно сохранить в файлы, используя методы языка R. Некоторые методы языка R для выполнения типовых задач приведены в Руководстве пользователя.
 
Скрипт R для решения поставленной задачи

 

 

На данном примере были продемонстрированы основные инструменты программы DataReducer Console для импорта данных информационных баз «1С:Предприятия» и некоторые методы языка R для обработки этих данных. Были получены и агрегированы данные из трёх разных источников: двух информационных баз «1С: Бухгалтерия предприятия 3.0» и файла Excel. С помощью пакета ggplot2 была построена столбчатая диаграмма, отображающая отклонения фактических значений показателей от плановых.

Пример 2: Регрессионный анализ данных информационной базы

Планово-экономический отдел ПАО «Астросбыт» предполагает, что между прибылью от продаж и дебиторской и кредиторской задолженностями компании существует зависимость, которую можно использовать для прогнозирования значения показателя прибыли от продаж. Требуется оценить эту зависимость.

Для построения регрессионной модели воспользуемся данными учета компании за 16 предыдущих кварталов. Эти данные мы получим из информационной базы «1С:ERP Управление предприятием 2».

Введём обозначения переменных и определим источники данных.

prib — Прибыль от продаж (зависимая переменная)

Прибыль от продаж = Выручка от продаж - Себестоимость продаж - Коммерческие и управленческие расходы

Источники данных: обороты регистров накопления «Выручка и себестоимость продаж» и «Прочие расходы».

deb — Дебиторская задолженность (независимая переменная)

Источники данных: остатки регистра накопления «Расчеты с клиентами по документам».

kred — Кредиторская задолженность (независимая переменная)

Источники данных: остатки регистра накопления «Расчеты с поставщиками по документам».

Таким образом, каждому кварталу будет соответствовать четыре набора данных по числу запросов к регистрам информационной базы. Необходимо получить данные по 16-ти периодам, значит, всего будет выполнено 64 запроса.

Формируем наборы данных, используя дерево метаданных информационной базы и конструкторы запросов.

Наблюдение по каждому кварталу и итоговую таблицу данных для анализа создаём следующим образом:

 
Получаем значения показателей для каждого квартала
Q1_2014 <- data.frame(
        prib  = Q1_2014_ВыручкаИСебестоимость[1, c("СуммаВыручкиTurnover")] -
                Q1_2014_ВыручкаИСебестоимость[1, c("СтоимостьTurnover")] -
                Q1_2014_ПрочиеРасходы[1, c("СуммаTurnover")],
        deb  = Q1_2014_РасчетыСКлиентами[1, c("ДолгBalance")],
        kred = abs(Q1_2014_РасчетыСПоставщиками[1, c("ДолгBalance")])
)
Q2_2014 <- data.frame(
        prib  = Q2_2014_ВыручкаИСебестоимость[1, c("СуммаВыручкиTurnover")] -
                Q2_2014_ВыручкаИСебестоимость[1, c("СтоимостьTurnover")] -
                Q2_2014_ПрочиеРасходы[1, c("СуммаTurnover")],
        deb  = Q2_2014_РасчетыСКлиентами[1, c("ДолгBalance")],
        kred = abs(Q2_2014_РасчетыСПоставщиками[1, c("ДолгBalance")])
)
...
df <- rbind(Q1_2014, Q2_2014, Q3_2014, Q4_2014, Q1_2015, Q2_2015, Q3_2015, Q4_2015,
            Q1_2016, Q2_2016, Q3_2016, Q4_2016, Q1_2017, Q2_2017, Q3_2017, Q4_2017)

«Q1_2014_ВыручкаИСебестоимость», «Q1_2014_ПрочиеРасходы» и пр. - это имена, которые мы дали наборам данных, соответствующим виртуальным таблицам регистров накопления. «СуммаВыручкиTurnover», «СтоимостьTurnover» и пр. - имена полей этих таблиц, формируемые платформой 1С.

Смотрим полученную таблицу данных:

Предварительно оценим нашу модель:

 
Оценка модели
model <- lm(data=df, prib~deb+kred)
paste(capture.output(print(summary(model))), collapse='\n')

Как видно из последнего столбца таблицы, коэффициенты при переменных deb и kred статистически значимо отличаются от нуля при p < 0.01 и p < 0.001, соответственно. Это указывает на то, что и дебиторская и кредиторская задолженности влияют на показатель прибыли от продаж. Взятые вместе, они на 57% описывают изменения показателя (Multiple R-squared: 0.571).

Теперь проверим данные и посмотрим, можем ли мы нашу модель улучшить.

Для этого воспользуемся методами, реализованными в пакете car (пакет уже установлен в Docker-контейнере rserve).

Проверим, что ошибки регрессии нормально распределены (одна из предпосылок линейной регрессии, которые должны выполняться, чтобы мы могли считать модель адекватной). Выполним это графически, построив Q-Q график, или график Квантиль-Квантиль:

 
Строим график Квантиль-Квантиль
library(car)

qq <- qqPlot(model, labels = row.names(df), simulate = TRUE, main = "Q-Q plot")
print(qq)
dev.off()

На графике хорошо видно, что одно из наблюдений выпадает из доверительных границ (изображенных пунктирными линиями) — это т. н. «выброс», т. е. наблюдение, которое плохо предсказывается моделью.

Определяем индекс этого наблюдения и удаляем его из нашего набора, после чего снова оцениваем модель:

 
Определяем индекс "выброса"
paste(capture.output(print(outlierTest(model))), collapse='\n')

 
Удаляем "выброс" и оцениваем новую модель
df2 <- df[-c(12),]

model <- lm(data=df2, prib~deb+kred)
paste(capture.output(print(summary(model))), collapse='\n')

Как мы видим, после удаления «выброса» значимость коэффициентов при независимых переменных увеличилась и модель в целом стала лучше соответствовать данным (Multiple R-squared: 0.793).

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

Проверим независимость остатков при помощи теста Дарбина - Уотсона:

 
Тест Дарбина - Уотсона
paste(capture.output(print(durbinWatsonTest(model))), collapse='\n')

Высокое значение p-value говорит о независимости остатков, т. е. предпосылка выполняется.

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

 
Строим диаграммы компонент и остатков
cr <- crPlots(model)
print(cr)
dev.off()

Диаграммы подтверждают, что требование линейности соблюдено.

Гомоскедастичность (однородность дисперсии) проверим также графически:

 
Тест на гомоскедастичность
sl <- spreadLevelPlot(model)
print(sl)
dev.off()

Мы видим, что требование гомоскедастичности также выполняется, об этом говорит близкая к горизонтальной прямая на графике.

Таким образом, все предпосылки линейной регрессии выполняются. Мы можем перепроверить их выполнение при помощи функции gvlma() из пакета gvlma

 
Проверка линейной модели
library(gvlma)
gvmodel <- gvlma(model)
paste(capture.output(print(summary(gvmodel))), collapse='\n')

Смотрим на столбец «Decision» и ещё раз убеждаемся, что наши данные удовлетворяют всем предпосылкам, лежащим в основе МНК-регресии, то-есть наша модель статистически адекватна.

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

 
Предсказание прибыли от продаж
nd <- data.frame(deb=84112200, kred=64817200)
paste(capture.output(print(predict(model, newdata = nd, interval = "prediction"))), collapse='\n')

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

 
Код примера целиком

 

Подробнее о методах, используемых в данном примере:

  • Лысенко М.В., Лысенко Ю.В., Якушев А.А., Согрина Н.С. «Cтатистический анализ дебиторской и кредиторской задолженности при оперативном прогнозировании прибыли от продаж» // Фундаментальные исследования. – 2016. – № 12-4. – С. 884-890
  • Цикл видео-лекций Демешева Б.Б. по курсу Эконометрики
  • Кабаков Р.И. «R в действии. Анализ и визуализация данных в программе R» / пер. с англ. Полины А. Волковой. – М.: ДМК Пресс, 2014. – 588 с.: ил.

Выводы по использованию программы DataReducer Console:

Как показывает этот пример, при большом количестве наборов данных, их извлечение из информационной базы 1C по протоколу OData может стать достаточно трудоёмкой задачей. Это может быть оправдано в следующих случаях:

  • Скрипт на языке R выполняется регулярно, используемые данные динамически изменяются. В этом случае настройка и сохранение запросов к информационной базе будет лучшим решением в сравнении с ручной выгрузкой данных. Это особенно актуально, если агрегируются данные из нескольких баз и других источников.
  • Требуется автоматизация выполнения скрипта R для передачи результатов его выполнения другому пользователю или для интеграции с другим сервисом. Эти возможности реализует веб-приложение DataReducer.

Веб-приложение DataReducer

Веб-приложение DataReducer позволяет обращаться к результатам обработки данных информационных баз по HTTP и может быть использовано как для передачи аналитической информации другим пользователям по сети, так и для односторонней интеграции «1С: Предприятия» с другими системами.

Файл конфигурации веб-приложения создается с помощью программы DataReducer Console.

Данные ресурса можно получить в трёх различных форматах: HTML, XML или JSON. При получении данных ресурса в формате HTML выводится описание скрипта и таблица данных. Шаблон страницы ресурса, используемый по умолчанию, можно изменить, добавив на страницу изображения и другие новые элементы. DataReducer использует шаблонизатор FreeMarker.

Если скрипт R содержит параметры, их значения можно передать в запросе к ресурсу. Например, http://localhost:8080/rwa/analysis1?periodBegin=2017-01-01T00%3A00%3A00&periodEnd=2017-03-31T23%3A59%3A59

В теле шаблона также можно использовать параметры скрипта R в соответствии с синтаксисом FreeMarker. Например,

 
<b>Период: с ${periodBegin?keep_before('T')} по ${periodEnd?keep_before('T')}</b>

, где periodBegin и periodEnd — это имена параметров скрипта R. В данном примере на странице будут выведены даты начала и конца периода с отброшенным временем. О синтаксисе FreeMarker можно прочесть в официальной документации шаблонизатора.

Разграничением доступа к ресурсам управляет контейнер сервлетов Apache Tomcat. Роли доступа к ресурсам назначаются в DataReducer Console.

Более подробно о работе с веб-приложением DataReducer читайте в Руководстве пользователя DataReducer и DataReducer Console.

Пример использования веб-приложения DataReducer

Откроем доступ по сети к результатам анализа данных из первого примера.

В программе DataReducer Console для данного скрипта устанавливаем галочку «Веб-доступ» и назначаем имя ресурса «analysis1». Сохраняем новую конфигурацию datareducer.conf в каталоге WEB-INF веб-приложения и перезагружаем Apache Tomcat.

Новый ресурс появляется в списке ресурсов на главной странице веб-приложения:

Переходим по ссылке с именем скрипта и получаем таблицу данных, которую он генерирует, в формате HTML:

Добавим на страницу ресурса период отчета, ссылку на скачивание данных в формате Excel и сгенерированную в R диаграмму. Для этого внесём изменения в скрипт и шаблон страницы ресурса:

 
Изменения в скрипте R

 

Теперь после выполнения скрипта в каталоге rwa/files веб-приложения будет создан каталог ресурса с его именем «analysis1», а в нём - подкаталог запроса с названием, сгенерированным случайным образом.

Файлы диаграммы и Excel будут сохранены в подкаталоге запроса и ссылки на них можно добавить на веб-страницу ресурса.

В программе DataReducer Console снимаем галочку «Шаблон по умолчанию» и вносим изменения в шаблон:

 
Изменения в шаблоне веб-страницы

 

После замены файла конфигурации WEB-INF/datareducer.conf и перезапуска Apache Tomcat мы увидим страницу ресурса с внесенными нами изменениями:

О логотипе

Логотип программы — это видоизмененное изображение логотипа R, автором которого является организация R Foundation. Изменение заключается в замене латинской буквы "R" на кириллическую "Р" и символизирует адаптацию программы под потребности пользователей "1С: Предприятия". Логотип R и логотип DataReducer Console распространяются на условиях лицензии CC-BY-SA 4.0.

Гарантия возврата денег

ООО "Инфостарт" гарантирует Вам 100% возврат оплаты, если программа не соответствует заявленному функционалу из описания. Деньги можно вернуть в полном объеме, если вы заявите об этом течение 14-ти дней со дня поступления денег на наш счет.

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

Для возврата оплаты просто свяжитесь с нами.

28

Лицензии

Наименование Файл Версия Размер
DataReducer Console — версия для Windows 7/10 x64
.exe 61,22Mb
03.03.18
6
.exe 1.0.1 61,22Mb 6 Скачать бесплатно
DataReducer Console — версия для DEB-based Linux x64
.deb 66,27Mb
03.03.18
0
.deb 1.0.1 66,27Mb Скачать бесплатно
05.03.2018
1.0.1 3400 руб.

Моментальная
доставка

Документы

Наименование Файл Версия Размер
Руководство пользователя DataReducer и DataReducer Console
.pdf 2,02Mb
03.03.18
17
.pdf 1.0.1 2,02Mb 17 Скачать бесплатно
Свидетельство о государственной регистрации программы
.pdf 187,92Kb
03.03.18
2
.pdf 187,92Kb 2 Скачать бесплатно

Техническая поддержка

Наименование Файл Версия Размер
05.03.2018
1700 руб.


Новый вопрос

E-mail*
Тема (вопрос)*

См. также