Top.Mail.Ru
Заказать консультацию
специалиста 1С
Отправить заявку

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

Особенности запросов в СКД при разработке отчетов для различных блоков конфигураций 1С

Ретунский Александр Посмотреть все статьи >> Технический архитектор франчайзинговой сети «ИнфоСофт»
21.02.2024
647
Время прочтения - 7 мин.
Заказать консультацию

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

 

Исключение полей запроса

Бизнес-задача: определить, сколько единиц номенклатуры по каждому складу имеют товарные ограничения.

Входные данные:

  • Справочник «Склады»,

  • Справочника «Номенклатура»,

  • Регистр сведений «Товарные ограничения» (реквизит – Номенклатура, Склад).

Для решения поставленной задачи напишем следующей запрос СКД:

1.png


Результатом данного запроса будет выборка:

2.png


Выборка не соответствует данным базы. Выводится не количество единиц номенклатуры, а количество складов.

Причина в том, что СКД преобразовала первичный запрос:

3.png


Из первого запроса и результирующего запроса удаляется неиспользованное в результате поле «Номенклатура». Чтобы избежать данной ситуации, нужно включить у поля, которые отсутствует в результате, признак – «Обязательное»:

4.png


Выполнение запроса в СКД произойдет уже с учетом поля «Номенклатура»:

5.png


Результат запроса будет корректным:

6.png

 

Преобразование периодов временных таблиц

Бизнес-задача: получить остатки по единицам номенклатуры на различные даты для сравнения.

Входные данные:

  • Справочник «Номенклатура»,

  • Регистр накопления «Товары на складах» (реквизит: Номенклатура).

Для решения поставленной задачи напишем следующей запрос СКД:

7.png


В настройки отчета выведем два параметра – «Период» и «ПериодОтчета».

Результатом данного запроса будет выборка:

8.png


Выборка не соответствует данным базы. На выбранные даты разные остатки по всем единицам номенклатуры.

Причина в том, СКД изменила первичный и результирующий запрос:

9.png


В первом и результирующем запросе параметры периода (ПериодОтчета, Период) были заменены на один параметр – П.

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

Выполнение запроса в СКД произойдет уже с учетом новых периодов:

10.png


Результат запроса будет корректным:

11.png


Добавление отбора ко всем таблицам пакета

Бизнес-задача: получить количество номенклатуры по приходному документу и общее количество остатка по всем складам.

Входные данные:

  • Справочник «Номенклатура»,

  • Регистр накопления «Товары на складах» (реквизит: Номенклатура).

Для решения поставленной задачи напишем следующей запрос СКД:

12.png


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

13.png


Выборка не соответствует данным базы. Количество в приходе не совпадает с количество на всех складах.

Причина в том, СКД изменила первичный и результирующий запрос:

14.png


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

15.png

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

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

Выполнение запроса в СКД произойдет уже с учетом верных отборов:

16.png


Результат запроса будет корректным:

17.png


Исключение временных таблиц

Бизнес-задача: определить, по каким сезонным группам бизнес регионов были закупки.

Входные данные:

  • Справочник «Номенклатура»,

  • Справочник «Склады»,

  • Справочник «Бизнес регионы»,

  • Справочник «Сезонные группы»,

  • Регистр накопления «Закупки» (реквизиты: Номенклатура, Склад).

Для решения поставленной задачи напишем следующей запрос СКД через конструктор запросов:

18.png


Если выполнять отчет без добавления колонки «сезонная группа», то результат отчета будет корректным. В случае добавления колонки получается следующая выборка:

19.png


Выборка не соответствует данным базы. Строки дублируются и количество не верно.

Причина в том, что СКД преобразовала запрос:

20.png

В результирующем запросе было исключено первое левое соединение. В итоге получились две независимые выборки: из регистра накопления «Закупки» и из справочника «БизнесРегионы». Для решения данной ситуации нужно в конструкторе запросов на вкладке «компоновка данных» указать верно номера групп. Получение связанных данных из различных таблиц должны иметь одинаковые номера групп.

21.png


Измененный запрос будет выглядеть:

22.png


Результат запроса будет корректным:

 23.png


Оперативная отладка запросов СКД

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

ПроцедураПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();   
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки=КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,НастройкиОтчета, ДанныеРасшифровки);   
ОбщегоНазначения.СообщитьПользователю(МакетКомпоновки.НаборыДанных.НаборДанных1.Запрос);     
КонецПроцедуры     


После формирования отчета с выбранными параметрами отображается окончательный запрос. Можно сравнить этот запрос с изначальным и выявить расхождения.

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


Заказать консультацию специалиста 1С
Оставьте заявку и наши эксперты проконсультируют вас по данной статье.
Отправить заявку

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

Рассказать друзьям
Для разработчиков 1С
Вам может быть интересно: