Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Пользователь


Сообщения: 60
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, День добрый! С логированием разобрался, с горем пополам.
Хочу сделать проверку, в ситуации когда папка с файлами реестра пуста, чтобы выводилось сообщение об этом.

Просьба подсказать где ошибка.. у меня выводится сообщение что реестров нет (папка пуста) при любых случаях, даже если файлы там есть.

Скрытый текст

Option Explicit

Const xlCSV = 6
Const xlWindows = 2

Dim Log 'Лог-файл


Dim strSourceFolder
Dim strSourceFile

Dim strTemplateFile

Dim strRelativeDestFolder
Dim strDestFolder

Dim strLogDestFolder 'Папка, в которой будут создаваться лог-файлы

Dim objFSO
Dim objExcel

Dim objFolder
Dim colFiles

Dim objFile

Dim objTemplateFile
Dim objSourceFile

Dim i
Dim strDestFile

Dim strLogDestFile

Dim SumSourceFile 'Сумма по реестру
Dim SumDestFile 'Сумма по чекам
Dim SumTotal 'Общая сумма

Dim CountSourceFiles 'Для подсчета файлов реестра
CountSourceFiles = 0

Dim anyValue

'Здесь указать полный адрес папки с файлами реестра:
strSourceFolder = "C:\Реестр\Реестр"


strTemplateFile = "C:\Реестр\Шаблон\check.csv"
strRelativeDestFolder = "..\Итог"
strLogDestFolder = "C:\Касса"

'If WScript.Arguments.Count = 1 Then
' strSourceFolder = WScript.Arguments.Item(0)

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FileExists(strTemplateFile) Then
If objFSO.FolderExists(strSourceFolder) Then
If objFSO.FileExists(objSourceFile) Then

strDestFolder = objFSO.GetAbsolutePathName(objFSO.BuildPath(strSourceFolder, strRelativeDestFolder))
If Not objFSO.FolderExists(strDestFolder) Then
objFSO.CreateFolder strDestFolder
End If

'Создание папки Касса:
If Not objFSO.FolderExists(strLogDestFolder) Then
objFSO.CreateFolder strLogDestFolder
End If

Set objExcel = Nothing

For Each objFile In objFSO.GetFolder(strSourceFolder).Files

'Подсчет количества файлов реестра:
CountSourceFiles = CountSourceFiles + 1

Select Case LCase(objFSO.GetExtensionName(objFile.Name))
Case "xls", "xlsx"
If objExcel Is Nothing Then
Set objExcel = WScript.CreateObject("Excel.Application")
End If

objExcel.Workbooks.OpenText strTemplateFile, , , , , , , , , , , , , , , , , True
Set objTemplateFile = objExcel.Workbooks.Item(1)

Set objSourceFile = objExcel.Workbooks.Open(objFile.Path, False, True)

For i = 1 To objSourceFile.Worksheets.Item(1).UsedRange.Rows.Count - 2
With objTemplateFile.Worksheets.Item(1)
anyValue = objSourceFile.Worksheets.Item(1).Cells.Item(i + 1, 5).Value

.Range("B3").Value = anyValue
.Range("F2").Value = anyValue

anyValue = objSourceFile.Worksheets.Item(1).Cells.Item(i + 1, 6).Value

.Range("D3").Value = anyValue
.Range("D4").Value = anyValue
.Range("H3").Value = anyValue

.Range("L3").Value = Fix((anyValue * 18 / 118 + 0.005) * 100) / 100

'Подсчет общей суммы:
SumTotal = SumTotal + anyValue

'Подсчет суммы по реестру:
SumSourceFile = SumSourceFile + anyValue

'Подсчет суммы по чекам:
SumDestFile = SumDestFile + .Range("H3").Value

End With

strDestFile = objFSO.BuildPath(strDestFolder, objFSO.GetBaseName(strTemplateFile) & "_" & objFSO.GetBaseName(objFile.Name) & "_" & Right("000" & CStr(i), 3) & "." & objFSO.GetExtensionName(strTemplateFile))

If objFSO.FileExists(strDestFile) Then
objFSO.DeleteFile strDestFile, True
End If

objTemplateFile.SaveAs strDestFile, xlCSV, , , , , , , , , , True

Next

'В strLogDestFile записывается где будет создан лог-файл и как он будет называться:
strLogDestFile = objFSO.BuildPath(strLogDestFolder, Day(now) & "_" & Month(now) & "_" & Year(now) & ".txt")

'Открытие лог-файла или создание, если его нет:
Set Log = objFSO.OpenTextFile(strLogDestFile, 8, True)
'Запись данных в лог-файл:
Log.Write FormatDateTime(now, 0) 'В лог записывается дата и время обработки файлов
Log.Write ". Обработан файл " & objFSO.GetBaseName(objFile.Name) & "." & objFSO.GetExtensionName(objFile.Name)
Log.Write ". Строк обработано: " & CStr(objSourceFile.Worksheets.Item(1).UsedRange.Rows.Count - 2)
Log.Write ". Чеков создано: " & CStr(objSourceFile.Worksheets.Item(1).UsedRange.Rows.Count - 2)
Log.Write ". Сумма по реестру: " & SumSourceFile
Log.Write ". Сумма по чекам: " & SumDestFile
'Сравнение сумм по реестру и чекам - если они равны, то это записывается в лог
If SumSourceFile = SumDestFile Then
Log.Write ". Суммы равны."
End If
Log.WriteBlankLines(1)
Log.Close

'Обнуление сумм, чтобы для каждого файла реестра и его чеков считалась своя отдельная сумма
SumSourceFile = 0
SumDestFile = 0

objSourceFile.Close False
objTemplateFile.Close False
End Select
Next

If Not objExcel Is Nothing Then
objExcel.Quit
Set objExcel = Nothing
End If

' Очищение папки Реестр
Set objFSO = CreateObject("Scripting.FileSystemObject")

Set objFolder = objFSO.GetFolder(strSourceFolder)
Set colFiles = objFolder.Files

For Each objFolder in colFiles
objFolder.Delete

next

'Выводит окно о завершении обработки файлов:
WScript.Echo "Чеки сформированы успешно. Обработано " & CountSourceFiles & " реестра на сумму " & SumTotal & "."

Else
WScript.Echo "Нет файла реестра [" & strSourceFile & "]."
WScript.Quit 3
End if
Else
WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
WScript.Quit 2
End If

Set objFSO = Nothing

Else
WScript.Echo "Can't find template file [" & strTemplateFile & "]."
WScript.Quit 1
End If


'Else
' WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source folder>"
' WScript.Quit 1
'End If

WScript.Quit 0


Последний раз редактировалось jordan_74, 22-11-2018 в 18:07.


Отправлено: 08:50, 22-11-2018 | #65