Разработка отчета СКД с использованием заглушек наборов данных

25.06.16

Разработка - СКД

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

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

Наименование Файл Версия Размер
Прототип отчета к статье
.erf 8,16Kb
4
.erf 8,16Kb 4 Скачать
Инструмент для генерации запросов-заглушек (ОФ+УФ)
.epf 12,58Kb
8
.epf 12,58Kb 8 Скачать

Постановка задачи

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


Решение

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

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


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


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


Заглушки

Заглушки описываются в виде запросов, возвращающих константные значения.



Пример из практики


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


  1. Пусть необходимо реализовать отчет следующего вида

  • Порядок показателей должен быть быть постоянным

  • У каждого показателя свой алгоритм расчета

  • Показатель Количество бункеровок является суммой бункеровок по портам

  • Сворачивание портов необязательно и заказчику оно не нужно



  1. Изначально понятно, что будем использовать три набора данных через объединение. Создадим их с заглушками запросов. Порты пока откладываем



  1. Сразу можно вывести то, что получилось в отчет



  1. Дальше выводим порты. Для этого нужно немного исправить третий набор данных

Имеем результат

 

  1. Делаем отступ слева у портов. Для этого сначала добавляем признак ЭтоПорт в запрос


Далее используем условное оформление, предварительно добавив порт в группировку


  1. Чтобы скрыть количество в заголовке, пишем пробел в заголовок

 


  1. После этого имеем результат как на картинке из п.1. Теперь структура ожидаемых полей запроса известна, можно в каждом наборе данных последовательно описать запрос вместо заглушки.


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


Заключение

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

СКД методы разработки отчеты

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122182    670    389    

714

Генератор схемы компоновки данных (СКД), написание кода схемы программно

Инструментарий разработчика СКД Платформа 1С v8.3 Конфигурации 1cv8 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

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

3 стартмани

05.02.2024    4043    25    obmailok    17    

63

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2000    2    Yashazz    0    

29

СКД на JavaScript в 1С

СКД WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

2 стартмани

11.12.2023    8161    20    John_d    25    

123

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

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

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

05.12.2023    4658    PROSTO-1C    13    

61

Модель СКД

Инструментарий разработчика СКД Платформа 1С v8.3 Система компоновки данных Абонемент ($m)

DSL для работы с СКД.

1 стартмани

15.11.2023    5807    15    kalyaka    5    

86

Пользовательские настройки отчетов 1С. Часть 1. Простые и расширенные настройки

СКД Инструкции пользователю Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Россия Бесплатно (free)

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

18.09.2023    6703    accounting_cons    5    

29

Разрыв страницы в СКД. Легко!

СКД Платформа 1С v8.3 Система компоновки данных Бесплатно (free)

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

01.09.2023    4521    KVIKS    15    

80
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. roofless 23 27.06.16 15:09 Сейчас в теме
Дополнительным плюсом в таком подходе является то, что если в базе нет всех нужных нам данных, то разработка не задерживается, мы можем сделать самую трудную работу без них.

самое трудное - это добавить в базу нужные данные =(

перефразирую - "Если в базе нет нужных нам данных, то лепим заглушки", верно?
Прототип запроса писать нужно, имхо. Иначе, как мы узнаем, что этих данных нет?) сразу наверное абстрагироваться не стоит
2. json 3297 27.06.16 15:38 Сейчас в теме
(1) roofless, часто бывает так, что данных в базе нет, потому что их туда трудно набить. Например, данные добавляются в регистры документами, которые еще находятся на стадии разработки. Или данные добавляются в регистр в результате сложного расчета (например, по себестоимости). Или я пытаюсь добавить данные в таблицы базы и начинают сыпаться ошибки, которые ко мне не имеют отношения. Или какие-нибудь ограничения по правам. Или требуется ввести еще кучу предварительных документов, чтобы добавить записи в нужный тебе регистр при проведении. Тогда заглушки очень даже полезны.

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

