+7(3012) 654-229
Главная
Карта сайта
Написать письмо

20 мая 2012 года, воскресенье



Производственный
календарь 2012




Программируемый
калькулятор RichCalc

 
Зарплата и кадры СиСофт Документация Алгоритмы расчета
Программное обеспечение, СИ-Софт: Зарплата и кадры 2010 Программное обеспечение, СИ-Софт: Алгоритмы расчета
обновлено 07.04.2012

Алгоритмы расчета

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

    Всю информацию по сотруднику можно условно разделить на две группы:

  • постоянная,
  • изменяем.
    Табельные данные - это информация по работнику, которая изменяется из месяца в месяц. И именно поэтому эти данные вынесены в отдельное меню для удобства ведения. К табельным данным, например, относятся: отработанные дни (часы), часы вечерние, ночные, %премии и т.д.




    Табельные данные + данные из карточки сотрудника, а также операторы и функции встроенного интерпретатора FoxPro + зарплатные функции используются для описания алгоритмов расчета начислений и удержаний по сотруднику. Бухгалтер заполняет табельные данные, а далее запускает на выполнение необходимый алгоритм расчета.
    Алгоритмы расчета рассположены в выпадающем списке головного меню "Расчет". Эти начисления и удержания могут расчитываться массово, по списку сотрудников (аванс, табель...) или индивидуально (отпускные, больничные...). В качестве примеров алгоритмов расчета рассмотрим некоторые из них.
* Строка, которая начинается символом "*" - это комментарий, который делает алгоритм более понятным.


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


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

    Завершение месяца - это алгоритм, который выполняется в момент выполнение процедуры Завершение месяца. Пример алгоритма "Завершение месяца"

Аванс

* Совсем простой алгоритм, из одной строки, причем этот алгоритм выполняется в цикле по всем сотрудникам, заданным при выполнении
* Формировать - функция, которая формирует начисление или удержание
* SR.AVANS - реквизит "аванс" из справочника сотрудников
* 349 - это вид оплаты "аванс через кассу" из справочника видов оплат
  =Формировать(SR.AVANS,349)

Расчет табеля (повременная, сдельная, ночные, вечерние, вредность, надбавки...)

* Подсчитываем количество часов и дней по рабочему календарю
  ЧасКал=РабЧасы(1)
  ДниКал=РабДни(1)

* Расчитываем повременную оплату, для этого оклад (SR.OKL) * отработанные часы (SR.T1) делим на часы по календарю и записываем в переменную Повременно и далее формируем 102 видом оплаты "повременно"
  Повременно=(SR.OKL*SR.T1)/ЧасКал
  =Формировать(Повременно,102,SR.T1,SR.T1/8)

* К сумме повременной оплаты прибавляем сумму сдельной оплаты (СумВОП(101)-сумма 101 вида оплаты) и заносим результат в переменную ПоврСдел
  ПоврСдел=Повременно+СумВоп(101)

* Формируем надбавку за условия труда (SR.UT - % за условия труда) 118 видом оплаты
  =Формировать(ПоврСдел*SR.UT/100,118)

* Формируем надбавку за вредность (SR.VREDN - % за вредность) 139 видом оплаты
  =Формировать(ПоврСдел*SR.VREDN/100,139)

* Формируем надбавку за напряженный график (SR.NAPR - % за напряженный график) 117 видом оплаты
  =Формировать(ПоврСдел*SR.NAPR/100,117)

* Формируем стимулирующую надбавку (SR.STIMULN - % надбавки) 150 видом оплаты, где 113 вид оплаты - это премия из ФМП
  =Формировать((Повременно+СумВоп(113))*SR.STIMULN/100,150)

* Формируем надбавку за бригадирство (SR.BRG - % бригадирских) 126 видом оплаты
  =Формировать(ПоврСдел*SR.BRG/100,126)

* Формируем за ночные часы (SR.NOHN - кол-во ночных часов) 119 видом оплаты
  =Формировать((SR.OKL*SR.NOHN/ЧасКал)*0.5,119,SR.NOHN)

* Формируем за праздничные часы (SR.PRAZD - кол-во праздничных часов) 114 видом оплаты
  =Формировать(SR.OKL*SR.PRAZD/ЧасКал,114,SR.PRAZD)

Премия текущего месяца

* Расчитываем сумму премии, для этого подсчитываем начисления, которые идут в расчет премии (признак "Расчитывать премию" из справочника видов оплат, умножаем на % премии (SR.T2 - % премии) делим на 100)
* Полученный результат записывает 104 видом оплаты "текущая премия"

  Премия=Сумма('Прем')*SR.T2/100
  =Формировать(Премия,104)

