Книга: Разработка сложных отчетов в «1С:Предприятии 8». Система компоновки данных
Назад: Пример 14
Дальше: Вывод в диаграмму нескольких ресурсов

Расчет итогов по полям остатка

Проблема в том, что в запросе при получении поля Регистратор обязательно должно быть получено и его родительское поле-период ПериодСекунда. Это относится ко всем полям-периодам – при получении поля-периода в запросе должно присутствовать его родительское поле-период.

Изменим текст запроса для получения отчета (листинг 2.36).

Листинг 2.36. Текст запроса

ВЫБРАТЬ

ОстаткиНоменклатурыОстаткиИОбороты.Номенклатура,

ОстаткиНоменклатурыОстаткиИОбороты.Склад,

ОстаткиНоменклатурыОстаткиИОбороты.КоличествоНачальныйОстаток КАК

НачальныйОстаток,

ОстаткиНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток КАК

КонечныйОстаток,

ОстаткиНоменклатурыОстаткиИОбороты.КоличествоПриход КАК Приход,

ОстаткиНоменклатурыОстаткиИОбороты.КоличествоРасход КАК Расход,

ОстаткиНоменклатурыОстаткиИОбороты.Регистратор,

ОстаткиНоменклатурыОстаткиИОбороты.ПериодСекунда

ИЗ

РегистрНакопления.ОстаткиНоменклатуры.ОстаткиИОбороты(, , Авто, , ) КАК

ОстаткиНоменклатурыОстаткиИОбороты

Так как свойство Автозаполнение () установлено, платформа автоматически заполнит -периодов в наборе данных (рис. 2.228).

Рис. 2.228. Роли полей-периодов

Поля-периоды для правильного расчета остатков должны иметь непрерывную нумерацию, начиная с 1. При этом чем меньше номер периода, тем более точным должен быть период. Например, поле НомерСтроки является уточнением поля Регистратор, поэтому номер периода поля НомерСтроки должен быть меньше, чем номер периода поля Регистратор. Аналогично и номер периода поля ПериодДень должен быть меньше, чем номер поля ПериодГод.

В нашем примере поле Регистратор (номер периода – 1) является уточнением поля ПериодСекунда (номер периода – 2). Если по какой-то причине роли полей-периодов не проставлены автоматически, необходимо сделать это вручную.

В результате мы получим правильные итоги остатков номенклатуры за период с детализацией по регистратору (рис. 2.229).

Рис. 2.229. Результат отчета

Другой вероятной причиной неправильного расчета остатков является отсутствие в запросе парного поля-остатка. Например, следующий запрос будет неправильным (листинг 2.37).

Листинг 2.37. Текст запроса

ВЫБРАТЬ

ОстаткиНоменклатурыОстаткиИОбороты.Номенклатура,

ОстаткиНоменклатурыОстаткиИОбороты.Склад,

ОстаткиНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток КАК

КонечныйОстаток,

ОстаткиНоменклатурыОстаткиИОбороты.КоличествоПриход КАК Приход,

ОстаткиНоменклатурыОстаткиИОбороты.КоличествоРасход КАК Расход,

ОстаткиНоменклатурыОстаткиИОбороты.Регистратор,

ОстаткиНоменклатурыОстаткиИОбороты.ПериодСекунда

ИЗ

РегистрНакопления.ОстаткиНоменклатуры.ОстаткиИОбороты(, , Авто, , ) КАК

ОстаткиНоменклатурыОстаткиИОбороты

При наличии в запросе парного поля-остатка (см. листинг 2.36) и установленном свойстве Автозаполнение () платформа автоматически заполнит -остатка в наборе данных (рис. 2.230).

Рис. 2.230. Роли полей-остатка

Парные поля-остатки должны иметь одинаковое имя группы полей-остатков. Непарные остатки должны иметь различные имена групп полей-остатков. Если по какой-то причине роли полей-остатков не проставлены автоматически, необходимо сделать это вручную.

В результате мы получим правильные итоги остатков номенклатуры за период с детализацией по регистратору (см. рис. 2.229).

Также для корректного расчета остатка должны быть правильно указаны , являющихся измерениями и реквизитами измерений. Поля, являющиеся измерениями, в разрезе которых получаются остатки, должны быть отмечены как измерения. Поля, не отмеченные как измерения при расчете итогов по полям остатка, учитываться не будут, это может привести к получению неправильных остатков. И наоборот, поле, по сути не являющееся измерением, не должно быть отмечено как измерение. В противном случае остатки могут быть получены неправильно.

В нашем примере платформа автоматически проставила роли полей-измерений у полей Номенклатура и Склад. Это правильно. Но посмотрим, что будет, если в запросе получается реквизит измерения.

Изменим текст запроса для получения отчета (листинг 2.38).

Листинг 2.38. Текст запроса

ВЫБРАТЬ

ОстаткиНоменклатурыОстаткиИОбороты.Номенклатура,

ОстаткиНоменклатурыОстаткиИОбороты.Номенклатура.ВидНоменклатуры КАК

ВидНоменклатуры,

ОстаткиНоменклатурыОстаткиИОбороты.Склад,

ОстаткиНоменклатурыОстаткиИОбороты.КоличествоНачальныйОстаток КАК

НачальныйОстаток,

ОстаткиНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток КАК

КонечныйОстаток,

ОстаткиНоменклатурыОстаткиИОбороты.КоличествоПриход КАК Приход,

ОстаткиНоменклатурыОстаткиИОбороты.КоличествоРасход КАК Расход,

ОстаткиНоменклатурыОстаткиИОбороты.Регистратор,

ОстаткиНоменклатурыОстаткиИОбороты.ПериодСекунда

ИЗ

РегистрНакопления.ОстаткиНоменклатуры.ОстаткиИОбороты(, , Авто, , ) КАК

ОстаткиНоменклатурыОстаткиИОбороты

Сгруппируем записи по полю ВидНоменклатуры (рис. 2.231).

Рис. 2.231. Структура отчета

В результате мы получим неправильные итоги по полю КонечныйОстаток (рис. 2.232).

Рис. 2.232. Результат отчета

Проблема в том, что у поля ВидНоменклатуры не указана роль реквизита измерения. Для решения этой проблемы нужно указать родительское поле в роли поля-реквизита. Так, в приведенном выше примере нужно у поля ВидНоменклатуры указать роль Измерение и указать в качестве родительского поле Номенклатура (рис. 2.233).

Рис. 2.233. Роли полей-измерений

В результате будут получены правильные остатки по полю – реквизиту измерения (рис. 2.234).

Рис. 2.234. Результат отчета

Итак, мы рассмотрели наиболее вероятные проблемы при расчете итогов по полям-остаткам. Подробнее об этом рассказывается в соответствующем разделе третьей главы .

Назад: Пример 14
Дальше: Вывод в диаграмму нескольких ресурсов