1с изменение таблицы динамического списка. Настройки динамического списка

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

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

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

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

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

Рис. Зависимость от базы

Рис. Частичное пересечение базового периода и периода действия

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

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

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

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

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

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

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

Списки базовых и ведущих видов расчета настраиваются в форме зависимого вида расчета.

При настройке ведущих видов расчета необходимо так же, как и при настройке вытесняющих видов расчета, соблюдать правило: если вид расчета А является ведущим для вида расчета В, который в свою очередь является ведущим для вида расчета С, то в список ведущих для вида расчета С должны быть включены как вид расчета В, так и вид расчета А. В противном случае программа выдаст сообщение об ошибке: «Неполный список ведущих видов расчета!». Например, если в список ведущих начислений внесена Квартальная премия, то должны быть внесены и все ведущие начисления для квартальной премии, такие как Оклад по дням Оклад по часам и т.д.

Рис. Настройка базовых и ведущих видов расчета

Условие задачи

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

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

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

сотрудника складываются из двух частей:

Некоторой фиксированной суммы, компенсирующей его транспортные расходы;

Начисления непосредственно за обучение в виде вознаграждения, рассчитываемого как общая сумма оплат, произведенных слушателями в текущем расчетном периоде, умноженная на определенный процент. Значение процента может быть задано в документе «Начисление зарплаты.

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

Механизм перерасчетов в рамках данной задачи использовать не надо.

Ввод всех начислений происходит документом «Начисление зарплаты». Считать, что все данные вводятся только в пределах одного месяца, например, можно указать начисление по тарифу с 10.01 по 31.01, а запись: тариф с 10.01 по 03.02 вводить нельзя.

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

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

Отчет может быть построен за любой расчетный период.


Решение

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

· Начисление за обучение слушателей по основному месту работы Результат = ТарифнаяСтавка * КоличествоОтработанныхЧасов;

Обратите внимание, для годовой премии сразу указан способ расчета общей суммы всех начислений, сделанных за прошедший год - «Получение базы».

2. На следующем этапе для вышеперечисленных видов расчета укажем зависимости между ними.

Таблица №5.1. Настройка зависимостей по вытеснению и по базе между видами расчетов, необходимых для решения задачи

Вид расчета Вытесняющий Базовый
ТРФ КМД -
ТРН - -
КМД - -
ПРМ - ТРФ, ТРН, КМД

3. Создадим вышеперечисленные виды расчетов в конфигурации. Настроим раздел «Расчет» для каждого используемого плана расчетов;

4. Создадим регистры расчетов;

5. Внесем необходимые изменения в структуру документа «Начисление зарплаты»;

6. Перейдем к проведению документа «Начисление зарплаты»:

a. Добавим в регистр необходимое количество записей:

i. Определим границы интервалов всех существующих периодов у каждой записи;

ii. Укажем значения измерений и реквизитов регистра;

b. Проведем расчет записей сформированных наборов для первичных видов расчета:

i. Если введены транспортные расходы - результат начисления

определим сразу, по данным документа;

ii. Расчет по тарифу на основном месте работы

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

2. Организуем цикл по записям набора. Для каждой записи реализуем прямое позиционирование на нужную строку в выборке запроса. Рассчитаем результат начисления;

3. Запишем набор, без пересчета фактического периода действия;

iii. Расчет начисления за выезд

1. Создадим оборотный регистр накопления «Оплаты

слушателей»;

2. Внесем изменения в алгоритм проведения документа «Приход денег», при выполнении которого должен заполняться данный регистр;

3. Используя механизм запросов, по каждому сотруднику, работавшего на выезде и указанного в документе, получим данные по оплатам слушателей;

4. Организуем цикл по записям набора. Для каждой записи реализуем прямое позиционирование на нужную строку в выборке запроса. Рассчитаем результат начисления;

5. Запишем набор, без пересчета фактического периода действия;

d. Повторим действия, описанные в п.4 для записей вторичных видов расчета каждого уровня:

i. Расчет годовой премии

1. Создадим константу для хранения процента премии. Включим режим использования основной формы констант по умолчанию;

