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