gifts2017

Сервер управленческих отчетов

Опубликовал Андрей Шабашов (andy23) в раздел Обмен - Интеграция с WEB

Пользователей учетной программы условно можно разделить на писателей и читателей. Другими словами, на тех, кто генерирует информацию, и на тех, кто ее потребляет. Последняя группа - это менеджеры, руководители, все те, кому нужны данные для принятия управленческих решений, назовём  их аналитики. Характеристику этой группе можно дать такую - жадные до информации и очень занятые люди, им некогда разбираться в премудростях программы.  Аналитики хотят иметь мощный инструмент для анализа данных, которым легко пользоваться.

Назначение разработки - упростить доступ к информации, которая находится в ИБ 1С. Сделать простой, дружелюбный интерфейс при этом использовать все мощные инструменты платформы (запросы, СКД),  предоставить расширенные возможности по анализу данных, используя сторонние компоненты на базе html/javascript


Сервер управленческих отчетов (СУО) - это внешние приложение (web сервер), в котором есть два раздела административный и пользовательский. В административном разделе  настраивается список информационных баз и отчетов. В настройках отчета указывается тип, возможные  варианты:
  1. на базе текста запроса,
  2. системы компоновки данных (указывается схема и настройка в формате xml)
  3. на базе универсального отчета (для УТ 10)
  4. произвольный тип.

С отчетами с типом 1 и 2 все предельно просто – в 1С в своей любимой консоли запросов/компановки данных конструируем и отлаживаем отчет, копируем текст запроса/СКД и подставляем это в СУО. Вот и все, отчет готов для всеобщего обозренияСхема работы: 1С получает текст запроса/СКД выполняет его, сохраняет результат в  файл формата html и отдает СУО. Так как на выходе получается html файл не ждите, что у вас сохранится функционал со сворачиванием групп. Если вы без этого никак, то отчеты с произвольным типом, смогут вам помочь.

Для произвольного типа отчета, кроме запроса, необходимо создать два файла - клиентское представление страницы (index.htmlи скрипт для сервера (module.js), который будет отдавать данные. Тут можно воспользоваться всей мощью html/javascriptНеобходимо отметить, что мир веб разработки стремительно развивается - новые фреймворки появляются как грибы после дождя,  а JavaScript перерос из языка который использовался на стороне клиента, в серверный вариант - Node.js. Все что, Вы здесь видите и демо-сайт на Linux и исполняемый файл на Windows все разработано на Ноде. Причем используется один и тот же код. Один язык программирования и для клиента и для сервера, для создания десктопных приложений и для веб разработки, в общем Node.js такой же крутой как 1С! ;)

Согласен, что каждый инструмент предназначен для определенного круга задач. Но в данной разработке JS это то, что, нужно и заставим его поработать на нас! Первое, что можно сделать, это вывести все возможные списки и справочники, которые могут понадобится в нелегком управленческом труде. Причем это сделать красиво и функционально, не хуже, чем в 1С. Чтобы не изобретать велосипед, возьмём готовую компоненту в которой уже есть весь необходимый функционал: сортировка, поиск, группировки и т.д. В html странице мы просто декларативно описываем: название столбца, ширину, необходимость поиска и т.п.

