Как программно сформировать отчет на СКД

Миниатюра

Я покажу вам, как программно формировать отчет, основанный на СКД (Система компоновки данных).

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

Как размещать на форме отчета поля для параметров и передавать их в схему компоновки.


Я начинаю серию уроков по СКД (Система Компоновки Данных)

 

Сегодня я начинаю серию уроков основам работы с СКД.

Начну я с самого простого, основного и наиважнейшего навыка — умения программно формировать отчет, который оперирует СКД (Система компоновки данных).

 

Что дает глубокое понимание основ работы с СКД?

 

Что дает это умение? Посмотрите мою прошлую статью «Отчет прайс-лист с картинками». В ней вы увидите 2 схемы компоновки данных. Одна запускается при выборе опции на форме отчета (галка «только новинки номенклатуры»), другая  запускается при опущенной галке.

Для чего это сделано? Дело в том, что схема компоновки данных ограничена в получении данных Запросом. А запросом не всегда удается получить определенные данные в нужном виде. Для этого в схеме компоновки есть специальная вкладка (самая первая) «Наборы данных». Смотрите скриншот ниже.

4. Пример схемы компоновки с внешним набором данных Пример схемы компоновки с внешним набором данных

Передать набор данных в схему компоновки легко. Это я сделал в отчете «Прайс-лист с картинками», смотрите прошлую статью.

В коде выше вы видите кусок процедуры, отвечающей за программное формирование отчета, с помощью СКД.

В этой строке мы вставляем сформированную таблицу во внешние наборы схемы компоновки данных.

Таким образом, мы можем сформировать таблицу внешними методами (например в Excel), и вставить ее в схему компоновки!

 

Для чего нужны внешние наборы данных СКД?

 

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

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

Но это одно частное применение метода. Их очень много.

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

 

Нетривиальные Задачи, в которых применяются внешние наборы данных СКД

 

Например, как вам понравится интерактивная таблица в виде отчета на СКД? Таблица выводится в виде отчета в табличный документ. При изменении ячеек (цена, сумма), происходит интерактивное изменение документа, формируемого отчетом. Такую задачу я сделал на заре 1с 8.1, когда об управляемых формах еще не слышали.

Сейчас такая задача может не иметь смысла (тот-же функционал решается методами управляемых форм). А что делать, если на предприятии не хотят внедрять Управляемые формы? Что если у них 1с 8.2 стоит годами, но их не устраивает скорость. От предложения перехода на управляемые формы они откаываются  - слишком дорого и трудозатратно?

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

Интерактивные таблицы, получаемые с помощью СКД, обрабатываемые обработками формы отчета (Табличный документ) — прекрасно работающее быстродействующее решение!

Это решение работает в случае невозможности применять управляемые формы.

Более того, я читал на форумах, которые оплевывали управляемые формы. Там люди разбирали механизмы управляемых форм на заре появления, и находили многочисленные косяки. В частности я находил подтверждение подозрений программистов о том, что первые версии управляемых форм представляли собой код 1с 8.1, обогащенный многочисленными гибридными решениями.

Какой код стал ныне, скрыто 32-битным ключом, так что знать об этом могут лишь разработчики.

 

Пример отчета, в котором используемая схема компоновки данных выдает отчет программно

 

2. Форма отчета в Конфигураторе 2. Форма отчета в Конфигураторе

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

2.1. Форма отчета в Конфигураторе 2.1. Форма отчета в Конфигураторе

Ну и конечно на форме есть вкусности типа кнопки выбора периода (Квартал, месяц, неделя, год и т.п.)

 

Код отчета, в котором используемая схема компоновки данных выдает отчет программно

 

3. Код формы в конфигураторе 3. Код формы в конфигураторе
3.1. Код формы в конфигураторе 3.1. Код формы в конфигураторе

Вот код формы:

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

Еще одна вкусность — обработчик кнопок «Развернуть», «Свернуть» настроек. При этом, благодаря привязкам элементов формы к панели, происходит исчезновение/появление панели с настройками. Это очень удобно для пользователей.

Я убрал эти кнопки по просьбе клиента, но код оставил.

Внизу кода есть процедура ИзменитьПараметрыКомпоновки(), которая прямо в схеме компоновки изменяет параметры. Параметры устанавливаются пользователем интерактивно на форме.

При нажатии на кнопку Сформировать() происходит запуск процедуры формирования отчета через схему компоновки.

 

