Удивительное — рядом …
По ходу работы мне часто требовалось делать сложные отчеты, я все время пытался найти в них что-то общее, чтобы составлять их более просто и универсально, даже написал и опубликовал по этому поводу статью «Дерево Осипова». Однако мою статью раскритиковали и сказали, что все те проблемы, которые я поднял, давно уже решены в MOLAP.RU v.2.4 (www.molap.rgtu.ru) и порекомендовали посмотреть сводные таблицы в EXCEL.
Это оказалось настолько простым, что приложив к этому свои гениальные ручонки, у меня получилась очень простая схема для выгрузки данных из 1С7 или любой другой базы данных (в дальнейшем под 1С подразумевается любая база данных) и анализа в OLAP.
Я думаю, многие схемы выгрузки в OLAP слишком усложнены, я выбираю простоту.
Характеристики:
1. Для работы требуется только EXCEL 2000.
2. Пользователь сам может конструировать отчеты без программирования.
3. Выгрузка из 1С7 в простом формате текстового файла.
4. Для бухгалтерских проводок уже имеется универсальная обработка для выгрузки, работающая в любой конфигурации. Для выгрузки других данных имеются обработки-образцы.
5. Можно заранее сконструировать формы отчетов, а затем применять их к разным данным без их повторного конструирования.
6. Довольно хорошая производительность. На первом длительном этапе данные сначала импортируются в EXCEL из текстового файла и строится куб OLAP, а затем довольно быстро на основе этого куба может быть построен любой отчет. Например, данные о продажах товара по магазину за 3 месяца с ассортиментом 6000 товаров, загружаются в EXCEL 8 минут на Cel600-128M, рейтинг по товарам и группам (OLAP-отчет) пересчитывается за 1 минуту.
7. Данные выгружаются из 1С7 полностью за указанный период (все движения, по всем складам, фирмам, счетам). При импорте в EXCEL возможно использование фильтров, загружающих для анализа только нужные данные (например, из всех движений, только продажи).
8. В настоящее время разработаны способы анализа движений или остатков, но не движений и остатков вместе, хотя это в принципе возможно.
Что такое OLAP: (www.molap.rgtu.ru)
Предположим у вас есть торговая сеть. Пусть данные о торговых операциях выгружены в текстовый файл или таблицу вида:
Дата |
Месяц |
Неделя |
Вид |
Товар |
Склад |
Количество |
Сумма |
Контрагент |
Автор |
Дата — дата операции
Месяц — месяц операции
Неделя — неделя операции
Вид — закуп, продажа, возврат, списание
Контрагент — внешняя организация, участвующая в операции
Автор — человек, выписавший накладную
В 1С, например, одна строка этой таблицы будет соответствовать одной строке накладной, некоторые поля (Контрагент, Дата) при этом берутся из шапки накладной.
Данные для анализа обычно выгружаются в OLAP-систему за определенный период времени, из которого в принципе можно выделить другой период применением фильтров загрузки.
Эта таблица является исходной для OLAP-анализа.
Далее определяются, какие из полей будут суммироваться (Данные) , какие будут являться уровнями группировок (Измерения), какие данные из таблицы брать(Фильтр):
Отчет |
Измерения |
Данные |
Фильтр |
Сколько товара и на какую сумму продается за день? |
Дата, Товар |
Количество, Сумма |
Вид=»продажа» |
Какие контрагенты поставили какой товар на какую сумму помесячно? |
Месяц, Контрагент, Товар |
Сумма |
Вид=»закуп» |
На какую сумму выписали операторы накладных какого вида за весь период отчета? |
Автор, Вид |
Сумма |
|
Пользователь сам определяется, какие из полей таблицы будут Измерениями, какие Данными и какие Фильтры применять. Система сама строит отчет в наглядной табличной форме. Измерения можно размещать в заголовках строк или столбцов таблицы отчета.
Как видно, из одной простой таблицы можно получить множество данных в виде различных отчетов.
Как использовать у себя:
Данные из дистрибутива распаковать именно в каталог c:fixin (для торговой системы возможно в c:
eports). Прочитайте readme.txt и выполните все инструкции в нем.
Сначала вы должны написать обработку, которая выгружает данные из 1С в текстовый файл (таблицу). Вам нужно определить состав полей, которые будут выгружаться.
Например, уже готовая универсальная обработка, которая работает в любой конфигурации и выгружает для OLAP-анализа проводки за период, выгружает для анализа следующие поля:
Дата|ДеньНедели|Неделя|Год|Квартал|Месяц|Документ|Фирма|Дебет|ДтНоменклатура
|ДтГруппаНоменклатура|ДтРазделНоменклатура|Кредит|Сумма|ВалСумма|Количество
|Валюта|ДтКонтрагенты|ДтГруппаКонтрагенты|КтКонтрагенты|КтГруппаКонтрагенты|
КтРазныеОбъекты
Где под префиксами Дт(Кт) идут субконто Дебета (Кредита), Группа — это группа данного субконто (если имеется), Раздел — группа группы, Класс — группа раздела.
Для торговой системы поля могут быть такие:
Направление|ВидДвижения|ЗаНал|Товар|Количество|Цена|Сумма|Дата|Фирма
|Склад|Валюта|Документ|ДеньНедели|Неделя|Год|Квартал|Месяц|Автор
|КатегорияТовара|КатегорияДвижения|КатегорияКонтрагента|ГруппаТовара
|ВалСумма|Себестоимость|Контрагент
Для анализа данных используются таблицы «Анализ движений.xls» ( «Анализ бухгалтерии.xls» ). Открывая их, не отключайте макросы, иначе вы не сможете обновлять отчеты (они запускаются макросами на языке VBA). Исходные данные эти файлы берут из файлов C:fixinmotions.txt (C:fixinuh.txt), в остальном они одинаковые. Поэтому возможно, вам придется скопировать ваши данные в один из этих файлов.
Чтобы в EXCEL загрузились ваши данные, выберите или напишите свой фильтр и нажмите кнопку «Сформировать» на листе «Условия».
Листы отчетов начинаются префиксом «Отч». Перейдите на лист отчета, нажмите «Обновить» и данные отчета изменятся в соответствии с последними загруженными данными.
Если вас не устраивают стандартные отчеты, есть лист ОтчШаблон. Скопируйте его в новый лист и настройте вид отчета, работая со сводной таблицей на этом листе (о работе со сводными таблицами — в любой книге по EXCEL 2000). Рекомендую настраивать отчеты на небольшом наборе данных, а затем уже запускать их на большом массиве, т.к. нет никакой возможности отключить перерисовку таблиц при каждом изменении макета отчета.
Технические комментарии:
При выгрузке данных из 1С пользователь выбирает папку, куда ему выгружать файл. Я сделал это потому, что вполне вероятно в ближайшем будущем будут выгружаться несколько файлов (остатки и движения). Затем по нажатию в Проводнике кнопки «Отправить» —> «На OLAP-анализ в EXCEL 2000» данные копируются из выбранной папки в папку C:fixin. (чтобы эта команда появилась в списке команды «Отправить» и нужно скопировать файл «На OLAP-анализ в EXCEL 2000.bat» в каталог C:WindowsSendTo) Поэтому выгружайте данные сразу давая имена файлам motions.txt или buh.txt.
Формат текстового файла:
Первая строка текстового файла — заголовки колонок разделенные «|», остальные строки содержат значения этих колонок, разделенные «|».
Для импорта текстовых файлов в Excel используется Microsoft Query (составная часть EXCEL) для его работы необходимо наличие в каталоге импорта (C:fixin) файла shema.ini, содержащего следующую информацию:
[motions.txt]
ColNameHeader=True
Format=Delimited(|)
MaxScanRows=3
CharacterSet=ANSI
[buh.txt]
ColNameHeader=True
Format=Delimited(|)
MaxScanRows=3
CharacterSet=ANSI
Пояснение: motions.txt и buh.txt — это название раздела, соответствует имени импортируемого файла, описывает, как импортировать текстовый файл в Эксель. Остальные параметры означают, что первая строка содержит названия колонок, разделителем колонок является «|», набор символов — Windows ANSI (для ДОС — OEM).
Тип полей определяется автоматически исходя из содержащихся в колонке данных (дата, число, строка).
Перечень полей не нужно нигде описывать — EXCEL и OLAP сами определят, какие поля содержатся в файле по заголовкам в первой строке.
Внимание, проверьте ваши региональные настройки «Панель управления» —> «Региональные настройки» . В моих обработках числа выгружаются с разделителем запятая, а даты в формате «ДД.ММ.ГГГГ».
Дополнительно:
Рекомендуется также изучить любую книгу по EXCEL 2000 с описанием
сводных таблиц.
Данные при нажатии кнопки «Сформировать» загружаются в сводную таблицу на листе «База», а из этой сводной таблицы и берут данные все отчеты на листах «Отч».
Я понимаю, что любители MS SQL Server и мощных баз данных начнут ворчать, что у меня слишком все упрощено, что моя обработка загнется на годичной выборке, но в первую очередь я хочу дать преимущества OLAP-анализа для средних организаций. Я бы позиционировал этот продукт как инструмент годичного анализа для оптовых компаний, квартального анализа для розничной торговли и оперативного анализа для любой организации.
Мне пришлось повозиться с VBA, чтобы данные брались из файла с любым списком полей и можно было заранее готовить бланки отчетов.
Описание работы в EXCEL (для пользователей):
Инструкция по использованию отчетов:
1. Отправьте на анализ выгруженные данные (уточните у администратора). Для этого нажмите правой кнопкой на папке, в которую у вас выгрузились данные из 1С и выберите команду «Отправить», затем «На OLAP-анализ в EXCEL 2000».
2. Откройте файл «Анализ движений.xls»
3. Выберите Значение фильтра, нужные вам фильтры можно дописать на закладке «Значения».
4. Нажмите кнопку «Сформировать», при этом выгруженные данные будут загружены в EXCEL.
5. После загрузки данных в EXCEL, можно смотреть различные отчеты. Для этого достаточно нажать кнопку «Обновить» в выбранном отчете. Листы с отчетами начинаются на Отч.
Внимание! После того как вы поменяете значение фильтра, нужно еще раз нажать кнопку «Сформировать», чтобы данные в EXCEL перезагрузились из файла выгрузки в соответствие с фильтрами.
Обработки из демо-примера:
Обработка motionsbuh2011.ert – последняя версия выгрузки проводок из Бухгалтерии 7.7 для анализа в Excel. В ней есть галочка «Присоединить в файл», которая позволяет выгружать данные частями по периодам, присоединяя их в один и тот же файл, а не выгружая в один и тот же файл заново:
Обработка motionswork.ert выгружает данные о продажах для анализа в Excel.
Примеры отчетов:
Шахматка по проводкам:
Рейтинг групп по неделям:
Рейтинг товаров по месяцам:
Загруженность операторов по видам накладных:
P.S.:
Понятно, что по аналогичной схеме можно организовать выгрузку данных из 1С8.
В 2011 году ко мне обращался пользователь, которому нужно было доработать эту обработку в 1С7, чтобы она выгружала большие объемы данных, я нашел аутсорсера и выполнил эту работу. Так что разработка вполне актуальна.
Обработка motionsbuh2011.ert доработана, чтобы справляться с выгрузкой большого объема данных.
Давно свои таблички с данными хотел в ОЛАП покрутить, теперь время до этого события сильно сократится. Спасибо за статью.
(1) ну это не совсем OLAP, но очень на него похоже. По крайней мере шаг в нужном направлении, тем более, что эксель всегда под рукой.
Ничего нового не увидел, но за труд однозначно плюс. Статья, полагаю, будет полезна для начинающих.
Почему автор не использует разработку
http://www.1cpp.ru/forum/YaBB.pl?num=1193394153
Консоль и расширения запросов 1С++ ?
Намного легче один раз сделать отчет и предоставить пользователю уже готовый выходной отчет на OWC (Office Web Components). Интерфейс у него намного читабельнее, чем у той же встроенной в Excel Pivot Table.
OWC живет отдельно без Оффиса.
(4) ну видимо я тогда не знал об этом «намного более легком способе». Напишите статью, пойдем по вашим стопам, теперь уже в 1с8. Но если для этого нужно 1С++, боже упаси… Никогда его не юзал, хотя может и неплохая вещ.
К тому же мой метод не требует 1C++
Как вариант можно создавать лист Excel и на лету генерить сводную таблицу, но это не очень просто. Проще дать юзверю ковыряться.
Жаль, что это для 1С77 — надеялся что-то покрутить в 1С81…
За работу, присоединяюсь — плюс…
(6) посмотри принцип и прикрути в 1с8. ПО сути, требуется только выгрузка в текстовый файл сырых данных.
Для 8-ки — тривиально.
А ексель не загнется от приличного количества данных? Если скажем тыщ пятьдесят движений в день да за годик-другой?
(8) ну он же берт данные из внешнего источника, а не из листа… не должон…
а сайтик http://www.molap.ru вроде как уже не работает
(10) усе течет, усе меняется.