При работе с регистрами расчета есть возможность получения базовых данных. Это своеобразный способ расчета оборотов регистра, при котором функция расчета оборотов не является простой функцией суммирования ресурсов регистра по измерениям за определенный период, а представляет собой более сложную функцию. Эта функция зависит от состояния плана видов расчета, назначенного регистру расчета и, таким образом, управляется пользователем.
В данном разделе мы рассмотрим два существующих в системе способа получения базовых данных - при помощи языка запросов и при помощи функциональной записи, методом ПолучитьБазу(). При этом будет называть "основным" регистром расчета тот регистр, для которого необходимо получить базовые данные, а "базовыми" регистрами (которых в общем случае может быть несколько) будем называть те регистры, для которых выполняется суммирование ресурсов.
Мы не будем рассматривать эти способы подробно, рассмотрим только их отличия и область применения.
Метод ПолучитьБазу()
Метод ПолучитьБазу() определен для объектов РегистрРасчетаМенеджер.<Имя регистра расчета> и РегистрРасчетаЗапись.<Имя регистра расчета>. Метод позволяет задать ресурсы базовых регистров, по которым необходимо получить обороты, задать поля, в разрезе которых нужно получить обороты и задать правила сопоставления измерений основного и базовых регистров расчета.
Правила сопоставления записей регистров расчета задаются структурой, каждый элемент которой задает для того или иного измерения основного регистра список измерений базовых регистров расчета. Имена элементов структуры должны совпадать с именами измерений основного регистра, а значения элементов структуры - строки, со списком измерений базовых регистров через запятую. Если элемент структуры с именем того или иного измерения не задан, то это значит, что на соответствующее измерение не налагается условие.
Имена измерений и ресурсов базовых регистров задаются в формате <ИмяРегистраРасчета>.<ИмяПоля>.
Пример использования метода:
Ресурсы = Новый Массив(1);
Ресурсы[0] = "ОсновныеНачисления.Результат,ДополнительныеНачисления.Результат";
Измерения = Новый Структура("ФизЛицо,Организация");
Измерения.ФизЛицо = "ОсновныеНачисления.Физлицо,ДополнительныеНачисления.Работник";
Измерения.Организация = "ОсновныеНачисления.Организация,ДополнительныеНачисления.Организация";
Разрезы = Новый Массив(1);
Разрезы[0] = "ОсновныеНачисления.Способ,ДополнительныеНачисления.Способ";
// Рассчитываем базуТаблицаБазовыхДанных = РегистрРасчета.Удержания.ПолучитьБазу(Отбор,
// Ресурсы, Измерения, Разрезы);
Измерения1 = Массив(2);
Измерения1[0] = "Физлицо";
Измерения1[1] = "Организация";
Измерения2 = Массив(2);
Измерения2[0] = "Работник";
Измерения2[1] = "Организация";
Разрезы = Новый Массив(1);
Разрезы[0] = "Способ";
ТекстЗапроса = "ВЫБРАТЬ Физлицо, ВидРасчета, СУММА(РезультатБаза)
|ИЗ
|(
|ВЫБРАТЬ Физлицо, ВидРасчета, РезультатБаза
| ИЗ РегистрРасчета.Удержания.БазаОсновныеНачисления(&Измерения1,&Измерения1,&Разрезы)
|ГДЕ " + УсловиеОсновных + "
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ Работник, ВидРасчета, РезультатБаза
| ИЗ РегистрРасчета.Удержания.БазаДополнительныеНачисления(&Измерения1,&Измерения2,&Разрезы)
|ГДЕ " + УсловиеДополнительных + "
|) КАК База
|СГРУППИРОВАТЬ ПО
| Физлицо,
| ВидРасчета
|";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Измерения1", Измерения1);
Запрос.УстановитьПараметр("Измерения2", Измерения2);
Запрос.УстановитьПараметр("Разрезы", Разрезы);
// ...установка дополнительных параметров запроса, применяемых в условиях в операторе ГДЕ// ,..
// получим выборку результата запросаВыборка = Запрос.Выполнить().Выбрать();
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua