Получение базовых данных в регистрах расчета Регистры расчета FAQ HelpF.pro

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

В данном разделе мы рассмотрим два существующих в системе способа получения базовых данных — при помощи языка запросов и при помощи функциональной записи, методом ПолучитьБазу(). При этом будет называть «основным» регистром расчета тот регистр, для которого необходимо получить базовые данные, а «базовыми» регистрами (которых в общем случае может быть несколько) будем называть те регистры, для которых выполняется суммирование ресурсов.

Мы не будем рассматривать эти способы подробно, рассмотрим только их отличия и область применения.

Свойства и настройка регистра расчета в 1С

Регистры расчета отличаются изобилием новых свойств, которые Вы не увидите в других объектах системы:

свойства регистра расчета 1С

Прежде всего, для регистра расчета обязательно указание план видов расчета, в котором хранится информация о видах начислений/удержаний.

Период действия — флаг, который указывает поддержку периодичности регистра расчета. Отвечает за активность стандартных реквизитов ПериодДействия, ПериодДействияНачало, ПериодДействияКонец.

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания — попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

Базовой период — флаг, отвечающий за использование механизма расчета на основе базовых периодов. База для расчета — расчет другого вида, на основе которого рассчитывается текущая запись. Отвечает за активность стандартных реквизитов БазовыйПериодКонец и БазовыйПериодНачало.

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

Анализ регистров

«Универсальный отчет» находится в разделе меню «Отчеты» — «Стандартные». Указав, что отчет будет формироваться по «Регистрам накопления». Выбираем регистр, который хотим посмотреть. С помощью кнопки «Настройки» настраиваем данные, которые хотим вывести в отчет.

Рис.24 Универсальный отчетРис.24 Универсальный отчет

Например, на закладке «Отбор» мы можем установить отбор по любому доступному элементу, например «Физическое лицо» — кнопка «Добавить отбор».

Рис.25 Добавить отборРис.25 Добавить отбор

На закладке «Структура» задать поля для отображения в отчете.

Рис.26 На закладке «Структура» задать поля для отображения в отчетеРис.26 На закладке «Структура» задать поля для отображения в отчете

Раскрыв детализацию можно добавить или удалить поля, снимая и устанавливая галочки. Если нужного поля нет в предложенном списке, его можно добавить с помощью кнопки «Добавить». Чтобы узнать, каким документом сформирована запись регистра, необходимо отметить поле «Регистратор».

Рис.27 Отмечаем поле «Регистратор»Рис.27 Отмечаем поле «Регистратор»

Сформировав отчет по регистру «Расчеты налоговых агентов с бюджетом по НДФЛ», мы видим, что документом «Списание с расчетного счета» в феврале производилась запись по перечисленном НДФЛ за январь, хотя данным документом производилась уплата НДФЛ за февраль. Поэтому надо проанализировать данные, выяснив, почему не отражен НДФЛ за январь.

Рис.28 Расчеты налоговых агентов с бюджетом по НДФЛРис.28 Расчеты налоговых агентов с бюджетом по НДФЛ

Метод ПолучитьБазу()

Метод ПолучитьБазу() определен для объектов РегистрРасчетаМенеджер.<Имя регистра расчета> и РегистрРасчетаЗапись.<Имя регистра расчета>. Метод позволяет задать ресурсы базовых регистров, по которым необходимо получить обороты, задать поля, в разрезе которых нужно получить обороты и задать правила сопоставления измерений основного и базовых регистров расчета.

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

Имена измерений и ресурсов базовых регистров задаются в формате <ИмяРегистраРасчета>.<ИмяПоля>.

Пример использования метода:

Копировать в буфер обмена