2. Используя механизм запросов, по каждой записи с указанным видом расчета получим данные по базе;

3. Организуем цикл по записям набора. Для каждой записи реализуем прямое позиционирование на нужную строку в выборке запроса. Рассчитаем результат начисления;

4. Запишем набор;

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

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


Управляемые формы

Условие задачи

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

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

Решение

1. Создадим основные формы документов. Откроем каждую форму в окне редактораформы. На закладке «Командный интерфейс» раскроем ветвь «Панель навигации - Перейти». Установим флажки «Видимость» для регистров.

2. Создадим не основную форму выбора справочника «Физические лица»;

a. Внесем необходимые изменения в структуру регистра «Сведения о сотрудниках»;

b. Создадим новую форму;

c. Откроем палитру свойств основного реквизита формы;

d. В разделе «Объект» установим флаг «Произвольный запрос»;

e. Откроем настройку списка;

f. Внесем необходимые изменения в текст запроса;

g. При создании формы на сервере определим значения внешних параметров запроса;

h. Определим собственную обработку выбора значения из формы справочника;

3. Организуем вызов формы справочника из формы документа

a. Создадим основную форму документа «Начисление зарплаты»;

b. Укажем созданную форму справочника в качестве значения свойства «Форма выбора» элемента формы документа «ОсновныеНачисленияСотрудник »;

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

Установим флаг Базовый период .

Зададим в группе параметров Периодичность параметр Месяц .

Перейдем на вкладку Данные . Зададим здесь следующие параметры, рис. 1.11 :


Рис. 1.11.

Измерение Сотрудник - тип СправочникСсылка.Сотрудники , флаг Базовое установлен. Будем хранить в этом измерении сотрудника, по которому ведется расчет.

Ресурс Результат - тип Число , длина 10, точность 2. Именно этот ресурс будет содержать вычисленное значение вида расчета , заданного для сотрудника. Результат будет содержать значение в рублях, именно это определило параметры типа данных, использованного для него.

Реквизит ИсходныеДанные - тип число, длина 10, точность 2. В этот реквизит мы будем записывать исходные данные для расчета. Например, для вида расчета Оклад мы запишем сюда исходный размер оклада, для вида расчета Премия - процент , который должен браться от расчетной базы, для вида расчета Удержание - размер удержания в рублях.

Реквизит График - тип СправочникСсылка.ГрафикиРаботы . В этом реквизите будем хранить график , который соответствует сотруднику, для которого мы начисляем заработную плату. В свойстве этого реквизита Связь с графиком установим измерение График регистра сведений Графики работы . Именно благодаря этой настройке мы сможем использовать различные графики работы для разных сотрудников (пятидневка, шестидневка) и при расчете получать правильное количество рабочих дней по каждому графику.

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

1.6. Документ Начисление зарплаты

Создадим новый документ, дадим ему имя НачислениеЗарплаты . Этот документ должен иметь следующую функциональность:

  1. Возможность ручного ввода начислений;
  2. Формирование движений по регистру расчета ;

Перейдем на вкладку Данные окна настройки свойств документа НачислениеЗарплаты , рис. 1.12 . Создадим реквизит документа ПериодРегистрации - тип Дата , состав даты - Дата .


Рис. 1.12.

Создадим табличную часть НачисленияИУдержания . Создадим в ней следующие реквизиты:

Теперь перейдем на вкладку Движения . Запретим оперативное проведение документа , добавим в состав регистров, по которым документ формирует движения, регистр НачисленияИУдержания .

Нажмем на кнопку Конструктор движений . Откроется окно конструктора, рис. 1.13 .


Рис. 1.13.

При заполнении полей, задающих правила формирования движений мы заполним их следующим образом:

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

Нажмем на кнопку ОК в окне конструктора движений и посмотрим, какой код он сформировал:

