ВНЕДРЕНИЕ 1С:ERP и 1С:Управление холдингом     Главная     Проекты, результаты     Консультации (Новый раздел!!)     Обратная связь. Отзывы, рекомендации    
 












1С : Консолидация & Отчеты

СКД 1С 8.2; Внешние источники данных 1c 8.2; OLAP 1c, 1с OLAP



1. Предисловие

Цель данной статьи – показать быстрый, не трудный, (но при этом) мощный способ формирования аналитической (OLAP) отчетности средствами 1С и УПП 1.3.
Ключевым здесь являются сочетание технологий:

  • (1) новейших возможностей платформы 8.2;


  • (2) новых прикладных программных механизмов конфигурации УПП (редакция 1.3);


  • (3) технологии использования метазапросов и консоли запросов к базам 1С 7.7 (подробнее о технологии см. статью)

По пункту №1 будет продемонстрировано использование «Внешних источников данных» - новый объект конфигурации 1С 8.2.

По пункту №»2- технология формирования сложных отчетов на основе «фирменных» шаблонов и системе компоновки данных (СКД).

По пункту №3 – удобных способ получения данных 1С 7.7. (при этом, кодировать на 1С 7.7 вообще не придется!).

В данной статьи (на практическом примере) будет показана методика работы с перечисленными технологиями. Таким образом (в первую очередь) статья будет полезна:
  • а) тем, кто не имеет (пока) опыта формирования сложных многомерных отчетов в 1С.


  • б) тем, кто хочет научиться сокращать свое время (трудоемкость) на разработку таких отчетов.
2. «А что тут нового ?»

«Мы и так это делаем. Как - знаем и умеем. Что тут нового?»

Такие суждения весьма распространены. Более того, во многом – справедливы.

Однако..

Взглянем немного назад (лет на 10 назад) и вспомним (кто застал :-) это время), что задачи формирования консолидированных отчетов из разных источников данных часто встречались и решались еще средствами 1С: Предприятия 7.7.

Подход к решению подобных задач – примерно такой:

  • (1) Данные из разных источников данных (различные базы данных, другие базы данных 1С, файлы с данными) загружались в 1С: Предприятие 7. Чаще всего агрегировались в многомерных массивах данных – Таблицах Значений.


  • (2) Эти данные соединялись (спасибо, программистам) c другими данными текущей базы 1С.


  • (3) Средствами «1С» формировался сводный отчет.

Характерно, что возможности формирования печатных форм (в т.ч. возможности оформления и расшифровки) во многом превосходили (на тот момент) иные технологии формирования отчетов.

Итак, прошло 10 лет . И что поменялось ?.

Принцип (в общем) остался прежним: «собираем данные вместе» средствами 1С 8.2 и формируем отчет.

Однако, благодаря новым технологиям «1С» (см. выше) стало возможных:

  • (1) Резко сократить написание программного кода. По сути, достаточно написать запросы или соединить иным способом таблицы данных.


  • (2) Удобнее и быстрее формировать запросы к внешним источникам данных, а так же предыдущим версиям 1С (7.7).


  • (3) Существенно повысить сложность формирования отчетов (в т.ч. многоуровневых группировок, кросс-таблиц, диаграмм).


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

Что оценить эффект применения новых технологий, я продемонстрирую практический пример (задачу).

Это реальная задача из моих текущих проектов. Трудоемкость реализации - всего-то 3 часа.

3. Постановка задачи (пример); план тех. решения.


Структура информационной системы (учет розничных продаж - чеки) некой организации представлен на рисунке:


Задача :

В 1С:УПП необходимо обеспечить формирование отчета (анализ почасовых продаж) на указанную дату.

Отчет должен формироваться по данным внешней SQL базы «RBM».
Для формирования отчета (получения данных о товаре) необходимо использовать внешнюю базу данных на 1С:7.7.

Структура отчета должна быть такой :