Ресурсы = Новый Массив(1);Ресурсы = «ОсновныеНачисления.Результат,ДополнительныеНачисления.Результат»;Измерения = Новый Структура(«ФизЛицо,Организация»);Измерения.ФизЛицо = «ОсновныеНачисления.Физлицо,ДополнительныеНачисления.Работник»;Измерения.Организация = «ОсновныеНачисления.Организация,ДополнительныеНачисления.Организация»;Разрезы = Новый Массив(1);Разрезы = «ОсновныеНачисления.Способ,ДополнительныеНачисления.Способ»;// Рассчитываем базуТаблицаБазовыхДанных = РегистрРасчета.Удержания.ПолучитьБазу(Отбор, Ресурсы, Измерения, Разрезы);

В приведенном выше примере измерение «Физлицо» основного регистра при получении оборотов будет сопоставляться с измерением «Физлицо» базового регистра «ОсновныеНачисления» и измерением «Работник» базового регистра «ДополнительныеНачисления».

Таблица языка запросов для получения базовых данных

Для получения базовых данных в языке запросов определены виртуальные таблицы «РегистрРасчета.<Имя регистра расчета>.База<Имя базового регистра расчета>». В качестве параметров виртуальной таблицы задаются измерения основного регистра, измерения базового регистра и поля, в разрезе которых нужно получить базовые данные. Измерения и разрезы задаются как массив (или список значений) строк с именами измерений.

Пример написания запроса с использованием виртуальных таблиц базовых данных:

Копировать в буфер обмена

Измерения1 = Массив(2);Измерения1 = «Физлицо»;Измерения1 = «Организация»;Измерения2 = Массив(2);Измерения2 = «Работник»;Измерения2 = «Организация»;Разрезы = Новый Массив(1);Разрезы = «Способ»;ТекстЗапроса = «ВЫБРАТЬ Физлицо, ВидРасчета, СУММА(РезультатБаза)|ИЗ|(|ВЫБРАТЬ Физлицо, ВидРасчета, РезультатБаза| ИЗ РегистрРасчета.Удержания.БазаОсновныеНачисления(&Измерения1,&Измерения1,&Разрезы)|ГДЕ » + УсловиеОсновных + «|ОБЪЕДИНИТЬ ВСЕ|ВЫБРАТЬ Работник, ВидРасчета, РезультатБаза| ИЗ РегистрРасчета.Удержания.БазаДополнительныеНачисления(&Измерения1,&Измерения2,&Разрезы)|ГДЕ » + УсловиеДополнительных + «|) КАК База|СГРУППИРОВАТЬ ПО| Физлицо,| ВидРасчета|»;Запрос = Новый Запрос(ТекстЗапроса);Запрос.УстановитьПараметр(«Измерения1», Измерения1);Запрос.УстановитьПараметр(«Измерения2», Измерения2);Запрос.УстановитьПараметр(«Разрезы», Разрезы);// …установка дополнительных параметров запроса, применяемых в условиях в операторе ГДЕ// ,..// получим выборку результата запросаВыборка = Запрос.Выполнить().Выбрать();

Приведенный пример предполагает ту же структуру данных и ту же решаемую задачу, что и пример для метода ПолучитьБазу(). При этом мы видим заметное увеличение исходного кода и кажущуюся его сложность.

Сравнение

Отметим, что производительность получения данных при помощи функционального метода и при помощи запроса одинакова несмотря на кажущееся усложнение исполняемого кода в случае с запросами.

Краткая функциональная запись с использованием метода ПолучитьБазу() допустима только в том случае, если нет необходимости в иных данных помимо базовых, и при этом хочется «сэкономить» на строках кода. Совершенно не допустимо из соображений производительности кода, применение метода ПолучитьБазу() в том случае, если после его использование все равно придется при помощи запроса получать дополнительные данные для расчета.

Еще одно соображение касается условий отбора базовых данных. Для метода ПолучитьБазу(), фактически, нет возможности получить базовые данные иначе, чем по одной записи или по конкретному регистратору (с отбором по тем или иным измерениям). В случае же запроса в распоряжении у разработчика все возможности языка запросов по отбору записей.


Поделитесь в соц.сетях:

Оцените статью:

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Добавить комментарий