Что происходит при программном формировании отчета?

 

  1. Получаем схему компоновки из макета, с помощью встроенной процедуры ПолучитьМакет(«ОсновнаяСхемаКомпоновкиДанных»)
  2. Из схемы компоновки получаем все настройки по-умолчанию. Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию Надо заметить, что если настройки схемы компоновки меняются (пользователь меняет на форме интерактивно), то нужно получать настройки из КомпоновщикНастроек. этот объект обеспечивает связь между настройками компоновки (которые могут меняться интерактивно и программно) и схемой компоновки, содержащей настройки по-умолчанию.
  3. ДанныеРасшифровки содержат расшифровочную информацию, помещаемую в табличный документ при формировании отчета. Она нужна для интерактивной выдачи информации о ячейке с текстом. Например, если пользователь щелкнет на тексте с наименованием контрагента, благодаря расшифровке, содержащей ссылку на объект Справочник.Контрагенты, пользователь получит на выходе карточку контрагента.
  4. КомпоновщикМакета это программный объект который содержит информацию, скомпонованную из настроек и схемы компоновки.
  5. МакетКомпоновки является результатом работы компоновщика макета — дополнительный программный механизм, зашитый в платформу, предназначенный для соединения воедино схемы компоновки, настроек, расшифровки. По сути это единая таблица, содержащая данные всех перечисленных таблиц. В коде конфигуратора есть возможность переопределить штатные процедуры (например для быстродействия). но лезть в исходный код не рекомендуется начинающим программистам.
  6. Выводимый отчет является результатом работы процессора компоновки данных (это по сути зашитый в платформу алгоритм работы СКД — сердце, двигатель СКД). Он инициализируется специальной функцией (при этом происходит выделение памяти в Windows, работа с ядром операционной системы. В Linux, 1с работает заметно шустрее благодаря оптимизации ядра операционной системы и быстрой работы с памятью.). На этом этапе операционная система может запретить выделение (если не хватает памяти), и отчет выдаст ошибку формирования (недостаточно памяти). Отсюда решение — некоторые программисты переопределили стандартные механизмы формирования СКД, сделав проверку выделения памяти на первом месте, перед остальными процедурами. Это необходимо в загруженных операционных системах, где не хватает памяти!
  7. Затем происходит запуск процедуры вывода отчета в табличный документ (элемент формы отчета). Эту процедуру можно переопределить, заменив вывод в табличный документ, например, выводом сразу в Excel! Таким образом сама платформа и схема компоновки сделает за нас работу по вывода отчета в Excel! Многие начинающие программисты не знаю об этой фишке и колбасят вывод в Excel в виде отдельной процедуры. Зачем изобретать велосипед, если он уже работает и готов к езде?

Первоначальные выводы и фишки:

 

  1. Любой щаг стандартного программного формирования отчета на СКД можно переопределить. Для этого существует столько промежуточных объектов СКД. А вовсе не ради того, чтобы запутать, как думают некоторые программисты!
  2. Макет можно формировать программно! Макет по сути представляет собой дерево ресурсов. Его можно создать самостоятельно, исходя из целей и задач.
  3. Настройки компоновки данных можно изменять интерактивно благодаря изменениям полей на форме отчета.
  4. Данные расшифровки можно использовать в широком круге задач. Например, сделать из Табличного документа подобие Excel-таблицы, с интерактивным изменением полей. Нечто подобное я видел недавно в виде Excel таблицы в офисе сбербанка. Сотрудница в отчете, на 1с, интерактивно заполняла поля и в конце распечатывала готовую заполненную таблицу на принтере. То есть программисты Сбербанка реализовали мою задумку на практике в 1с 8.2
  5. КомпоновщикМакета можно сделать самостоятельно, программно собрав таблицу настроек для компоновки. Это может пригодится, когда необходимо вмешаться в штатный механизм (если он работает не так, как надо)
  6. МакетКомпоновки можно собрать программно,минуя штатный механизм. См. пункт 5.
  7. В случае, если памяти стабильно не хватает, или требуется создать триггеры производительности, можно, НЕ ВМЕШИВАЯСЬ В ШТАТНЫЙ МЕХАНИЗМ ФОРМИРОВАНИЯ СКД, изменить порядок и внедрить свои триггеры. Например, если в реальном времени во время формирования отчета поступали команда Windows о перезагрузке 1с, или другие авральные события, можно промежуточный результат сохранить в дамп Windows. У меня были примеры клиентов, у которых отчеты строились часами (аналитические сборные отчеты по многим показателям) а различные авральные события происходили регулярно. Я встроил триггер в код отчета, который сохранял дамп памяти Windows, благодаря чему можно было продолжить формирование отчета после перезагрузки.
  8. СКД может самостоятельно вывести отчет прямо в Excel. Об этой фишке многие либо не задумываются, либо не в курсе. Это все равно что не знать, что в твоей машине есть обогрев сидений. Я знал одну блондинку, у которой в новой машине я включил обогрев, а она была в шоке — говорит, не знала о такой функции!

Заключение

Вот такие дела, мои дорогие читатели!

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

Дико не хватает времени, пишу урывками от работы. Так что извините. Ну все, я пошел работать, писать сложный аналитический отчет.

Спасибо за внимание, пока!

Теги: ,

  • чч

    Благодарю автора статьи.

  • Sergey

    при всем уважении — сайт не читабельный

    • Аноним

      Что вы имеете ввиду?

      • Olga

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

        • http://braincolor.ru/ Петр Лунегов

          Может я и не прав, но за 5 месяцев именно эту статью больше всего читают на моем сайте.

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

          Возможно, как раз из-за скриншотов.

          Я стараюсь в каждой статье их количество увеличивать.

          В отличие от аналогичных статей на других сайтах, такого количества разжеванной информации с картинками мало где есть.

          Именно по этому на мои статьи заходят и читают.

          Я понимаю, Ольга, вам наверное трудно смотреть на эти скриншоты. Но, к сожалению, всем не угодишь.

          Кому-то наоборот, нравится когда много скриншотов. Можно почитать, посмотреть на картинку и понять о чем речь.

          • Гость

            красный цвет шрифта поменяй на что-то не такой броское — в глазах рябит.

            материал — отличный

    • Аноним

      145 чтений данной статьи в неделю. Так говорит Яндекс Метрика. Данная статья очень популярна на моем сайте.

      Вы хотите сказать, что люди читают нечитабельную статью?

      Или может Гугл врет? Или Метрика врет?

      Или может люди просто открывают данную статью и в среднем на ней проводит по 8 минут времени, любуются картинками?

      Не понятно, что вы имели ввиду, но мне кажется что все читабельно.

      Может вы имели ввиду цвет шрифта?

      Да, есть косяк — в некоторых браузерах цвет шрифта не совсем корректный. Пока нету времени и рук с этим разобраться.

      Вы подскажете мне пути решения данной проблемы?

>