Особенности использования набора данных «Объединение» в 1С
-
Продолжаем цикл статей по СКД. В этой статье вы узнаете об особенностях использования набора данных «Объединение», рассмотрим в чем заключается разница набора данных «Запрос» и «Объединение» внутри одного запроса разных наборов данных.
Создание набора данных «Запрос» в СКД
Итак, все начинается с создания запроса в консоли «Системы компоновки данных». Это будет один набор данных «Запрос», в котором объединяются данные «Товарные запасы» и «Остатки» (выбираем все поля) (рис.1)
рис.1
и запрос виртуальной таблицы «Продажи – Обороты» (выбираем поле «Сумма – Оборот» и переименовываем в «Сумму – Продажи») (рис.2).
рис.2
Среди выбранных полей совпало только поле «Товар».
Далее определяем ресурсы – все числовые поля.
Выполнение настроек в СКД
Выполняем следующие настройки:
— группировка по полю «Товар»;
— выбранные поля: «Товар», «Количество Остаток», «Сумма Продажи»;
— три параметра: «Начало периода», «Конец периода» и «Период» (рис.3).
рис.3
В данном случае нужно тщательно подойти к параметру «Период».
Настройка параметра «Период»
Здесь используется виртуальная таблица «Остатки», в которой остатки выводятся на начало секунды. Для того, чтобы получить остатки не на начало секунды «Конец периода», а на начало следующей секунды значения параметра «Конец периода», в запросе, где выбираются данные из таблицы «Товарные запасы – Остатки», на вкладке «Компоновка данных» нужно прописать свой параметр «Дата остатков», включить для него ограничение доступности, а также вписать для него следующее выражение: добавитьКДате(&КонецПериода.«Секунда».1), что расшифровывается, как добавить к дате параметр «Конец периода» 1 секунда (рис.4).
рис.4
Затем устанавливаем в значении параметра «Конец периода» нужную дату (рис.5).
рис.5
Получаем результат: поскольку параметр «Конец периода» вычислен, компоновщик макета при компоновке результата устанавливает значение параметра «Дата остатков» – это следующая секунда. Если не будет установлено значение параметра «Конец периода», в этом случае компоновщик макета генерирует в параметре «Дата остатков» пустую дату.
Выполненный запрос «Объединение» работает отлично до тех пор, пока не установить отбор в одном из полей. Поле «Склад» в данном случае присутствует только в таблице «Товарные запасы – Остатки», а в продажах склада нет. Если установить отбор на него и скомпоновать отчет, то продаж по нему не отобразится совсем (рис.6).
рис.6
Дело в том, что если внимательно посмотреть на макет, который генерирует компоновщик макета, то в объединении запросов отбор по полю «Склад» установился, как в параметре виртуальной таблицы «Остатки» (рис.7),
рис.7
так и в секции «Где», там выбираются данные из виртуальной таблицы «Продажи – Обороты» (рис.8).
рис.8
Так работает система компоновки данных (СКД) на сегодняшний день.
Как с помощью одного набора данных «Запрос» можно решить задачу объединения
Далее можно решить следующую задачу: вывести «Остатки товарных запасов» и «Продажи» одновременно, чтобы еще работал отбор по полю «Склад».
Для этого, результат выполнения первого запроса помещаем во временную таблицу. Можно назвать ее «Все вместе». И следующим запросом пакета выбираем все данные из нее (рис.9).
рис.9
Вот такое простое преобразование запроса. Теперь можно скомпоновать результат с настройками, которыми установлен отбор по полю «Склад» (рис.10).
рис.10
Здесь также установлен отбор в параметрах виртуальной таблицы. А вот в том месте, где выбираются данные из виртуальной таблицы «Продажи – Обороты», отбора в секции «Где» уже нет. И получаем ожидаемый результат (рис.11).
рис.11
В таблице выводятся только остатки на определенном складе, на складе отбора, и все продажи по той же номенклатуре. Данное поведение было описано в изменениях к платформе 8.3.18. Еще там упоминается, что в режиме совместимости с платформой 8.3.17, поведение не изменилось, а значит таким отбором воспользоваться бы не смогли.
В итоге, с помощью одного набора данных «Запрос» нам удалось решить задачу объединения.
Создание набора данных «Объединение» в СКД
А теперь рассмотрим как же работает набор данных «Объединение».
Для этого создадим набор данных «Объединение» и вложим в него уже готовый набор данных «Запрос», который недавно был разработан. Затем можно скопировать его же и вложить во второй раз.
Так у нас сформировалось два набора данных «Запрос» – это «Набор данных 1» и «Набор данных 2».
В набор данных «Объединение» есть возможность добавить набор данных «Объект», чтобы объединять разнородные виды отбора данных, но в настоящей задаче этого не требуется (рис.12).
рис.12
В запросе «Набор данных 1» оставим только «Товарные запасы», а «Продажи» удалим (рис.13).
рис.13
Из запроса «Набор данных 2» удалим «Товарные остатки» и оставим только «Обороты» (рис.14).
рис.14
Посмотрим на результат (рис.15).
рис.15
Если для группировки по полю «Товар» установить отбор по полю «Склад», то получится тот же результат, который был в самом начале. Отбор по полю «Склад» сформировался, как в наборе данных, где были выбраны «Остатки», так и в наборе данных, где выбраны «Продажи» (рис.16).
рис.16
Можно рассмотреть макет, который сгенерировал компоновщик макета:
— набор данных: «Запрос»,
— в запросе выбираются «Товарные запасы – Остатки»,
— в параметрах виртуальной таблицы установлен отбор.
Следующий набор данных: «Объединение»:
— тот же набор данных: «Запрос»,
— в запросе выбираются «Продажи – Обороты»,
— здесь в секции «Где» нет никакого отбора.
Данные выбираются также без отбора. Если внимательно посмотреть на набор данных «Объединение», то у него есть свойство «name» и свойство «filter». В этом свойстве устанавливается отбор на весь набор данных «Объединение», отбор по складу (рис.17).
рис.17
Особенность набора данных «Объединение»
Вот такая особенность есть у набора данных «Объединение»: сначала можно получить данные с помощью одного набора данных «Запрос», затем, с помощью другого набора данных «Запрос», все это объединить, а на сервере «1С:Предприятие» выполняется дополнительный отбор по полю «Склад».
Следует отметить, что набор данных «Объединение» не рекомендуется использовать в случае, если присутствуют различные наборы данных, в одном из которых есть одни поля, во втором – другие поля, при этом, задача заключается в том, чтобы все это объединить, а также предполагается накладывать отбор на одно из тех полей, которого нет в другом наборе данных.
Подведем итог: набор данных «Объединение» позволяет объединить в себе, как наборы данных «Запрос», так и наборы данных «Запрос» и «Объект» вместе.
Оцените статью
Читайте также: