#include #include #include #include #include #include #include Opt("MustDeclareVars", 0) #Region Variables Global $n_OC3Fold = "" Global $n_OborFile = "" Global $sap_gui = -1 Global $sap_app = -1 Global $sap_conn = -1 Global $sap_sess = -1 Global $v_OC3SapYear = @YEAR Global $v_OC3SapMon #EndRegion Variables #Region Arrays Global $a_Months[12] = ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"] Global $a_Sluz[10][4] = [ _ ["1", "Отдел эксплуатации ЛЭП", "Начальник службы", "СВЛ"], _ ["2", "Отдел эксплуатации ПС", "Начальник службы", "СПС"], _ ["3", "Служба управления производственными активами", "Главный специалист", "ЗиС"], _ ["4", "Отдел РЗА и АСУ ТП", "Начальник службы", "РЗА"], _ ["5", "Отдел диагностики", "Начальник службы", "Диаг"], _ ["6", "Служба ИС и СС", "Начальник службы", "ИТС"], _ ["7", "Группа метрологического обеспечения", "Ведущий инженер", "Метр"], _ ["8", "Служба механизации и транспорта", "Начальник службы", "СМиТ"], _ ["", "Внешний подряд", "", "ВНЕШ"], _ ["", "ЭлектроСетьСервис", "", "ЭСС"]] Global $a_SPP[8][5] = [ _ [1, "01.01.*"], _ [1, "01.02.*"], _ [1, "01.04"], _ [1, "01.03.03"], _ [1, "02.08"], _ [4, "01.03.01.*", "01.03.02", "01.03.04", "01.03.06"], _ [1, "01.03.05"], _ [1, "01.05"]] #EndRegion Arrays #Region GUI $OC3ver = "1.1" $OC3title = "OC-3 v" & $OC3ver GUICreate($OC3title, 400, 300) $i_OC3Folder = GUICtrlCreateInput("Укажите папку для/с ОС-3", 11, 14, 310, 20) $i_OC3Folder_Choose = GUICtrlCreateButton("Выбрать", 330, 10, 60, 27) $i_OC3Out = GUICtrlCreateButton("Выгрузить ОС-3", 10, 42, 240, 30) GUICtrlSetFont(-1, 9, 700, 4) GUICtrlSetState($i_OC3Out, $GUI_DISABLE) $i_OC3SapYear = GUICtrlCreateCombo("", 336, 46, 53, 30, $CBS_DROPDOWN + $CBS_SIMPLE + $WS_VSCROLL) $i_OC3SapMon = GUICtrlCreateCombo("", 256, 46, 75, 30, $CBS_DROPDOWN + $CBS_SIMPLE + $WS_VSCROLL) If (@MON - 2) = -1 Then $i_defMon = $a_Months[11] $v_OC3SapYear -= 1 Else $i_defMon = $a_Months[@MON - 2] EndIf GUICtrlSetData($i_OC3SapYear, (@YEAR - 1) & "|" & @YEAR, $v_OC3SapYear) GUICtrlSetData($i_OC3SapMon, "Январь|Февраль|Март|Апрель|Май|Июнь|Июль|Август|Сентябрь|Октябрь|Ноябрь|Декабрь", $i_defMon) Global $ia_SluzChB[10] = [GUICtrlCreateCheckbox("СВЛ", 10, 75, 40, 20), _ GUICtrlCreateCheckbox("СПС", 55, 75, 40, 20), _ GUICtrlCreateCheckbox("ЗиС", 100, 75, 40, 20), _ GUICtrlCreateCheckbox("РЗА", 145, 75, 40, 20), _ GUICtrlCreateCheckbox("Диаг", 190, 75, 50, 20), _ GUICtrlCreateCheckbox("ИТС", 240, 75, 40, 20), _ GUICtrlCreateCheckbox("Метрол", 285, 75, 60, 20), _ GUICtrlCreateCheckbox("СМиТ", 345, 75, 50, 20), _ GUICtrlCreateCheckbox("Внешний подряд", 10, 95, 105, 20), _ GUICtrlCreateCheckbox("ЭлектроСетьСервис", 125, 95, 125, 20)] For $ChBox In $ia_SluzChB GUICtrlSetState($ChBox, $GUI_CHECKED) Next $i_UncheckChB = GUICtrlCreateButton("- Все -", 260, 95, 60, 20) $i_CheckChB = GUICtrlCreateButton("+ Все +", 330, 95, 60, 20) $i_OborFile = GUICtrlCreateInput("Выберите файл оборотки", 11, 125, 310, 20) $i_OborFile_Choose = GUICtrlCreateButton("Выбрать", 330, 121, 60, 27) $i_PrepareOC3 = GUICtrlCreateButton("Подготовить ОС-3", 10, 155, 380, 30) GUICtrlSetFont(-1, 9, 700, 1) GUICtrlSetState($i_PrepareOC3, $GUI_DISABLE) $i_PrepProgr = GUICtrlCreateProgress(11, 190, 378, 10) $i_PrintOC3 = GUICtrlCreateButton("Распечатать ОС-3", 10, 205, 380, 30) GUICtrlSetFont(-1, 9, 700, 1) GUICtrlSetState($i_PrintOC3, $GUI_DISABLE) $i_PrintProgr = GUICtrlCreateProgress(11, 240, 378, 10) $i_CloseSCR = GUICtrlCreateButton("Выход", 10, 260, 380, 30) GUICtrlSetFont(-1, 9, 800, 1) GUISetState(@SW_SHOW) #EndRegion GUI While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $i_OC3Folder_Choose $n_OC3Fold = FileSelectFolder("Выберите...", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}", 1, @HomeDrive) If $n_OC3Fold <> "" Then GUICtrlSetData($i_OC3Folder, $n_OC3Fold) GUICtrlSetState($i_PrintOC3, $GUI_ENABLE) GUICtrlSetState($i_OC3Out, $GUI_ENABLE) EndIf If ($n_OC3Fold <> "" And $n_OborFile <> "") Then GUICtrlSetState($i_PrepareOC3, $GUI_ENABLE) EndIf Case $i_OC3Out GUICtrlSetState($i_OC3Out, $GUI_DISABLE) ObjGet("SAPGUI") If Not @error Then _OC3Out() Else MsgBox(16, "Ошибка", "Запустите SAP P01 сначала!") EndIf GUICtrlSetState($i_OC3Out, $GUI_ENABLE) Case $i_OborFile_Choose $n_OborFile = FileOpenDialog("Выберите...", @ScriptDir, "Файлы Excel (*.xls;*.xlsx)") If $n_OborFile <> "" Then GUICtrlSetData($i_OborFile, $n_OborFile) EndIf If ($n_OC3Fold <> "" And $n_OborFile <> "") Then GUICtrlSetState($i_PrepareOC3, $GUI_ENABLE) EndIf Case $i_PrepareOC3 GUICtrlSetState($i_PrepareOC3, $GUI_DISABLE) _PrepareOC3() GUICtrlSetState($i_PrepareOC3, $GUI_ENABLE) Case $i_PrintOC3 GUICtrlSetState($i_PrintOC3, $GUI_DISABLE) _PrintOC3() GUICtrlSetState($i_PrintOC3, $GUI_ENABLE) Case $i_CloseSCR Exit Case $i_UncheckChB For $ChBox In $ia_SluzChB GUICtrlSetState($ChBox, $GUI_UNCHECKED) Next Case $i_CheckChB For $ChBox In $ia_SluzChB GUICtrlSetState($ChBox, $GUI_CHECKED) Next EndSwitch WEnd Func _PrepareOC3() GUICtrlSetData($i_PrepProgr, 0) $a_OC3Files = _FileListToArray($n_OC3Fold, "*.xls", 1) If Not @error = 4 Then $x_Obor = ObjCreate("Excel.Application") $w_Obor = $x_Obor.Workbooks.Open($n_OborFile) $s_Obor = $w_Obor.Sheets(1) For $i = 1 To $a_OC3Files[0] $n_OC3File = $a_OC3Files[$i] $x_OC3 = ObjCreate("Excel.Application") $w_OC3 = $x_OC3.Workbooks.Open($n_OC3Fold & "\" & $n_OC3File) $s_OC3 = $w_OC3.Sheets("ОС-3") $s_OC3.Cells(41, 59).Font.Strikethrough = True $s_OC3.Range("DB20:DT20").Merge $s_OC3.Cells(20, 106).Value = $s_OC3.Cells(20, 104).Value $s_OC3.Cells(20, 104).Value = "" $s_OC3.Cells(20, 106).HorizontalAlignment = $xlCenter $j_Sluz = -1 $r_Sluz = $s_OC3.Cells(68, 90).Value ;Начальник службы If $r_Sluz <> "" Then $j_Sluz = _ArraySearch($a_Sluz, $r_Sluz, 0, 0, 0, 0, 1, 0) ;Индекс службы $s_OC3.Cells(10, 20).Value = $a_Sluz[$j_Sluz][1] ;Наименование службы $s_OC3.Cells(68, 31).Value = $a_Sluz[$j_Sluz][2] ;Должность руководителя EndIf $sCell = 0 $Inven = StringStripWS($s_OC3.Cells(27, 51).Value, 3) $sCell = $s_Obor.Cells.Find($Inven) If IsObj($sCell) Then $n_MOL = $s_Obor.Cells($sCell.Row, 2).Value $n_MOL = _StringProper(StringTrimLeft($n_MOL, 11)) $s_OC3.Cells(74, 90).Value = $n_MOL EndIf If $j_Sluz <> -1 And $j_Sluz = 0 And $s_OC3.Cells(74, 90).Value = "" Then $s_OC3.Cells(74, 90).Value = $a_Sluz[$j_Sluz][0] EndIf $j_Sluz = _ArraySearch($a_Sluz, $s_OC3.Cells(74, 90).Value, 0, 0, 0, 0, 1, 0) If $j_Sluz <> -1 Then $s_OC3.Cells(74, 29).Value = $a_Sluz[$j_Sluz][2] EndIf $s_OC3.Cells(1, 1).Select $x_OC3.Workbooks(1).Save $x_OC3.Quit $x_OC3 = 0 GUICtrlSetData($i_PrepProgr, $i / $a_OC3Files[0] * 100) Next $x_Obor.Quit MsgBox(64, "", "Подготовка ОС-3 к печати окончена.") Else MsgBox(16, "Ошибка", "Файлов ОС-3 в папке не найдено!") EndIf EndFunc ;==>_PrepareOC3 Func _PrintOC3() GUICtrlSetData($i_PrintProgr, 0) $a_OC3Files = _FileListToArray($n_OC3Fold, "*.xls", 1) If Not @error = 4 Then For $i = 1 To $a_OC3Files[0] $n_OC3File = $a_OC3Files[$i] $x_OC3 = ObjCreate("Excel.Application") $w_OC3 = $x_OC3.Workbooks.Open($n_OC3Fold & "\" & $n_OC3File) $s_OC3 = $w_OC3.Sheets("ОС-3") $s_OC3.PrintOut(Default, Default, $s_OC3.Cells(1, 1).Value, False, "HP LaserJet 5100 PCL 6_2", Default, True) $s_OC3.Cells(1, 1).Select $x_OC3.Workbooks(1).Save $x_OC3.Quit $x_OC3 = 0 GUICtrlSetData($i_PrintProgr, $i / $a_OC3Files[0] * 100) Next MsgBox(64, "", "Отправка ОС-3 на печать окончена.") Else MsgBox(16, "Ошибка", "Файлов ОС-3 в папке не найдено!") EndIf EndFunc ;==>_PrintOC3 Func _OC3Out() Local $i $v_OC3SapMon = _ArraySearch($a_Months, GUICtrlRead($i_OC3SapMon), 0, 0, 0, 0, 1, 0) + 1 $v_OC3SapYear = GUICtrlRead($i_OC3SapYear) _ConnectSAP() $sap_sess.findById("wnd[0]/tbar[0]/okcd").text = "zpm_data_all" $sap_sess.findById("wnd[0]/tbar[0]/btn[0]").press For $i = 0 To 7 If GUICtrlRead($ia_SluzChB[$i]) = 1 Then _SAPZakaz($i, 0) GUICtrlSetState($ia_SluzChB[$i], $GUI_UNCHECKED) EndIf Next If GUICtrlRead($ia_SluzChB[8]) = 1 Then _SAPZakaz(8, 4) GUICtrlSetState($ia_SluzChB[8], $GUI_UNCHECKED) EndIf If GUICtrlRead($ia_SluzChB[9]) = 1 Then _SAPZakaz(9, 6) GUICtrlSetState($ia_SluzChB[9], $GUI_UNCHECKED) EndIf $sap_sess.findById("wnd[0]").sendVKey(3) _CloseSAPConn() MsgBox(64, "Выполнено", "Выгрузка актов ОС-3 завершена.") EndFunc ;==>_OC3Out Func _SAPZakaz($sl, $sposob) Local $i = 0 Local $j = 0 With $sap_sess .findById("wnd[0]/usr/chkP_COEP").selected = True .findById("wnd[0]/usr/ctxtSO_SWERK-LOW").text = "0441" .findById("wnd[0]/usr/txtP_GJAHR").text = $v_OC3SapYear .findById("wnd[0]/usr/ctxtSO_MONTH-LOW").text = $v_OC3SapMon .findById("wnd[0]/usr/ctxtSO_MONTH-HIGH").text = $v_OC3SapMon .findById("wnd[0]/usr/ctxtSO_SV-LOW").text = $sposob EndWith If $sposob = 0 Then $sap_sess.findById("wnd[0]/usr/btn%_SO_PROID_%_APP_%-VALU_PUSH").press $sap_sess.findById("wnd[1]/tbar[0]/btn[16]").press For $i = 1 To $a_SPP[$sl][0] $sap_trow = ($i - 7 * (Floor(($i - 1) / 7))) $sap_spp = "W/" & $v_OC3SapYear & "-" & $a_SPP[$sl][$i] $sap_sess.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1," & $sap_trow & "]").text = $sap_spp If Floor($i / 7) = $i / 7 Then $sap_sess.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE").verticalScrollbar.position = 7 * (Floor($i / 7)) EndIf Next $sap_sess.findById("wnd[1]").sendVKey(8) Else $sap_sess.findById("wnd[0]/usr/btn%_SO_PROID_%_APP_%-VALU_PUSH").press $sap_sess.findById("wnd[1]/tbar[0]/btn[16]").press $sap_sess.findById("wnd[1]").sendVKey(8) EndIf $sap_sess.findById("wnd[0]").sendVKey(8) $ErrZak = $sap_sess.findById("wnd[0]/usr/cntlTREE_CONTAINER", False) If IsObj($ErrZak) Then $sap_sess.findById("wnd[0]/usr/cntlTREE_CONTAINER/shellcont/shell/shellcont[1]/shell[0]").pressContextButton("MAINT") $sap_sess.findById("wnd[0]/usr/cntlTREE_CONTAINER/shellcont/shell/shellcont[1]/shell[0]").selectContextMenuItem("OS") ;~ Проверка на сообщение с ошибками Local $ErrW = $sap_sess.findById("wnd[1]", False) If IsObj($ErrW) Then If $ErrW.text = "Журнал: перенос затрат на ОС" Then $sap_sess.findById("wnd[1]/tbar[0]/btn[0]").press EndIf EndIf $oTabl = $sap_sess.findById("wnd[0]/shellcont/shell", False) If IsObj($oTabl) Then $sap_sess.findById("wnd[0]/tbar[1]/btn[23]").press $sap_sess.findById("wnd[1]/tbar[0]/btn[5]").press If $sl = 8 Or $sl = 9 Then $sap_sess.findById("wnd[0]/usr/txtZPM_OS3_DEFAULT-SDALF").text = "" Else $sap_sess.findById("wnd[0]/usr/txtZPM_OS3_DEFAULT-SDALF").text = $a_Sluz[$sl][0] EndIf $sap_sess.findById("wnd[0]/tbar[0]/btn[11]").press $oTabl = $sap_sess.findById("wnd[0]/shellcont/shell") For $i = 0 To ($oTabl.rowCount - 1) If $oTabl.getCellValue($i, "DOCTYPE") = "Акт" Then $oTabl.firstVisibleRow = $i $oTabl.modifyCheckbox($i, "CHBX", True) $oTabl.triggerModified $sap_sess.findById("wnd[0]/tbar[1]/btn[22]").press ;~ BlockInput(1) If WinExists("Оборотно-сальдовая ведомость") Then $sap_sess.findById("wnd[0]/tbar[0]/btn[3]").press EndIf ;~ ProcessWait("excel.exe") ;~ Sleep(250) $x_OC3 = ObjGet("", "Excel.Application") If IsObj($x_OC3) Then $s_OC3 = $x_OC3.Sheets("ОС-3") If $sl = 8 Or $sl = 9 Then $s_OC3.Cells(1, 1).Value = 2 Else $s_OC3.Cells(1, 1).Value = 1 EndIf $x_OC3.Cells(1, 1).Font.ColorIndex = 2 $x_OC3.Workbooks(1).SaveAs($n_OC3Fold & "\" & $a_Sluz[$sl][3] & StringTrimLeft(StringTrimRight($x_OC3.Workbooks(1).Name, 4), 8) & "_" & $s_OC3.Cells(15, 45).Value & ".xls") $x_OC3.Quit $s_OC3 = 0 Else MsgBox (64,"WTF","WTF???!!!") Exit EndIf BlockInput(0) $x_OC3 = Null $oTabl.modifyCheckbox($i, "CHBX", False) EndIf Next $sap_sess.findById("wnd[0]").sendVKey(3) EndIf $oTabl = 0 $sap_sess.findById("wnd[0]").sendVKey(3) EndIf $ErrZak = 0 EndFunc ;==>_SAPZakaz Func _ConnectSAP() If Not IsObj($sap_app) Then $sap_gui = ObjGet("SAPGUI") $sap_app = $sap_gui.GetScriptingEngine EndIf If Not IsObj($sap_conn) Then $sap_conn = $sap_app.Children(0) EndIf If Not IsObj($sap_sess) Then $sap_sess = $sap_conn.Children(0) EndIf $sap_sess.TestToolMode = 1 EndFunc ;==>_ConnectSAP Func _CloseSAPConn() $sap_sess.TestToolMode = 0 $sap_gui = -1 $sap_app = -1 $sap_conn = -1 $sap_sess = -1 EndFunc ;==>_CloseSAPConn