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

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
142
Set DataSession To lnSession
Endif
Endif
Endif
Endif
Endif
Endif
lcPath = "personal3\forms\" + lcCard
If lcCard $ "KART_PENSIONER" And lnCod_Priv = 0
Do Form ( lcPath ) With .F., .T., .T.
Return .T.
Endif
Do Form ( lcPath ) With lnCod_Priv
Endproc
Листинг 4 – Совокупность процедур, определяющих поведения формы -
Реестр отпусков
PROCEDURE getcursor
LPARAMETERS lcAlias,lCloseCur
IF NOT EMPTY(lcAlias)
LOCAL aCur as sArray OF sArray
aCur=CREATEOBJECT('sArray')
aCurserv=gHolServer.putCursor(lcAlias,lCloseCur)
aCur.copyfrom(aCurserv)
aCur.arraytocursor(lcAlias)
ENDIF
ENDPROC
PROCEDURE save
Local aRest_Hol As sArray Of sArray
SELECT Cod_Work, ;
Cod_Priv, ;
n_tab, ;
Rest_Base AS N_Used_Base, ;
Rest_Vred AS N_Used_vred, ;
Nord AS Nord_New, ;
Status ;
FROM ( thisform.formalias ) ;
WHERE Modified ;
INTO CURSOR Cur_rest_holiday_save
aRest_Hol = Createobject( 'sArray' )
aRest_Hol.cursortoarray( 'Cur_rest_holiday_save' )
USE IN Cur_rest_holiday_save
RETURN gholserver.p_close_year( @aRest_Hol )
ENDPROC
PROCEDURE mark_str
thisform.Modified = .T.
REPLACE Modified WITH .T. IN thisform.formalias
ENDPROC
PROCEDURE filter
lcViewAll = ''
143
If Thisform.chk_view_all.Value = 1
IF NOT EMPTY( Thisform.filtr )
lcViewAll = '.AND. ' + lcViewAll
ENDIF
Endif
lcNewFilter = TRANSFORM( Thisform.filtr ) + lcViewAll
SELECT( thisform.formalias )
IF NOT Set( "Filter" ) == lcNewFilter
SET FILTER TO &lcNewFilter
GO TOP IN thisform.formalias
Thisform.grid1.Refresh()
ENDIF
ENDPROC
PROCEDURE get_rest_hol
lNoOk = .F.
If gHolserver.p_rest_hol( Thisform.end_period, .T., .T. ) <> 0
lNoOk = .T.
Endif
If lNoOk = .F.
Thisform.grid1.RecordSource = ''
Thisform.Getcursor( 'cur_rest_hol', .T. )
If Not Used( 'cur_rest_hol' )
lNoOk = .T.
ELSE
SELECT cur_rest_hol.*, ;
cur_rest_hol.Rest_Base + cur_rest_hol.Rest_Vred AS Rest_begin, ;
cur_rest_hol.Not_Used_ALL AS Rest_end, ;
cur_rest_hol.DopMOney * -1 AS DopMoney_Minus, ;
cur_rest_hol.Used_Base * -1 AS Used_Base_Minus, ;
cur_rest_hol.Used_Vred * -1 AS Used_Vred_Minus ;
FROM Cur_rest_hol INTO CURSOR cur_rest_hol READWRITE
Thisform.formalias = 'cur_rest_hol'
Endif
Endif
If lNoOk
Messagebox( 'Произошла ошибка при расчёте остатков отпусков.', 0+16, Thisform.Caption
)
Thisform.Release()
Endif
ENDPROC
PROCEDURE control_edt
Lparameters lNoWait
Select( Thisform.formalias )
lcMessage = ''
If New_Work
lcMessage = 'Утверждение остатка отпуска у вновь принятого работника не требуется'
ENDIF
lReturn = Empty( lcMessage )
If Not lNoWait AND NOT lReturn
Wait lcMessage Window Nowait
144
ENDIF
Return lReturn
ENDPROC
PROCEDURE end_period_assign
Lparameters vNewVal
If This.end_period <> m.vNewVal
This.end_period = m.vNewVal
lnYear = YEAR(This.end_period)
IF NOT BETWEEN( lnYear, 2011, 9999 )
MESSAGEBOX( 'Введён некорректный год.', 0+64, thisform.caption )
RETURN .F.
ENDIF
thisform.year_rest = lnYear
Thisform.cmdUndo.Click()
Thisform.lbl_end_period.Caption = Textmerge( 'Остатки отпусков на <<m.vNewVal>>' )
lcCaption = Textmerge( "='Остаток' + CHR( 13 ) + 'на <<m.vNewVal>>'")
Thisform.Grid1.col_base_n_used.Header1.WriteExpression( 'Caption', lcCaption)
Endif
ENDPROC
PROCEDURE gridcontrol
NODEFAULT
thisform.grid1.RecordSource = thisform.formalias
thisform.grid1.col_Tab.ControlSource = 'n_tab'
thisform.grid1.col_fio.ControlSource = 'fio'
thisform.grid1.col_podr.ControlSource = 'podr'
ThisForm.Grid1.Col_base_rest.ControlSource = 'Rest_begin'
ThisForm.Grid1.Col_vred_rest.ControlSource = 'Rest_Vred'
ThisForm.Grid1.Col_base.ControlSource = 'Base'
ThisForm.Grid1.Col_vred.ControlSource = 'Vred'
ThisForm.Grid1.Col_nord.ControlSource = 'Nord'
ThisForm.Grid1.col_base_used.ControlSource = 'Used_Base_Minus'
ThisForm.Grid1.col_vred_used.ControlSource = 'Used_Vred_Minus'
ThisForm.Grid1.col_dopmoney.ControlSource = 'DopMoney_Minus'
ThisForm.Grid1.col_base_n_used.ControlSource = 'Rest_end'
thisform.grid1.col_save.ControlSource = 'modified'
ENDPROC
PROCEDURE Init
NODEFAULT
If Type( 'gHolServer' ) <> 'O'
MESSAGEBOX( 'Не загружен бизнес-объект gHolServer.',0+48, thisform.caption )
Return .F.
ENDIF
IF thisform.createfiltr() = .F.
RETURN .F.
ENDIF
thisform.WindowState = 2
thisform.MinWidth = thisform.Width
thisform.MinHeight = thisform.Height
thisform.grid1.col_nord.BackColor = RGB(234,255,234)
145
ENDPROC
PROCEDURE cancel
If Used( thisform.formalias )
Select( thisform.formalias )
Locate For Modified
If Found( thisform.formalias )
Return Messagebox('Закрыть без сохранения внесенных изменений?',4+32+256,
Thisform.Caption) = 6
Endif
Endif
ENDPROC
PROCEDURE createfiltr
Do Form personal3\forms\h_flt_ree_rest_holiday.scx WITH this To lcFilter
If Empty( lcFilter )
Return .F.
Else
This.filtr = lcFilter
thisform.filter()
Endif
ENDPROC
PROCEDURE Resize
ThisForm.lbl_end_period.width = thisform.Width
ENDPROC
PROCEDURE CmdUndo.Click
NODEFAULT
Wait 'Идёт расчёт остатков отпусков. Подождите, пожалуйста...' Window Nowait Noclear
thisform.Modified = .F.
thisform.get_rest_hol()
thisform.filter()
thisform.gridcontrol()
WAIT CLEAR
ENDPROC
PROCEDURE Cmdprint1.Click
NODEFAULT
lnTypeCorrect = -1
SELECT( thisform.formalias )
Do ..\Menu\menu_rest_hol.mpr WITH lnTypeCorrect
ENDPROC
PROCEDURE Filtr1.Click
Thisform.createfiltr()
ENDPROC
PROCEDURE Open1.MouseLeave
LPARAMETERS nButton, nShift, nXCoord, nYCoord
this.BackColor = 15790320
ENDPROC
146
PROCEDURE Open1.MouseMove
LPARAMETERS nButton, nShift, nXCoord, nYCoord
this.BackColor = 7929720
ENDPROC
PROCEDURE Open1.Click
SELECT( thisform.formalias )
Locate For Modified
If Found( thisform.formalias )
TEXT TO lcMess TEXTMERGE NOSHOW
Сохранить заработанный отпуск за командировку на крайнем севере в остатки за <<YEAR(
DATE() ) - 1>> год?
Будут сохранены только отмеченные строки.
ENDTEXT
If Messagebox( lcMess, 4+48+256, Thisform.Caption ) = 6
Wait 'Идёт сохранение отмеченных отпусков за командировку на севере. Подождите,
пожалуйста...' Window Nowait Noclear
IF NOT Thisform.Save()
Messagebox( 'В процессе сохранения отпусков за командировку на севере произошла
ошибка. Повторите попытку.', 0+16, Thisform.Caption )
Endif
Wait Clear
Thisform.cmdUndo.Click()
Endif
Else
Messagebox( 'Нет выбранных строк для сохранения.', 0+64, Thisform.Caption )
Endif
ENDPROC
PROCEDURE Grid1.Refresh
DODEFAULT()
this.AfterRowColChange()
ENDPROC
Листинг 5 – Совокупность процедур, определяющих поведения формы – Карточка
документов
PROCEDURE mainrevert
gHolServer.Doc_get(THISFORM.cod_doc,thisform.cod_group)
THISFORM.GETCURSOR('Cur_doc',.T.)
THISFORM.txt_cod_doc.valueset(Cur_doc.cod_doc)
THISFORM.cmb_cod_type.valueset(Cur_doc.Doc_type)
THISFORM.cmb_cod_tab.valueset(Cur_doc.Cod_spr)
THISFORM.txt_doc_num.valueset(Cur_doc.doc_num)
THISFORM.txt_dt_begin.valueset(Cur_doc.dt_begin)
THISFORM.txt_dt_doc.valueset(Cur_doc.dt_doc)
THISFORM.txt_dt_end.valueset(Cur_doc.dt_end)
thisform.txt_dt_year_begin.valueset( Cur_doc.dt_year_begin )
thisform.txt_dt_year_end.valueset( Cur_doc.dt_year_end )
IF NOT EMPTY(Cur_doc.n_tab)
LOCAL lnCod_super
thisform.select_work( Cur_doc.n_tab )
ENDIF
147
thisform.txt_cod_otp.valueset(Cur_doc.Cod_group)
THISFORM.edt_info.valueset(Cur_doc.INFO)
thisform.calc_day_kol()
ENDPROC
PROCEDURE docitem
thisform.grd_holiday.RecordSource=''
gHolServer.DocItem_Get(thisform.cod_doc)
thisform.getcursor('curDocItem',.T.)
SET FILTER TO NOT curDocItem.act=='D' IN curDocItem
thisform.grd_holiday.RecordSourceType= 1
thisform.grd_holiday.RecordSource='curDocItem'
thisform.grd_holiday.col_days.ControlSource='curDocItem.days'
thisform.grd_holiday.col_itemtype.ControlSource='curDocItem.naim'
thisform.grd_holiday.Col_dt_begin.ControlSource='curDocItem.dt_begin'
thisform.grd_holiday.col_dt_end.ControlSource='curDocItem.dt_end'
thisform.grd_holiday.col_Pr_day.ControlSource='curDocItem.Pr_day'
thisform.grD_HOLIDAY.col_year_holiday.ControlSource='curDocItem.year_holiday'
thisform.grD_HOLIDAY.col_dt_sati_begin.ControlSource='curDocItem.dt_sati_begin'
thisform.grD_HOLIDAY.col_dt_sati_end.ControlSource='curDocItem.dt_sati_end'
ENDPROC
PROCEDURE mainsave
Local Array aDocs[1]
Local lnCod_doc, aDocItemL As sArray Of sArray
aDocItemL=Createobject('sArray')
Select * ;
FROM curDocItem ;
where (Not Empty(curDocItem.dt_end) And Not Empty(curDocItem.dt_begin)) Or
curDocItem.Pr In ("-401") ;
INTO Cursor curDocItem ;
READWRITE
If Reccount('curDocItem')==0
Messagebox('Сохранить документ нельзя т.к. не заполнен период отпуска',0+16,'Карточка
документа')
Return .F.
Endif
Thisform.change_control1.valuetoarray(Thisform,.F.,@aDocs)
aDocs[11,1]=Thisform.work1.cod_priv
aDocs[12,1]=Thisform.work1.cod_work
aDocs[3,1]=Cur_Holi_tab_spr.pr_tab
Dimension aDocs[25,4]
aDocs[18,1]=Thisform.cod_otp
aDocs[19,1]=Thisform.superviser1.cod_super
aDocs[25,1]=Thisform.sprav aDocItemL.CursorToArray('curDocItem')
If Not Empty(Thisform.lnmode)
If Vartype(Thisform.parentform)=='O'
If Upper(Alltrim(Thisform.parentform.Name))=='FORM_T6_A'
aDocs[1,1]=Thisform.work1.cod_post
Thisform.parentform.addpeople(@aDocs,aDocItemL,Thisform.cod_group)
Endif
Endif
148
Return .T.
Endif
Local lClose
lClose=Iif(Not Empty(Thisform.txt_doc_num.Value) And Not
Empty(Thisform.txt_dt_doc.Value),.T.,.F.)
If lClose
If Empty(Thisform.txt_cod_doc.Value)
lcMess=gHolServer.control_tabel(@aDocs,@aDocItemL,0)
If Not Empty(lcMess)
If Messagebox(lcMess,4+48+256,Thisform.Caption)==7
Return .F.
Endif
Endif
Endif
Thisform.tab_cal1.getcalendar2(Year(Thisform.txt_dt_begin.Value))
lnCod_doc=gHolServer.doc_Save(@aDocs,lClose,@aDocItemL,Thisform.cod_group,
Thisform.ServisInfo)
Thisform.cod_doc=lnCod_doc
If Not Empty(lnCod_doc) And Not Empty(Thisform.superviser1.cod_super)
If Empty(lnCod_doc)
Messagebox('Во время сохранения документа произошла
ошибка.',0+16,Thisform.Caption)
Return .F.
Endif
Local lnStavka,lOk
lnStavka=aDocs[20,1]
If !Inlist(Alltrim(curDocItem.Pr),"-401")
Select('curDocItem')
Scan
Local lddt_begin, lddt_end, lOk
lddt_begin={//}
lddt_end={//}
lOk=.T.
lddt_begin=curDocItem.dt_begin
lddt_end=curDocItem.dt_end
If lOk
If Not Year(Date())==Year(lddt_begin)
res=gHolServer.private_base_open(Year(lddt_begin))
Endif
Local lcText
TEXT TO lcText TEXTMERGE NOSHOW
Строка созданна из системы персонал 3. Документ:<<ALLTRIM(aDocs[4,1])>>
Дата:<<aDocs[5,1]>> Cod_doc:<<lnCod_doc>>
Cod_super:<<THISFORM.superviser1.cod_super>> Cod_otp:<<aDocs[18,1]>>
Cod_group:<<thisform.cod_group>>
ENDTEXT
Local lcMessage
TEXT TO lcMessage TEXTMERGE NOSHOW
********************************
Пользователь: <<SYS(0)>>
Время: <<DATETIME()>>
149
ПАРАМЕТРЫ
Cod_super: <<THISFORM.superviser1.cod_super>>
lddt_begin: <<lddt_begin>>
lddt_end: <<lddt_end>>
lnStavka: <<lnStavka>>
Регистрация распоряжения без автоматического перехода отметок в табель:
<<thisform.close_kart_tab>>
lcText: <<lcText>>
Сессия данных: <<THISFORM.DATASESSIONID>>
lnCod_doc: <<lnCod_doc>>
Выполнение программы nev_tab_200:
ENDTEXT
lcCod_Tab = Alltrim( curDocItem.Pr )
lcCod_Tab = Iif( lcCod_Tab = '217', '200', lcCod_Tab )
lcWhere = TEXTMERGE( 'ALLTRIM( tabel.cod_tab ) == "<<lcCod_Tab>>"' )
Thisform.tabel1.delrec( Thisform.superviser1.cod_super, lddt_begin, lddt_end, .F.,
lcWhere )
If !Inlist(Alltrim(curDocItem.Pr),"307","300","208","302","206","215")
lOk=Thisform.tabel1.nev_tab_200(Thisform.superviser1.cod_super, ;
lcCod_Tab, ;
lddt_begin, ;
lddt_end, ;
lnStavka, ;
lcText, ;
THISFORM.DataSessionId, ;
lnCod_doc)
Else
lOk=Thisform.tabel1.nev_tab_300(Thisform.superviser1.cod_super, ;
lcCod_Tab, ;
lddt_begin, ;
lddt_end, ;
lnStavka, ;
lcText, ;
THISFORM.DataSessionId, ;
lnCod_doc)
Endif
lnDaysSave = gHolServer.tabel_control_save( Thisform.superviser1.cod_super,
lnCod_doc, lddt_begin, lddt_end, lcCod_Tab )
If lnDaysSave <> curDocItem.Days
Messagebox( Textmerge( АСУ "Учёт рабочего времени" добавлено
<<lnDaysSave>> дней отпуска из <), 0+48, Thisform.Caption )
Endif
Strtofile(Transform(lOk),'m:\ASU_000\USTAN\Otpusk.txt',.T.)
lcPr, ;
dtOtpBeg, ;
dtOtpEnd, ;
lnStavka, ;
thisform.DataSessionId, ;
lnCod_doc)
If Not Year(Date())==Year(lddt_begin)
rescl=gHolServer.private_base_Close()
Endif
150
Endif
Endscan
If Thisform.edt_abs If gHolServer.p_abs_edt( aDocs[11,1], aDocs[12,1],
Thisform.txt_dt_begin.Value, Thisform.close_period ) <> 0
Messagebox( 'Произошла ошибка при выполнении редактирования таблицы
Absence при выполнении процедуры регистрации отпуска.' + Chr( 13 ) + ;
'Сообщите эту информацию в КО-806', 0+48, Thisform.Caption )
ENDIF
Endif
Else
lOk=gHolServer.compensation_money(Thisform.work1.cod_work,Thisform.work1.tab_nom,cur
DocItem.Days)
If !lOk
Messagebox('Произошла ошибка при сохранении данных в табель',0+16,'Карточка
документа')
Return .F.
Endif
Endif
Endif
Else
Messagebox('Документ не утвержден документ не будет сохранен',0+64,'Карточка
документа')
Endif
ENDPROC
Листинг 6 – Вывод отчёта по неиспользованным остаткам отпусков в
программу Microsoft Excel
PROCEDURE report
Lparameters lnReport
If Thisform.Modified
lnMess = Messagebox( 'Перед выполнением экспорта в Excel необходимо сохранить
выполненные изменения или обновить данные на экране.' + Chr( 13 ) + Chr( 13 ) + ;
'Выполнить сохранение?' + Chr( 13 ) + ;
'<ДА> - cохранить, <НЕТ> - обновить', 3+512, Thisform.Caption )
If lnMess = 6
Thisform.open1.Click()
Else
If lnMess = 7
Thisform.cmdUndo.Click()
Else
Return .F.
Endif
Endif
Endif
lcFile = Alltrim( Lower( Putfile( 'Имя файла', This.Caption, 'xlsx' ) ) )
If Empty( lcFile )
Return .F.
Endif
If Justext( lcFile ) <> 'xlsx'
Messagebox( 'Указан некорректный тип файла.' + Chr(13) + 'Формирование отчёта
прекращено', 0+16, This.Caption )
151
Return .F.
Endif
lcTmpFile = Addbs( Getenv( "TEMP" ) ) + Justfname( Left( lcFile, Len( lcFile ) - 1 ) )
If Type( 'thisform.Excel' ) = 'O'
oExcel = Thisform.Excel
Else
Try
oExcel = Createobject( 'excel.application' )
Thisform.Excel = oExcel
Catch To oEx
Messagebox( 'Произошла ошибка создания экземпляра программы Microsoft Excel.',
0+48, This.Caption )
Endtry
Endif
nCount = oExcel.Workbooks.Count
If nCount > 0
lcFileName = Justfname( lcFile )
For i=1 To nCount
If oExcel.Workbooks( i ).Name = lcFileName
oActiveWindow = oExcel.ActiveWindow
For i=1 To nCount
If oActiveWindow.Caption = lcFileName
Exit
Endif
oActiveWindow.ActivateNext ()
Endfor
Messagebox( 'Отчёт уже открыт.' + Chr( 13 ) + 'Для повторного создания закройте
отчёт и повторите попытку.',0+64, This.Caption )
oExcel.Visible = .T.
BringWindowToTop( oExcel.HWnd )
ShowWindow( oExcel.HWnd, 3 )
RETURN
Endif
Endfor
Endif
Wait 'Идёт форматирование отчёта. Подождите, пожалуйста...' Window Nowait Noclear
Select( Thisform.formalias )
lcFiltr = Set( "Filter" )
Select Podr, ;
N_Tab, ;
kateg2, ;
fio, ;
Rest_Begin,;
Base, ;
Vred, ;
Nord, ;
Used_Base, ;
Used_Vred, ;
DopMoney, ;
Rest_End, ;
Act, ;
Status ;

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

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