Премия предыдущего месяца

* Почти тоже самое, что в предыдущем алгоритме, но перед расчетом суммы, от которой считаем премию, устанавливаем дату предудущего месяца с помощью функции УстДат, где переменная Дата - текущая дата
* Полученный результат записывает 105 видом оплаты "премия"

  =УстДат(gomonth(Дата,-1))
  Премия=Сумма('Прем')*SR.T2/100
  =Формировать(Премия,105)

Отпускные

* Это более сложный алгоритм, разберем его подробно. Заметим, что этот алгоритм имеет два параметра:
* ДатНачОтп - дата начала отпуска

* КолДнейОтп - количество дней отпуска

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

ДатаВыхода=ДатНачОтп+КолДнейОтп
if Dow(ДатаВыхода)>5
   ДатаВыхода=ДатаВыхода+(8-Dow(ДатаВыхода))
endif

* Инициализируем переменные
Заработок=''
ДнейОтраб=''
ДнейРабоч=''
ДнейДляОтп=''

КолОтрДней=0
ЗарплИтого=0
ОтрДниИтого=0
РабДниИтого=0

* За предыдущие 12 месяцев подсчитываем:
*     заработок, количество отработанных дней,
*     рабочих дней по графику, дней по календарю отпуска
* Необходимо это для того, чтобы получить красивый результат, на самом деле, достаточно расчитать средне-дневной заработок за 12 месяцев от даты начала отпуска и умножить его на количество дней отпуска

for i=1 to 12
* Устанавливаем расчетную дату, все суммы ниже будут расчитаны за эту дату
  ДатаМес=gomonth(ДатНачОтп,-13+i)
  =УстДат(ДатаМес)

* Подсчитываем количество отработанных дней по видам оплат 101 (сдельная) и 102 (повременная)
  ОтрДни=ИнфОтрДни(101, 102)
  ОтрДниИтого=ОтрДниИтого+ОтрДни

  ДнейОтраб=ДнейОтраб+str(ОтрДни,3)+','

* Заработок по признаку "отпускные" за установленный месяц
  ЗарпМес=Сумма('Отп')
  ЗарплИтого=ЗарплИтого+ЗарпМес
  Заработок=Заработок+str(ЗарпМес,12,2)+','

* Количество рабочих дней по календарю
  РабДней=РабДни()
  ДнейРабоч=ДнейРабоч+str(РабДней,3)+','
  РабДниИтого=РабДниИтого+РабДней

* Подсчитываем количество дней по календарю отпуска
  if ОтрДни=РабДней
    ДниДляОтп=29.4
  else
    КолДнМес=DayMonthCount(ДатаМес)
    ДниКал=ДниКал(ДатаМес,ОтрДни,1,1)
    ДниДляОтп=(29.4/КолДнМес)*ДниКал
  endif
  ДнейДляОтп=ДнейДляОтп+str(ДниДляОтп,6,2)+','

  КолОтрДней=КолОтрДней+ДниДляОтп

endfor

* Сумма по признаку "отпускные" за весь период - 12 месяцев
=УстДат(gomonth(ДатНачОтп,-12),gomonth(ДатНачОтп,-1))
СумИтого=Сумма('Отп')

* Расчет средне-дневной суммы: сумму всего делим на количество дней по календарю отпуска
СреднеДневной=round(СумИтого/КолОтрДней,2)

* Полученный результат записывает 226 видом оплаты "отпускные"
=ФОРМИРОВАТЬ(СреднеДневной*КолДнейОтп,226,КолДнейОтп*8,КолДнейОтп)

* ---------------------------- конец расчета отпускных ----------------------------


В итоге получаем результат расчета в виде таблицы:

Основной расчет зарплаты

*******************************************************************
* Расчитываем поясной коэфициент (PARM.POIS - % поясного из параметров)
*******************************************************************
Пояс=Сумма('Пояс')*PARM.POIS/100
=ФОРМИРОВАТЬ(Пояс,239)

*******************************************************************
* Расчитываем надбавку за стаж
*******************************************************************
СтажЛет=КолЛет(SR.NEPR,Дата)
do case
  case СтажЛет<1
    Коэф=0
  case СтажЛет>=1 and СтажЛет<3
    Коэф=10
  case СтажЛет>3 and СтажЛет<=5
    Коэф=20
  case СтажЛет>5
    Коэф=30
endcase

Надбавка=Сумма('Надб')*Коэф/100
=ФОРМИРОВАТЬ(Надбавка,iif(Коэф=10,271,iif(Коэф=20,272,273)))