title: 'Товары',
 gridOptions: {
    enableFiltering: true,
       columnDefs: [
         { name: 'name', displayName: 'Товар', width: '30%' },
         { name: 'grup', displayName: 'Товарная группа', width: '350', enableFiltering: false, grouping: { groupPriority: 0 }, sort: { priority: 0, direction: 'asc' } },
и т.д...

Еще понадобится код на стороне СУО, чтобы отдавать данные:

var db = new sqlite3.Database(par.pathReport + 'data.db', sqlite3.OPEN_READONLY);
    
    function getData(numTable, fn) {
        var qSQL = 'SELECT * FROM Tab'+ numTable;
        var res = [];
        db.each(qSQL, 
            function (err, row) {
            res.push(row);
        }, 
            function () {fn(res)});   
    }

Не так уж и сложно, что бы создать свой шедевр не правда ли?

Графики и диаграммы - это то, что позволяет представить цифры в визуальную информацию и это то, что любят аналитики. Да, безусловно, в 1С это дело тоже присутствует, но когда увидишь другие решения, то хочется большего. Существует множество готовых библиотек для построения диаграмм и схем: D3.js, Google Charts, Highcharts и др., хороший обзор по этой теме здесь.

Отчеты с графиками можно создавать традиционно - один запрос, один набор данных, один статический график.

Мне же представляется интересным другой вариант. Вот рецепт отчета по продажам, который доступен по ссылке выше. Делаем срез данных (запрос) за достаточно большой промежуток времени и сохраняем (это делает обработка на стороне 1С, используется sqlite). Выгружаются данные по продажам с детализацией по дате, товарной группе, подразделению (филиалу), сумме реализации, себестоимости и прибыли. Создаем три связных графика: продажи, сгруппированные по дням, по подразделениям и по товарным группам. Таким образом мы видим итоговые цифры по продажам, а также, информацию из чего эти цифры сложились. Легким движением руки мы можем быстро менять период и анализировать данные за любой произвольный период хозяйственной деятельности предприятия. Отчет построен на базе Highcharts - библиотека для графиков с множеством плюшек, например, масштабирование, автогруппировки (при увеличении периода меняется группировка дни/недели/месяц) и др. На Инфостаре есть разработки, с примером использованием этой компонеты, например: здесь или здесь. Если вам по каким-то причинам не пришлась по душе эта компонента, воспользуйтесь amCharts, тоже рекомендую, пример здесь и здесь.  Поробуйте и Вы поймете, что создать свой график не так уж и сложно!

Профиты:

 

  • Возможность создавать мощные аналитические отчеты;
  • Удобный доступ к нужному отчету: аналитик может даже и не подозревать, какая учетая система используется;
  • Быстрая публикация отчета: при наличии готового запроса, схемы СКД размещение займет несколько минут;
  • Простая установка: не требуется поднимать web сервер (IIS, Apache), настраивать web сервисы, вносить изменения в конфигурацию, необходимо только открыть обработку в 1С;
  • Работа с любыми платформами V8: обычные/ управляемые формы, файловый /клиент-серверный формат базы 1С;
  • Неограниченный доступ к отчетам с различных устройств: ПК/Планшет и ОС внутри предприятия;
  • Автономность и переносимость: если по каким-то причинам 1С недоступна (обновления и т.п.) СУО всегда в строю, можно скопировать папку с программой и запустить на любом компьютере;
  • Снижение нагрузки на базу данных: первоначально мгновенно отобразится последний сформированный отчет, если он актуальный нет необходимости его обновлять;
  • Оптимизация использования лицензий: на одном сеансе 1С могут подключаться большое количество пользователей;
  • Открытый код, возможность дорабатывать программу под свои нужды. 

Варианты развития:

  • Работа с нескольким информационными базами
  • Доступ к базам через com-подключение
  • Создание клиентской программы, для off-line работы пользователя с отчетами (возможна работа без подключения к серверу, например на ноутбуке в командировке и т.п.)
  • Планируется дальнейшая развитие СОУ, сама программа(платформа) со всем функционалом будет бесплатной, а готовые подключаемые отчеты (дашборды) на платной основе. Можно разработать комплексные дашборды по направлениям – продажи, затраты и денежные потоки и т.п. Вот возможный источник для будущего вдохновения http://eu-b.demo.qlik.com (там выберите раздел Retail and Service). Если у Вас есть интерес поучаствовать в проекте, дайте мне об этом знать, буду делиться наработками.

Запрограммировано на JavaScript, Node.js.
Тестировалось на Windows: 7, 8, Server 2003, 2008
Браузеры: Chrome и Internet Explorer свежих версий, возможно будет работать и в других.
Примеры отчетов разрабатывались для УТ 11

Итоги

Итак, мы имеем внутри предприятия web сервер, который позволяет расшарить информацию из 1С. Эту информацию мы можем представить в красивом и функциональном виде для того чтобы пользователи не испытывали боль, разочарование и унижение от использования компьютерных программ. Не сомневаюсь, что вы  получите благодарность  от директора. Плюс если вы решитесь создать свой отчет с произвольным типом, то это прокачает ваши скилы как web разработчика со знанием JavaScript/html.

Подобные разработки:
Запросница 1С. Получить результат запроса в web таблицу: http://infostart.ru/public/167093/

Доступ к информации вне 1С используя OneScript http://infostart.ru/public/389679/


Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
ServerReports.rar
.rar 13,01Mb
14.09.15
62
.rar 13,01Mb 62 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Юрий Былинкин (ardn) 24.02.15 09:02
Непонятен сценарий использования этого сервера отчетов.

1. Те аналитики, которых я знаю, уже умеют или учатся пользоваться 1С-ными отчетами. Прикол 1С в том, что она позволяет гибко настроить отчет - вывести нужные поля, настроить отборы и тд. У вас же заранее заданный набор настроек у отчета - программист будет бегать добавлять новые настройки каждый раз, как появится запрос на нестандартный отчет? В конце-концов настроек таких будет миллион, и как с ними будут разбираться пользователи?
2. Идея хранения отчетов с одной стороны хороша. Но с другой.. База данных постоянно "живет", меняется. Не будет ли проблем с тем, что аналитик воспользуется устаревшими данными?

У вас реально используется данная разработка?
2. Андрей Шабашов (andy23) 24.02.15 09:28
(1) ardn,
1. Есть аналитики которым совсем трудно в 1С и настроить отборы для них проблема. С другой стороны, есть отчеты, которые не требуют особых настроек и там не нужна такого рода гибкость.
Сценарий использования - есть директор фирмы - умеет открывать браузер, фэйсбук знает, вконтакте знает, 1С не знает. Хочет смотреть остатки денег, продажи, долги.
Отчетов может быть много, для этого там есть поиск. Но если их будет еще больше, то конечно можно реализовать систему тэгов, фильтров и т.п.

2. Почему аналитик должен воспользоваться устаревшими данными? Там подписано когда отчет сформирован, если пользователь решает, что данные устарели он нажимает кнопку «Обновить» и получает обновленный отчет, главное чтобы на стороне 1С была запущена обработка.
Бывает так, что аналитику трудно по названию отчета понять, что там за информация. В данном случае выбрав отчет из списка, пользователь сразу видит, что он из себя представляет (выводится сохраненный html). Если отчет был давно сформирован, то обновляет его (идет запрос к 1С). Хранятся последние 5-ть сформированных отчетов.

Да используется.
3. Алексей 1 (AlX0id) 24.02.15 19:49
(2) andy23,
По п.2 - все эти "аналитики" все равно не захотят думать, актуален ли отчет или нет - будут жамкать "Обновить" постоянно. Странный плюс, в общем.

// ЗЫ. К тому же SQL-сервер так или иначе кэширует результаты одинаковых запросов, так что выигрыш совсем не факт, что будет.
4. Андрей Шабашов (andy23) 25.02.15 08:21
(3) AlX0id, Ну и пусть себе жмакают. Это не плюс, это такое потребительское качество программы, перед тем как обновить отчет, знать как он выглядит. Ведь есть отчеты которые могут формироваться долго -для пользователя все что >10 сек. уже долго. И "аналитики" могут испытывать разочарование, если это не то, что они ожидали. Здесь же все чётенько увидел-узнал-жмякнул, плюс пока отчет формируется пользователь может пойти посмотреть другие отчеты, т.е. все процедуры асинхронные.
5. aspirator 23 (aspirator23) 28.02.15 15:48
Тоже сталкивался с ситуацией, когда руководитель не хотел запускать 1с.
Весьма грамотный руководитель. Мне говорит, удобно иметь один всегда актуальный отчет.
Пришлось тоже на его компьютере разместить экселевский лист, который обновлялся каждые полчаса.
В котором были все необходимые базовые даные. Их ему было нужно не так много, чтобы владеть ситуацией.
Касса, расчетный счет, продажи, запасы.
Было это еще при 7.7. Сейчас бы наверное сделал на веб-сервисах.
6. Юрий (as) 06.03.15 13:55
Идея очень интересная. По сути это упрощенный аналог монитора ERP для УТ 11 и 1С ERP.
7. Андрей Шабашов (andy23) 06.03.15 14:04
(6) as, ну можно и так сказать... еще хочу прикрутить графики и диаграммы - будет эдакий дашбоард (dashboard)
примерно вот так это будет выглядеть: http://reportsserver-reportsserver.rhcloud.com/
8. Роман Осадченко (cleaner_it) 23.04.15 05:03
(7) andy23, интересно попробовать графики. Бета-версию будете выкладывать? )
9. Андрей Шабашов (andy23) 23.04.15 06:42
10. Франко Деллиани (Franco) 29.04.15 12:38
11. Андрей Шабашов (andy23) 29.04.15 17:00
(10) Franco, Посмотрел КуБеКу, что-то 6-ть скриншотов меня не вдохновили, конечно очень интригует «…и многое другое». Пытался узнать цену, она у них высылается по запросу, но в ответ тишина… Думаю, либо они не могут сложить цену на свою программу, либо почуяли конкурента…
12. Константин Лопухин (kostia.lopuhin) 29.04.15 17:22
(11) andy23, про цену ответили, надеюсь вам пришло письмо.
Извините если это немного оффтоп, но отвечу про QuBeQu - на мой взгляд наша система скорее ближе к QlikView, чем к Серверу управленческих отчетов - насколько я понял, основная задача у сервера - это представить руководителю в удобном для восприятия виде отчеты из 1С. У нас же цель немного другая (хотя это конечно тоже есть) - по нашему опыту в 1С часто не хватает информации для построения управленческих отчетов и принятия управленческих решений, т.к. система прежде всего бухгалтерская (если говорить допустим про УТ и УП). А у нас можно легко строить отчеты которые из 1С не получишь, довводить рядом свои данные (что люди часто сейчас делают в Excel), например расходы которые не отражаются в бухгалтерии, сводить бюджеты и т.п..
Мы планируем скоро подробнее описать кейс про интеграцию с 1С (в том числе про сведение нескольких баз).
13. Иван Устьянцев (nSpirit2) 29.04.15 17:39
Хотелось бы посмотреть как будет выглядеть отчет на 800 позиций плюс. Базу это не разгрузит а как дела с контролем прав ?
14. Андрей Шабашов (andy23) 29.04.15 17:43
(12) kostia.lopuhin, ух ты сам разработчик ответил! Ну спасибо! Да, довводит данные считаю неплохая задумка. Я сам об этом подумывал в отношении графиков - например, отметить вот с этого числа приняли гениального менеджера и вот смотрите как продажи вверх полезли... Ну я бы не стал говорит, что УТ и УП система прежде бухгалтерская, на этом сайте за такое вас могут закидать помидорами. p.s. А цена что-то так и не пришла...
15. Андрей Шабашов (andy23) 29.04.15 17:53
(13) nSpirit2, отчет на 800 позиций это простите как? 800 товарных групп? База будет разгружена вот в каком отношении, когда делается запрос из 1С, данные сохраняются в промежуточной БД sqlite, первоначально формируем запрос за весь промежуток работы фирмы (будет долго), ну а потом информация будет подливаться за текущие периоды. Ну про контроль прав: главное сейчас сделать на что хочется посмотреть, а дальше думать как это закрыть ;)
16. Константин Лопухин (kostia.lopuhin) 29.04.15 17:58
(14) andy23, случайно на эту тему попал, интересная) Написал в ЛС.
17. Андрей Шабашов (andy23) 29.04.15 18:02
(16) Да получил ответ, спасибо!
18. Иван Устьянцев (nSpirit2) 29.04.15 19:38
(15) andy23, А как тогда быть с изменениями в данных. Если честно не нашел я там данных про sqllite в описании. Эта штука тупо ходит через ком и делает запросы в скд. Причем результат без отборов без группировок и без контроля прав. И работает судя по всему через Web - сервис.
Идея хорошая надеюсь будет развиваться.
19. Роман Осадченко (cleaner_it) 30.05.15 08:53
Есть проблема с извлечением схемы СКД для последующего построения отчета - не нужно обрабатывать спецсимволы. Так, вместо & должен быть &_amp_;- без знаков _. Аналогично со знаками неравенства
20. Андрей Шабашов (andy23) 30.05.15 09:19
(19) cleaner_it, ок я поправлю, выложу чуть позже, а пока можете сами исправить - открывайте файл ServerRepors\NodeJSPortable\Data\server.js ищите "_.unescape(" и убирайте эту функцию
21. Роман Осадченко (cleaner_it) 19.07.15 15:03
(20) andy23, я написал отзыв уже после того, как разобрался с причиной) И с параметрами еще проблема была, насколько я помню (период в отчетах задается только предопределенными параметрами)
22. Андрей Шабашов (andy23) 20.07.15 09:14
(21) cleaner_it, есть возможность указывать период отчета непосредственно на клиенте (браузере) перед формированием отчета, для этого в настройках отчета должен быть включен признак "Использовать период"
23. Роман Осадченко (cleaner_it) 23.07.15 03:41
(22) andy23, я не это имею в виду. Если в СКД задать период как &МойПериодНачала - исполнитель отчетов его не поймет, он рассчитан на &НачалоПериода
24. Роман Осадченко (cleaner_it) 23.07.15 03:52
Для платформы по созданию коммерческих приложений пока сыровато, но задел весьма хороший.
1. Нужна возможность авторизации
2. Нужна возможность менять список отчетов местами
3. Нужен нормальный туториал по созданию простейшего произвольного отчета (именно в произвольных отчетах и находится весь потенциал)
4. Обработка "Исполнитель отчетов"... Давайте ее переименуем в "Сервер управленческих отчетов".
Именно она и выступает в роли сервера. Сам сайт взял на себя клиентские функции по выводу данных.
5. Будет отлично, если администрирование списка отчетов будет происходить на стороне 1С.
Тогда можно будет и права нормально расписать.

