Добавил:
sora.alai.102@gmail.com Делаю работы на заказ. Какие именно? Пишите. Или регайтесь на бирже, где я работаю: https://vsesdal.com/promo?ref=748568 Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

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

.pdf
Скачиваний:
2185
Добавлен:
25.11.2018
Размер:
31.3 Mб
Скачать

Рис. 3.80. Планы видов расчета для основных и дополнительных начислений при расчете заработной платы

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

Листинг 3.77. Отбор видов расчета по значению реквизита «СтатьяЗатрат»

Результат выполнения запроса представлен на рис. 3.81.

Рис. 3.81. Отбор видов расчета по значению реквизита «СтатьяЗатрат»

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

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

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

Например, для вида расчета Премия за месяц из плана видов расчета Дополнительные начисления в список базовых видов расчета входят виды расчета, описанные в плане видов расчета Основные начисления (рис. 3.82).

Рис. 3.82. Предопределенные табличные части плана видов расчета «Дополнительные начисления»

Чтобы получить записи из предопределенной табличной части вида расчета, можно обратиться к имени табличной части через точку от имени основной таблицы плана видов расчета и наложить отбор на конкретный вид расчета по полю Ссылка (листинг 3.78).

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

В результате для вида расчета Премия за месяц из плана видов расчета Дополнительные начисления мы получим следующий список базовых видов расчета

(рис. 3.83).

Рис. 3.83. Получение списка базовых видов расчета для заданного вида расчета

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

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

Листинг 3.79. Получение списка видов расчета, на которые влияет заданный вид расчета

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

Таким образом, для вида расчета Оклад мы получим следующий результат (рис. 3.84).

Рис. 3.84. Получение списка видов расчетов, на которые влияет вид расчета «Оклад»

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

Регистры расчета

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

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

Основная таблица регистра расчета в информационной базе содержит следующий состав полей:

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

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

в конфигурации. Количество таких полей равно количеству ресурсов, определенных для регистра как объекта конфигурации; Активность – имеет тип Булево. Содержит признак активности записи (участие

записи в конкуренции за период действия, влияние на получение базы); БазовыйПериодНачало – имеет тип Дата. Содержит дату начала интервала базового периода учетной записи. Существует только для регистров, у которых установлено свойство Базовый период; БазовыйПериодКонец – имеет тип Дата. Содержит дату окончания интервала

базового периода учетной записи. Существует только для регистров, у которых установлено свойство Базовый период;

ВидРасчета – имеет тип ПланВидовРасчетаСсылка.<имя>. Содержит ссылку на вид расчета учетной записи; НомерСтроки – имеет тип Число. Содержит уникальный номер данной записи в

наборе записей регистра, подчиненных документу, указанному в поле Регистратор. Таким образом, совокупность значений Регистратор и НомерСтроки позволяют идентифицировать конкретную запись регистра расчета; ПериодДействияНачало – имеет тип Дата. Содержит дату начала интервала периода действия учетной записи. Существует только для регистров, у которых установлено свойство Период действия; ПериодДействияКонец – имеет тип Дата. Содержит дату окончания интервала

периода действия учетной записи. Существует только для регистров, у которых установлено свойство Период действия; ПериодДействия – имеет тип Дата. Отражает период регистра расчета, в котором

действовала запись. Эта дата всегда имеет значение начала первого дня соответствующего периода (ПериодДействияНачало). Размер периода определяется периодичностью регистра расчета. Существует только для регистров,

у которых установлено свойство Период действия; Период регистрации – имеет тип Дата. Отражает период регистра расчета, к

которому относится данная запись. Размер периода определяется периодичностью регистра расчета.

Регистратор – имеет тип ДокументСсылка.<имя>. Содержит ссылку на документ, который ввел запись в регистр; Сторно – имеет тип Булево. Содержит признак того, является ли данная запись

сторно-записью. Сторно-записи записываются в регистр со значением Истина в этом поле.

В нашей демонстрационной конфигурации существует регистр расчета Основные начисления регламентированные, который хранит данные с периодичностью Месяц и использует план видов расчета Основные начисления. Данный регистр позволяет учитывать расчеты, протяженные во времени, – для работы с такими расчетами регистр расчета использует регистр сведений Графики работы. Кроме того, регистр поддерживает механизм зависимости по базовому периоду.

Регистр расчета имеет измерения ФизЛицо и Организация, ресурс Результат, а также реквизиты Размер, ГрафикРаботы, ВидУчетаВремени, Подразделение и СтатьяЗатрат для хранения дополнительной информации о расчете. Движения в регистре формируются при проведении документа Начисление зарплаты, который является регистратором регистра расчета.

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

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

На примере этих регистров рассмотрим типичные задачи по получению данных из регистров расчета.

Получение данных из регистра расчета

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

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

Пример 1

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

(листинг 3.80).

Листинг 3.80. Получение суммарных основных начислений сотрудникам по месяцам

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

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

Рис. 3.85. Получение суммарных основных начислений сотрудникам по месяцам

Пример 2

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

3.81).

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

Результат выполнения запроса представлен на рис. 3.86.

Рис. 3.86. Получение суммарных основных начислений сотрудникам в разрезе статей затрат и подразделений

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

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

При этом данные о фактическом периоде действия не хранятся в основной таблице

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

Структура полей этой таблицы полностью идентична структуре основной таблицы регистра расчета. Единственное ее отличие от основной таблицы состоит в том, что поля

ПериодДействияНачало и ПериодДействияКонец обозначают не собственно период действия, а интервал фактического периода действия. В случае, если фактический период действия записи задается несколькими интервалами, в виртуальной таблице такая запись будет представлена несколькими строками. Например, если в регистр расчета введены следующие записи (табл. 3.8), то в таблице фактического периода действия для этих записей будут присутствовать следующие строки (табл. 3.9).

Таблица 3.8. Основная таблица регистра расчета

ПериодРегистрации

ВидРасчета

ПериодДействия

ПериодДействияНачало

Перио

01.02.2013

Оклад

01.02.2013

01.02.2013

28.02.2

 

 

 

 

 

01.02.2013

Надбавка

01.02.2013

01.02.2013

28.02.2

 

 

 

 

 

01.02.2013

Больничный

01.02.2013

14.02.2013

17.02.2

 

 

 

 

 

Таблица 3.9. Виртуальная таблица «ФактическийПериодДействия»

ПериодРегистрации

ВидРасчета

ПериодДействия

ПериодДействияНачало

Перио

01.02.2013

Оклад

01.02.2013

01.02.2013

13.02.2

 

 

 

 

 

01.02.2013

Оклад

01.02.2013

18.02.2013

28.02.2

 

 

 

 

 

01.02.2013

Надбавка

01.02.2013

01.02.2013

28.02.2

 

 

 

 

 

01.02.2013

Больничный

01.02.2013

14.02.2013

17.02.2

 

 

 

 

 

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

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

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

У виртуальной таблицы фактического периода действия существует единственный параметр Условие. В этот параметр мы передаем условие отбора по регистратору (Регистратор = &Регистратор), движения которого нас интересуют.

В результате мы видим, что для сотрудника Кузнецова записи о командировке вытеснили записи об окладе. Поэтому количество календарных дней фактического периода действия записи об окладе 17 = 31 - 14 (рис. 3.87).