В случае если поле, по которому рассчитываем итоги, является полем типа Дата, то возможно дополнение результатов датами в заданном периоде. Делается это при помощи ключевого слова ПЕРИОДАМИ, после которого в скобках указывается вид периода (одно из СЕКУНДА, МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД, ДЕКАДА, ПОЛУГОДИЕ), начальная и конечные даты интересуемого периода. В случае если начальные и конечные даты не указаны, будут использованы первая и последняя даты, участвующие в результате.
Допустим, мы написали запрос с дополнением дат:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
ВЫБРАТЬ НАЧАЛОПЕРИОДА(_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.Период, МЕСЯЦ) КАК Период, _ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.Номенклатура КАК Номенклатура, СУММА(_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.КоличествоПриход) КАК КоличествоПриход, СУММА(_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.КоличествоРасход) КАК КоличествоРасход, СУММА(_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.КоличествоОборот) КАК КоличествоОборот, СУММА(_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.КоличествоНачальныйОстаток) КАК КоличествоНачальныйОстаток, СУММА(_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток ИЗ РегистрНакопления._ДемоОстаткиТоваровВМестахХранения.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Месяц, ДвиженияИГраницыПериода, ) КАК _ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты СГРУППИРОВАТЬ ПО _ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.Номенклатура, НАЧАЛОПЕРИОДА(_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.Период, МЕСЯЦ) УПОРЯДОЧИТЬ ПО Период, Номенклатура ИТОГИ СУММА(КоличествоПриход), СУММА(КоличествоРасход), СУММА(КоличествоОборот), СУММА(КоличествоНачальныйОстаток), СУММА(КоличествоКонечныйОстаток) ПО Период ПЕРИОДАМИ(МЕСЯЦ, &НачалоПериода, &КонецПериода) |
Если выполнить запрос в консоли запросов, то никакого дополнения дат мы не увидим, хотя запрос написан верно. Особенность дополнения дат в том, что эта конструкция работает только при обходе результата запроса, а консоль запросов применяет метод Выгрузить() к результату запроса и никакого дополнения не происходит.
Пример №1 — выгрузка результата запроса в дерево значений (ДанныеФормыДерево)
1 2 3 4 5 6 |
Запрос = Новый Запрос; Запрос.Текст = ПолучитьТекстЗапроса(); Запрос.УстановитьПараметр("НачалоПериода", Объект.НачалоПериода); Запрос.УстановитьПараметр("КонецПериода", Объект.КонецПериода); ВыборкаПериод = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); ЗначениеВРеквизитФормы(ВыборкаПериод, "РезультатЗапроса"); |
В данном примере дополнение дат не произойдет, т.к. происходит выгрузка результата запроса. Функция ПолучитьТекстЗапроса() возвращает выше приведенный текст запроса.
Пример №2 — обход результата запроса с последующей загрузкой в дерево значений (ДанныеФормыДерево)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Запрос = Новый Запрос; Запрос.Текст = ПолучитьТекстЗапроса(); Запрос.УстановитьПараметр("НачалоПериода", Объект.НачалоПериода); Запрос.УстановитьПараметр("КонецПериода", Объект.КонецПериода); ВыборкаПериод = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период", "Все"); ЭлементыДерева = ЭтаФорма.РезультатЗапроса.ПолучитьЭлементы(); ЭлементыДерева.Очистить(); Пока ВыборкаПериод.Следующий() Цикл НовыйЭлементГруппа = ЭлементыДерева.Добавить(); ЗаполнитьЗначенияСвойств(НовыйЭлементГруппа, ВыборкаПериод); ВыборкаДетальныеЗаписи = ВыборкаПериод.Выбрать(); ЭлементыГруппы = НовыйЭлементГруппа.ПолучитьЭлементы(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл НовыйЭлемент = ЭлементыГруппы.Добавить(); ЗаполнитьЗначенияСвойств(НовыйЭлемент, ВыборкаДетальныеЗаписи); КонецЦикла; КонецЦикла; |
В данном примере производиться обход результата запроса, причем указывается как должна получаться выборка, с помощью передачи параметров в метод Выбрать(). В этом примере будет производиться дополнение дат.