Схема расчёта заработной платы

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

Мы можем уверенно гарантировать, что если для расчёта значения некоторого н/у «Х» требуется предварительно вычислить значения некоторых других н/у, то будьте спокойны – все нужные значения будут своевременно вычислены, и к расчёту «Х» программа подойдёт во всеоружии.

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

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

Ещё раз о «Таблице входимости»

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

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

Поле «Коэф» определяет коэффициент умножения при расчёте.

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

К моменту расчёта заработной платы, в таблице «Расчёт» должны быть сформированы все необходимые записи (табели, приказы, отпуска, больничные, межрасчётные выплаты, наряды). То есть каждому сотруднику в базе данных соответствует некоторый набор записей таблицы «Расчёт».

§       Перво-наперво, команда «Рассчитать» формирует расчётный листок, то есть делает выборку записей из таблицы «Расчёт». Затем из выборки (и из самой таблицы тоже) удаляются все уже рассчитанные для сотрудника суммы (на случай, если вы делаете перерасчёт). Удаляются, однако, не все суммы. В выборке остаются записи, которые были введены документами (отпуска, больничные, приказы, межрасчётные выплаты, наряды).

§       Теперь к выборке добавляются записи с постоянными н/у сотрудника. Через поле «Расчёт_» эти записи связаны с таблицей «Постоянные н/у».

§       Просматривается таблица «Виды начислений/удержаний» и выбираются те виды н/у, которые рассчитываются для всех. На каждое такое н/у делается запись в таблице «Расчёт». Эти записи через поле «Расчёт_» не связаны ни с какими таблицами.

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

§       Из оставшихся записей берётся первая (произвольная), по связи «ВНУ-Расчёт» определяется вид н/у в таблице «Виды начислений/удержаний». Для этого вида н/у через поле «Виды н/у Входит в» проверяется – не зависит ли данное н/у от других н/у из нашего списка. Если зависит, то берётся следующая запись и также проверяется на зависимость. Если не зависит, то выполняется расчёт, запись метится как рассчитанная. И так далее до конца списка записей, а затем всё повторяется снова до тех пор, пока в списке не останется ни одной нерассчитанной записи.

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

Для всех н/у, сумма по которым определяется командой «СохранитьНУ», в таблице «Расчёт» будут сформированы новые записи. Поле связи «Расчёт» которых, будет указывать на запись, из которой была вызвана команда.

Если в результате расчёта по постоянному н/у или н/у, выполняемому для всех, получилась нулевая сумма, то запись эта будет удалена из таблицы, то есть не будет отображаться в расчётном листке.

§       По итогам расчёта в таблице «Расчёт» формируются записи об остатке и сумме к выдаче. То есть, если в таблице «Расчёт» появилась запись типа «Остаток» (она формируется всегда, даже если остаток нулевой), расчёты по сотруднику проводились. Состояние расчёта указывается в поле ШПЗ этой записи:

!     –  при расчёте возникли ошибки, расчёт не закончен.

ÿ
                –  расчёты по сотруднику закрыты.

+    –  после расчёта в расчётный листок были внесены изменения.

#    –  после внесения изменений сотрудник был закрыт для расчёта.

«пусто»   –  сотрудник не рассчитан.

Похожие записи

Добавить комментарий