v8: Использование регистратора в запросах Ключевые слова: Регистратор, запрос, периодичность
Регистратор - это документ, сделавший движение по регистру накопления или регистру сведений с режимом записи "Подчинение регистратору".
Регистратор не является ни измерением, ни ресурсом, по сути это служебный реквизит, уточняющий, то есть дополняющий другой служебный реквизит, период.
Это накладывает особенности на использование этого поля в запросах.
Первой особенностью является то, что в виртуальных таблицах регистров накопления "Остатки и обороты" это поле недоступно до тех пор, пока в параметре виртуальной таблицы "Периодичность" не будет выбрано одно из значений: "Запись", "Регистратор" или "Авто".
Последнее значение можно выбрать только в 1С версии 8.1.
Второй особенностью является то, что, если вы используете построитель отчета и указали параметр виртуальной таблицы "Периодичность", то в отборе построителя появится новый элемент отбора, по периодичности.
Не пугайтесь и не удивляйтесь, так и должно быть.
И, наконец, последней особенностью является то, что регистратор нельзя использовать в запросе в разделе ИТОГИ без предварительно идущего периода.
То есть, если, к примеру, в запросе хочется сделать группировку по регистратору, то требуется сделать группировку по периоду, а только уже после нее группировку по регистратору.
В противном случае не гарантируется правильность расчета итоговых значений.
То есть, вместо
ВЫБРАТЬ
ТоварыОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
ТоварыОстаткиИОбороты.КоличествоПриход КАК КоличествоПриход,
ТоварыОстаткиИОбороты.КоличествоРасход КАК КоличествоРасход,
ТоварыОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток
ИЗ
РегистрНакопления.Товары.ОстаткиИОбороты(, , Регистратор, , ) КАК ТоварыОстаткиИОбороты
ИТОГИ
СУММА(КоличествоНачальныйОстаток),
СУММА(КоличествоПриход),
СУММА(КоличествоРасход),
СУММА(КоличествоКонечныйОстаток)
ПО
ТоварыОстаткиИОбороты.Товар,
ТоварыОстаткиИОбороты.Регистратор
будет корректно написать
ВЫБРАТЬ
ТоварыОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
ТоварыОстаткиИОбороты.КоличествоПриход КАК КоличествоПриход,
ТоварыОстаткиИОбороты.КоличествоРасход КАК КоличествоРасход,
ТоварыОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток
ИЗ
РегистрНакопления.Товары.ОстаткиИОбороты(, , Регистратор, , ) КАК ТоварыОстаткиИОбороты
ИТОГИ
СУММА(КоличествоНачальныйОстаток),
СУММА(КоличествоПриход),
СУММА(КоличествоРасход),
СУММА(КоличествоКонечныйОстаток)
ПО
ТоварыОстаткиИОбороты.Товар,
ТоварыОстаткиИОбороты.Период,
ТоварыОстаткиИОбороты.Регистратор
И напоследок совет, как при использовании построителя отчета сделать перед группировкой по регистратору предварительную группировку по периоду, но не выводить ее в таблицу.
Нужно прочитать автоматически сгенерированный макет построителя в переменную, добавить измерение период перед измерением регистратор, загрузить макет из переменной обратно в построитель, после чего можно смело выполнять и выводить результат построителя.
Программный код всей этой цепочки действий не укладывается в рамки этой статьи, поэтому будет рассмотрен отдельно, в другой статье. |