Шаблоны |
Проводки формируются на основании шаблонов. Сама форма первичного документа ничего не "знает" об особенностях проведения и расчёта документа. Все функции обращения к начислениям/удержаниям за текущий и предыдущие расчётные периоды систематизированы и собраны в отдельном модуле. Они доступны из программы шаблона. Ниже приведен пример текста одного из шаблонов - расчёт премии с внебюджетной деятельности, для выполнения которого необходимо исключить из начисленной суммы переработку. '============================================== '= Акцент 6.0 '= Создан : 06/12/2002 13:28:59 '= Автор : admin '============================================== Sub RefillFromTemplate 'процедура вызывается по нажатию кнопки на форме "Заполнить". 'Все, у кого есть отметки дней (s) в табеле, кроме табелей совместителей. Dim ar : ar=agsIDArrayHaveSumTab("s", 0, op.Date) Dim ar1: ar1=DelRuks(ar, op.Date) 'исключить определённые должности по перечню. Call FillOpFromArrayFrom(op, ar1) 'заполнить документ начисления массивом. End Sub Sub RecalcFromTemplate(row) 'вызывается по нажатию кнопки на форме "Рассчитать". 'массив итогов графика сотрудника. Dim gra : gra=rowArOtmGrafic(op.Trans(1,row).AgFromID, 0, op.Date) 'массив итогов табеля сотрудника. Dim tba : tba=rowArOtmTabel(op.Trans(1,row).AgFromID, 0, op.Date) Dim stdCh : stdCh=159 'часы по стандартному 40-часовому графику. Dim mg : Set mg=CreateObject("vZPG.MonthGrafic") : mg.SetWorkarea workarea Dim ar : ar=mg.MonthGrafic(op.Date,0) 'grafID=0 -гр.стандартный 40-часовой : stdCh=mg.Hourses 'точное и правильное определение часов по ст.графику Dim entID : entID=tba(5) 'его начисление по табелю. Dim uID : uID=tba(6) 'расчёт по дням или по часам. Dim graCh : graCh=gra(2) 'часы по графику Dim tabCh : tabCh=tba(2) 'часы по табелю. Dim graDn : graDn=gra(1) Dim tabDn : tabDn=tba(1) Dim ftName : ftName="ЗП Оклад" Dim okl : okl=op.Trans(1,row).AgFromBind.FactValue(ftName, op.Date) 'нудная процедура определения переработки для разных методов основного начисления. Dim sum : sum=0 'заработок по табелю. If entID=122 Then 'з/п - оклад по графику, особый расчёт. If tabCh>=stdCh Then sum=okl 'если переработка - всё равно оклад. If tabCh< stdCh Then sum=okl/stdCh*tabCh 'часы Else If uID=1 Then If tabDn>=graDN Then sum=okl Else sum=okl*tabDn/graDn 'дни If uID=2 Then If tabCh>=graCh Then sum=okl*stdCh Else sum=okl*tabCh 'часы If uID=2 And okl>3 Then MsgBox "В табеле ошибка с видом начисления для "&_ op.Trans(1,row).AgFromBind.Name End If 'Коэффицент. Ставится вручную на основании приказа по предприятию о премировании Dim qu : qu=op.Trans(1,row).Qty : If qu>2 Then q=1 op.Trans(1,row).FQty=sum 'база для начисления. op.Trans(1,row).Sum=Round2(op.Trans(1,row).Qty*sum,2) op.Trans(1,row).Qty=qu If qu<>0 Then op.Trans(1,row).Price=op.Trans(1,row).Sum / qu End Sub Sub Template_OnApply(op) '{{ BEGIN_APPLY '--Число проводок-- op.TransCount = 1 '--Общие-- op.FormID = 14 op.SetFolder 8 op.Name = "З/плата с внеб.деят. С" '--Счета-- op.TransList(1).SetAccDb 16 op.TransList(1).SetAccCr 17 '--Корреспонденты-- op.TransList(1).SetAgTo 6 '--Объекты учета-- op.TransList(1).SetEnt 139 '}} END_APPLY End Sub Sub Template_OnEdit(op) '{{ BEGIN_EDIT '--Число проводок-- op.TransCount = 1 op.LockUI &H9 '}} END_EDIT End Sub Sub Template_OnRecalc(op) '{{ BEGIN_RECALC '--Суммы-- op.CalcSum "=T1" '}} END_RECALC End Sub
|
« Пред. | След. » |
---|