ildar
Осваивающий
- Сообщения
- 252
- Репутация
- 30
Для облегчения своей работы (системный администратор), написал данный скрипт. Запускается через назначенные задания с сентября 2014, но примерно раз в месяц выдает данные которых по логике не должно быть.
Обработка (сравнение) идет отдельно: Табельный номер, Должность, Отдел и т.д. Каким то образом из массива выгрузки 1С(колонка табельный номер), данные ячейки перемещаются в ячейку должность и поэтому скрипт изменяет должность учетной записи на табельный номер. Тоже самое может произойти с Должность и Отдел. При повторном запуске все встает на свои места. Мониторил 2 недели(запускал вручную с выводом _ArrayDisplay), но за это время не было подобных ошибок.
Как сказал C2H5OH
Да, я самоучка, поэтому мог допустить какую-нибудь ошибку, которую я не вижу в своем скрипте.
Если кто-нибудь укажет на ошибки, буду очень благодарен.
Обработка (сравнение) идет отдельно: Табельный номер, Должность, Отдел и т.д. Каким то образом из массива выгрузки 1С(колонка табельный номер), данные ячейки перемещаются в ячейку должность и поэтому скрипт изменяет должность учетной записи на табельный номер. Тоже самое может произойти с Должность и Отдел. При повторном запуске все встает на свои места. Мониторил 2 недели(запускал вручную с выводом _ArrayDisplay), но за это время не было подобных ошибок.
Как сказал C2H5OH
http://autoit-script.ru/index.php?topic=18498.msg111866#msg111866ildar, ты или самоучка, или очень крут...
Да, я самоучка, поэтому мог допустить какую-нибудь ошибку, которую я не вижу в своем скрипте.
Код:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Compile_Both=y
#AutoIt3Wrapper_UseX64=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Excel.au3>
#include <Array.au3>
#include <Constants.au3>
#Include <file.au3>
;##################################
; Variables
;##################################
$SmtpServer = "mail.co.essen"
$FromName = "Сравнение данных из ЗУП с Active Directory"
$FromAddress = "********"
$ToAddress = "*********"
$Subject = "Сравнение данных из ЗУП с Active Directory"
$Body = "текст"
$AttachFiles = ""
$CcAddress = ""
$BccAddress = ""
$Importance = "Normal"
$Username = "*****"
$Password = "*****"
$IPPort = 25
$ssl = 0
;##################################
; Script
;##################################
Global $oMyRet[2]
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
; .........................Проверка файлов выгрузки - дата создания...
$sFilePathOPT = '\\******\Выгрузка сотрудников\Сотрудники_ОПТОВИК.xls'
$sFilePathLOG = '\\*******\Выгрузка сотрудников\Сотрудники_ЛОГИСТИК.xls'
$sFilePathKAM = '\\*******\Выгрузка сотрудников\Сотрудники_КАМИЛЛА.xls'
$sDate = @YEAR & @MON & @MDAY
$iOPT = 0
$iLOG = 0
$iKAM = 0
$aDataOPT = FileGetTime($sFilePathOPT)
If Not @error Then
$sDataFileOPT = $aDataOPT[0] & $aDataOPT[1] & $aDataOPT[2]
if $sDataFileOPT <> $sDate Then $iOPT = 1
EndIf
$aDataLOG = FileGetTime($sFilePathLOG)
If Not @error Then
$sDataFileLOG = $aDataLOG[0] & $aDataLOG[1] & $aDataLOG[2]
if $sDataFileLOG <> $sDate Then $iLOG = 1
EndIf
$aDataKAM = FileGetTime($sFilePathKAM)
If Not @error Then
$sDataFileKAM = $aDataKAM[0] & $aDataKAM[1] & $aDataKAM[2]
if $sDataFileKAM <> $sDate Then $iKAM = 1
EndIf
$aArrayMail = IniReadSection(@ScriptDir & "\AD.ini", "Mail")
$FromName = 'Проверка даты выгружаемых файлов из ЗУП'
$Subject = "Сравнение данных из ЗУП с Active Directory"
If $iOPT + $iLOG + $iKAM > 0 Then
if $iOPT > 0 Then $rc = _INetSmtpMailCom($SmtpServer, $FromName, $aArrayMail[1][1],$aArrayMail[2][1], '"' & $sFilePathOPT & '"' & ' не обновился', '"' & $sFilePathOPT & '"' & ' не обновился. Дата создания файла = ' & $aDataOPT[2] & '/' & $aDataOPT[1] & '/' & $aDataOPT[0] , '', $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
if $iOPT > 0 Then $rc = _INetSmtpMailCom($SmtpServer, $FromName, $aArrayMail[1][1],$aArrayMail[3][1], '"' & $sFilePathOPT & '"' & ' не обновился', '"' & $sFilePathOPT & '"' & ' не обновился. Дата создания файла = ' & $aDataOPT[2] & '/' & $aDataOPT[1] & '/' & $aDataOPT[0] , '', $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
if $iLOG > 0 Then $rc = _INetSmtpMailCom($SmtpServer, $FromName, $aArrayMail[1][1],$aArrayMail[2][1], '"' & $sFilePathOPT & '"' & ' не обновился', '"' & $sFilePathLOG & '"' & ' не обновился. Дата создания файла = ' & $aDataLOG[2] & '/' & $aDataLOG[1] & '/' & $aDataLOG[0] , '', $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
if $iLOG > 0 Then $rc = _INetSmtpMailCom($SmtpServer, $FromName, $aArrayMail[1][1],$aArrayMail[3][1], '"' & $sFilePathOPT & '"' & ' не обновился', '"' & $sFilePathLOG & '"' & ' не обновился. Дата создания файла = ' & $aDataLOG[2] & '/' & $aDataLOG[1] & '/' & $aDataLOG[0] , '', $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
if $iKAM > 0 Then $rc = _INetSmtpMailCom($SmtpServer, $FromName, $aArrayMail[1][1],$aArrayMail[2][1], '"' & $sFilePathKAM & '"' & ' не обновился', '"' & $sFilePathKAM & '"' & ' не обновился. Дата создания файла = ' & $aDataKAM[2] & '/' & $aDataKAM[1] & '/' & $aDataKAM[0] , '', $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
if $iKAM > 0 Then $rc = _INetSmtpMailCom($SmtpServer, $FromName, $aArrayMail[1][1],$aArrayMail[3][1], '"' & $sFilePathKAM & '"' & ' не обновился', '"' & $sFilePathKAM & '"' & ' не обновился. Дата создания файла = ' & $aDataKAM[2] & '/' & $aDataKAM[1] & '/' & $aDataKAM[0] , '', $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
If @error Then
MsgBox(0, "Error sending message", "Error code:" & @error & " Description:" & $rc)
EndIf
Exit ; .........................Если хоть один файл выгрузки со старой датой, то выход из программы...
EndIf
Const $sFIO = 'Фамилия Имя Отчество'
Const $sTabNumberAD = 'Табельный номер из AD', $sPostAD = 'Должность из AD', $sUnitAD = 'Подразделение из AD'
Const $sTabNumberZiK = 'Табельный номер из ZiK', $sPostZiK = 'Должность из ZiK', $sUnitZiK = 'Подразделение из ZiK'
$FromName = "Сравнение данных из ЗУП с Active Directory"
$aArray_exception = IniReadSection(@ScriptDir & "\AD.ini", "AD_exception") ; массив УЗ, которые не обрабатываются
If @error Then
MsgBox(4096, "", "Произошла ошибка, возможно отсутствует INI-файл.")
Exit
Else
EndIf
Dim $oContainer
Dim $oUser,$objItem,$oContainerFilter
$aArray = IniReadSection(@ScriptDir & "\AD.ini", "AD") ; Массив контейнеров для выгрузки
If @error Then
MsgBox(4096, "", "Произошла ошибка, возможно отсутствует INI-файл.")
Exit
Else
EndIf
;MsgBox(4096, "", $aArray[0][0])
Local $aResult[1000][7] ; Итоговый массив
Local $aArrayOUT[1000][8] ; Выходной массив
$i=1
For $j =1 to $aArray[0][0]
$sContainer = $aArray[$j][1]
$oContainer = ObjGet('LDAP://'&$sContainer) ; Получить ссылку на объект
; Фильтр, чтобы уменьшить объём возвращаемых данных и увеличить производительность
Local $avArray[1] = ["User"] ;"User" "Computer" "Group" "LocalGroup" "GlobalGroup" "OrganizationalUnit"
$oContainer.Filter =$avArray
For $objItem In $oContainer
$aResult[$i][0]=$objItem.company ; Организация
$aResult[$i][1]=StringTrimLeft($objItem.Name,3) ; ФИО
$aResult[$i][2]=$objItem.employeeID ; Табельный номер
$aResult[$i][3]=$objItem.title ; Должность
$aResult[$i][4]=$objItem.department ; Подразделение
$aResult[$i][6]=$objItem.distinguishedName ; Полное имя контейнера AD
$sOU = $aResult[$i][6]
$aRes = StringRegExp($sOU, 'OU=(.*?),OU=', 3)
$sName = $aRes[0]
$aResult[$i][5]= $sName ; Имя контейнера AD
$i+=1
Next
Next
;_ArrayDisplay($aResult)
; .........................Поиск и удаление ячеек массива УЗ,которые не обрабатываются...
For $i = 0 to UBound($aArray_exception) - 1
$iIndex = _ArraySearch($aResult, $aArray_exception[$i][1])
If @error Then
Else
_ArrayDelete($aResult,$iIndex)
EndIf
Next
;_ArrayDisplay($aResult)
; .................Вывод из ЗУП...
$aArrayINI = IniReadSection(@ScriptDir & "\AD.ini", "AD-ZiK")
If @error Then
MsgBox(4096, "", "Произошла ошибка, возможно отсутствует INI-файл.")
Exit
Else
EndIf
; .................Считываение из документа по Оптовику в массив ...
;$sFilePathOPT = '\\co-1c02\Выгрузка сотрудников\Сотрудники_ОПТОВИК.xls'
$oExcel = _ExcelBookOpen($sFilePathOPT, 0)
$aArrayOPT = _ExcelReadSheetToArray($oExcel)
_ExcelBookClose($oExcel) ; Закрываем рабочую книгу
; .................Считываение из документа по Эссен Логистик в массив ...
;$sFilePathLOG = '\\co-1c01\Выгрузка сотрудников\Сотрудники_ЛОГИСТИК.xls'
$oExcel = _ExcelBookOpen($sFilePathLOG, 0)
$aArrayLogistik = _ExcelReadSheetToArray($oExcel)
_ExcelBookClose($oExcel) ; Закрываем рабочую книгу
; .................Считываение из документа по Камилле в массив ...
;$sFilePathKAM = '\\co-1c01\Выгрузка сотрудников\Сотрудники_КАМИЛЛА.xls'
$oExcel = _ExcelBookOpen($sFilePathKAM, 0)
$aArrayKamilla = _ExcelReadSheetToArray($oExcel)
_ExcelBookClose($oExcel) ; Закрываем рабочую книгу
; .................Объединение трех массивов в один $aArrayZiK ...
$iX = $aArrayOPT[0][0] + $aArrayLogistik[0][0] + $aArrayKamilla[0][0]
$iY = $aArrayOPT[0][1]
Dim $aArrayZiK[$iX + 1][$iY]
For $x = 1 To $aArrayOPT[0][0]
For $y = 1 To $aArrayOPT[0][1] - 1
$aArrayZiK[$x][$y] = $aArrayOPT[$x][$y]
Next
Next
$iOPT = $aArrayOPT[0][0]
For $x = 1 To $aArrayLogistik[0][0]
For $y = 1 To $aArrayLogistik[0][1] - 1
$aArrayZiK[$x + $iOPT][$y] = $aArrayLogistik[$x][$y]
Next
Next
$iLogistik = $aArrayLogistik[0][0] + $iOPT
For $x = 1 To $aArrayKamilla[0][0]
For $y = 1 To $aArrayKamilla[0][1] - 1
$aArrayZiK[$x + $iLogistik][$y] = $aArrayKamilla[$x][$y]
Next
Next
; .................Приводим в соответствие подразделение из ЗУП с AD...
For $i = 1 To $iX
For $j = 1 To UBound($aArrayINI) - 1
If $aArrayZiK[$i][6] = $aArrayINI[$j][0] Then $aArrayZiK[$i][5] = $aArrayINI[$j][1]
Next
Next
; .................Удаляем пробелы в колонке Табельный номер...
For $i = 1 To $iX
$sSpace = StringStripWS($aArrayZiK[$i][3], 8)
$aArrayZiK[$i][3] = $sSpace
Next
;_ArrayDisplay($aArrayZiK)
; .................Сравнение данных Табельный номер...
$Row = 0
For $i = 1 to UBound($aResult) - 1
For $j = 1 To Ubound($aArrayZiK) - 1
If $aResult[$i][1] = $aArrayZiK[$j][2] Then
If $aResult[$i][2] <> $aArrayZiK[$j][3] Then
$aArrayOUT[$Row][0] = $aResult[$i][1] ; ФИО из AD
$aArrayOUT[$Row][1] = $aResult[$i][2] ; Табельный номер из AD
$aArrayOUT[$Row][2] = $aArrayZiK[$j][3] ; Табельный номер из ZiK
$aArrayOUT[$Row][7] = $aResult[$i][6] ; CN
$Row +=1
Else
EndIf
EndIf
Next
Next
;_ArrayDisplay($aArrayOUT)
;MsgBox(4096, "", $Row)
If $Row > 0 Then
; .................Сохраняем расхождения данных Табельный номер в Excel ...
$iTab = 1
Local $oExcelOUT = _ExcelBookNew(0) ; Создаем новую рабочую книгу
_ExcelWriteCell($oExcelOUT, $sFIO, 1, 1)
_ExcelWriteCell($oExcelOUT, $sTabNumberAD, 1, 2)
_ExcelWriteCell($oExcelOUT, $sTabNumberZiK, 1, 3)
For $i = 0 to $Row
For $j = 0 to 2
_ExcelWriteCell($oExcelOUT, $aArrayOUT[$i][$j], $i + 2, $j + 1)
Next
Next
$oExcelOUT.Columns('A:G' ).EntireColumn.AutoFit ;колонки A-G
_ExcelBookSaveAs($oExcelOUT, @ScriptDir & '\Табельный номер', "xls", 0, 1) ; Сохраняем файл
_ExcelBookClose($oExcelOUT) ; Закрываем рабочую книгу
; .................Исправление данных Табельный номер...
For $i = 0 to $Row
$sCN = $aArrayOUT[$i][7]
$iTabNumber = $aArrayOUT[$i][2]
$iPID = Run(@ComSpec & ' /C dsmod user ' & '"' & $sCN & '"' & ' -empid ' & '"' & $iTabNumber & '"', '', @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)
;ConsoleWrite(' /C dsmod user ' & '"' & $sCN & '"' & ' -empid ' & '"' & $iTabNumber & '"')
Sleep(100)
Next
Else
$iTab = 0
EndIf
; .................Сравнение данных Должность...
$Row = 0
For $i = 1 to UBound($aResult) - 1
For $j = 1 To Ubound($aArrayZiK) - 1
If $aResult[$i][1] = $aArrayZiK[$j][2] Then
If $aResult[$i][3] <> $aArrayZiK[$j][4] Then
$aArrayOUT[$Row][0] = $aResult[$i][1] ; ФИО из AD
$aArrayOUT[$Row][1] = $aResult[$i][3] ; Должность из AD
$aArrayOUT[$Row][2] = $aArrayZiK[$j][4] ; Должность из ZiK
$aArrayOUT[$Row][7] = $aResult[$i][6] ; CN
$Row +=1
Else
EndIf
EndIf
Next
Next
;_ArrayDisplay($aArrayOUT, 'Табельный номер')
If $Row > 0 Then
; .................Сохраняем расхождения данных Табельный номер в Excel ...
$iPost = 1
Local $oExcelOUT = _ExcelBookNew(0) ; Создаем новую рабочую книгу
_ExcelWriteCell($oExcelOUT, $sFIO, 1, 1)
_ExcelWriteCell($oExcelOUT, $sPostAD, 1, 2)
_ExcelWriteCell($oExcelOUT, $sPostZiK, 1, 3)
For $i = 0 to $Row
For $j = 0 to 2
_ExcelWriteCell($oExcelOUT, $aArrayOUT[$i][$j], $i + 2, $j + 1)
Next
Next
$oExcelOUT.Columns('A:G' ).EntireColumn.AutoFit ;колонки A-G
_ExcelBookSaveAs($oExcelOUT, @ScriptDir & '\Должность', "xls", 0, 1) ; Сохраняем файл
_ExcelBookClose($oExcelOUT) ; Закрываем рабочую книгу
; .................Исправление данных Должность...
For $i = 0 to $Row
$sCN = $aArrayOUT[$i][7]
$iTitle = $aArrayOUT[$i][2]
$iPID = Run(@ComSpec & ' /C dsmod user ' & '"' & $sCN & '"' & ' -Title ' & '"' & $iTitle & '"', '', @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)
;ConsoleWrite(' /C dsmod user ' & '"' & $sCN & '"' & ' -Title ' & '"' & $iTitle & '"')
Sleep(100)
Next
Else
$iPost = 0
EndIf
; .................Сравнение данных Отдел...
$Row = 0
For $i = 1 to UBound($aResult) - 1
For $j = 1 To Ubound($aArrayZiK) - 1
If $aResult[$i][1] = $aArrayZiK[$j][2] Then
If $aResult[$i][4] <> $aArrayZiK[$j][5] Then
$aArrayOUT[$Row][0] = $aResult[$i][1] ; ФИО из AD
$aArrayOUT[$Row][1] = $aResult[$i][4] ; Подразделение из AD
$aArrayOUT[$Row][2] = $aArrayZiK[$j][5] ; Подразделение из ZiK
$aArrayOUT[$Row][7] = $aResult[$i][6] ; CN
$Row +=1
Else
EndIf
EndIf
Next
Next
;_ArrayDisplay($aArrayOUT, 'Отдел')
If $Row > 0 Then
; .................Сохраняем расхождения данных Отдел в Excel .........................................................................................
$iUnit = 1
Local $oExcelOUT = _ExcelBookNew(0) ; Создаем новую рабочую книгу
_ExcelWriteCell($oExcelOUT, $sFIO, 1, 1)
_ExcelWriteCell($oExcelOUT, $sUnitAD, 1, 2)
_ExcelWriteCell($oExcelOUT, $sUnitZiK , 1, 3)
For $i = 0 to $Row
For $j = 0 to 2
_ExcelWriteCell($oExcelOUT, $aArrayOUT[$i][$j], $i + 2, $j + 1)
Next
Next
$oExcelOUT.Columns('A:G' ).EntireColumn.AutoFit ;колонки A-G
_ExcelBookSaveAs($oExcelOUT, @ScriptDir & '\Отдел', "xls", 0, 1) ; Сохраняем файл
_ExcelBookClose($oExcelOUT) ; Закрываем рабочую книгу
; .................Исправление данных Отдел...
For $i = 0 to $Row
$sCN = $aArrayOUT[$i][7]
$iTitle = $aArrayOUT[$i][2]
$iPID = Run(@ComSpec & ' /C dsmod user ' & '"' & $sCN & '"' & ' -dept ' & '"' & $iTitle & '"', '', @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)
;ConsoleWrite(' /C dsmod user ' & '"' & $sCN & '"' & ' -dept ' & '"' & $iTitle & '"')
Sleep(100)
Next
Else
$iUnit = 0
EndIf
$aArrayMail = IniReadSection(@ScriptDir & "\AD.ini", "Mail")
If $iTab + $iPost + $iUnit > 0 Then
if $iTab = 1 Then $rc = _INetSmtpMailCom($SmtpServer, $FromName, $aArrayMail[1][1],$aArrayMail[2][1], 'Изменения данных Табельный номер', 'Внимание! Изменения по табельным номерам есть', @ScriptDir & '\Табельный номер.xls', $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
if $iPost = 1 Then $rc = _INetSmtpMailCom($SmtpServer, $FromName, $aArrayMail[1][1],$aArrayMail[2][1], 'Изменения данных Должность', 'Внимание! Изменения по данным Должность есть', @ScriptDir & '\Должность.xls', $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
if $iUnit = 1 Then $rc = _INetSmtpMailCom($SmtpServer, $FromName, $aArrayMail[1][1],$aArrayMail[2][1], 'Изменения данных Отдел', 'Внимание! Изменения по данным Отдел есть', @ScriptDir & '\Отдел.xls', $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
If @error Then
MsgBox(0, "Error sending message", "Error code:" & @error & " Description:" & $rc)
EndIf
Else
$Body = "Изменений в ЗУП нет"
$AttachFiles = ''
$Subject = 'Изменнений в ЗУП нет'
$rc = _INetSmtpMailCom($SmtpServer, $FromName, $aArrayMail[1][1],$aArrayMail[2][1], $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
If @error Then
MsgBox(0, "Error sending message", "Error code:" & @error & " Description:" & $rc)
EndIf
EndIf
; .................Сравнение данных Отдел ЗУП и контейнер в AD...
$Row = 0
$iCont = 0
For $i = 1 to UBound($aResult) - 1
For $j = 1 To Ubound($aArrayZiK) - 1
If $aResult[$i][1] = $aArrayZiK[$j][2] Then
If $aResult[$i][5] <> $aArrayZiK[$j][5] And $aResult[$i][5] <> 'Пользователи' Then
$aArrayOUT[$Row][0] = $aResult[$i][1] ; ФИО из AD
$aArrayOUT[$Row][1] = $aResult[$i][5] ; Подразделение из AD
$aArrayOUT[$Row][2] = $aArrayZiK[$j][5] ; Подразделение из ZiK
$aArrayOUT[$Row][7] = $aResult[$i][6] ; CN
$Row +=1
$iCont = 1
Else
EndIf
EndIf
Next
Next
;_ArrayDisplay($aArrayOUT, 'Контейнер')
; .................Сохраняем расхождения данных Отдел в Excel .........................................................................................
Local $oExcelOUT = _ExcelBookNew(0) ; Создаем новую рабочую книгу
_ExcelWriteCell($oExcelOUT, $sFIO, 1, 1)
_ExcelWriteCell($oExcelOUT, 'Имя контейнера в AD', 1, 2)
_ExcelWriteCell($oExcelOUT, $sUnitZiK , 1, 3)
For $i = 0 to $Row
For $j = 0 to 2
_ExcelWriteCell($oExcelOUT, $aArrayOUT[$i][$j], $i + 2, $j + 1)
Next
Next
$oExcelOUT.Columns('A:G' ).EntireColumn.AutoFit ;колонки A-G
_ExcelBookSaveAs($oExcelOUT, @ScriptDir & '\Контейнер', "xls", 0, 1) ; Сохраняем файл
_ExcelBookClose($oExcelOUT) ; Закрываем рабочую книгу
Sleep(5000)
if $iCont = 1 Then $rc = _INetSmtpMailCom($SmtpServer, $FromName, $aArrayMail[1][1],$aArrayMail[2][1], 'Проверка на соответствие отдел ЗУП и контейнер в AD', 'Внимание! Есть несоответствие', @ScriptDir & '\Контейнер.xls', $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
If @error Then
MsgBox(0, "Error sending message", "Error code:" & @error & " Description:" & $rc)
EndIf
; .................Проверка на наличие уволенных ...
$Row = 0
$iDel = 0
For $i = 1 to UBound($aResult) - 1
$iIndex = _ArraySearch($aArrayZiK, $aResult[$i][1])
If @error Then
$aArrayOUT[$Row][0] = $aResult[$i][1]
$aArrayOUT[$Row][1] = $aResult[$i][3] ; Должность из AD
$aArrayOUT[$Row][2] = $aResult[$i][4] ; Подразделение из AD
$Row +=1
$iDel = 1
Else
;MsgBox(4096, 'найден в массиве в позиции ' & $iIndex & ".")
EndIf
Next
;_ArrayDisplay($aArrayOUT, 'Уволенные')
; .................Сохраняем в Excel ...
$iPost = 1
Local $oExcelOUT = _ExcelBookNew(0) ; Создаем новую рабочую книгу
_ExcelWriteCell($oExcelOUT, $sFIO, 1, 1)
_ExcelWriteCell($oExcelOUT, $sPostAD, 1, 2)
_ExcelWriteCell($oExcelOUT, $sUnitAD, 1, 3)
For $i = 0 to $Row
For $j = 0 to 2
_ExcelWriteCell($oExcelOUT, $aArrayOUT[$i][$j], $i + 2, $j + 1)
Next
Next
$oExcelOUT.Columns('A:G' ).EntireColumn.AutoFit ;колонки A-G
_ExcelBookSaveAs($oExcelOUT, @ScriptDir & '\Уволенные', "xls", 0, 1) ; Сохраняем файл
_ExcelBookClose($oExcelOUT) ; Закрываем рабочую книгу
Sleep(5000)
if $iDel = 1 Then $rc = _INetSmtpMailCom($SmtpServer, $FromName, $aArrayMail[1][1],$aArrayMail[2][1], 'Проверка на наличие уволенных', 'Внимание! Есть предполагаемые уволенные', @ScriptDir & '\Уволенные.xls', $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
If @error Then
MsgBox(0, "Error sending message", "Error code:" & @error & " Description:" & $rc)
EndIf
; The UDF
Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance="Normal", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0)
Local $objEmail = ObjCreate("CDO.Message")
$objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
$objEmail.To = $s_ToAddress
Local $i_Error = 0
Local $i_Error_desciption = ""
If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
$objEmail.Subject = $s_Subject
If StringInStr($as_Body, "<") And StringInStr($as_Body, ">") Then
$objEmail.HTMLBody = $as_Body
Else
$objEmail.Textbody = $as_Body & @CRLF
EndIf
If $s_AttachFiles <> "" Then
Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
For $x = 1 To $S_Files2Attach[0]
$S_Files2Attach[$x] = _PathFull($S_Files2Attach[$x])
;~ ConsoleWrite('@@ Debug : $S_Files2Attach[$x] = ' & $S_Files2Attach[$x] & @LF & '>Error code: ' & @error & @LF) ;### Debug Console
If FileExists($S_Files2Attach[$x]) Then
ConsoleWrite('+> File attachment added: ' & $S_Files2Attach[$x] & @LF)
$objEmail.AddAttachment($S_Files2Attach[$x])
Else
ConsoleWrite('!> File not found to attach: ' & $S_Files2Attach[$x] & @LF)
SetError(1)
Return 0
EndIf
Next
EndIf
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
If Number($IPPort) = 0 then $IPPort = 25
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
;Authenticated SMTP
If $s_Username <> "" Then
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
EndIf
If $ssl Then
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
EndIf
;Update settings
$objEmail.Configuration.Fields.Update
; Set Email Importance
Switch $s_Importance
Case "High"
$objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "High"
Case "Normal"
$objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Normal"
Case "Low"
$objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Low"
EndSwitch
$objEmail.Fields.Update
; Sent the Message
$objEmail.Send
If @error Then
SetError(2)
Return $oMyRet[1]
EndIf
$objEmail=""
EndFunc ;==>_INetSmtpMailCom
;
;
; Com Error Handler
Func MyErrFunc()
$HexNumber = Hex($oMyError.number, 8)
$oMyRet[0] = $HexNumber
$oMyRet[1] = StringStripWS($oMyError.description, 3)
ConsoleWrite("### COM Error ! Number: " & $HexNumber & " ScriptLine: " & $oMyError.scriptline & " Description:" & $oMyRet[1] & @LF)
SetError(1); something to check for when this function returns
Return
EndFunc ;==>MyErrFunc