Но если отчет простой, и структура вывода линейная, и изначально понятно какие поля должны быть в запросе - то не имеет смысла заморачиваться с заглушками
roofless; +1 Ответить
3. Yashazz 4709 28.06.16 14:52 Сейчас в теме
Лепя заглушки, не забывайте о потенциально пустых реквизитах и о реквизитах составного типа... Особенно весело делать это для характеристик)
4. json 3297 28.06.16 15:14 Сейчас в теме
(3) Yashazz, часто такое бывает?
8. Yashazz 4709 08.07.16 18:35 Сейчас в теме
(4) как будете делать заглушку для субконто?
9. json 3297 09.07.16 01:24 Сейчас в теме
(8) Yashazz, если я правильно понял вопрос, то его можно переформулировать так:
как сделать заглушку для набора данных, одно или несколько полей которого должно возвратить субконто, причем необходимо не просто вывести его в отчет, а также обращаться к некоторым свойствам через точку, например, при описании структуры?
ответ - можно попробовать возвращать поле через ЗНАЧЕНИЕ(Предопределенное значение или пустая ссылка). Но нужно смотреть по ситуации и, возможно, в некоторых случаях методика, описанная в данной публикации, вам не подойдет
5. chmv 29.06.16 13:00 Сейчас в теме
Неправильный подход изначально
6. json 3297 29.06.16 13:08 Сейчас в теме
(5) chmv, спасибо за проявленный интерес.
Не могли бы поподробнее уточнить, что конкретно вы считаете неправильным?
7. Азбука Морзе 104 08.07.16 10:38 Сейчас в теме
Ну не знаю... По-моему, чтобы получить недостающие данные, гораздо нагляднее да и проще использовать таблицы значений в качестве параметров к запросу.
10. Quasar 15.08.16 12:39 Сейчас в теме
(7) Азбука Морзе, а в чем принципиальное отличие? Да и к тому же данный метод позволяет написать заглушку 1 раз прямо в тексте запроса. А не подкидываться каждый раз с формированием таблицы значений и передачей ее в качестве параметра.
11. Onwardv 64 15.08.16 13:13 Сейчас в теме
Да, удобно.
Я тоже такой подход использую.
Но заглушкой называю другое :). : Конструкцию вида ЛОЖЬ И
Когда делаешь отчет по ТЗ(тех.задание), где множество временных таблиц, а потом тз поменялось и какая-либо выборка уже не нужна (возможно вернут). Вот там и добавляем в "где" эту заглушку.
ГДЕ ЛОЖЬ И
   старые условия.


Тем самым быстро убираем выборку, не переделывая все последующие пакеты. Время на такой пакет 1с практически не тратит.

Также использую для поиска критичных для быстродействия соединений при оптимизации разветвленных запросов. Например, есть запрос с множеством левых соединений, который пытаемся оптимизировать. Берем и отрубаем самый подозрительный заглушкой :
.....
Левое соединение регистрСведений.НашСуперРегистр.Срезпоследних()
по ЛОЖЬ И
 старые условия

....
если скорость выполнения увеличилась не существенно, тогда заглушку убираем и ставим на другое подозрительное.
Т.е. ищем действительно самые долго выполняющиеся соединения и оптимизируем их, а не все подряд.
14. hromovanton 6 12.10.16 10:44 Сейчас в теме
(11) Onwardv, спасибо за пример с заглушкой в соединениях запроса!
12. herfis 498 15.08.16 14:44 Сейчас в теме
Трудность заключается в том, что нам изначально непонятна структура полей, которые нужно получить из наборов данных, какие поля будут вычисляемыми, можно ли посчитать ресурсы формулами или же их придется вычислять в запросах.

Фигня какая-то. Никогда таких трудностей не возникало.
Обычно предельно четко ясно, какой минимально необходимый набор данных позволит получить конечный результат. И разработка источника данных отделена от разработки настроек.
Какие, нафиг, итерации? Откуда? Только не стоит вещать, что я не работал с "по-настоящему сложными отчетами" или что я какой-то там уникум.
Единственную пользу вижу - возможность отладить в консоли схему, в которой будут использоваться в т.ч. и "боковые" наборы данных (из ТЗ, например). Тогда в самом деле эффективно воткнуть "заглушку" в виде набора аналогичной структуры, которую в "боевом" варианте можно поменять "одним движением".
13. json 3297 15.08.16 21:02 Сейчас в теме
(12) herfis, спасибо за отзыв.
В статье описан прием, который лично мне помогал решать большое количество СЛОЖНЫХ задач.
Кроме того, перед написанием статьи я поделился им с несколькими коллегами. Некоторые из них тоже стали его применять, а некоторым этот прием не подошел. В общем это нормально - всем угодить невозможно. Кроме того несколько пользователей Инфостарта также нашли описанный способ полезным для себя. Данная статья выкладывалась в первую очередь ради них.
Оставьте свое сообщение