После анализа (структуры отчета и исходных данных) составим такой план решения:

  • (1) Отчет имеет сложную структуру: есть группировки по вертикали (день по часам) и по горизонтали (магазин, вид операции, номенклатура, чек). При этом группировка по номенклатуре должна быть с учетом иерархии.

    Программировать самостоятельно сложный вывод информации в такой отчет – трудоемко и долго. Гораздо правильнее (и легче) поручить формирование данного отчета системе компоновки данных 1С 8.2. Еще есть вариант использовать механизм 1С 8 «Построитель отчетов».

    Однако, УПП 1.3 «заточена» на использование СКД; в частности, в конфигурации уже предусмотрены общие модули «Типовые отчеты..». К тому же отчеты на СКД могут работать в режиме тонкого и WEB-клиента. Да и вообще, СКД более мощная и гибкая технология, чем например «Построитель отчетов».

    И так, c механизмов формирования отчетов мы определились – будем использовать СКД.

  • (2) Для формирования отчета данные о товаре (связка товара 1С и базы RBM) нужно получать данные из внешней базы 1С Предприятия 7.7. Предварительно загружать в базу УПП эти данные мы не будем, а получим их динамически.

    Для этих целей будем использовать OLE-соединение 1С:7.7 --> 1C:8.2.

    Писать код на языке 1С:7 не будем, а воспользуется технологией метазапросов.


  • (3) Самым характерным моментом в нашей задаче является то, что нам нужно будет получать данные (для формировании отчета) из внешних источников: базы MS SQL и 1С:Предприятия 7.7. А далее, соединить эти данные, за тем нужным образом скомпоновать и вывести в табличный документ.

Компоновку и вывод мы поручим системе СКД, а вот получить данные и их «соединить» - это придется делать «в ручную».

Получить данные их внешней базы MS SQL всегда (как раньше было, так и сейчас) можно создавая com-объекты доступа к базам. Например:

Соединение SQL = Новый COMОбъект( "ADODB.Connection" );

Однако, относительно не давно в платформе 8.2 появился новый удобный механизм работы с внешними источниками данных. Он так и называется «Внешние источники данных».



Далее, перечислю наиболее востребованные преимущества использования этого механизма (по сравнения с работой с внешней базой через com-объект):
  • (1) Формировать запросы и использовать внешние источники можно так же, как и «родные» (внутренние). Т.е используем консоль отчетов, СКД, обращаемся к этим источникам, так же как, к примеру, можно обратиться как к справочникам конфигурации.

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

    Однако соединять внешние и внутренние источники средствами СКД можно.

    В нашем примере, соединять внешние и внутренние источники мы будем, но использовать для этого СКД не станем. У нас задача сложнее: нужно соединить данные из MS SQL (сделаем это внешним источником данных), УПП 1.3 (внутренний источник) и 1С: Предприятие 7.7 (здесь воспользуемся OLE-соединением и метазапросами).


  • (2) В платформе 8.2 есть конструктор таблиц внешнего источника данных, который существенно упрощает импорт структуры таблиц внешних баз данных в конфигурацию 1С.

    Отдельного внимания заслуживает такой аспект: «1C» сама помогает определять т.н «объектные типы» данных; так же мы самостоятельно можем тоже их настраивать.




В нашем примере, определен объектный тип dbo_t_Check. Это ссылка на таблицу чеков.

Что это нам дает ?

Возможность составлять запросы к внешней базе данных вот так:


Т.е в запросе можно обращаться к полям таблиц «через несколько точек» (разыменовывание полей в запросе, как это предусмотрено для объектов 1С):

dbo_ t_ CheckItem. ch_ zreport_ id. z_ teremok_ id.

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

Таким образом, можно подняться на более высокий уровень абстракции (уйти от всяких-там :-) OrderItemID...), что упрощает понимание структуры таких источников и работу с ними для программистов-прикладников 1С.

4. Решение, комментарии


Продемонстрируем, как можно быстро решить данную задачу. Двигаться к цели будем «по шагам». И при этом, за отправную точку (первый шаг) возьмем «результат, который нам нужен».
  • (Шаг 1). У нас нет пока данных для формирования отчета, однако мы четко понимаем структуру отчета (группировки по часам, по магазинам, по видам операций, по товарам).
Сейчас нам важно «вытащить» такие данные и скомпоновать их средствами СКД. В результате чего, настроить формирование отчета нужной структуры.

Для этого быстренько создадим некий служебный справочник «__ВнешниеДанные» (можно создать и регистр сведений без периодичности и подчинения). На втором этапе (шаге) мы этот вспомогательный справочник использовать уже не будем и спокойно его удалим.

А пока создадим его и заполним небольшим количеством тестовых данных (много не потребуется).

У справочника будут такие реквизиты :
  • ДатаВремяЧека (ДатаВремя)
  • Магазин (строка)
  • Товар (номенклатура)
  • НомерЧека (строка)
  • Стоимость (число)
  • Количество (число).

