Расчет заработной платы. Сложные периодические расчеты Документ Начисление зарплаты

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

Теория

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

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

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

механизма вытеснения по периоду действия «:

Здесь мы видим что вид расчёта «Командировка» обладает протяжённостью во времени и действует с 10 по 20 апреля, «Командировка» указана как вытесняющий вид расчёта для вида расчета «Оклад». «Оклад» также обладает протяжённостью во времени и действует с 1 по 30 апреля. Так как «Командировка» указана как вытесняющий вид расчёта для вида расчета «Оклад»(имеет больший приоритет, чем оклад) и действует на периоде действия оклада, то происходит вытеснение оклада командировкой и формируется «Фактический период действия оклада».»Фактический период действия оклада» это период действия оклада после вытеснения командировкой, в нашем случае он состоит из 2 периодов — с 1 по 9 апреля и с 21 по 30 апреля и в сумме составляет 19 дней. Механизм вытеснения по периоду действия работает только для протяжённых во времени расчетов.

На рисунке выше графически показан принцип «механизма зависимости по базовому периоду «:

Допустим, в конце апреля 2017 мы хотим начислить сотруднику премию в размере 10% от оклада. В качестве базовых видов расчёта для премии указан оклад.

Но в качестве «базы» для расчета премии мы возьмём не весь месяц апрель, а только интервал с 10 по 20 апреля(11 дней). Рассчитаем базу для премии, оклад сотрудника составляет 60000 рублей, в месяце имеем 30 дней, дневной оклад = 60000/30 = 2000 руб. Далее 2000*11 = 22000 руб. База для расчета премии составляет 22000 рублей.

Рассчитаем премию: (22000/100)*10 = 2200 руб. Премия в размере 10% от оклада составляет 2200 рублей.

С регистром расчета тесно связан прикладной объект метаданных «План видов расчета».

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

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

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

Механизмы расчета в системе 1С Предприятие устроены таким образом, что сперва требуется сделать записи в регистр расчета и только после этого выполнить расчет на основе этих данных. К примеру, нельзя рассчитать премию на основе оклада пока этот самый оклад не записан в регистр расчета.

Практика

Рассмотрим подробнее регистры расчета на практике:

Шаг 1 .Начнём с плана видов расчета. План видов расчета необходимо создать перед созданием регистра расчета. План видов расчета создаём перед регистром расчёта потому, что перед созданием таблицы для хранения рассчитанных данных(т.е. регистра расчета) необходимо задать алгоритмы расчета этих данных(т.е. план видов расчета).

Создадим план видов расчета «Основные начисления». Сразу же перейдём на вкладку «Расчет». Здесь мы сразу же видим флаг «Использует период действия «, при установке данного флага все виды расчета входящие в данный план будут обладать протяжённостью во времени (например Оклад, Командировка), а также для данного плана видов расчета включается «механизма вытеснения по периоду действия «. Если флаг «Использует период действия» не установлен, то виды расчета не будут обладать протяжённостью во времени(например Премия, Штраф) и «механизма вытеснения по периоду действия» действовать не будет. Также на данной вкладке есть разделы «Зависимость от базы» и «Базовые планы видов расчета» — они служат для реализации «механизма зависимости по базовому периоду «, но об нём поговорим позже. Пока оставим «Зависимость от базы» в режиме «Не зависит».

Создадим предопределённый вид расчета «Оклад». На вкладке «Основное» всё просто. Задаём имя и код вида расчета.

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

На данной вкладке мы указываем виды расчета, которые будут вытеснять оклад по периоду действия(например Командировка).

Примечание : в «Вытесняющие» можно добавить виды расчета принадлежащие только данному плану видов расчета.

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

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

Шаг 3 .Также нам нужен объект в котором мы будем хранить Производственный календарь(рабочие и выходные дни). Для этих целей используем непериодический независимый регистр сведений.

Создадим непериодический независимый регистр сведений «Графики работы» с 2 измерениями «Дата» и «График» и ресурсом «Количество часов».

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

Шаг 4 .Создадим документ «Начисление зарплаты» со структурой реквизитов показанной ниже:

Реквизиты:

Оперативное проведение ставим в значение «Запретить» т.к. оно не имеет смысла для механизма периодических расчётов в 1С — ни премию, ни оклад, ни штраф мы никогда не начисляем в реальном времени.

Создадим форму документа с настройками по-умолчанию.

Шаг 5 . Наконец-то мы дошли и до создания регистров расчета.

Объект метаданных регистр расчета расположен в ветке «Регистры расчета» конфигуратора.

Создадим регистр расчета «Основные начисления». Настройки регистра расчета рассмотрим ниже:

1.В поле «План видов расчета» указываем ПВР «Основные начисления» созданный на шаге 1.

2.Ставим флаг «Период действия» в значение «Истина» т.к. ПВР, указанный на шаге 1 обладает протяжённостью во времени.

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


P.S. Если указать ПВР, обладающий протяжённостью во времени у РР с флагом «Период действия» в значении «Ложь», то данный ПВР будет работать как ПВР не обладающий протяжённостью во времени.

