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

25.06.16

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

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

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

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


Решение

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

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


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


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


Заглушки

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



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


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


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

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

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

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

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



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



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



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

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

 

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


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


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

 


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


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


Заключение

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

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

См. также

SALE! %

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

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

12000 10000 руб.

02.09.2020    163050    900    401    

880

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

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

15.05.2024    9388    implecs_team    6    

47

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

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

3 стартмани

05.02.2024    7372    56    obmailok    21    

79

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

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

1 стартмани

31.01.2024    3230    5    Yashazz    1    

34

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

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

2 стартмани

11.12.2023    11096    24    John_d    25    

125

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

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

05.12.2023    8412    PROSTO-1C    15    

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

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

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

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

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


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

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

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

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