*******************************************************************
* Расчитываем подоходный налог
*******************************************************************
ТекМес=Month(Дата)
=УстДат(gomonth(Дата,-ТекМес+1),Дата)
* Сумма, облагаемая НДФЛ с начала года по расчетный месяц
СумОблНал=Сумма('Подох')

* Расчитываем скидку на себя и на иждивенцев в зависимости от дохода
do case
  case СумОблНал<=40000
    ВидНалС=iif(SR.SKIDSVO>4,SR.SKIDSVO,SR.SKIDSVO*4)
    ВидНалИ=SR.KOLIJD*10+SR.KOLIJDINV*10
  case СумОблНал>40000 and СумОблНал<=280000
    ВидНалС=iif(SR.SKIDSVO>4,SR.SKIDSVO,0)
    ВидНалИ=SR.KOLIJD*10+SR.KOLIJDINV*10
  case СумОблНал>280000
    ВидНалС=iif(SR.SKIDSVO>4,SR.SKIDSVO,0)
    ВидНалИ=0
endcase
* Если одинокий родитель - удваиваем скидку на иждивенцев
if SR.ONEPAR
   ВидНалИ=ВидНалИ*2
endif
ВидНал=ВидНалС+ВидНалИ

replace SR.SHN with ВидНал
replace SR.NALSVOY with ВидНалС
replace SR.NALIJD with ВидНалИ

* Необлагаемый минимум по материальной помощи и подаркам (берем из параметром организации)
МатНеоблМин=PARM.NSMAT
ПодНеоблМин=PARM.NSPOD

* Материальная помощь
СумМатер=Сумма('SPRVOP.MAT')
* Подарки
СумПодар=Сумма('SPRVOP.POD')

* Сумма, облагаемая для материальной помощи и подарков
СумОблМатер=max(СумМатер-МатНеоблМин,0)
СумОблПодар=max(СумПодар-ПодНеоблМин,0)

* Сумма уже удержанного НДФЛ
=УстДат(gomonth(Дата,-ТекМес+1),gomonth(Дата,-1))
СумУдерНал=СумВоп(302,251)

* Расчитываем сумму скидок на себя и на иждивенцев с начала года по расчетный месяц
СумУменНал=Архив('ARCHIV.SHN*PARM.BAZSKID')+SR.SHN*PARM.BAZSKID

* Сумма, облагаемая НДФЛ с начала года с учетом всех вычетов и скидок
СумОблНал=СумОблНал-СумМатер-СумПодар-СумУменНал+СумОблМатер+СумОблПодар

* НДФЛ за год (PARM.PODPROC - % НДФЛ из параметров)
НалогГод=СумОблНал*PARM.PODPROC/100

* НДФЛ за месяц, за минусом уже удержанного НДФЛ
НалогМес=round(max(НалогГод,0)+СумУдерНал,0)
if НалогМес<>0
  =ФОРМИРОВАТЬ(НалогМес,302)
endif

*******************************************************************
* Расчитываем алименты, SR.ALIM - % алиментов из карточки сотрудника
*******************************************************************
=УстДат(Дата)
if SR.ALIM>0
   Алименты=Round(Сумма('АлимП')*SR.ALIM/100,0)
   =ФОРМИРОВАТЬ(Алименты,306)
endif

*******************************************************************
* Расчитываем профсоюзный взнос, SR.PRF - признак "член профсоюза" из карточки сотрудника
*******************************************************************
if SR.PRF
  =ФОРМИРОВАТЬ(Сумма('ПрофП')*0.01,318)
endif

*******************************************************************
* Остаток за конторой (кто-то это использует, кто-то нет) PARM.KOP - признак "переносить копейки на следующий месяц" из параметров
*******************************************************************
if PARM.KOP=.t.
  СуммаНаРуки=max(0,СумНач()-СумУдер())
  СумОст=СуммаНаРуки-int(СуммаНаРуки)
  if СумОст>0
    =ФОРМИРОВАТЬ(СумОст,375)
  endif
endif

Завершение месяца

* Формируем копейки, переходящие на следующий месяц (кто-то это делает, кто-то нет)
  =Формировать(СумУдер(375),280)
* Формируем долги (это делают все)
  =Формировать(СумДолг(),325)
* Формируем сумму на руки, как сальдо с прошлого месяца (кто-то это делает, кто-то нет)
  =Формировать(СуммаНаРуки(),299)
* Обнуляем административные дни)
  replace SR.ADMDNI with 0

* ---------------------------- конец завершения месяца ----------------------------
© НПП "СиСофт" 2008-2012 год. Все права защищены. Хостинг ТаймВэб
Дизайн Сербинова Артема. Последнее обновление 01.05.2012
Rambler's Top100 Яндекс цитирования