3.После установки флага «Период действия» в значение «Истина» у нас становятся доступны поля «График», «Значение графика», «Дата графика».

В поле «График» указываем регистр сведений «Графики работы», созданный на шаге 3.

В поле «Значение графика» указываем ресурс «КоличествоЧасов» регистра сведений «Графики работы».

В поле «Дата графика» указываем измерение «Дата» регистра сведений «Графики работы».

4.В поле «Периодичность» указываем значение «Месяц» это значит, что данные в регистр у нас будут заноситься ежемесячно.

Ниже представлена структура метаданных регистра:

Флаг «Базовое» у измерения влияет только на производительность, его можно и не проставлять, но если поставить, то поле «Сотрудник» будет проиндексировано.

Измерение «Сотрудник» — оно применяется в «механизме вытеснения по периоду действия » и «механизме зависимости по базовому периоду «.

Ресурс «Сумма» — туда запишется рассчитанная зарплата.

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

Реквизит «Параметр» будет хранить значение оклада.

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

В качестве регистратора указываем документ «Начисление зарплаты «, созданный на шаге 4.

Шаг 6 . Делаем движения по регистру расчета «Основные начисления».

Вернёмся к документу «Начисление зарплаты» созданному на шаге 4.

Опишем обработку проведения в модуле объекта документа:

Фрагмент кода обработки проведения документа

1С (Код)

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

Процедура ОбработкаПроведения(Отказ, РежимПроведения)

// регистр ОсновныеНачисления

Движения. ОсновныеНачисления. Записывать= Истина;

Движения. ОсновныеНачисления. Очистить() ;

ПериодРегистрации=НачалоМесяца(Дата) ;

Для Каждого ТекСтрокаОсновныеНачисленияИз ОсновныеНачисленияЦикл

Движение= Движения. ОсновныеНачисления. Добавить() ;

Движение. Сторно= Ложь;

Движение. ВидРасчета= ТекСтрокаОсновныеНачисления. ВидРасчета;

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

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

Движение. ПериодРегистрации = ПериодРегистрации;

Движение. Сотрудник= ТекСтрокаОсновныеНачисления. Сотрудник;

Движение. График= ТекСтрокаОсновныеНачисления. График;

Движение. Параметр= ТекСтрокаОсновныеНачисления. Размер;

КонецЦикла;

КонецПроцедуры

Создадим тестовый документ и проведём его:

Перейдём в «Движения документа»:

Видим, что период регистрации установился как начало месяца т.к. периодичность РР указана «Месяц». Так же видим, что заполнились все поля кроме суммы(ЗП ещё не рассчитана).

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

Создадим общий модуль «Расчет» со следующими флагами:

В данном общем модуле у нас и будет происходить сам расчёт.

Напишем в модуле «Расчет» экспортную функцию «Рассчитать начисления»:

Так как мы заполнили в настройках РР «Основные начисления» поля «График», «Значение графика», «Дата графика» у нас стала доступна виртуальная таблица регистра расчета ДанныеГрафика, в запросе к виртуальной таблице нас интересуют поля:

«КоличествоЧасовФактическийПериодДействия» — содержит рассчитанное на основании данных графика количество фактически отработанных часов

«КоличествоЧасовПериодДействия» — содержит рассчитанное на основании данных графика количество рабочих часов в периоде расчёта

Процедура расчета заработной платы

1С (Код)

Процедура РассчитатьНачисления(Регистратор, НаборЗаписей) Экспорт //Оклад Запрос=Новый Запрос; Запрос.Текст="ВЫБРАТЬ | ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.КоличествоЧасовФактическийПериодДействия, 0) КАК ЧасовФакт, | ОсновныеНачисленияДанныеГрафика.Параметр, | ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.КоличествоЧасовПериодДействия, 0) КАК ЧасовПлан, | ОсновныеНачисленияДанныеГрафика.НомерСтроки |ИЗ | РегистрРасчета.ОсновныеНачисления.ДанныеГрафика(| Регистратор = &Регистратор | И ВидРасчета = &ВидРасчетаОклад) КАК ОсновныеНачисленияДанныеГрафика"; Запрос.УстановитьПараметр("Регистратор", Регистратор); // передаём документ регистратор чтобы поиск выполнялся только по текущему документу Запрос.УстановитьПараметр("ВидРасчетаОклад", ПланыВидовРасчета.ОсновныеНачисления.Оклад); //устанавливаем вид расчёта оклад т.к. рассчитываем оклад Выборка=Запрос.Выполнить().Выбрать(); СтруктураПоиска=Новый Структура; СтруктураПоиска.Вставить("НомерСтроки",0); //создадим структуру для поиска данных для расчёта по номеру строки Для Каждого Запись Из НаборЗаписей Цикл //цикл по набору записей текущего документа СтруктураПоиска.НомерСтроки=Запись.НомерСтроки; //заполняем номер строки для поиска Если Выборка.НайтиСледующий(СтруктураПоиска) Тогда //ищем в выборке данные для расчёта по текущему номеру строки Запись.Сумма =?(Выборка.ЧасовПлан=0,0, Выборка.ЧасовФакт/Выборка.ЧасовПлан * Выборка.Параметр); //рассчитываем ЗП пропорционально отработанным дням, в Параметр - текущий оклад КонецЕсли; Выборка.Сбросить(); //сбросим выборку, нужно чтобы следующая запись набора записей делала поиск по выборке сначала КонецЦикла; НаборЗаписей.Записать(,Истина); //записываем рассчитанные записи в базу, передаём параметр Замещать = Истина КонецПроцедуры

