1

Тема: VBS: Не заполняется файл лога

On Error Resume Next

fDir = "D:\WORK\"    ' - папка обмена
inNode = "Test"    ' - узел где запускаем
outNode = "Z"    ' - узел с которым обмениваемся 
fileName1 = "Message_" & outNode & "_" & inNode & ".xmlz"
fileName2 = "Message_" & inNode & "_" & outNode & ".xmlz"

nameFTP = "фтп сервер" 'адрес сервера
usrFTP = ""
passFTP = ""


set fso = CreateObject("Scripting.FileSystemObject") 
Set WSHshell = WScript.CreateObject("WScript.Shell") 

if FileLive(fDir & "obmen_1c.lg", 0) Then ' Если файл уже есть то перемещаем его во временные файлы
    Set cScript = fso.OpenTextFile(fDir & "obmen_1c.lg")  '-Обозначаем место, где будет открыт файл логов
Else
    Set cScript = fso.CreateTextFile(fDir & "obmen_1c.lg")  '-Обозначаем место, где будет создан и сохранен файл логов
    WScript.Echo "" & Now & "Файл логов создан"   ' - если файла загрузки нет 
    
end if
'Set sDir = WSHshell.Environment("Process")    ' - находим путь к папке Windows 
Set objShell = CreateObject("Shell.Application")

cScript.WriteLine "" & Now & ": Начат обмен"

