Диплом: Автоматизация процесса учета отпусков сотрудников в ОАО "Авиадвигатель" г. Пермь

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
132
HolyCount=lnHolyCount, ;
dt_year_begin = ldDt_year_begin,;
dt_year_end = ldDt_year_end;
WHERE Doc.Cod_doc==lnCod_doc
ENDIF
lOk=This.docItem_save (lnCod_doc, lnCod_priv, Cur_servis_info.Cod_work,
Cur_servis_info.Cod_movi, oDocItem)
CATCH TO oEx
setstep()
lOk=.F.
ENDTRY
IF lOk
END TRANSACTION
ELSE
lnCod_doc=0
ROLLBACK
ENDIF
RETURN lnCod_doc
ENDPROC
Листинг 2 – Процедура расчёта неиспользованного отпуска
PROCEDURE P_rest_hol
Lparameters ldt_end As Date, lCompensation As Logical, lNames As Logical, lSprav As Logical,
lcAlias As String, lnCod_Work As Integer, lnCod_priv As Integer
ldt_end = Evl( ldt_end, Date() )
lnCod_Work = Evl( lnCod_Work, 0 )
lcAlias = Evl( lcAlias, 'Cur_rest_hol' )
If Vartype( ldt_end ) = 'T'
ldt_end = Ttod( ldt_end )
Endif
ldt_begin = Date( Year( ldt_end ), 1, 1 )
If Empty( lnCod_priv ) And lnCod_Work > 0
Select Work.Cod_priv ;
FROM Personal!Work ;
WHERE Work.cod_work = lnCod_Work ;
INTO Cursor Cur_Priv
lnCod_priv = Cur_Priv.Cod_priv
Endif
If This.t_open_dbc_definition_year( Year( ldt_begin ) ) <> 0
Return -2
Endif
TRY
This.p_get_count_work_days( ldt_begin )
This.p_abs_all( ldt_begin, ldt_end, lnCod_Work, lnCod_priv )
This.p_abs_cod_tab( "'302', '308', '206', '307'", 'Cur_Abs_For_Base' )
This.p_abs_cod_tab( "'200', '217', '214'", 'Cur_Used_Base' )
This.p_abs_cod_tab( "'210'", 'Cur_Used_Vred' )
This.p_get_holirest( lnCod_Work )
This.t_open_dbc_definition_year()
lcCod_Work = TRANSFORM( lnCod_Work )
133
lnWorkDays = this.p_get_count_work_days( ldt_begin )
lnWorkDaysInPeriod = this.p_get_count_work_days( ldt_begin, ldt_end )
lnDaysInYear = DATE( YEAR( ldt_begin ), 12, 31 ) - ldt_begin + 1
lnDaysInPeriod = ldt_end - ldt_begin + 1
SET DECIMALS TO 18
TEXT TO cExec TEXTMERGE NOSHOW
Select Work.Cod_work, ;
Movings.cod_movi, ;
Movings.Cod_post, ;
Post.Dop_otpusk, ;
Post.Dopotp_svr, ;
Post.Dopotp_dlg, ;
ROUND( <<lnDaysInYear>> / People.holycount, 13 ) AS Norma_Base, ;
IIF( Post.Dop_otpusk > 0, (<<lnWorkDays>> - ( People.holycount - 8 ) ) / Post.Dop_otpusk,
0.000000000000000000 ) AS Norma_Vred, ;
IIF( Post.Dopotp_svr > 0, <<lnDaysInYear>> / Post.Dopotp_svr, 0.000000000000000000 )
AS Norma_Nord, ;
IIF( {<<ldt_begin>>} < Movings.dt_order, Movings.dt_order, {<<ldt_begin>>} ) AS
Dt_begin_per, ;
IIF( {<<ldt_end>>} > Movings.dt_del, Movings.dt_del, {<<ldt_end>>} ) AS Dt_end_per, ;
IIF( Work.dt_work > {<<ldt_begin>>}, .T., .F. ) AS New_work, ;
Cur_Plan_Dop.Type_movi, ;
Movings.dt_order, ;
Movings.dt_del, ;
Work.dt_work, ;
Work.dt_end, ;
Post.Post_Short, ;
Post.kateg2, ;
People.cod_priv, ;
People.id_name, ;
People.n_tab, ;
People.holycount, ;
Sprpod.Podr, ;
SprPod.Name_adm, ;
000 AS Minus_Kol_Dn_For_Vred, ;
000 AS Minus_Kol_Dn_For_Nord ;
FROM ( Select Movings.Cod_work, ;
MIN( Movings.Type_movi ) As Type_movi ;
FROM Personal!Movings ;
WHERE Movings.dt_del >= {<<ldt_begin>>} AND Movings.dt_order <=
{<<ldt_end>>} ;
<<IIF( lcCod_work = '0', '', 'AND Movings.Cod_work = ' + lcCod_work )>> ;
GROUP By 1 ) AS Cur_Plan_Dop ;
INNER Join Personal!Movings On Movings.Cod_work = Cur_Plan_Dop.Cod_work And
Movings.Type_movi = Cur_Plan_Dop.Type_movi ;
INNER Join Personal!Work On Cur_Plan_Dop.Cod_work = Work.Cod_work ;
INNER JOIN Personal!Post ON Movings.cod_post = Post.Cod_post ;
INNER JOIN Personal!SprPod ON Post.cod_podr = SprPod.cod_podr ;
INNER JOIN Personal!People ON Work.Cod_priv = People.cod_priv ;
WHERE Movings.dt_del >= {<<ldt_begin>>} AND Movings.dt_order <= {<<ldt_end>>} AND;
Work.dt_end >= {<<ldt_begin>>} AND ;
Work.outercombinate = .F. And ;
134
Work.shtate = 'ШТАТ' ;
<<IIF( lcCod_work = '0', '', 'AND Work.Cod_work = ' + lcCod_work )>>;
INTO Cursor Cur_Plan_Dop READWRITE
this.h_execute ( cExec )
SELECT Cur_Plan_Dop.cod_work, ;
MIN( Cur_Plan_Dop.dt_begin_per ) AS dt_begin_per, ;
MAX( Cur_Plan_Dop.dt_end_per ) AS dt_end_per, ;
MAX( Cur_Plan_Dop.dopotp_dlg ) AS Plan_Dlg, ;
SUM( Cur_Plan_Dop.Dt_end_per - Cur_Plan_Dop.Dt_begin_per + 1 ) AS
Calendar_Days_Pred_For_Base, ;
AVG( Cur_Plan_Dop.Norma_Base ) AS Norma_Base ;
FROM Cur_Plan_Dop ;
GROUP BY 1 ;
INTO CURSOR Cur_Plan_Hol
SELECT( 'Cur_Plan_Dop' )
SCAN FOR Norma_Vred > 0
SELECT SUM( Cur_Abs_Tmp.Kol_dn_work ) AS kol_dn ;
FROM Cur_Abs_Tmp ;
WHERE Cur_Abs_Tmp.Cod_tab IN ( '121', '200', '201', '202', '203', '204', '220', '221', '206', '207',
'208', '300', '302', '308', '213', '327', '317', '307', '217' ) AND ;
Cur_Abs_Tmp.dt_begin >= Cur_Plan_Dop.Dt_begin_per AND Cur_Abs_Tmp.dt_end <=
Cur_Plan_Dop.Dt_end_per AND ;
Cur_Abs_Tmp.Cod_Work = Cur_Plan_Dop.Cod_Work ;
INTO CURSOR Cur_Minus_Kol_Dn_For_Vred
IF RECCOUNT( 'Cur_Minus_Kol_Dn_For_Vred' ) > 0
IF NOT ISNULL( Cur_Minus_Kol_Dn_For_Vred.kol_dn )
REPLACE Minus_Kol_Dn_For_Vred WITH
Cur_Minus_Kol_Dn_For_Vred.kol_dn IN 'Cur_Plan_Dop'
ENDIF
ENDIF
ENDSCAN
IF USED( 'Cur_Minus_Kol_Dn_For_Vred' )
USE IN Cur_Minus_Kol_Dn_For_Vred
ENDIF
SELECT Cur_Plan_Dop.Cod_work, ;
AVG( Cur_Plan_Dop.Norma_Vred ) AS Norma_Vred, ;
SUM( this.p_get_count_work_days( Cur_Plan_Dop.Dt_begin_per,
Cur_Plan_Dop.Dt_end_per ) ) AS Work_Days_Pred_For_Vred, ;
SUM( Cur_Plan_Dop.Minus_Kol_Dn_For_Vred ) AS kol_dn ;
FROM Cur_Plan_Dop ;
WHERE Cur_Plan_Dop.Norma_Vred > 0 ;
GROUP BY 1 ;
INTO CURSOR Cur_Plan_Vred
SELECT( 'Cur_Plan_Dop' )
SCAN FOR Norma_Nord > 0
SELECT SUM( Cur_Abs_Tmp.Kol_dn ) AS kol_dn ;
FROM Cur_Abs_Tmp ;
WHERE Cur_Abs_Tmp.Cod_tab IN ( '302', '308', '206', '307' ) AND ;
Cur_Abs_Tmp.dt_begin >= Cur_Plan_Dop.Dt_begin_per AND Cur_Abs_Tmp.dt_end
<= Cur_Plan_Dop.Dt_end_per AND ;
Cur_Abs_Tmp.Cod_Work = Cur_Plan_Dop.Cod_Work ;
INTO CURSOR Cur_Minus_Kol_Dn_For_Nord
135
IF RECCOUNT( 'Cur_Minus_Kol_Dn_For_Nord' ) > 0
IF NOT ISNULL( Cur_Minus_Kol_Dn_For_Nord.kol_dn )
REPLACE Minus_Kol_Dn_For_Nord WITH
Cur_Minus_Kol_Dn_For_Nord.kol_dn IN 'Cur_Plan_Dop'
ENDIF
ENDIF
ENDSCAN
IF USED( 'Cur_Minus_Kol_Dn_For_Nord' )
USE IN Cur_Minus_Kol_Dn_For_Nord
ENDIF
SELECT Cur_Plan_Dop.Cod_work, ;
AVG( Cur_Plan_Dop.Norma_Nord ) AS Norma_Nord, ;
SUM( Cur_Plan_Dop.Dt_end_per - Cur_Plan_Dop.Dt_begin_per + 1 ) AS
Calendar_Days_Pred_For_Nord, ;
SUM( Cur_Plan_Dop.Minus_Kol_Dn_For_Nord ) AS kol_dn ;
FROM Cur_Plan_Dop ;
WHERE Cur_Plan_Dop.Norma_Nord > 0 ;
GROUP BY 1 ;
INTO CURSOR Cur_Plan_Nord
SELECT Cur_Plan_Hol.*, ;
IIF( Cur_Plan_Hol.Calendar_Days_Pred_For_Base > lnDaysInPeriod,
lnDaysInPeriod, Cur_Plan_Hol.Calendar_Days_Pred_For_Base ) AS Calendar_Days_For_Base,
;
NVL( Cur_Plan_Vred.Norma_Vred, 0.000000000000000000 ) AS Norma_Vred, ;
NVL( Cur_Plan_Vred.kol_dn, 000 ) AS kol_dn_abs_for_vred, ;
NVL( IIF( Cur_Plan_Vred.Work_Days_Pred_For_Vred > lnWorkDaysInPeriod,
lnWorkDaysInPeriod, Cur_Plan_Vred.Work_Days_Pred_For_Vred ), 000 ) AS
Work_Days_For_Vred, ;
NVL( Cur_Plan_Nord.Norma_Nord, 0.000000000000000000 ) AS Norma_Nord, ;
NVL( Cur_Plan_Nord.kol_dn, 000 ) AS kol_dn_abs_for_nord, ;
NVL( IIF( Cur_Plan_Nord.Calendar_Days_Pred_For_Nord > lnDaysInPeriod,
lnDaysInPeriod, Cur_Plan_Nord.Calendar_Days_Pred_For_Nord ), 000 ) AS
Calendar_Days_For_Nord ; FROM Cur_Plan_Hol ;
LEFT JOIN Cur_Plan_Vred ON Cur_Plan_Hol.Cod_work = Cur_Plan_Vred.cod_work ;
LEFT JOIN Cur_plan_Nord ON Cur_Plan_Hol.Cod_work = Cur_Plan_Nord.cod_work ;
INTO CURSOR Cur_Plan_Hol
USE IN Cur_Plan_Vred
USE IN Cur_plan_Nord
SELECT Cur_Plan_Hol.*, ;
IIF( Cur_Plan_Hol.Work_Days_For_Vred > 0, Cur_Plan_Hol.Work_Days_For_Vred -
Cur_Plan_Hol.kol_dn_abs_for_vred, 000 ) AS Days_Vred, ;
IIF( Cur_Plan_Hol.Calendar_Days_For_Nord > 0, Cur_Plan_Hol.Calendar_Days_For_Nord
- Cur_Plan_Hol.kol_dn_abs_for_nord, 000 ) AS Days_Nord, ;
Cur_Plan_Hol.Calendar_Days_For_Base - NVL( Cur_Abs_For_Base.kol_dn, 000 ) AS
Days_Base, ;
NVL( Cur_Abs_For_Base.kol_dn, 000 ) AS kol_dn_abs_for_base ;
FROM Cur_Plan_Hol ;
LEFT JOIN Cur_Abs_For_Base ON Cur_Plan_Hol.cod_work = Cur_Abs_For_Base.cod_work ;
INTO CURSOR Cur_Plan_Hol
USE IN Cur_Abs_For_Base
SELECT Cur_Plan_Hol.Cod_work, ;
Cur_Plan_Dop.Cod_priv, ;
136
Cur_Plan_Dop.cod_movi, ;
Cur_Plan_Dop.cod_post, ;
Cur_Plan_Dop.id_name, ;
Cur_Plan_Dop.n_tab, ;
Cur_Plan_Dop.Post_Short, ;
Cur_Plan_Dop.kateg2, ;
Cur_Plan_Dop.Type_Movi, ;
Cur_Plan_Dop.dt_work, ;
Cur_Plan_Dop.Podr, ;
Cur_Plan_Dop.Name_adm, ;
lnWorkDays - ( Cur_Plan_Dop.holycount - 8 ) AS WorkDaysInYear, ;
lnDaysInYear AS DaysInYear, ;
Cur_Plan_Dop.Dopotp_dlg, ;
IIF( Cur_Plan_Hol.Norma_Vred > 0, ROUND( ( lnWorkDays - ( Cur_Plan_Dop.holycount -
8 ) ) / Cur_Plan_Hol.Norma_Vred, 0 ), 00 ) AS Dop_otpusk, ;
IIF( Cur_Plan_Hol.Norma_Nord > 0, ROUND( lnDaysInYear / Cur_Plan_Hol.Norma_Nord,
0 ), 00 ) AS Dopotp_svr, ;
Cur_Plan_Hol.kol_dn_abs_for_vred, ;
Cur_Plan_Hol.kol_dn_abs_for_base, ;
Cur_Plan_Hol.Calendar_Days_For_Base, ;
Cur_Plan_Dop.holycount, ;
Cur_Plan_Dop.dt_end, ;
Cur_Plan_Hol.dt_begin_per, ;
Cur_Plan_Hol.dt_end_per, ;
Cur_Plan_Dop.New_Work, ;
Cur_Plan_Hol.Plan_Dlg, ;
Cur_Plan_Hol.Work_Days_For_Vred, ;
Cur_Plan_Hol.Days_Vred, ;
Cur_Plan_Hol.Days_Base, ;
Cur_Plan_Hol.Days_Nord, ;
ROUND( Cur_Plan_Hol.Days_Base / Cur_Plan_Hol.Norma_Base, 2 ) AS Plan_Base, ;
IIF( Cur_Plan_Hol.Norma_Vred > 0, ROUND( Cur_Plan_Hol.Days_Vred /
Cur_Plan_Hol.Norma_Vred, 2 ), 00.00 ) AS Plan_Vred, ;
IIF( Cur_Plan_Hol.Norma_Nord > 0, ROUND( Cur_Plan_Hol.Days_Nord /
Cur_Plan_Hol.Norma_Nord, 2 ), 00.00 ) AS Plan_Nord ;
FROM Cur_Plan_Hol;
INNER JOIN Cur_Plan_Dop ON Cur_Plan_Hol.cod_work = Cur_Plan_Dop.cod_work AND ;
Cur_Plan_Hol.dt_end_per = Cur_Plan_Dop.dt_end_per ;
ORDER BY Cur_Plan_Hol.Cod_work ;
INTO CURSOR Cur_Plan_WorkPlace
USE IN Cur_Plan_Dop
USE IN Cur_Plan_Hol
USE IN Cur_Calendar
Select Cur_Plan_WorkPlace.* ,;
IIF( Cur_Plan_WorkPlace.dt_end < {01.01.3000}, 'УВОЛЕН ' + Dtoc(
Cur_Plan_WorkPlace.dt_end ), ' ' ) As Act, ;
Nvl( Abs( Cur_Holirest.DopMoney ), 0000 ) As DopMoney, ;
NVL( Cur_Holirest.BaseRest, 0000 ) + Nvl( Cur_Holirest.DopRest, 0000 ) + Nvl(
Cur_Holirest.NordRest, 0000 ) As Rest_Base, ;
NVL( Cur_Holirest.Ost_Base, 0000 ) As Ost_Base, ;
Cur_Plan_WorkPlace.Plan_Base + Cur_Plan_WorkPlace.Plan_Dlg +
Cur_Plan_WorkPlace.Plan_Nord As Base, ;
137
IIF( ldt_end - Cur_Plan_WorkPlace.dt_work <= 182.5, 000,
Cur_Plan_WorkPlace.Plan_Base + Cur_Plan_WorkPlace.Plan_Dlg +
Cur_Plan_WorkPlace.Plan_Nord ) AS T_Base, ;
NVL( Cur_Used_Base.Kol_dn, 0000 ) As Used_Base, ;
;
NVL( Cur_Holirest.VredRest, 0000 ) As Rest_Vred, ;
NVL( Cur_Holirest.Ost_Vred, 0000 ) As Ost_Vred, ;
Cur_Plan_WorkPlace.Plan_Vred As Vred, ;
NVL( Cur_Used_Vred.Kol_dn, 0000 ) As Used_Vred, ;
;
NVL( Cur_Holirest.Nord_New, 0000 ) As Nord, ;
NVL( Cur_Holirest.Status, 2 ) As Status, ;
.F. As Modified ;
FROM Cur_Plan_WorkPlace ;
LEFT Join Cur_Used_Base On Cur_Plan_WorkPlace.cod_work =
Cur_Used_Base.cod_work ;
LEFT Join Cur_Used_Vred On Cur_Plan_WorkPlace.cod_work =
Cur_Used_Vred.cod_work ;
;
LEFT Join Cur_Holirest On Cur_Plan_WorkPlace.cod_work = Cur_Holirest.cod_work ;
INTO Cursor cur_rest_hol
USE IN Cur_Plan_WorkPlace
USE IN Cur_Used_Base
USE IN Cur_Used_Vred
USE IN Cur_Holirest
USE IN Cur_Abs_All
USE IN Cur_Abs_Tmp
Select Cur_rest_hol.*, ;
Not_Used_Base + Not_Used_Vred AS Not_Used_ALL, ;
Cast( '' As m ) As Info ;
FROM( Select cur_rest_hol.*, ;
cur_rest_hol.Rest_Base + cur_rest_hol.Base + cur_rest_hol.Nord - cur_rest_hol.DopMoney
- cur_rest_hol.Used_Base As Not_Used_Base, ;
cur_rest_hol.T_Base + cur_rest_hol.Nord - cur_rest_hol.DopMoney -
cur_rest_hol.Used_Base As T_Not_Used_Base, ;
cur_rest_hol.Rest_Vred + cur_rest_hol.Vred - cur_rest_hol.Used_Vred As Not_Used_Vred,
;
cur_rest_hol.Ost_Vred + cur_rest_hol.Vred - cur_rest_hol.Used_Vred As
T_Not_Used_Vred ;
FROM cur_rest_hol ) AS Cur_rest_hol ;
INTO Cursor cur_rest_hol Readwrite
If lSprav
ldt_Close_Tabel = This.t_close_period()
If Vartype( ldt_Close_Tabel ) = 'T'
ldt_Close_Tabel = Ttod( ldt_Close_Tabel )
Endif
TEXT TO cMess NOSHOW
РАСЧЁТ ОСТАТКОВ ОТПУСКОВ
ДЛЯ КОМПЕНСАЦИИ
Начало периода = <<Cur_rest_hol.Dt_begin_per>>
Конец периода = <<Cur_rest_hol.Dt_end_per>> (<<ICASE( Cur_rest_hol.Dt_end_per =
ldt_Close_Tabel AND Cur_rest_hol.Dt_end_per = ldt_end , 'последний закрытый табельный
138
период', Cur_rest_hol.Dt_end_per < ldt_end , 'дата увольнения', 'дата введённая
пользователем' )>>)
1. РАСЧЁТ ОТПУСКА ЗА ПЕРИОД <<YEAR( Cur_rest_hol.Dt_begin_per )>> ГОДА
1.1 РАСЧЁТ ОСНОВНОГО ОТПУСКА
Календарных дней в периоде = <<Cur_rest_hol.Calendar_Days_For_Base>>
дней
Неявки рассчитываются по кодам табельного учёта 206, 302, 307 учитывается
только свыше 14 дней за период, 308
Стаж работы за период, дающий право на основной оплачиваемый отпуск:
<<Cur_rest_hol.Calendar_Days_For_Base>> - <<Cur_rest_hol.kol_dn_abs_for_base>>
(неявки) = <<Cur_rest_hol.Days_Base>> дней
Заработано основного отпуска за период: <<Cur_rest_hol.Days_Base>> (стаж
за период) / ( <<Cur_rest_hol.DaysInYear>> / <<Cur_rest_hol.holycount>> (норматив отпуска)
) = <<Cur_rest_hol.Plan_Base>> дней
Заработано дополнительного отпуска за ненормированный рабочий день =
<<Cur_rest_hol.Plan_dlg>> дней
Заработано дополнительного отпуска за работу на севере (норматив) =
<<Cur_rest_hol.Days_Nord>> (стаж за период) / ( <<Cur_rest_hol.DaysInYear>> /
<<Cur_rest_hol.Dopotp_svr>> (норматив отпуска) ) = <<Cur_rest_hol.Plan_Nord>> дней
Заработано дополнительного отпуска за командировку на севере =
<<Cur_rest_hol.Nord>> дней
ИТОГО ЗАРАБОТАНО ОСНОВНОГО: <<Cur_rest_hol.Plan_Base>>
(заработано основного отпуска) + <<Cur_rest_hol.Plan_dlg>> (заработано за
ненормированный рабочий день) + <<Cur_rest_hol.Plan_Nord>> (заработано за север) +
<<Cur_rest_hol.Nord>> (заработано за командировку на севере) = <<Cur_rest_hol.Base +
Cur_rest_hol.Nord>> дней
Использовано = <<Cur_rest_hol.Used_Base>> дней
Компенсировано денежными средствами = <<Cur_rest_hol.DopMoney>> дней
ВСЕГО ИСПОЛЬЗОВАНО ОСНОВНОГО ОТПУСКА ЗА ПЕРИОД =
<<Cur_rest_hol.Used_Base + Cur_rest_hol.DopMoney>> дней
1.2 РАСЧЁТ ДОПОЛНИТЕЛЬНОГО ОТПУСКА ЗА ВРЕДНЫЕ УСЛОВИЯ ТРУДА
Рабочих дней в периоде = <<Cur_rest_hol.Work_Days_For_Vred>> дней
Неявки рассчитываются по кодам табельного учёта 121, 200, 201, 202, 203,
204, 206, 207, 208, 213, 217, 220, 221, 300, 302, 307, 308, 317, 327
Стаж работы за период, дающий право на дополнительные дни к отпуску:
<<Cur_rest_hol.Work_Days_For_Vred>> - <<Cur_rest_hol.kol_dn_abs_for_vred>> (неявки) =
<<Cur_rest_hol.Days_Vred>> дней
Заработано дней за работу во вредных условиях труда за период:
<<Cur_rest_hol.Days_Vred>> (стаж за период) / ( <<Cur_rest_hol.WorkDaysInYear>> /
<<Cur_rest_hol.Dop_otpusk>> (норматив отпуска) ) = <<Cur_rest_hol.Plan_Vred>> дней
139
ВСЕГО ИСПОЛЬЗОВАНО ОТПУСКА ЗА РАБОТУ ВО ВРЕДНЫХ
УСЛОВИЯХ ТРУДА ЗА ПЕРИОД = <<Cur_rest_hol.Used_Vred>> дней
2. РАСЧЁТ ОСТАТКА НЕИСПОЛЬЗОВАННОГО ОТПУСКА ЗА ПРОШЛЫЕ ПЕРИОДЫ
Остаток основного отпуска на начало года = <<Cur_rest_hol.Rest_Base>> дней
Остаток дополнительного отпуска за работу во вредных условиях труда на начало
года = <<Cur_rest_hol.Rest_Vred>> дней
3. РАСЧЁТ ПОЛНОГО ОСТАТКА ОТПУСКА
Остаток основного отпуска: <<Cur_rest_hol.Rest_Base>> (остаток на начало
периода) + <<Cur_rest_hol.Base + Cur_rest_hol.Nord>> (заработано за период) -
<<Cur_rest_hol.Used_Base + Cur_rest_hol.DopMoney>> (использовано за период) =
<<Cur_rest_hol.Not_Used_Base>> дней
Остаток отпуска за вредность: <<Cur_rest_hol.Rest_Vred>> (остаток на начало
периода) + <<Cur_rest_hol.Plan_Vred>> (заработано за период) -
<<Cur_rest_hol.Used_Vred>> (использовано за период) = <<Cur_rest_hol.Not_Used_Vred>>
дней
ВСЕГО: <<Cur_rest_hol.Not_Used_Base>> + <<Cur_rest_hol.Not_Used_Vred>> =
<<Cur_rest_hol.Not_Used_Base + Cur_rest_hol.Not_Used_Vred>> (<<CEILING(
Cur_rest_hol.Not_Used_ALL )>>) дней.
*Округление заработанного отпуска производится в пользу работника
ENDTEXT
Scan
Replace Info With Textmerge( cMess ) In 'Cur_rest_hol'
Endscan
Endif
If lNames
Select cur_rest_hol.*, ;
RTRIM( Names.Surname ) + ' ' + Rtrim( Names.PeopleName ) + ' ' + Rtrim(
Names.Patronymic ) As fio ;
FROM cur_rest_hol ;
INNER Join Personal!Names On cur_rest_hol.id_name = Names.id_name ;
ORDER By podr, fio, n_tab ;
INTO Cursor cur_rest_hol
USE IN Names
Endif
Select * From cur_rest_hol Into Cursor ( lcAlias ) Readwrite
lnOk = 0
Catch To oEx
setstep()
lnOk = -3
Endtry
Return lnOk
ENDPROC
Листинг 3 – Программный код определения внешнего вида и поведения
140
иерархического меню
DEFINE PAD _47r0y8dje OF _MSYSMENU PROMPT "Картотека" COLOR SCHEME 3
DEFINE PAD _47r0y8djf OF _MSYSMENU PROMPT "Отпуск" COLOR SCHEME 3 ;
SKIP FOR ICASE( VARTYPE( gnPrava ) = 'N', gnPrava > 2 )
ON PAD _47r0y8dje OF _MSYSMENU ACTIVATE POPUP картотека
ON PAD _47r0y8djf OF _MSYSMENU ACTIVATE POPUP отпуск
DEFINE POPUP картотека MARGIN RELATIVE SHADOW COLOR SCHEME 4
DEFINE BAR 1 OF картотека PROMPT "Алфавитная"
DEFINE BAR 2 OF картотека PROMPT "\-"
DEFINE BAR 3 OF картотека PROMPT "Личная карточка"
DEFINE BAR 4 OF картотека PROMPT "Карточка работника"
DEFINE BAR 5 OF картотека PROMPT "Карточка отпусков и прочих неявок"
ON SELECTION BAR 1 OF картотека do h_ree_people in personal3\menu\menu_personal.mpr
ON SELECTION BAR 3 OF картотека DO Do_Card IN personal3\menu\menu_personal.mpr
WITH 'kart_pensioner'
ON SELECTION BAR 4 OF картотека DO Do_Card IN personal3\menu\menu_personal.mpr
WITH "worker_card"
ON SELECTION BAR 5 OF картотека DO Do_Card IN personal3\menu\menu_personal.mpr
WITH "h_kart_people"
DEFINE POPUP отпуск MARGIN RELATIVE SHADOW COLOR SCHEME 4
DEFINE BAR 1 OF отпуск PROMPT "Регистрация распоряжения"
DEFINE BAR 2 OF отпуск PROMPT "Регистрация распоряжения на денежную
компенсацию отпуска"
DEFINE BAR 3 OF отпуск PROMPT "Утверждение списков на отпуск"
DEFINE BAR 4 OF отпуск PROMPT "Распоряжение на отпуск создать"
DEFINE BAR 5 OF отпуск PROMPT "Распоряжение на отпуск коллективное создать"
DEFINE BAR 6 OF отпуск PROMPT "Распоряжение на отзыв из отпуска"
DEFINE BAR 7 OF отпуск PROMPT "Реестр остатков отпусков"
ON SELECTION BAR 1 OF отпуск do tool_seek_shtrih in personal3\menu\menu_personal.mpr
ON SELECTION BAR 2 OF отпуск DO Compens_Nonorm in
personal3\menu\menu_personal.mpr
ON SELECTION BAR 3 OF отпуск do otpusk_peoplelist in personal3\menu\menu_personal.mpr
ON SELECTION BAR 4 OF отпуск do H_new_order in personal3\menu\menu_personal.mpr
ON SELECTION BAR 5 OF отпуск do H_new_order_meny in
personal3\menu\menu_personal.mpr
ON SELECTION BAR 6 OF отпуск do H_response_holiday in
personal3\menu\menu_personal.mpr
ON SELECTION BAR 7 OF отпуск do h_ree_rest_holiday in
personal3\menu\menu_personal.mpr
* * Cleanup Code & Procedures
Procedure otpusk_peoplelist
Do Form personal3\forms\tab_ree_otpusk_ok With Year(Date())
Endproc
Procedure H_Kart_people
Do Form personal3\forms\H_Kart_people.scx With 0
Endproc
Procedure Kard_work
Do Form personal3\forms\worker_card.scx With 0
Endproc
Procedure tool_seek_shtrih
Do Form personal3\forms\tool_seek_shtrih.scx
141
Endproc
Procedure H_ree_people
Do Form personal3\forms\h_ree_people_tree.scx
Endproc
Procedure H_response_holiday
Do Form personal3\forms\h_response_holiday_new.scx
Endproc
Procedure P_Priv_kart
Do Form personal3\forms\Kart_pensioner.scx With 0, .T., .T.
Endproc
Procedure H_new_order
Do Form personal3\forms\h_kart_doc.scx
Endproc
Procedure H_new_order_meny
Do Form personal3\forms\h_ree_holiday.scx
Endproc
Procedure h_ree_rest_holiday
Do Form personal3\forms\h_ree_rest_holiday.scx
Endproc
Procedure Compens_Nonorm
Do Form personal3\forms\h_kart_money_compensation_no_norm.scx
Endproc
Procedure DO_Card
Lparameters lcCard
If Empty( lcCard )
Return .F.
Endif
lcCard = UPPER( lcCard )
lnCod_Priv = 0
If Type( '_Screen.ActiveForm' ) == 'O'
oObject = _Screen.ActiveForm
If oObject.BaseClass == 'Form'
IF NOT UPPER( oObject.Name ) $ lcCard
If oObject.WindowType = 0
If Pemstatus( oObject, 'formalias', 5 )
If Not Empty( oObject.formalias )
lcFormAlias = Alltrim( oObject.formalias )
lnSession = Set( "Datasession" )
Set DataSession To oObject.DataSessionId
If Used( lcFormAlias )
lnColumn = Afields( aFormAlias, lcFormAlias )
If lnColumn > 0
For i = 1 To lnColumn
If aFormAlias( i, 1 ) == 'COD_PRIV' And Inlist( aFormAlias( i, 2 ), 'I', 'N'
)
lcField = lcFormAlias + '.cod_priv'
lnCod_Priv = &lcField
Exit
Endif
Endfor
Endif
Endif

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
IPO - инструмент финансирования деятельности организации. На примере ПАО «Нефтяная компания «Лукойл»
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)