//Оклад

Запрос=Новый Запрос;

Запрос. Текст="ВЫБРАТЬ

| ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.КоличествоЧасовФактическийПериодДействия, 0) КАК ЧасовФакт,

| ОсновныеНачисленияДанныеГрафика.Параметр,

| ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.КоличествоЧасовПериодДействия, 0) КАК ЧасовПлан,

| ОсновныеНачисленияДанныеГрафика.НомерСтроки

|ИЗ

| РегистрРасчета.ОсновныеНачисления.ДанныеГрафика(

| Регистратор = &Регистратор

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

Роль измерений при параметризации виртуальной таблицы базовых данных

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

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

Все перечисленные задачи решаются при помощи запросов к виртуальной таблице базовых данных. При этом параметры "Измерения основного регистра" и "Измерения базового регистра" будут для всех трех задач разными. В первом случае измерение одно - "Подразделение"; во втором - "Физлицо" и "Подразделение"; в третьем - "Организация" и "Физлицо".

Оптимизация получения базовых данных

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

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

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

Именно эту задачу и позволяет решить свойство Базовое измерения регистра расчета. Устанавливая это свойство нескольким измерениям, разработчик конфигурации тем самым создает индекс по всем отмеченным как "базовые" измерениям (более подробно - см. раздел "Индексы таблиц базы данных").

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

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

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

Но при этом важно помнить о порядке измерений регистра расчета...

О порядке измерений в регистре расчета

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

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

Если базовое измерение одно

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

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

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

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

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

Работа механизма сложных периодических расчетов обеспечивается двумя объектами прикладного решения:

План видов расчета и Регистр расчета.

План видов расчета используется для описания видов расчета и их взаимного влияния друг на друга. В прикладном решении может существовать произвольное количество планов видов расчета, в зависимости от реализуемой модели учета:

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

План видов расчета

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

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

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

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

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

Например, вид расчета Алименты может зависеть по базовому периоду от следующих видов расчета:

А вид расчета Оклад может вытесняться видом расчета Невыход:

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

Формы плана видов расчета
Для того чтобы пользователь мог просматривать и изменять данные, содержащиеся в плане видов расчета, система поддерживает несколько форм его представления. Система может автоматически генерировать все нужные формы; наряду с этим разработчик имеет возможность создать собственные формы, которые система будет использовать вместо форм по умолчанию:

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

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

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

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

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

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

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

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

Периодичность

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

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

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

Например, график времени, имеющий следующую структуру:

Перерасчеты
Регистр расчета может включать в себя специальные объекты - Перерасчеты:

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

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

Механизмы, реализуемые регистром расчета

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

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

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

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

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

Регистр расчета поддерживает два вида зависимости по базовому периоду:

  • зависимость по периоду действия;
  • зависимость по периоду регистрации.

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

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

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

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

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

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

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

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

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

Новый объект "План видов расчета" -- отдаленный аналог видов расчета в 7.7. Виды расчета являются объектами данных, а не метаданных. Могут быть предопределенные виды расчета.

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

Новый объект "Регистр расчета" -- отдаленный аналог журнала расчета в 7.7

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

Встроенный язык

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

Введены новые литералы и типы данных, например, литералы Неопределенно, Null, Истина и Ложь (тип данных "булево"). Тип "дата" включает в себя время.

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

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

При написании программных модулей применяется технология контекстной подсказки (аналог IntelliSense). Текстовый редактор программных модулей поддерживает группировки (свертку) синтаксических конструкций, а также описаний процедур и функций (в виде комментариев).

Функциональность внешней компоненты v7plus.dll включена в платформу в виде объектов "Почта", "Системная Информация", "Интернет Соединение", "FTP Соединение и т.д. Есть средства для работы с XML-документами, а также для последовательного чтения и записи больших текстовых файлов.

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

Структура

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

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

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

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

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

Например, вид расчета Алименты может зависеть по базовому периоду от таких видов расчета, как Оклад , ТарифДневной , ДоплатаПерсональная и т.д. А вид расчета Оклад может вытесняться видом расчета Невыход :

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

Формы плана видов расчета

Для того чтобы пользователь мог просматривать и изменять данные, содержащиеся в плане видов расчета, система поддерживает несколько форм его представления. Система может автоматически генерировать все нужные формы; наряду с этим разработчик имеет возможность создать собственные формы, которые система будет использовать вместо форм по умолчанию:

Форма списка

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

Читайте также: