Учебный курс: Подготовка на 1С:Специалист по платформе 1С:Предприятие 8.3
Задачи по расчетным механизмам – Введение
Данный курс предполагает наличие базовых знаний в области расчетных механизмов.
Для тех, кто впервые сталкивается с расчетными механизмами или хочет освежить какие-то моменты в своей памяти, рекомендуем прослушать курс Программирование в 1С – за 21 день (дни 17-19).
Кроме того, советуем предварительно прочитать статью: Что нужно знать о расчетных механизмах в «1С:Предприятие 8».
Задачи по расчетным механизмам – тема № 1:
Настройки плана видов расчетов, на которые нужно обратить внимание при решении аттестационного задания
В этом блоке разберем теорию, которая в дальнейшем потребуется для решения практических задач раздела.
При решении расчетных задач на аттестации требуется особое внимание уделить настройкам планов видов расчета и их архитектуре. Ведь при решении расчетных задач большую часть «работы» выполняет сама платформа, но правильный результат в основном зависит от корректных настроек и четкого понимания, как они работают.
План видов расчета (далее ПВР) определяет отдельную структуру данных, похожую на справочник, где пользователь в режиме «1С:Предприятие» может создавать неограниченное число элементов (видов расчета). Созданные виды расчета пользователь впоследствии может изменять и удалять из базы данных.
Чаще всего в задачах требуется создавать два ПВР: один с включенным периодом действия, а другой с выключенным (для разовых начислений). Но в некоторых задачах встречаются и исключения, например, требуется также ПВР для расчета удержаний. Почему нужна именно такая архитектура, будет рассмотрено далее.
Перейдем к описанию настроек ПВР. Многие его настройки не отличаются от аналогичных настроек в справочнике, поэтому мы не будем на них останавливаться, а подробно рассмотрим те, которые определяют расчетный функционал. Эти настройки располагаются на вкладке «Расчет»:
Рисунок 1 – Настройки плана видов расчета
К таким настройкам относятся Использует период действия и Зависимость от базы. Рассмотрим обе эти настройки.
Настройка «Использует период действия»
Данный флажок показывает, являются ли все виды расчета в этом плане расчета протяженными по времени. Для видов расчета с включенной настройкой возможно вытеснение по периоду действия, например, когда оклад вытесняется больничным за совпадающий интервал дат.
Данную настройку не нужно включать, если в ПВР используются разовые начисления, которые не являются протяженными по времени, например, это могут быть различные единовременные выплаты: квартальная премия, различные пособия, компенсации и др. В ПВР с включенным периодом действия нужно включать только виды расчета, для которых важно, в течение какого периода они действуют. Например, к таким видам расчета можно отнести оклад, больничный, отпуск, командировку, прогул и т.д.
Для разовых начислений следует создавать отдельный ПВР с отключенной настройкой по периоду действия.
На экзамене считается серьезной ошибкой, когда для разовых начислений/удержаний используется период действия, так как в этом случае неоптимально используются ресурсы системы. А именно – создается таблица с фактическим периодом действия (которая здесь совершенно не требуется). Кроме того, для записей регистра расчета будет задействован механизм вытеснения по периоду, что не имеет смысла для разовых начислений.
Далее на примере задач будут подробно рассмотрены механизмы вытеснения и формирование фактических периодов действия в соответствующей таблице.
Настройка «Зависимость от базы»
Рисунок 2 – Настройки плана видов расчета для получения базы
Эта настройка определяет, будет ли в видах расчета данного ПВР использоваться зависимость по базовому периоду. Если переключатель установлен в положение Не зависит, то виды расчета данного ПВР не смогут получать базу по всем видам расчета.
Следует отметить, что в качестве базы могут быть получены не только начисленные суммы, но и значения любых показателей, например, данные по отработанному времени. Эти данные можно получить запросом, используя виртуальные таблицы регистров расчета, которые мы подробно рассмотрим в следующих разделах курса. Довольно часто при решении задач применяется получение базы по различным ресурсам (не только по суммам начислений), поэтому без понимания этого механизма многие задачи правильно не решить.
Например, самый распространенный случай – это получение базы по отработанному времени, либо по времени отсутствия сотрудника на рабочем месте (больничный, отпуск, прогул).
Все эти подзадачи решаются добавлением в регистр расчета ресурса, в котором будет сохраняться время, например, в днях. В дальнейшем по этому ресурсу можно получить базу за определенный период. Это может быть число дней отпуска за текущий год, по которым для сотрудников установлен лимит, либо число отработанных дней в текущем месяце, по которым в дальнейшем будет рассчитана компенсация за обеды, либо число дней болезни для расчета компенсации за лекарства. В зависимости от специфики задач, может потребоваться получение базы и по другим ресурсам, но суть в этом случае не меняется.
Более подробно про регистры расчета и получение базы будет рассказано в разделе, посвященном настройкам регистра расчета, здесь рассмотрим только общие принципы:
Рисунок 3 – Структура виртуальной таблицы регистра расчета для получения базы по начисленным суммам (РезультатБаза) и дням (ДнейБаза)
На рис.3 приведен пример, когда в регистр расчета ОсновныеНачисления было добавлено два ресурса: Результат, в котором хранится результат расчета, и Дней для хранения числа отработанных дней в данном месяце. В результате с помощью виртуальной таблицы БазаОсновныеНачисления можно получить базу не только по начисленным суммам, но и отработанному времени. Такая структура регистра часто используется для расчета среднедневного заработка, так как в этом случае для расчета требуется сумма и число дней за указанный базовый период (например, за предыдущий месяц). Среднедневной заработок в этом случае будет равен РезультатБаза / ДнейБаза.
Важной особенностью является то, что любой вид расчета ПВР теоретически может зависеть по базовому периоду от любых других видов расчета, в том числе и из других ПВР. Поясним на примере, как это можно использовать на практике.
Например, по условию задачи для расчета больничного требуется рассчитать базу по окладу и премии за предыдущий год. Виды расчета Оклад и Больничный определены в ПВР ОсновныеНачисления, а Премия в ПВР ДополнительныеНачисления, так как она не использует период действия. В этом случае для ПВР ОсновныеНачисления, в котором определены виды расчета с периодом действия, определяем состав базовых ПВР следующим образом:
Рисунок 4 – Указание базовых планов видов расчета
Согласно этой настройке получается, что виды расчета из ПВР ОсновныеНачисления могут получать базу по видам расчета, которые определены в отмеченных нами ПВР ОсновныеНачисления и ДополнительныеНачисления.
В дальнейшем для каждого вида расчета можно выбирать в качестве базовых виды расчета из указанных ранее базовых ПВР:
Рисунок 5 – Настройка базы для вида расчета
Можно пояснить это в виде схемы:
Рисунок 6 – Получение базы по окладу и премии для вида расчета «Больничный»
В результате мы определили в настройках ПВР ОсновныеНачисления, что в качестве базовых можно использовать виды расчетов как из ПВР ОсновныеНачисления, так и из ПВР ДополнительныеНачисления. При этом на уровне самого вида расчета Больничный указано, что он может получать базу по видам расчета Оклад и Премия, причем из разных ПВР.
Есть еще одна важная настройка, которая определяет, за какой интервал времени будет браться база: за период регистрации либо за период действия:
Рисунок 7 – Настройки плана видов расчета для получения базы
Период регистрации – это период, который определяет, когда записи регистра расчета были отражены в системе (зарегистрированы). То есть в случае указания зависимости базы по периоду регистрации в расчетную базу попадут значения базовых видов расчета за интервал базового периода, который будет пересекаться с периодом регистрации записей по базовым видам расчета.
Такая настройка, как правило, используется при расчете удержаний, так как они рассчитываются с начисленных за расчетный период сумм вне зависимости от того, когда они действовали.
Например, при расчете налога, удерживаемого с заработной платы за март, будет учтена оплата больничного, начисленная в марте, даже если сотрудник реально болел в феврале.
В целом алгоритм определения базы по периоду регистрации зависит от того, имеют базовые виды расчета период действия или нет. Если это разовые начисления (без периода действия), то проверяется вхождение периода регистрации в базовый период, который всегда равен началу расчетного периода. Например, начисления с периодом регистрации 01.03 не будут включены в базу при базовом периоде равном 02.03 –31.03, но будут включены в базовый период 01.03 – 01.03.
Если базовые виды расчета имеют период действия (например оклад), то база по периоду регистрации определяется следующим образом: к периоду регистрации, который всегда равен началу расчетного периода (чаще всего месяцу), прибавляется месяц (периодичность регистра) и далее проверяется вхождение полученного периода в базовый период. При этом, если полученный интервал не включается в базу полностью, то алгоритм получения базы усложняется, но об этом будет сказано далее.
Рисунок 8 – Порядок включения видов расчета в базу по периоду регистрации
В данном примере в базу расчета налога за март попадают Оклад и Больничный, начисленные в марте, несмотря на то, что работник фактически болел в феврале. При этом Надбавка в базу расчета налога не включается, т.к. она начислена в апреле, и не важно, что начислена она за работу, выполненную в марте.
При этом у базовых начислений, которые имеют период действия, есть одна интересная особенность. База, полученная запросом, пересчитывается пропорционально вхождению периода регистрации (полный месяц) в базовый период. Например, если в базовый период включается только половина рабочих дней за месяц по данным графика, то база будет уменьшена на 50%. Однако это верно только при получении базы запросом, при объектной технике алгоритм такой же, как для базовых видов расчета без периода действия.
Вероятно это связано с тем, что механизм получения базы был в какой-то момент доработан и приближен в этом плане к получению базы по периоду действия, т.е. ее пересчету пропорционально графику работ. Почему это коснулось только получения базы запросом, конечно, загадка, можно предположить, что дело в непопулярности объектного способа получения базы, поэтому про него и забыли, так что вполне возможно, что в следующих версиях платформы это будет исправлено.
Период действия – это интервал, в течение которого длится запись регистра расчета. Он существует только для видов расчета, которые являются протяженными по времени, например Оклад, Командировка и др.
В случае зависимости базы по периоду действия ситуация осложняется тем, что период действия по продолжительности может не совпадать с расчетным периодом (например, месяцем). Он может даже относиться к другому расчетному периоду, например, когда больничный вводится задним числом (в марте за февраль). Под расчетным периодом в данном случае понимается период, ограниченный интервалом периодичности регистра расчета (по умолчанию месяц):
Рисунок 9 – Ввод начисления «задним» числом (больничного за прошлый месяц)
В случае зависимости по периоду действия в базу включаются записи регистров с фактическим периодом действия, который пересекается хотя бы частично с базовым периодом. Если у записи по базовому виду расчета нет периода действия, то для включения в базу будет анализироваться период регистрации этой записи. В этом случае алгоритм будет аналогичен рассмотренному ранее, где использовалась настройка зависимости по периоду регистрации.
Важное уточнение: анализироваться будут фактические периоды действия, т.е. периоды, полученные с учетом механизма вытеснения (записи из таблицы регистра с фактическими периодами действия). В случае частичного попадания фактического периода в базовый период база будет рассчитана пропорционально графику работы. Про графики работы будет подробно рассказано в блоке «Создание регистра сведений, описывающего график работы», посвященном созданию и заполнению регистра сведений с графиками работ.
Рассмотрим эту настройку на примере расчета премии, которая рассчитывается как процент от всех начислений за текущий месяц:
Рисунок 10 – Расчет премии за текущий месяц
Под периодом действия, как уже рассматривалось ранее, понимается период, за который начислен данный вид расчета. Например, на рис. 10 «Надбавка за август, начислена в сентябре», означает, что данная надбавка относится к периоду действия август, при этом период регистрации для нее сентябрь. Эта отступление сделано для того, чтобы лучше понять дальнейший текст.
Если проанализировать приведенную схему (рис. 10), то можно увидеть, что в базу расчета премии включен Оклад, у которого период действия полностью попадает в интервал базового периода расчета премии. Вид расчета Надбавка подходит по периоду действия и также включается в базу расчета премии, несмотря на то, что начислена она в другом месяце (период регистрации сентябрь). Командировка будет включена в базу расчета премии только частично, т.к. ее период действия не полностью попадает в базовый период. При этом сумма, начисленная за командировку, будет включена в базу расчета премии пропорционально графику работы.
Например, общая продолжительность командировки составляет 12 рабочих дней, из них на август пришлось 8 дней, всего начислено за командировку 24 000 руб., соответственно сумма, которая будет включена в расчет премии, составит:
База = 24 000 руб. * 8 дн. / 12 дн. = 16 000 руб.
Отпускные в расчет премии не включаются полностью, потому что не подходят по периоду действия (фактически сотрудник будет отдыхать в сентябре), хотя и совпадают с базовым периодом по периоду регистрации (начислены в августе).
У алгоритма определения базы также есть еще одна интересная особенность: в базу не включаются данные, которые находятся в будущем по отношению к рассчитываемой записи (по периоду регистрации).
Например, если для записи регистра расчета указан период регистрации 01.03, а базовый период 01.04 – 30.04, то в базу не будут включены записи с периодом регистрации 01.04, т.к. они находятся в будущем по отношению к текущей записи. В общем-то такой алгоритм определения базы логичен, рассчитываемая запись не должна включать в базу начисления, которых на момент расчета (период регистрации) еще просто нет.
Кроме того, такой подход можно объяснить тем, что рассчитанные данные в реальности закрываются от редактирования по окончании месяца (периода регистрации). Ведь заработная плата может быть уже выплачена, сформирована отчетность и т.д., и поэтому недопустимо вносить правки в уже закрытый месяц. По этой причине все правки вносятся в текущем расчетном периоде (период регистрации), с использованием корректирующих записей.
Итак, мы рассмотрели настройки плана видов расчетов, которые потребуются при решении аттестационных задач. Далее разберем следующий блок теории – настройки вида расчетов и стандартные табличные части.
Комментарии закрыты