Процедура ОбработкаПроведения(Отказ, Режим) //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! Для Каждого ТекСтрокаНачисленияИУдержания Из НачисленияИУдержания Цикл // регистр НачисленияИУдержания Движение = Движения.НачисленияИУдержания.Добавить(); Движение.Сторно = Ложь; Движение.ВидРасчета = ТекСтрокаНачисленияИУдержания.ВидРасчета; Движение.ПериодДействияНачало = ТекСтрокаНачисленияИУдержания.ДатаНачала; Движение.ПериодДействияКонец = ТекСтрокаНачисленияИУдержания.ДатаОкончания; Движение.ПериодРегистрации = ПериодРегистрации; Движение.Сотрудник = ТекСтрокаНачисленияИУдержания.Сотрудник; Движение.ИсходныеДанные = ТекСтрокаНачисленияИУдержания.ИсходныеДанные; Движение.График = ТекСтрокаНачисленияИУдержания.График; КонецЦикла; //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ КонецПроцедуры

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

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

Если ТекСтрокаНачисленияИУдержания.ВидРасчета= ПланыВидовРасчета.Основной.Премия Тогда Движение.БазовыйПериодНачало=НачалоМесяца(ПериодРегистрации); Движение.БазовыйПериодКонец=КонецМесяца(ПериодРегистрации); КонецЕсли;

Теперь немного изменим ту часть кода, которая задает начало и конец периода действия начисления. В нашем случае лишь один вид начисления нужно "оснастить" периодом действия , который в явном виде будет задавать пользователь . Это - Прогул . У всех остальных период действия будет равняться одному месяцу - начало периода будет совпадать с началом месяца, за который производится начисление заработной платы, конец периода действия будет совпадать с концом месяца. Поэтому мы, для того, чтобы избавить пользователя документа НачислениеЗарплаты от ввода ненужных значений, добавим в наш модуль следующий код, поместив его в цикл обработки строк табличной части:

Если Движение.ВидРасчета=ПланыВидовРасчета.Основной.Прогул Тогда Движение.ПериодДействияНачало = ТекСтрокаНачисленияИУдержания.ДатаНачала; Движение.ПериодДействияКонец = ТекСтрокаНачисленияИУдержания.ДатаОкончания; Иначе Движение.ПериодДействияНачало = НачалоМесяца(ПериодРегистрации); Движение.ПериодДействияКонец = КонецМесяца(ПериодРегистрации); КонецЕсли;

Этот код заменит строки

Движение.ПериодДействияНачало = ТекСтрокаНачисленияИУдержания.ДатаНачала; Движение.ПериодДействияКонец = ТекСтрокаНачисленияИУдержания.ДатаОкончания;

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

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

На рис. 1.14 вы можете видеть документ, который мы заполнили, и движения в регистре расчета , которые он произвел после проведения, после отработки кода, который мы написали выше.

Если все перенесено верно, а в нашем случае это именно так, мы можем приступать к реализации процедуры расчета. Сделаем это в том же модуле, в котором осуществляется формирование движений.

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

Добавим в процедуру проведения документа команду записи сформированных движений:

Движения.НачисленияИУдержания.Записать();

Эта команда должна следовать за командой закрытия цикла формирования движений.

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

Для Каждого Движение из Движения.НачисленияИУдержания Цикл Если Движение.ВидРасчета=ПланыВидовРасчета.Основной.Удержание Тогда Движение.Результат=Движение.ИсходныеДанные; КонецЕсли; КонецЦикла; Движения.НачисленияИУдержания.Записать();

Теперь займемся расчетом оклада.

Для Каждого Движение из Движения.НачисленияИУдержания Цикл Если Движение.ВидРасчета=ПланыВидовРасчета.Основной.Оклад Тогда План = Движение.ПолучитьДанныеГрафика(ВидПериодаРегистраРасчета.ПериодДействия); Факт= Движение.ПолучитьДанныеГрафика(ВидПериодаРегистраРасчета.ФактическийПериодДействия); Движение.Результат= Движение.ИсходныеДанные*Факт.РабочийДень/План.РабочийДень; КонецЕсли; КонецЦикла; Движения.НачисленияИУдержания.Записать();

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

Запись вида Факт позволяет обратиться к строке таблицы значений. А записью Факт.РабочийДень (напомним, РабочийДень - это имя ресурса регистра сведений , который используется как график ) мы "вытаскиваем" нужные данные. В нашем случае - количество рабочих дней, отработанных по факту.

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

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

Ресурсы=Новый Массив(1); Ресурсы="НачисленияИУдержания.Результат"; Измерения =Новый Структура ("Сотрудник", "НачисленияИУдержания.Сотрудник"); Для Каждого Движение из Движения.НачисленияИУдержания Цикл Если Движение.ВидРасчета=ПланыВидовРасчета.Основной.Премия Тогда ДанныеБазы=Движение.ПолучитьБазу(Ресурсы, Измерения); Движение.Результат=Движение.ИсходныеДанные*ДанныеБазы.Результат/100; КонецЕсли; КонецЦикла; Движения.НачисленияИУдержания.Записать();

Для начала мы подготовим параметры для передачи в метод ПолучитьБазу . Это будет массив Ресурсы , который в нашем случае содержит имя ресурса базового регистра расчета в формате "ИмяРегистра.ИмяРесурса" . Так же мы готовим структуру Измерения . В структуру мы добавляем новый элемент, имя которого совпадает с именем измерения регистра расчета ("Сотрудник" ), а значение содержит список измерений (в формате "ИмяРегистра.ИмяИзмерения" ), в нашем случае это одно измерение. Эти данные будут использованы при получении расчетной базы при расчете премии.

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

Вспомним, как называется ресурс регистра расчета , в котором хранятся результаты вычислений - это ресурс Результат . Именно по такому имени мы можем обратиться к строке таблицы значений (в нашем случае это одна строка с индексом 0) и получить расчетную базу.

После того, как расчетная база получена, мы рассчитываем размер премии. Так как при заполнении документа подразумевается, что мы вводим процентное значение премии в виде количества процентов (10, 40 и т.д.), то для того, чтобы узнать размер премии, мы должны введенный процентный размер премии разделить на 100 и уже после этого умножать на полученную расчетную базу.

После того, как все вышеперечисленные действия выполнены, мы можем испытать наше решение на практике. Если все выполнено верно - в

1. Объекты метаданных, используемые в периодических расчетах В V 8 для реализации сложных периодических расчетов предназначены следующие объекты: планы видов расчета, регистры расчета. Дополнительно: В справочниках хранятся объекты, которые используются в качестве разрезов периодических расчетов, например, физические лица, подразделения организации, должности сотрудников и т. д. Регистры сведений могут хранить любую информацию, развернутую по нескольким измерениям. При помощи регистров сведений реализуются графики учета времени (аналог календарей в версии 7. 7). Документы предназначены для ввода записей в регистры расчета. Отчеты используются для вывода детальной и сводной информации.

2. Планы видов расчета Зарплата сотрудника включает следующие промежуточные расчеты: расчет основных начислений (оклад, тариф), расчет отклонений (отпуск, больничный), расчет дополнительных начислений (премии, доплаты, дивиденды), расчет налогов и других удержаний (НДФЛ, алименты), другие расчеты (ПФР, ЕСН), расчет итоговой суммы к выдаче. Для расчета этих компонентов зарплаты предназначены виды расчета, сгруппированные в планы видов

2. 1. Назначение Каждый план видов расчета описывает схему взаимодействия записей регистра расчета и позволяет задать правила, по которым будут производиться расчеты записей, их взаимное расположение во времени и правила их перерасчета. Планов видов расчета может быть несколько. Распределение видов расчета по планам не является произвольным, так как у плана есть некоторые общие характеристики, которые будут действовать на все входящие в него виды расчетов. Например, поддержка взаимного вытеснения по периоду действия характерна для основных начислений и отклонений (оклад, отпуск) и не характерна для налогов и удержаний (НДФЛ, алименты). Замечание. Виды расчета в V 8 не являются объектами конфигурации, как это было в 7. 7. Они хранятся в планах видов расчета, т. е. являются объектами данных, а не метаданных.

2. 2. Предопределенные виды расчета В плане видов расчетов еще на этапе разработки прикладного решения могут быть заведены предопределенные виды расчетов. Остальные ВР вводятся в планы в режиме 1 С: Предприятие

2. 3. Взаимосвязь видов расчета Для каждого ВР указываются базовые, ведущие и вытесняющие его виды расчетов Базовые - это такие виды расчета, результаты которых используются при расчете данного вида расчета. Например, сумма по окладу используется при расчете доплаты к окладу, а основные начисления являются базовыми для расчета НДФЛ. Ведущие - это виды расчета, при изменении результатов которых нужно пересчитать данный вид расчета. Например, при изменении оплаты по окладу «задним числом» необходимо пересчитать оплату отпуска, поскольку при расчете отпускных используется средняя зарплата сотрудника за предыдущие месяцы. Список ведущих видов расчета может не совпадать со списком базовых.

продолжение Вытесняющие - это виды расчета, период действия которых не должен пересекаться с периодом данного вида расчета. Вытесняющие виды расчета имеют больший приоритет вытеснения, поэтому они вытесняют по времени данный вид расчета. Например, оплата отпуска вытесняет оплату по окладу, а оплата по больничному вытесняет оплату отпуска и оплату по окладу. При вытеснении записи с определенным периодом действия ее фактический период действия может измениться, т. е. уменьшится или разделится на несколько интервалов. Например, запись об отпуске с 10 по 20 число месяца вытесняет запись об окладе, у которой период действия - весь месяц. Тогда фактический период действия записи об окладе будет состоять из двух интервалов: с 1 по 9 число и с 21 по конец месяца.

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

2. 5. Предопределенные табличные части плана видов расчета Для хранения базовых, вытесняющих и ведущих ВР в Планах видов расчета предусмотрены следующие предопределенные табличные части: Базовые. Виды. Расчета, Вытесняющие. Виды. Расчета, Ведущие. Виды. Расчета. Обращение из программы к данным ТЧ – по правилам обращения к ТЧ объектов конфигурации (см. Синтаткиспомощник)

3. Регистры (см. д-т «Перенос данных» в ТК) расчета (РР) Регистры расчета предназначены для хранения записей расчета (промежуточных и итоговых результатов) – см. Журнал расчетов в V 7. 7. Отличительной особенностью регистра расчета является то, что он не предназначен для интерактивного редактирования пользователем. Разработчик может, при необходимости, предоставить пользователю возможность редактировать регистр расчета, но предназначение регистра расчета заключается в том, чтобы его модификация производилась на основе алгоритмов работы объектов базы данных, а не в результате непосредственных действий пользователя.

3. 1. Структура Регистра Расчета Структура регистра расчета определяет, какая именно информация и в каких разрезах будет храниться в регистре. Разработчик указывает измерения, ресурсы и реквизиты регистра: Измерения - это разрезы хранимой информации. Например, у регистра Основные. Начисления могут быть измерения Сотрудник, Организация, Подразделение, а у регистра Налоги измерения: Сотрудник и Организация. Ресурсы - результаты расчета, например, ресурс Результат для регистра Основные. Начисления. Ресурсы могут быть только числового типа. Реквизиты -дополнительная характеристика записи расчета. Реквизиты могут быть почти любого сохраняемого в базе данных типа. Например, реквизиты Дни и Часы для регистра Основные. Начисления, реквизит Сумма для хранения исходных данных расчета и т. д.

3. 2. Периодичность РР Отличительными особенностями регистра расчета является: 1. Периодичность регистра определяет период, с которым регистрируются движения и в пределах которого движения могут влиять друг на друга (для регистров, поддерживающих период действия). Периодичность регистра расчета может быть определена одним из следующих значений: День, Месяц, Квартал, Год.

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

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

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

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

4. Графики времени Если у регистра установлен флажок «Период действия» , то можно заполнить свойства «График» , «Значение графика» и «Дата графика» . Такой график времени должен представлять собой регистр сведений (непериодический, с обязательным измерением типа Дата и ресурсом типа Число), в котором содержится временная схема исходных данных, участвующих в расчетах. Измерениями этого графика могут быть, например, график работы (ссылка на справочник) и дата, а ресурсом - количество рабочих часов в этой дате. В этом случае можно будет связать запись регистра расчета с каким-либо конкретным графиком работы (указав в качестве реквизита записи ссылку на справочник графиков работы) и в дальнейшем, средствами встроенного языка получать информацию о количестве рабочих часов в периоде действия, фактическом периоде действия или периоде регистрации этой записи. Например, это может быть график работы организации с разбивкой по рабочим дням и часам, график продолжительности рабочих смен, расписание лекционных часов и т. д.

5. Частичное попадание записей регистра расчета в базовый период Рассмотрим случай, когда, базовый период не кратен периоду регистра расчета. Например, существует какая-нибудь "особая" премия (действующая в мае), которая имеет базовый период с 15. 04. 2009 по 15. 04. 2009 (для примера также можно привести следующие варианты базовых периодов: 2 последних недели, первая и последняя неделя предыдущего месяца, два последних дня, понедельники, и т. д.). При получении базы система должна сложить результаты всех записей, попавших в этот период. Очевидно, что может возникнуть ситуация, когда записи будут лежать в рассмотренном базовом периоде не полностью, а «частично» Конечно, речь идет только о тех записях, которые содержат виды расчета, заданные в плане видов расчета в качестве базовых для данной премии. Для определенности предположим, что «особая» премия в качестве базового вида расчета содержит «Оклад» . Попасть в базовый период записи могут «по периоду регистрации» или «по периоду действия» .

Продолжение Рассмотрим первый случай, когда записи попадают в базовый период по периоду регистрации. В этом случае в плане видов расчета, связанном с регистром расчета, должен быть установлен признак «Зависит по периоду регистрации» . Напомним, что период регистрации - это всегда конкретная дата, соответствующая началу периода регистра расчета. Если период регистрации (т. е. конкретная дата) не попадает в базовый период, то эта запись не будет учтена при расчете базы. То есть, если установлена зависимость базы по периоду регистрации, то «частичных» результатов не будет: или запись будет целиком учтена, или целиком не учтена. В нашем случае в базовый период «особой» премии не попадет ни одна запись, поскольку период с 15. 04. 2009 по 15. 04. 2009 не охватывает ни одну дату начала периода регистра расчета.

Продолжение Рассмотрим второй случай, когда записи попадают в базовый период по периоду действия. В этом случае в плане видов расчета, связанном с регистром расчета, должен быть установлен признак «Зависит по периоду действия» . Здесь нужно определить, какая часть результата должна быть взята при расчете базы. Чтобы придать «дискретность» таким результатам, используется объект «График» . Используя сведения графика, можно посчитать, какая часть всего результата «базовой записи» приходится на каждый день, и взять только те дни, который попали в базовый период.

6. Перерасчеты Система позволяет автоматически отслеживать записи, требующие перерасчета. Такая ситуация может возникнуть, когда их результаты каким-то образом связаны с другими видами расчета, а те были изменены (удалены или добавлены новые записи). Например, при изменении начислений сотрудника нужно пересчитать налоги. Тогда для вида расчета «НДФЛ» начисления будут являться ведущими видами расчета, что настраивается в плане видов расчета на закладке «Ведущие» . Допустим, у нас есть регистры расчета Основные. Начисления, Премии и Удержания. Налоги рассчитываются после всех начислений и премий, так как используют их результаты. Для автоматического отслеживания актуальности записей о налогах по каждому сотруднику необходимо у регистра Удержания создать перерасчет с измерением Сотрудник. В качестве данных ведущих регистров назначается измерение

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

6. Приемы программирования Для работы с РР средствами встроенного языка применяются следующие объекты (см. Синтаксис-Помощник - самостоятельно)

Пример модуля проведения документа начисления ЗП Процедура Обработка. Проведения(Отказ, Режим) Для Каждого Тек. Строка. Список Из Список Цикл // регистр Журнал. Расчета Движение = Движения. Журнал. Расчета. Добавить(); Движение. Сторно = Ложь; Движение. Регистратор=Ссылка; Движение. Вид. Расчета = Тек. Строка. Список. Вид. Расчета; Движение. Период. Действия. Начало = Тек. Строка. Список. Дата. Начала; Движение. Период. Действия. Конец = Тек. Строка. Список. Дата. Окончания; Движение. Базовый. Период. Начало = Начало. Дня(Тек. Строка. Список. Дата. Начала); Движение. Базовый. Период. Конец = Конец. Дня(Тек. Строка. Список. Дата. Окончания); Движение. Период. Регистрации = Период. Регистрации; Движение. Сотрудник = Тек. Строка. Список. Сотрудник; Движение. Результат = 0; Движение. Сумма = Тек. Строка. Список. Величина;

продолжение Если Движение. Вид. Расчета=Планы. Видов. Расчета. Виды. Расчетов. штра ф Тогда Движение. Результат=Тек. Строка. Список. Величина; Конец. Если; Если Движение. Вид. Расчета=Планы. Видов. Расчета. Виды. Расчетов. Больн ичный Тогда Движение. Результат=Тек. Строка. Список. Величина; Конец. Если; онец. Цикла; // записываем движения регистров (поле результат означивается только для тех ВР, //которые в документ введены готовым значением) Движения. Журнал. Расчета. Записать();

продолжение //получим список всех сотрудников, содержащихся в документе Запрос = Новый Запрос; Запрос. Текст= " |ВЫБРАТЬ РАЗЛИЧНЫЕ | Начисление. Зарплаты. Список. Сотрудник |ИЗ | Документ. Начисление. Зарплаты. Список | КАК Начисление. Зарплаты. Список | |ГДЕ | Начисление. Зарплаты. Список. Ссылка = &Текущий. Документ"; Запрос. Установить. Параметр("Текущий. Документ", ссылка); //сформируем список сотрудников Табл. Знач = Запрос. Выполнить(). Выгрузить(); Массив. Сотрудников = Табл. Знач. Выгрузить. Колонку("Сотрудник"); Список. Сотрудников = Новый Список. Значений;

продолжение Раcсчитать. Начисления(Движения. Журнал. Расчета, Планы. Видов. Расч ета. Виды. Расчетов. Оклад, Список. Сотрудников); Движения. Журнал. Расчета. Записать(, Истина); Раcсчитать. Начисления(Движения. Журнал. Расчета, Планы. Видов. Расчета. Виды. Расчетов. премия, Список. Сотрудников); Движения. Журнал. Расчета. Записать(, Истина);

продолжение Процедура Раcсчитать. Начисления(Набор. Движений, Выб. Вид. Расчета, Список. Сотрудников) Экспорт Если выб. Вид. Расчета = Планы. Видов. Расчета. Виды. Расчетов. Оклад Тогда Для каждого Движение из Набор. Движений Цикл Если Движение. Вид. Расчета = Планы. Видов. Расчета. Виды. Расчетов. Оклад Тогда Фактически. Отработано=Движение. получить. Данные. Графика(Вид. Пе риода. Регистра. Расчета. Фактический. Период. Действия); Отработано. Плану=Движение. Получить. Данные. Графика(Вид. Пер иода. Регистра. Расчета. Период. Действия); Движение. Результат=Движение. Сумма*Фактически. Отработано. З начение/Отработано. Плану. Значение; Конец. Если; Конец. Цикла; Конец. Если;

продолжение Если выб. Вид. Расчета = Планы. Видов. Расчета. Виды. Расчетов. премия Тогда Ресурсы=Новый Массив(1); Ресурсы="Журнал. Расчета. Результат"; Измерения=Новый Структура ("Сотрудник", "Журнал. Расчета. Сотрудник"); Для каждого Движение из Набор. Движений Цикл Если Движение. Вид. Расчета = Планы. Видов. Расчета. Виды. Расчетов. Премия Тогда База. Расчета=Движение. Получить. Базу(Ресурсы, Измерения); Движение. Результат=Движение. Сумма*База. Расчета. Результат/10 0; Конец. Если; Конец. Цикла; Конец. Если; Конец. Процедуры

Статьи по теме: