Никита Зайцев,
менеджер проектов компании Saint-Petersburg.com
wild@hare.ru

От учета - к анализу и управлению

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

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

Но рано или поздно перед любым предприятием (если, конечно, оно хочет оставаться на рынке и развиваться) встает задача перехода от учетных технологий к управленческим. А это значит, что требования к информационной системе возрастают на порядок: пользователю наряду с возможностью получить данные требуется возможность анализировать их. В чем разница? Получение данных предполагает наличие у пользователя точного знания о том, что именно и в каком виде он хочет получить. "Анализ" же отличается тем, что пользователю заранее неизвестно, какие именно данные и в каком виде ему понадобятся - условия задачи могут меняться (и обычно меняются) прямо по ходу ее выполнения. Эффективность анализа зависит от двух вещей: качества серого вещества в голове аналитика и качества инструментария, предоставленного аналитику информационной системой.

Задачу можно сформулировать следующим образом. Предприятие владеет большим массивом структурированной информации, и процесс ее накопления продолжается непрерывно. Информационная система должна дать пользователю в руки инструменты анализа накопленной информации и минимизировать трудозатраты пользователя на технические операции с данными. Критерием оценки любой конкретной системы служит соотношение двух этих факторов: в богатейших функциональных возможностях не будет смысла, если кпд использующего их человека окажется низким.

Рассмотрим "аналитические способности" пакета "1С: Предприятие 8.0".

Общие сведения о V8

"1С:Предприятие 8.0" (далее для краткости V8) можно рассматривать и как набор готовых прикладных решений, и как среду разработки приложений. Соответственно, обзор функционала будет разделен на две части: возможности, предоставляемые пользователю готовых решений, и возможности, предоставляемые разработчику ПО.

Функционал "для пользователя" мы рассмотрим на примере типовых решений "Управление торговлей" и "Управление персоналом", а функционал "для разработчика" - на примере текущего релиза платформы (8.0.4). Базовые сведения о пакете "1С: Предприятие 8.0" (для читателей, впервые знакомящихся с продуктом) приведены во врезке.

"1С:Предприятие 8.0" - базовые сведения и термины

Платформа "1С:Предприятие 8.0", вообще говоря, представляет собой предметно-ориентированную среду разработки экономического ПО. Но, поскольку созданные на ее основе приложения распространяются в виде готовых коробочных решений, этот пакет нельзя отнести к "чистым" средствам разработки. Более того, среда разработки не поставляется отдельно, а только в составе того или иного готового продукта.

Термин "предметно-ориентированная" означает, что программист при разработке полностью абстрагируется от физической структуры данных (таблиц, полей, низкоуровневых транзакций и т. п.) и работает с объектами - интерфейсными, системными и объектами метаданных. Фактически среда разработки V8 предоставляет программисту набор готовых классов и методов (а также технологий разработки и поддержки ПО), "заточенный" под решение учетных, управленческих и аналитических задач. Разработка ведется на собственном встроенном языке V8. Для извлечения данных используется специальный SQL-подобный язык запросов.

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

К основным объектам метаданных относятся:

  • константа - произвольное именованное значение;
  • справочник - совокупность именованных полей произвольного типа, используется для ввода статической информации; элементы справочника могут группироваться и подчиняться друг другу;
  • регистр - "хранилище данных", выполненное в виде многомерной матрицы; используется для хранения остатков, оборотов и движений, а также для фиксации изменения любых произвольных параметров во времени;
  • документ - совокупность именованных полей произвольного типа, используется для ввода динамической информации; документ имеет положение на временной оси и производит движения регистров.

Конфигурация, заполненная пользовательскими данными, называется информационной базой. Информационная база может хранить свои данные в файле (наподобие Microsoft Access), работая в файловом режиме, или в базе данных Microsoft SQL Server - в этом случае информационная база работает по клиент-серверной технологии, используя сервер приложений "1С:Предприятие" (трехуровневая архитектура). Прикладная часть (конфигурация) не зависит от способа хранения данных и с пользовательской точки зрения будет одинаково работать в любом из этих режимов.