PS:
Я бы часть функций вынес в общие модули, а лог в регистр сведений.
Серьезные дядьки не будут держать постоянно запущенный экземпляр базы с обработкой
Node.js стоит попробовать не portable, по той-же причине.
25. Роман Осадченко (cleaner_it) 23.07.15 03:53
Еще момент, о котором говорили выше - права. Если обеспечить вызов функций из базы под определенным пользователем - то встроенный контроль прав будет работать нормально.
26. Андрей Шабашов (andy23) 23.07.15 09:44
(24) cleaner_it, Спасибо, за комментарий
Согласен, что на готовый продукт разработка не тянет. Была мысль, что программа заинтересует разработчиков и будет желание развивать проект совместно до коммерческого варианта. Отсюда и хвалебные оды посвящённые Node.js Считаю, что это мощной штукой с большим будущим, читал что новый Windows будет идти с предустановленным Node.js Вот так! Но значимого интереса я здесь не заметил (
Все моменты о которых написано можно доработать, в том числе отказ от отдельного экземпляра 1С - открывать сеанс через com-соединение. С portable версией Node.js тоже никаких проблем - она предназначена только для тех, у кого у кого не проинсталлирован Нод.
27. Роман Осадченко (cleaner_it) 23.07.15 11:14
(26) andy23, у меня есть интерес)
Часа три ковыряю произвольный тип отчета - не взлетает. Изменения в index.html не отображаются.
Удаляю целиком весь произвольный отчет - все равно выходит какой-то вариант.
Уже совсем не работает, никакой вариант.
Руководство было-бы нелишним, хоть минимальное. Где, что, от чего зависит.

////////////////////////////////////////////////////
Начать хотя-бы с этого

Движок
NodeJSPortable\Data\server.js

Панель пользователя
NodeJSPortable\Data\public\user.html

Панель администрирования
NodeJSPortable\Data\public\admin.html

Отчеты
NodeJSPortable\Data\Data\InfoBase1\Reports

Список отчетов с настройками (запросы, схема СКД, и т.д.).
NodeJSPortable\Data\Data\InfoBase1\Reports\reports1.json
В нем можно поменять порядок следования отчетов.
Важно! Список отчетов должен быть уложен в одну строку
{"name": меняем на \n{"name":
Меняем отчеты местами (внимательно смотрим за "," в конце строк)
\n{"name": меняем на {"name":

Произвольные отчеты описываются отдельно, с помощью JS
NodeJSPortable\Data\Data\InfoBase1\Reports\R_№_\Output\index­.html - внешний вид
NodeJSPortable\Data\Data\InfoBase1\Reports\R_№_\Output\modul­e.js - движок
NodeJSPortable\Data\Data\InfoBase1\Reports\R_№_\Output\data.db - заполняется из 1С

Папка заданий. В этой папке 1С считывает задания, и выполняет их через обработку "ИсполнительЗаданийСерверОтчетов"
NodeJSPortable\Data\Data\InfoBase1\Jobs

28. Андрей Шабашов (andy23) 23.07.15 12:14
(27) cleaner_it, о у меня в команде появился технический писатель, здорово! )
>> Удаляю целиком весь произвольный отчет - все равно выходит какой-то вариант.
как удаляешь, сам каталог?
Для начала лучше там каталоги/файлы руками не удалять
я просто не знаю, как ты и что делаешь, давай попробую рассказать как сделать новый произвольный отчет:
через админку добавляешь новый отчет устанавливаешь тип - пользовательский
Поле Socket ID - нужно вписать некий уникальный идентификатор, например dolgi
Далее он понадобиться в index.html
Если в вкратце, то для транспорта между серверной и клиентской частью используется модуль node.js http://socket.io/ (это удобная обертка для web socket) для этого и нужен этот идентификатор
Заполняешь текст запроса
Жмешь кнопку сохранить, далее появиться папка отчета например
Папка отчета: D:\888\NodeJSPortable\Data\Data\InfoBase1\Reports\R17\
Вот туда тебе нужно и положить index.html и module.js
Чуть позже постараюсь описать про эти файлы
29. Роман Осадченко (cleaner_it) 24.07.15 05:46
(28) andy23, это пройденный этап) Возможно, дело как раз в сокете. Я удалял отчет и руками, и через админку - но сокет оставлял прежним.
Если сегодня наберусь сил - покажу на скриншотах
30. Евгений Парфенов (deminded) 31.07.15 15:26
Я так понимаю подход "Делаем срез данных (запрос) за достаточно большой промежуток времени и сохраняем (это делает обработка на стороне 1С, используется sqlite)" называется "Витрины данных", нечто промежуточное между прямыми отчетами и полноценным OLAP
31. Андрей Шабашов (andy23) 31.07.15 15:57
(30) deminded, ну типа того - накапливаем информацию в нужными измерениями и ресурсами, в нужных группировка за произвольные периоды. Некий аналог у 1С есть - "агрегат" для регистров, только храниться это здесь во внешней БД. Таким образом не нужно за прошлые периоды обращаться к БД 1С.
32. Александр Сергеев (фывфыв123123) 29.06.16 13:24
Мануала нет, после установки NodeJSPortable прописывает базу с демоданными, когда подключил к живой УТ11, удивился откуда тут в Справочниках бакалея и ботинки и прочая лабуда в других справочниках, пришлось очистить БД веб сервачка. По умолчанию, в поставке, из отчетов только два: "Остатки денежных средств", "Расчеты с контрагентами" + панель с Спр.Контрагенты; р/с; Номенклатура; структураОрганизации.
Добавление нового отчета не очевидно, куда прописывать Socket ID? Одним словом надо находить время что бы нырять в код и искать что здесь к чему, хотелось бы решение "достал из коробки и работает", опять же это к вопросу об отсутствии мануала. Вопрос к автору: будьте любезны хотя бы кратко изложить как подключить любой из стандартных отчетов конфигурации?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа