Файл: Хрусталева Е. Ю. Язык запросов 1С-Предприятия 8 (2013).pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.03.2019
Просмотров: 51839
Скачиваний: 8727
При построении этой виртуальной таблицы могут использоваться параметры, с помощью
которых настраивается или уточняется состав получаемых данных:
НачалоПериода – имеет тип Дата, МоментВремени или Граница. Используется для
указания начала периода расчета итогов. Значение этого параметра по умолчанию
включается в период расчета итогов. Если параметр не задан, итоги рассчитываются
с самой первой записи;
КонецПериода – имеет тип Дата, МоментВремени или Граница. Используется для
указания конца периода расчета итогов. Значение этого параметра по умолчанию
включается в период расчета итогов. Если параметр не задан, итоги рассчитываются
по самую последнюю запись;
Периодичность – содержит конструкцию языка запросов. Задается одним из
следующих вариантов: Период, Запись, Регистратор, Секунда, Минута, Час,
День, Неделя, Декада, Месяц, Квартал, Полугодие, Год, Авто. Используется для
указания дополнительного разворота итогов по периодичности. При указании
значения Период итоги представляются за весь период (с НачалоПериода по
КонецПериода) без дополнительных разворотов. В остальных случаях – с
разворотом по записям, регистраторам, неделям, месяцам, кварталам и т. п.
соответственно. Значение по умолчанию – Период;
МетодДополнения – конструкция языка запросов. Задается одним из следующих
вариантов: Движения, ДвиженияИГраницыПериода. Используется для указания
включения граничных периодов в состав выдаваемых виртуальной таблицей записей.
Если выбирается вариант Движения, то граничные периоды не будут включаться
(будут выданы записи только за те периоды, когда имели место движения). Если
выбирается вариант ДвиженияИГраницыПериода, то граничные периоды будут
включаться независимо от наличия или отсутствия движений в рамках интервала
между НачалоПериода и КонецПериода. Значение по умолчанию:
ДвиженияИГраницыПериода;
Условие – содержит конструкцию языка запросов – условие. Строится по полям
регистра накопления (или по подчиненным им полям). Используется для ограничения
состава исходных записей, по которым при построении виртуальной таблицы остатков
и оборотов будут получаться итоги. То есть условие будет применяться к исходным
записям, а не к уже отобранным. Если параметр не указан, для получения итогов
будут анализироваться все активные записи регистра.
Для построения виртуальной таблицы всегда используются данные и таблицы итогов, и
таблицы движений регистра из базы данных. Это довольно ресурсоемкая операция,
поэтому, если данные можно получить только из таблицы остатков или только из таблицы
оборотов, то лучше лишний раз не использовать таблицу остатков и оборотов.
Рассмотрим пример получения остатков и оборотов из регистра накопления остатков
ТоварыНаСкладах. Предположим, требуется получить данные о начальных и конечных
остатках, а также об оборотах, приходе и расходе определенного товара по складам за
период с заданной периодичностью. Это можно сделать с помощью следующего запроса
(листинг 3.35).
Листинг 3.35. Вывод остатков и оборотов товаров на складах за период с заданной периодичностью
В данном запросе в виртуальную таблицу оборотов мы передаем границы интервала, за
который нужно получить остатки и обороты, и товар, по которому отбираются исходные
записи регистра накопления. Чтобы получить конец дня, мы используем функцию языка
запросов КОНЕЦПЕРИОДА(). В параметре Периодичность мы задаем значение День, т.
е. указываем, что нам требуется детализировать данные до дня.
При построении виртуальной таблицы остатков и оборотов данные регистра накопления
остатков ТоварыНаСкладах группируются по измерениям Номенклатура и Склад. В итоге
мы получаем остатки и обороты по ресурсу Количество для заданного товара в разрезе
складов с разворотом по дням.
В результате для товара Ноутбук Rover Computers Explorer за период 01.02.2013 –
28.02.2013 мы получим следующий результат (рис. 3.43).
Рис. 3.43. Вывод остатков и оборотов товаров на складах за период с заданной периодичностью
В приведенном примере (см. листинг 3.35) в параметрах виртуальной таблицы был указан
метод дополнения Движения, поэтому в результате были получены итоги только за те
периоды, когда имели место движения. По умолчанию параметр виртуальной таблицы
МетодДополнения имеет значение ДвиженияИГраницыПериода. Поэтому в следующем
примере (листинг 3.36) граничные периоды будут включаться независимо от наличия или
отсутствия движений в рамках интервала между НачалоПериода и КонецПериода.
Листинг 3.36. Вывод остатков и оборотов товаров на складах за период с заданной периодичностью
В результате для товара Ноутбук Rover Computers Explorer за период 01.02.2013 –
28.02.2013 мы получим следующий результат (рис. 3.44).
Рис. 3.44. Вывод остатков и оборотов товаров на складах за период с заданной периодичностью
Мы видим, что для комбинации товара Ноутбук Rover Computers Explorer и склада
Главный результат запроса дополнен граничными записями, содержащими начальный и
конечный остаток товара на складе, хотя движения за эти даты отсутствуют. А для
комбинации товара Ноутбук Rover Computers Explorer и склада Склад отдела продаж
результат запроса остался прежним, т. к. на границы периода начального и конечного
остатка товара на этом складе не было.
При использовании виртуальной таблицы остатков и оборотов итоги по остаткам и
оборотам рассчитываются, включая граничные периоды. Поэтому все особенности
использования параметров НачалоПериода и КонецПериода аналогичны виртуальной
таблице оборотов.
Расчет итогов по полям остатка
В заключение рассмотрим отдельно вопрос расчета итогов по полям остатков. Для
расчета итогов по полю остатка достаточно получить его в списке выборки запроса и
указать необходимость расчета итога по этому полю. Но дело в том, что с прикладной
точки зрения остатки не всегда могут быть получены простым суммированием, а должны
рассчитываться по специальному алгоритму. Рассмотрим эти варианты.
Например, для следующего запроса (листинг 3.37) итоги будут получены простым
суммированием данных соответствующих записей, т. к. в нем не используется
периодичность и не выводится поле Период.
Листинг 3.37. Пример получения остатков и оборотов регистра накопления без использования поля «Период»
В итоге для группы товаров Ноутбуки мы получим следующий результат (рис. 3.45).
Рис. 3.45. Пример получения остатков и оборотов регистра накопления без использования поля «Период»
Обратите внимание, что записи комбинации товара Ноутбук Rover Computers Explorer и
склада Склад отдела продаж и комбинации товара Ноутбук Rover Computers Navigator
KT7 и склада Главный все равно попадают в результат запроса, несмотря на нулевые
остатки, т. к. по ним есть обороты – приход и расход.
Но если нам требуется разворот по периодичности и мы выводим в запросе поле Период
(листинг 3.38), то будет применен специальный алгоритм расчета итогов остатков.
Листинг 3.38. Пример получения остатков и оборотов регистра накопления с использованием поля «Период»