if FileLive(fDir & fileName1, 0) Then ' Если файл уже есть то перемещаем его во временные файлы
    Set objFolder = objShell.NameSpace(fDir + "Temp\") 'место назначения
    objFolder.MoveHere fDir & fileName1
    WScript.Sleep 5000
    cScript.WriteLine "" & Now & ": Файл " & fDir & fileName1 & " перемещен во временные файлы."
    Else
End if

Set objFolder = objShell.NameSpace(fDir) 'место назначения
objFolder.CopyHere "ftp://" & usrFTP & ":" & passFTP & "@" & nameFTP & "/" & fileName1
WScript.Sleep 5000

if FileLive(fDir & fileName1, 0) Then  ' Если файл скачался запускаем обмен
    cScript.WriteLine "" & Now & ": Файл " & fDir & fileName1 & " Скопирован с FTP сервера."
    Set objFolder = objShell.NameSpace(fDir + "Temp\") 'место назначения
    objFolder.MoveHere fDir & fileName2
    cScript.WriteLine "" & Now & ": Файл " & fDir & fileName2 & " перемещен во временные файлы."
    'WSHshell.Run " прога ", 0
    'WScript.Sleep 30000 'даём время на загрузку выгрузку (30 сек)
    WScript.Sleep 5000 'даём время на перемещение (5 сек)
    if FileLive(fDir & fileName2, 1) Then  ' Если файл сформировался кидаем его на FTP
        cScript.WriteLine "" & Now & ": Файл " & fDir & fileName2 & " 1С 8 сформировал файл."
        'Set objFolder = objShell.NameSpace(fDir & "Temp\FTP\") 'место назначения
        'objFolder.MoveHere "ftp://" & usrFTP & ":" & passFTP & "@" & nameFTP & "/" & fileName2
        'WScript.Sleep 5000 'даём время на перемещение (5 сек)
        if FileLive(fDir & "Temp\FTP\" & fileName2, 0) then
            cScript.WriteLine "" & Now & ": Файл " & fileName2 & " перемещен во временные файлы с FTP."
        end if
        
        Set objFolder = objShell.NameSpace("ftp://" & usrFTP & ":" & passFTP & "@" & nameFTP & "/") 'место назначения
        objFolder.CopyHere fDir & fileName2
        WScript.Sleep 5000 'даём время на закачку (5 сек)
        cScript.WriteLine "" & Now & ": Файл " & fileName2 & " скопирован на FTP."
        
            if FileLive(fDir & "Temp\FTP\" & fileName1, 0) Then  ' Чистка темпов
                Set F = FSO.GetFile(fDir & "Temp\FTP\" & fileName1)
                F.Delete
                cScript.WriteLine "" & Now & ": Файл удален "  &  fDir & "Temp\FTP\" & fileName1 & " чистка темпов."
            End if
            if FileLive(fDir & "Temp\FTP\" & fileName2, 0) Then  ' Чистка темпов
                Set F = FSO.GetFile(fDir & "Temp\FTP\" & fileName2)
                F.Delete
                cScript.WriteLine "" & Now & ": Файл удален "  &  fDir & "Temp\FTP\" & fileName2 & " чистка темпов."
            End if
            if FileLive(fDir & "Temp\" & fileName1, 0) Then  ' Чистка темпов
                Set F = FSO.GetFile(fDir & "Temp\" & fileName1)
                F.Delete
                cScript.WriteLine "" & Now & ": Файл удален "  &  fDir & "Temp\" & fileName1 & " чистка темпов."
            End if
            if FileLive(fDir & "Temp\" & fileName2, 0) Then  ' Чистка темпов
                Set F = FSO.GetFile(fDir & "Temp\" & fileName2)
                F.Delete
                cScript.WriteLine "" & Now & ": Файл удален "  &  fDir & "Temp\" & fileName2 & " чистка темпов."
            End if
        WScript.Echo "" & Now & "Обмен прошел!"   ' - если файла загрузки нет 
        cScript.WriteLine "" & Now & ": Обмен закончился успешно! "
    Else
        WScript.Echo "" & Now & "Обмен не прошел. Ошибка выгрузки!"   ' - если файла загрузки нет 
        cScript.WriteLine "" & Now & ": Обмен не прошел. Не сформировался файл выгрузки! "
    End if
Else
    WScript.Echo "" & Now & "Обмен не прошел. Ошибка загрузки!"   ' - если файла загрузки нет 
        cScript.WriteLine "" & Now & ": Обмен не прошел. Не скопирован файл загрузки! "
End if
cScript.Close                                             '- Конец записи в файл логов 

Set fso = Nothing 
Set cScript = Nothing 
Set objFolder  = Nothing 
Set WSHshell  = Nothing 
Set F  = Nothing 

WScript.quit(0) ' -выход

Function FileLive(nameFile, sleep)
    set fs = CreateObject("Scripting.FileSystemObject") 
    if sleep = 1 then
        WScript.Sleep 15000 'даём время на скачивание (15 сек)
    else
        WScript.Sleep 2000 'даём время на скачивание (5 сек)
    end if
    tempTime = -1
    if FS.FileExists(nameFile) then
        set f = FSO.GetFile(nameFile)
        do while tempTime <> f.DateLastModified 
            tempTime = f.DateLastModified
            WScript.Sleep 5000 'даём время на скачивание (5 сек)
        loop
    end if
    FileLive = FS.FileExists(nameFile)
'    WScript.Echo "3 " & FSO.FileExists(nameFile)  ' - если файла загрузки нет 
    Set fs = Nothing 
End Function

Скрипт отрабатывает. Но лог пустой. Где я протупил?

2

Re: VBS: Не заполняется файл лога

ToTAmon
1) Вы "протупили" поставив в начале кода On Error Resume Next. Предположительно оишбка происходит, а вы её не наблюдаете
2) Для того, чтобы ответить на Ваш вопрос надо как минимум иметь возможность протестировать Ваш код. А значит иметь файлы с которыми работает Ваш скрипт. ) Таковых у нас нет.

Рекомендую Вам убрать из кода On Error Resume Next. Если при запуске ошибка на экране не появится, то смотрите по шагам с MsgBox-ом

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

3

Re: VBS: Не заполняется файл лога

Поправка.
Файл не заполняется только когда открывается методом OpenTextFile, когда CreateTextFile все работает. Но это не вариант.

4

Re: VBS: Не заполняется файл лога

Xameleon пишет:

ToTAmon
1) Вы "протупили" поставив в начале кода On Error Resume Next. Предположительно оишбка происходит, а вы её не наблюдаете
2) Для того, чтобы ответить на Ваш вопрос надо как минимум иметь возможность протестировать Ваш код. А значит иметь файлы с которыми работает Ваш скрипт. ) Таковых у нас нет.

Рекомендую Вам убрать из кода On Error Resume Next. Если при запуске ошибка на экране не появится, то смотрите по шагам с MsgBox-ом

1) Понял!

2) Файлы пока неструктурированые с названиями:
Message_Test_Z.xmlz
Message_Z_Test.xmlz

Работа проги эмулируется копированием файла "Message_Test_Z.xmlz" в папку вручную.

Сейчас попробую! Спасибо!

Комментарием выше уточнение проблемы, может быть что то посоветуете исходя из?

5

Re: VBS: Не заполняется файл лога

ToTAmon пишет:

Поправка.
Файл не заполняется только когда открывается методом OpenTextFile, когда CreateTextFile все работает. Но это не вариант.

Делаем предположение, что код падает на этой строке.

Set cScript = fso.OpenTextFile(fDir & "obmen_1c.lg")

Причина - Файл отсутствует. А вы не указываете флаг create = True
Метод OpenTextFile требует подтверждения на создание файла.
http://msdn.microsoft.com/en-us/library … s.85).aspx

create
Optional. Boolean value that indicates whether a new file can be created if the specified filename doesn't exist. The value is True if a new file is created, False if it isn't created. If omitted, a new file isn't created.

Значит должно быть что то типа

Set cScript = fso.OpenTextFile(fDir & "obmen_1c.lg",8,True)
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

6

Re: VBS: Не заполняется файл лога

Файл существует. Создан на первом запуске, но сейчас попробую поменять. Еще раз спасибо!

7

Re: VBS: Не заполняется файл лога

Второе предположение. ) Т.к вы даже не указываете режим iomode

iomode
Optional. Can be one of three constants: ForReading, ForWriting, or ForAppending.

то файл по умолчанию открывается на чтение. А значит в лог ниже вы писать уже не сможете. А получите сообщение "Недопустимый режим файла."

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

8

Re: VBS: Не заполняется файл лога

2 Xameleon

Спасибо! После замены:

if FileLive(fDir & "obmen_1c.lg", 0) Then ' Если файл уже есть то перемещаем его во временные файлы
    Set cScript = fso.OpenTextFile(fDir & "obmen_1c.lg")  '-Обозначаем место, где будет открыт файл логов
Else
    Set cScript = fso.CreateTextFile(fDir & "obmen_1c.lg")  '-Обозначаем место, где будет создан и сохранен файл логов
    WScript.Echo "" & Now & "Файл логов создан"   ' - если файла загрузки нет 
    
end if

на

Set cScript = fso.OpenTextFile(fDir & "obmen_1c.lg",8,True)

Все заработало!

Тему можно сносить