Файл: Хрусталева Е. Ю. Язык запросов 1С-Предприятия 8 (2013).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 12.03.2019

Просмотров: 51779

Скачиваний: 8724

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Рис. 3.87. Получение фактического периода действия для записей документа

Этот фрагмент можно посмотреть в обработке ДанныеРегистраРасчета в
демонстрационной конфигурации «Сложные периодические расчеты», которая находится
на прилагаемом компакт-диске.

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

Для получения данных графика для записей регистра расчета используется виртуальная
таблица ДанныеГрафика(). Эта таблица формируется на основе регистра расчета в
соответствии с условием отбора, переданным в параметре виртуальной таблицы
Условие.

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


background image

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

<Имя ресурса графика>ПериодДействия – имеет тип Число. Содержит сумму
соответствующего ресурса регистра сведений, назначенного в качестве графика
регистра расчета. Суммирование проводится по всему периоду действия записи
регистра расчета (месяц, квартал, год и т. д.), заданному в реквизите
ПериодДействия;
<Имя ресурса графика>ФактическийПериодДействия – имеет тип Число.
Содержит сумму соответствующего ресурса регистра сведений за фактический
период действия записи регистра расчета;
<Имя ресурса графика>БазовыйПериод – имеет тип Число. Содержит сумму
соответствующего ресурса регистра сведений за весь базовый период записи
регистра расчета, т. е. за период с БазовыйПериодНачало по БазовыйПериодКонец;
<Имя ресурса графика>ПериодРегистрации – имеет тип Число. Содержит сумму
соответствующего ресурса регистра сведений за весь период регистрации записи
регистра расчета (месяц, квартал, год и т. д.), заданный в реквизите
ПериодРегистрации.

При построении виртуальной таблицы данных графика происходит соединение таблиц
регистра расчета и регистра сведений. Кроме того, в случае получения поля <Имя
ресурса графика>ФактическийПериодДействия
 происходит также соединение с
таблицей фактического периода действия регистра расчета. Так как данные для всех
четырех перечисленных полей получаются путем соединения с таблицей регистра
сведений по разным условиям, то в общем случае будет выполнено четыре соединения с
таблицей регистра сведений. Поэтому без необходимости не следует получать поля
виртуальной таблицы данных графика «на всякий случай», т. к. это может существенно
понизить производительность запроса.

Рассмотрим пример получения данных из таблицы данных графика. В следующем запросе
получаются данные графика за фактический период действия и за весь период действия
в целом для всех записей документа-регистратора (листинг 3.83).

Листинг 3.83. Получение данных графика для записей документа


background image

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

Рис. 3.88. Получение данных графика для записей документа

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

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

Например, план видов расчета ДополнительныеНачисления зависит по базе от планов
видов расчета ОсновныеНачисления и ДополнительныеНачисления. Эти планы видов
расчета, в свою очередь, используются в регистрах регламентированного и
управленческого учета ОсновныеНачисленияРеглОсновныеНачисленияУпр и
ДополнительныеНачисленияРегл и ДополнительныеНачисленияУпр.

Это означает, что любые записи регистра ДополнительныеНачисленияРегл могут
зависеть по базовому периоду от записей любого из четырех регистров. В этом случае у
регистра ДополнительныеНачисленияРегл будет 4 виртуальные таблицы базовых
данных.

ДополнительныеНачисленияРегл.БазаДополнительныеНачисленияРегл,
ДополнительныеНачисленияРегл.БазаДополнительныеНачисленияУпр,
ДополнительныеНачисленияРегл.БазаОсновныеНачисленияРегл,
ДополнительныеНачисленияРегл.БазаОсновныеНачисленияУпр.

Имя виртуальной таблицы формируется по следующей схеме:

<ИмяОсновногоРегистра>.База<ИмяБазовогоРегистра>

Таким образом, например, таблица


background image

ДополнительныеНачисленияРегл.БазаОсновныеНачисленияРегл позволяет получить
записи регистра ОсновныеНачисленияРегл, входящие в базу расчета записей регистра
ДополнительныеНачисленияРегл.

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

ИзмеренияОсновногоРегистра – имеет тип Массив или СписокЗначений. В этот
параметр нужно передать массив, элементами которого являются строки с именами
измерений основного регистра, по которым нужно будет отбирать записи в базовых
регистрах. Значения перечисленных в данном параметре измерений будут
сопоставляться со значениями в соответствующих измерениях базового регистра
расчета, заданных параметром <ИзмеренияБазовогоРегистра>;
ИзмеренияБазовогоРегистра – имеет тип Массив или СписокЗначений. В этот
параметр нужно передать массив, элементами которого являются строки с именами
измерений базового регистра, по которым будет произведен отбор записей в базовом
регистре. При этом в качестве значений отбора будут использованы значения
соответствующих измерений основного регистра, заданных параметром
<ИзмеренияОсновногоРегистра>. Число и порядок элементов этого массива
должны совпадать с числом и порядком элементов массива измерений основного
регистра;
Разрезы – имеет тип Массив или СписокЗначений. В этот параметр передается
массив, содержащий названия полей базового регистра, по которым необходимо
получить разрез базы. По перечисленным в данном параметре полям будет
выполняться дополнительная группировка суммируемых базовых данных. В запросе
можно получить разрез не только по измерениям и реквизитам, но и по следующим
предопределенным полям базового регистра: НомерСтрокиРегистратор,
ВидРасчетаПериодРегистрацииПериодДействия;
Условие – содержит конструкцию языка запросов. В этот параметр можно передать
произвольное условие на записи основного регистра. База будет получена только
для записей, удовлетворяющих этому условию.

Часть полей виртуальной таблицы базовых данных полностью совпадает с полями
основной таблицы регистра расчета. Кроме того, будут добавлены поля для получения
базы по всем ресурсам базового регистра, названия которых формируются по схеме –
<Имя ресурса базового регистра>База.

Если параметр Разрезы не задан, то в таблице не будет других полей, и для каждой
записи основного регистра, удовлетворяющей условию, будет рассчитана база общей
суммой по каждому ресурсу базового регистра. Если разрезы заданы, то в виртуальной
таблице будут присутствовать дополнительные поля по числу элементов массива
разрезов. Названия этих полей в виртуальной таблице базовых данных будут
формироваться по схеме – <Имя разреза базового регистра>Разрез.

Например, если в параметр Разрезы переданы значения ПериодРегистрации и


background image

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

Рассмотрим пример получения базовых данных для записей регистра расчета
ДополнительныеНачисленияРегл (основной регистр) из регистра расчета
ОсновныеНачисленияРегл (базовый регистр). В следующем запросе получаются
базовые данные для конкретной записи документа-регистратора в разрезе периодов
регистрации и видов расчета (листинг 3.84).

Листинг 3.84. Получение базовых данных для записи документа