Возможности для пользователя

Классифицирование объектов

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

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

К услугам аналитика V8 предоставляет два классификационных механизма - механизм свойств и механизм категорий. Механизм свойств позволяет (не вмешиваясь в структуру метаданных конфигурации) задать объекту любое количество произвольных признаков, причем сгруппированных любым угодным пользователю образом. Значением свойства может быть величина любого поддерживаемого системой типа, как простого (число, строка, дата), так и агрегатного (перечисление, справочник) или даже составного (несколько разных типов). Более того, одному объекту можно присвоить сразу несколько значений одного свойства - в итоге классификация получается очень гибкой.

Механизм категорий устроен иначе: это обычный набор признаков (описываемых строковыми величинами). Значение в этом случае может принимать только булевский тип: объект или входит в данную категорию, или не входит.

Чтобы не возникало путаницы в случае больших и "развесистых" классификаторов, каждому свойству и каждой категории можно определить область действия: скажем, свойство А действительно только для справочников вида X и Y, а категория Б может применяться только для документов и справочников типа Z. Такой подход упрощает работу с классификатором - при вводе свойств и признаков конкретного объекта пользователю будут предложены только те варианты, которые назначены объектам данного типа.

При помощи этой системы можно создавать сколь угодно сложные конструкции. Например, можно описать такую ситуацию: Северо-Западный регион, крупный промышленный город, контрагент Иванов, имеет обыкновение задерживать платежи, рекламу и специальные предложения обычно игнорирует, а вот новогодние скидки на него действуют, и т. д. и т. п.

Гибкая система классифицирования, разумеется, ценна не сама по себе, хотя она и может работать источником справочной информации. Главная цель - в ином. Свойства и категории можно (и нужно) использовать при получении аналитических отчетов, в любом отчете можно задать фильтры и отборы по значениям свойств и вхождению объектов в ту или иную категорию. Одно дело - отчет по объему продаж за период, и совсем другое - тот же отчет, но разбитый, к примеру, по регионам. Или возьмем сравнение прибыли, полученной от разовых клиентов, с прибылью, полученной от клиентов давних и постоянных - да еще и с фильтром по тем сделкам, которые были заключены в рамках специальных маркетинговых акций.

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

Визуальное представление данных

Любимым аналитическим инструментом всех известных мне пользователей был и остается пакет Microsoft Excel. При этом из ста пользователей лишь единицы представляют себе более 90% возможностей пакета, и обратное соотношение тоже верно (обычно говорят о законе 10/90, но здесь действует скорее закон 1/90). Популярность Excel объясняется не способностью считать распределение по Гауссу и наличием встроенного VBA. Дело в другом: современные электронные таблицы позволяют представить данные в наиболее удобной для восприятия форме, причем сделать это быстро и просто. Редкий программист, занимающийся учетными системами, не слышал просьб типа "пожалуйста, слейте нам это в табличный файл, а дальше мы уже сами".

Для вывода данных (печатные формы, отчеты, вообще любая выводимая информация) в V8 используется собственный механизм табличных документов. Внешне табличный документ V8 выглядит, простите за тавтологию, как обычный лист электронной таблицы, но есть и ряд существенных отличий: в ячейках не поддерживается вычисление формул, не предусмотрены и операции типа "заполнить", "заполнить прогрессией" и т. п. Механизм таблиц V8 интегрирован в систему, и данные в таблицу поставляются "изнутри" (т. е. системой, а не пользователем).

Но это не отменяет надобности в удобном для пользователя визуальном представлении - и табличный документ V8 снабжен соответствующими возможностями. Во-первых, имеется группирование строк. Казалось бы, мелочь, но эта мелочь кардинально упрощает навигацию по объемным таблицам иерархической структуры (группа/подгруппа/элемент, и для каждого свой числовой показатель). Пример такой группировки показан на рис. 1.

Fig.1
Рис. 1. Группирование строк табличного документа.

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

В-третьих, предусмотрены сводные таблицы, удобный и мощный инструмент анализа. Любую, сколь угодно большую и запутанную таблицу исходных данных можно свернуть в аккуратное подобие многомерного кубика Рубика - сторонами служат измерения (они же группировки), а на их "пересечении" располагаются кубики-значения. Дальше уже пользователь волен "крутить" этот кубик, как ему угодно: таблица сворачивается по измерениям (которые прямо в процессе можно добавлять, убирать и перетаскивать по осям координат), и при этом подсчитываются все перекрестные итоги, обновляемые при изменении структуры таблицы. На рис. 2 можно увидеть пример сводной таблицы V8 (распределение персонала согласно штатному расписанию).

Fig.2
Рис. 2. Сводная таблица V8.

Универсальный конструктор отчетов

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

V8 предлагает пользователю третий путь: сконструировать нужный отчет самостоятельно. Для этого используется инструмент под названием "Консоль отчетов" (рис. 3). Консоль основана на двух принципах. Во-первых, любые данные из учетной системы можно извлечь посредством запроса; во-вторых, любые данные, извлеченные из информационной системы посредством запроса, можно представить в удобной для пользователя форме.

Fig.3
Рис. 3. Визуальное конструирование запроса.

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

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

Освоив возможности конструктора запросов и сводной таблицы, можно создать достаточно сложный аналитический отчет буквально за считанные минуты. Результаты выполненного запроса показаны на рис. 4 (движение денежных средств компании по датам в разрезе структурных единиц). Конструирование такого отчета у опытного пользователя займет минут пять.

Fig.4 Рис. 4. Выполнение запроса в консоли.

В числе явных достоинств консоли отчетов можно отметить следующие. Во-первых, V8 поддерживает русскую нотацию - идентификаторы объектов и свойств, операторы языка могут быть написаны кириллицей (и фирма "1С" настоятельно рекомендует пользоваться именно русской нотацией). Пользователи, не владеющие английским, легко смогут разобраться в материале.

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

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

По сути, "Консоль отчетов" - это встроенный клиент для быстрого извлечения и визуализации любой информации, хранящейся в информационной базе. Инструмент получился настолько удачным, что программиста V8 никакими силами невозможно заставить писать для пользователя какой-то дополнительный отчет: у пользователя уже все есть! Заметим в скобках, что при работе с предыдущей версией пакета "1С:Предприятие 7.7" эти задачи отнимали едва ли не половину рабочего времени. В совсем уж пиковом случае программист сам запустит "Консоль", отладит там нужный запрос (благодаря встроенным механизмам проверки и отладки делается это за считанные минуты), а текст запроса вышлет пользователю. Функции настройки (фильтры, группировки, сортировки) и визуализации отчета (например, drill-down, механизм "расшифровки") описывать и отлаживать не нужно, они предоставляются системой в готовом виде.

Возможности для программиста

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

Возможно, многие удивятся, но описанный выше универсальный конструктор отчетов не является частью платформы ("движка") V8, а написан на встроенном языке и представляет собой прикладной объект. Как он выглядит "с той стороны", можно увидеть из рис. 5.

Fig.5 Рис. 5. Консоль отчетов со стороны среды разработки.

Создатели V8 сделали все, чтобы максимально упростить рутинные операции и позволить разработчику сосредоточиться на проектировании и генерации идей, не вдаваясь в детальное описание поведения каждого конкретного элемента. Для этого в платформе существуют "низкоуровневые" объекты, которые и берут на себя всю черновую работу - в частности, в процессе создания аналитической отчетности.

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

V8 предлагает разработчику готовые блоки практически для любой типовой задачи: все перечисленные выше объекты (таблица, сводная таблица, диаграмма) поставляются уже готовыми, и их нужно просто расположить в нужном месте, подключить к нужным источникам данных и обработчикам событий, а дальше они уже будут "знать", как себя вести в той или иной ситуации.

Наиболее же интересен, с моей точки зрения, объект "ПостроительОтчетов". В процессе создания отчета обычно требуется написать и отладить запрос к информационной базе, написать разбор результатов, их форматирование и вывод в табличную форму. Построитель отчетов позволяет одним махом избавиться от всей этой рутины, поскольку он сам умеет строить отчеты. От программиста требуется только написать (или создать конструктором) собственно запрос. Вот как выглядит самый простой случай использования построителя:

Построитель = Новый ПостроительОтчета(ТекстМоегоЗапроса);
Построитель.Вывести();

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

Но это простейший случай. Общие же возможности Построителя отчетов очень и очень широки. Ему можно указать, какие именно данные из таблицы запроса должны попасть в отчет, в какой последовательности, в каком виде и формате, какой макет табличного документа нужно брать за основу - словом, любые аспекты его деятельности (при необходимости) поддаются ручному управлению из кода. "Консоль отчетов" (кстати, реализованная именно на Построителе отчетов) занимает менее тысячи строк кода.

Этот пример - неплохая иллюстрация к идеологии разработки, принятой в V8: ручное управление и сложный код требуются только там, где необходимо решать какие-то сложные, нетривиальные задачи. В относительно же простых, типовых случаях можно даже не говорить о программировании, а ограничиться настройкой. Конечно, для общесистемных приложений такой подход не годится, но в нише, которую занимает V8 ("экономическое" ПО), он наглядно доказал свою эффективность.

Производительность и масштабируемость при построении отчетов

Помимо расширения функционального набора, разработчики новой версии "1С:Предприятие 8.0" добивались существенного улучшения производительности и масштабирования прикладных решений по сравнению с версией 7.7. Осенью 2003 г. специалисты фирмы "1С" провели комплексное исследование возможностей системы на примере типовых решений "Торговля и склад" (для "1С:Предприятия 7.7") и "Управление торговлей" (для "1C:Предприятия 8.0").

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

  • сравнение производительности двух решений при построении отчетов по остаткам и движениям регистра накопления;
  • оценка влияния различных факторов на производительность при построении отчета.

В качестве тестовых примеров использовались отчеты "Ведомость по остаткам ТМЦ" (версия 7.7) и "Ведомость по товарам на складах" (версия 8.0). Первая серия тестов была посвящена анализу зависимости времени построения отчета от величины периода при отборе данных по 10 элементам номенклатуры. Результаты, приведенные на рис. 6, показывают значительное увеличение скорости построения отчетов в новой версии. Кроме того, видно, что при увеличении продолжительности анализируемого периода от недели до года время выполнения отчета в версии 7.7 увеличилось в 3,75 раза, тогда как в версии 8.0 - всего в 1,36 раза.

Fig.6
Рис. 6. Влияние продолжительности анализируемого периода на время построения отчета.

На следующем графике (рис. 7) представлены результаты тестов, оценивающих влияние количества элементов номенклатуры в установленном отборе на время выполнения отчета (количество записей в регистрах накопления составило более 13 млн). И в этом случае версия 8.0 показала более высокую скорость построения отчета.

Fig.7
Рис. 7. Влияние числа элементов номенклатуры отбора на время построения отчета.

Полный отчет о тестировании клиент-серверной версии "1С:Предприятие 8.0" для оценки производительности и масштабируемости находится по адресу http://v8.1c.ru/tests.

Итоги знакомства

Итак, пакет "1С: Предприятие 8.0" содержит ряд средств, позволяющих не только получать "готовые" данные из информационной системы, но и заниматься их анализом и обработкой. По сравнению с предыдущей версией системы, "1С:Предприятие 7.7", состав и возможности этих средств значительно расширены. Конечно, речь не идет о воспроизведении в системе всех возможностей узкоспециализированных "аналитических" программных продуктов - намного важнее то, что в V8 средства "извлечения" и анализа данных интегрированы в мощный программный комплекс, оптимизированный для решения задач учета и управления информационными потоками. При этом значительная часть задач анализа бизнес-информации может быть быстро и успешно решена встроенными средствами, непосредственно в процессе накопления данных, без приобретения сторонних аналитических пакетов и без трудозатрат на их стыковку с базовой информационной системой предприятия.

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