Теперь, сформируем отчет их этих «условных внешних» данных, настроим структуру отчета в соответствии с нашей задачей.

Очень важно, что сразу мы начнем работу над отчетом не «с нуля». Т.е не будем создавать собственный новый отчет, а воспользуемся уже шаблоном типового отчета 1С.

Кстати, разработчики УПП сами активно используют данную технологию. Вот, например, в конфигурации УПП есть отчет «ОтчетПоСистемеПрав».
Сохраним его «как внешний отчет» и отроем в конфигураторе.



Сразу видно, что данный отчет был разработан как раз на основе шаблона типового отчета. И мы поступим таким же образом:
  • Откроем основную схему компоновки данных отчета и заменим (имеющийся там) запрос, на наш.

    Выберем указанные поля из нашего справочника «__ВнешниеДанные» и установим условие (ГДЕ КонецПериода(ДатаВремяЧека,День)=&КонецПериода.

    Так как нам нужно будет группировать продажи по часам, то в запросе ДатуВремяЧека нужно выбрать так:


    НачалоПериода(ДатаВремяЧека,Час) как ЧасПродаж.
    Ресурсами отчета укажем: Количество и Стоимость.

    Используем конструктор настроек СКД для вывода данных в таблицу:




На этом закончим (пока что) настройку СКД и сохраним отчет.

Далее запустим отчет в режиме предприятия, заполним параметр «Конец периода», отметим показатели (количество и сумма) и сформируем отчет.

В результате, у нас должен сформироваться отчет нужной структуры, но при этом используются данные справочника «__ВнешниеДанные», а нам нужны данные полученные из баз: RBM, 1C:77 и УПП.

Так же нам самостоятельно придется соединить эти данные для вывода в отчет.

Однако теперь мы точно знаем, что итоговая структура данных которые нам нужна – это обычная таблица, поля этой таблицы точно должны соответствовать полям справочника «__ВнешниеДанные».

Данные мы соберем (соединим) в объекте «ТаблицаЗначений» и подключим ее (как источник данных) к СКД и шаблону типового отчета. Как это сделать – рассмотрим на третьем шаге, а пока перейдем ко второму шагу: «Получение данные из внешних источников».


  • (Шаг 2) С начала, создадим в нашей конфигурации новый внешний источник данных «RBM» и импортируем структуру таблиц «t_Check» и «t_CheckItem».

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

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





Итак, нужные данные из базы RBM получены. Теперь получим данные из базы 1С: 7.7. Нам нужно получить соответствие номенклатуры в «1С» и товаров в RBM. Соответствие кодов номенклатуры и товаров как раз и храниться в базе 1С:7.7.

Данные их 1С:7.7 (быстро и без программирования на этой платформе) можно получить так:




Далее в УПП напишем процедуру получения данных из 1С:7.7 и соединим данные по номенклатуре из базы 1С:7.7 и УПП:


Последнее, что нам осталось на этапе сбора и подготовки данных – это собрать все данные в единую таблицу значений:


Итак, таблица значений «ТабЧеки» готова. Теперь нужно выполнить ее подключение к СКД и шаблону типового отчета. Для этого перейдем к третьему (заключительному) шагу работы над отчетом.
  • (Шаг 3). С начала, внесем некоторые коррективы в СКД. Заменим источник данных типа «запрос» источником данных типа «Объект». Назовем этот источник данных «ТЗПродажи».

Настроим, что бы поля данных (и их типы) были точно такие же, как и у исходного источника данных (запроса).


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

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

Код будет примерно таким:





Обратим внимание на то, что для формирования запроса к базе RBM нам нужно указать дату. И эта дата предусмотрена в нашей СКД (это параметр – «КонецПериода»).

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

А далее, получать значения параметров очень просто (вот пример):

мКонецПериода = КомпоновщикНастроекПользователя.Настройки.ПараметрыДанных.Элементы.Найти("КонецПериода";);

Последнее, что нужно обязательно сделать - это передать нашу таблицу значений (подготовленные данные) в набор внешних данных для СКД. Имя набора (в данном случае "ТЗПродажи";) должно совпадать с именем источника данных, созданного нами в СКД.


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





На этом, все.


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

Получить файлы решения и др. материалы можно здесь...
Фото:

.$.
Открыть

    © 2011 Горский Михаил.