gifts2017

УРБД: Автоматический обмен через интернет между центральной и периферийными базами в Windows 7 + 1С:Предприятие 7.7.

Опубликовал Сергей Космачев (ksnik) в раздел Администрирование - Распределенная БД (УРИБ, УРБД)

На инфостарте есть ряд навороченных средств, таких как у romix'а http://infostart.ru/public/15564/ или у Вадима http://infostart.ru/public/14945/, а в моей публикации все делается вручную, используются bat- файлы, vbscript, принцип действия прозрачен + по горячим следам поднимания УРБД уделил время многочисленным ссылкам. Весь процесс настройки автообмена через интернет от начала до конца:
1) Создаю периферийную базу.
2) Настраиваю автообмен УРБД (можно мастером).
3) Настраиваю пересылку файликов по ФТП.
4) Еще бывает автообмен через dropbox от Антона  (http://infostart.ru/public/72556/).
5) Настраиваю пересылку файликов по электронной почте (опционально).

Настройка обмена УРБД через интернет по шагам 1-3 и 5 (1C 7.7 + windows 7):

1) Стандартный процесс создания периферийной базы через «Файл/Загрузить данные» подробно описан в фирменной документации (это от Сергея Коцюры раздел Документация по УРИБ (методические рекомендации, установка и подключение, принципы работы, инициализация, выгрузка и загрузка, управление режимами миграции, средства встроенного языка).

Если периферийка не новая (например восстанавливается после сбоя), заново выгрузите из центральной базы первоначальный образ (для этого в центральной базе в файле 1SDBSET поменяйте значение поля DBSTATUS этой периферийной базы на "N").

Если ждать загрузки периферийной базы приходится долго, есть быстрый способ – копируем центральную и в копии (периферийной) удаляем таблицы 1SDWNLDS, 1SUPDTS, редактируем таблицу 1SDBSET, удаляем в ней все строчки кроме строчки данной периферийной ПБ и центральной ЦБ базы. В оставшихся двух строчках меняем статусы, в колонке DBSTATUS переназываем, меняем местами значения полей M и P.

Как пересоздать периферийку на mssql я написал в неубиваемой базе. Для mssql есть скрипт у Maksim K.


 2) Обмен выполняем в пакетном режиме 1С:Предприятия 7.7, теория:

http://www.softpoint.ru/article_id75.htm - подробно. Здесь у Ильи - кратко.

Общие принципы на примере совета Vasil Pupkin из Google+. Чтобы посмотреть цитату полностью нажмите спойлер:

------------------------- начало цитаты -----------------------------

Создайте *.cmd или *.vbs, в котором пропишите команды по запуску автообмена.

'On Error Resume Next
Dim DShell
Set DShell = CreateObject("WScript.Shell")

cmdTpl = "C:\Progra~1\1Cv77\BIN\1cv7s.exe CONFIG /DF:\Bases\Centr /nАдминистратор /p265042 /@F:\Start\SharedSync.prm"
DShell.Run cmdTpl, 1, True

cmdTpl = "C:\Progra~1\1Cv77\BIN\1cv7s.exe CONFIG /DF:\Bases\FA_SQL /nАдминистратор /p265042 /@F:\Start\SharedSync.prm"
DShell.Run cmdTpl, 1, True

cmdTpl = "C:\Progra~1\1Cv77\BIN\1cv7s.exe CONFIG /DF:\Bases\Centr /nАдминистратор /p265042 /@F:\Start\SharedSync.prm"
DShell.Run cmdTpl, 1, True

Создайте файл пакетного режима работы (файл F:\Start\SharedSync.prm в данном примере).

[General]

AutoExchange=1
Quit=1

[AutoExchange]

SharedMode=1
ReadFrom=*
WriteTo=*

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

------------------------- конец цитаты -----------------------------

Настраиваю автообмен (операционная система windows 7) в центральной базе. Для удобства отладки и диагностики не совмещаю загрузку и выгрузку. Сначала настраиваю автообмен в центральной базе (папка для обмена D:\1C-Data\ExchangeC). В батнике создаю скрипт загрузки D:\1C-Data\CIB\Exchange\download\download_SKL.bat со следующим содержимым:

cscript D:\1C-Data\CIB\Exchange\VBS\Obmen.Center.vbs "SKL" "D:\1C-Data\CIB\" UPLOAD %WINDIR% 1

Мои файлы настройки пакетного режима в каталоге D:\1C-Data\CIB\prm раздельные на загрузку и на выгрузку. На загрузку в центральной базе D:\1C-Data\CIB\prm\SKL.Download.prm вот такой:

[General]

Quit = 1

AutoExchange = 1

Output= "D:\1C-Data\CIB\\prm\SKL.Download.log"

[AutoExchange]

SharedMode = Y

WriteTo = SKL

Исходники скриптов обмена для центральной базы Obmen.Center.vbs и периферийки Obmen.Peref.vbs и соответствующие bat-файлы для запуска обмена (загрузки и выгрузки отдельно) доступны в файле для скачивания во вложении к этой публикации. Файлы для скачивания распаковываются непосредственно в информационную базу (в архиве две папки, одна для центра другая для периферийной базы).

Скрипт используемый для запуска обмена находится в центральной базе в каталоге D:\1C-Data\CIB\Exchange\VBS\Obmen.Center.vbs находится в файле для скачивания этой публикации и под этим спойлером:

------------------------- начало цитаты -----------------------------

Set Shell = WScript.CreateObject("WScript.Shell")

Set ArgObj = WScript.Arguments

Dim CodeIB
Dim pathIB
Dim Work
Dim pathWin

Set FS = CreateObject("Scripting.FileSystemObject")

Set Shell = WScript.CreateObject("WScript.Shell")
Set ArgObj = WScript.Arguments

Dim CodeIB
Dim pathIB
Dim Work
Dim pathWin

Dim path_nameUploadPRM
Dim path_nameUploadLog
Dim path_nameDownloadPRM
Dim path_nameDownloadLog
Dim path_nameFullLog

Dim path1cv7
Dim countBase

InitialsSub
WorkSub

Sub InitialsSub

If ArgObj.Count < 5 Then

WScript.Echo "Использование: Obmen.Center.vbs " 
WScript.Quit (GENERAL_FAILURE)

End If

CodeIB = ArgObj.Item(0)
pathIB = ArgObj.Item(1)
Work = ArgObj.Item(2)
pathWin = ArgObj.Item(3)
countBase = ArgObj.Item(4)

V77CLSID = Shell.RegRead("HKEY_CLASSES_ROOT\V77.Application\CLSID\")
path1cv7 = Shell.RegRead("HKEY_CLASSES_ROOT\CLSID\"&V77CLSID&"\LocalServer32\")

if FS.FolderExists(pathIB)=False Then

WScript.Echo "Указанный каталог информационной базы не существует: "+pathIB
WScript.Quit (GENERAL_FAILURE)

End if

pathPRM = pathIB&"\prm\"

If FS.FolderExists(pathPRM)=False Then

FS.CreateFolder(pathPRM)

End if

If Work = "UPLOAD1" Then

BaseCodeFromDisk

End If

nameUploadPRM = CodeIB & ".Upload.prm"
nameUploadLog = CodeIB & ".Upload.log"
nameDownloadPRM = CodeIB & ".Download.prm"
nameDownloadLog = CodeIB & ".Download.log"
nameFullLog = "Distr.log"

path_nameUploadPRM = pathPRM & nameUploadPRM
path_nameUploadLog = pathPRM & nameUploadLog
path_nameDownloadPRM = pathPRM & nameDownloadPRM
path_nameDownloadLog = pathPRM & nameDownloadLog
path_nameFullLog = pathPRM & nameFullLog

End Sub

Sub WorkSub

'Загрузка из
If Work = "UPLOAD" Then

UploadSub 

ElseIf Work = "DOWNLOAD" Then 

DownloadSub

End If

End Sub

Sub UploadSub

set filestream = FS.OpenTextFile(path_nameUploadPRM,2,1)

filestream.Write(_
"[General]" & vbNewLine & _
"Quit = 1" & vbNewLine & _
"AutoExchange = 1" & vbNewLine & _
"Output= """ & path_nameUploadLog &"""" & vbNewLine & _
"[AutoExchange]" & vbNewLine & _
"SharedMode = Y" & vbNewLine & _
"ReadFrom = " & CodeIB & vbNewLine & _
"")

filestream.Close()

If FS.FileExists(path_nameUploadLog) = True Then

FS.DeleteFile(path_nameUploadLog)

End If

Shell.Run """" & path1cv7 & """ config /d""" & pathIB & """ /NURBD /Purbd /@""" & path_nameUploadPRM & """" , vbNoFocus,True
rem Shell.Run """" C:\Program Files (x86)\1Cv77s\BIN\1cv7s.exe """ config /d""" & pathIB & """ /NURBD /Purbd /@""" & path_nameUploadPRM & """" , vbNoFocus,True

UploadFileName = ""
UploadErrorDescriprion = ""
UploadSucces = 0
UploadFail = 0
sMessage = ""

If FS.FileExists(path_nameUploadLog) = True Then

set filestream = FS.OpenTextFile(path_nameUploadLog,1)

While filestream.AtEndOfStream = False

sLine = filestream.ReadLine()

Ar = Split(sLine,";")
If UBound(Ar)>=7 Then

If Ar(4)="Distr" Then

Sobitie = Ar(5)
If Sobitie="DistUplBeg" Then

UploadFileName = Ar(7)
sMessage = sMessage & "Выполнена попытка загрузки из файла: " & UploadFileName & vbNewLine & vbNewLine

ElseIf Sobitie="DistUplErr" Then

sMessage = sMessage & "Во время загрузки возникла ошибка: " & Ar(7) & vbNewLine & vbNewLine
UploadCodeError = cCur(Ar(6))

ElseIf Sobitie="DistUplFail" Then

UploadFail = cCur(Ar(6))
sMessage = sMessage & "ЗАГРУЗКА НЕ БЫЛА ВЫПОЛНЕНА! " & vbNewLine & vbNewLine

ElseIf Sobitie="DistUplSuc" Then

UploadSucces = cCur(Ar(6))
sMessage = sMessage & "Загрузка успешно завершена! " & vbNewLine & vbNewLine

End If

End If

End if

Wend

filestream.Close()

Else

sMessage = sMessage & "Программа 1С:Предприятие не была запущена! " & vbNewLine & vbNewLine

End If

If UploadSucces = 1 Then

msgbox sMessage, vbOKOnly+vbInformation , "Загрузка выполнена успешно."

ElseIf UploadFail = 1 Then

msgbox sMessage, vbOKOnly + vbCritical , "ЗАГРУЗКА НЕ ВЫПОЛНЕНА !!!"

Else

msgbox sMessage, vbOKOnly + vbExclamation, "Результат работы неизвестен !!!"

End If

End Sub

Sub DownloadSub

set filestream = FS.OpenTextFile(path_nameDownloadPRM,2,1)

filestream.Write(_
"[General]" & vbNewLine & _
"Quit = 1" & vbNewLine & _
"AutoExchange = 1" & vbNewLine & _
"Output= """ & path_nameDownloadLog &"""" & vbNewLine & _
"[AutoExchange]" & vbNewLine & _
"SharedMode = Y" & vbNewLine & _
"WriteTo = " & CodeIB & vbNewLine & _
"")

filestream.Close()

If FS.FileExists(path_nameDownloadLog) = True Then

FS.DeleteFile(path_nameDownloadLog)

End If

Shell.Run """" & path1cv7 & """ config /d""" & pathIB & """ /NURBD /Purbd /@""" & path_nameDownloadPRM & """" , vbNoFocus,True

DownloadFileName = ""
DownloadErrorDescriprion = ""
DownloadSucces = 0
DownloadFail = 0
sMessage = ""

If FS.FileExists(path_nameDownloadLog) = True Then

set filestream = FS.OpenTextFile(path_nameDownloadLog,1)

While filestream.AtEndOfStream=False

sLine = filestream.ReadLine()

Ar = Split(sLine,";")
If UBound(Ar)>=7 Then

If Ar(4)="Distr" Then

Sobitie = Ar(5)

If Sobitie="DistDnldBeg" Then

DownloadFileName = Ar(7)
sMessage = sMessage & "Выполнена попытка выгрузки: " & DownloadFileName & vbNewLine & vbNewLine

ElseIf Sobitie="DistDnldErr" Then

sMessage = sMessage & "Во время выгрузки возникла ошибка: " & Ar(7) & vbNewLine & vbNewLine
DownloadCodeError = cCur(Ar(6))

ElseIf Sobitie="DistDnldFail" Then

DownloadFail = cCur(Ar(6))
sMessage = sMessage & "ВЫГРУЗКА НЕ БЫЛА ВЫПОЛНЕНА! " & vbNewLine & vbNewLine

ElseIf Sobitie="DistDnldSuc" Then

DownloadSucces = cCur(Ar(6))
sMessage = sMessage & "Выгрузка успешно завершена! " & vbNewLine & vbNewLine

End If

End if

End If 

Wend

filestream.Close()

Else

sMessage = sMessage & "Программа 1С:Предприятие не была запущена! " & vbNewLine & vbNewLine

End If

If DownloadSucces = 1 Then

msgbox sMessage, vbOKOnly + vbInformation, "Выгрузка выполнена успешно."

ElseIf DownloadFail = 1 Then

msgbox sMessage, vbOKOnly + vbCritical , "ВЫГРУЗКА НЕ ВЫПОЛНЕНА !!!"

Else

msgbox sMessage, vbOKOnly + vbExclamation, "Результат выгрузки неизвестен !!!"

End If

End Sub

------------------------- конец цитаты -----------------------------

Батник для выгрузки изменений из центральной базы D:\1C-Data\CIB\Exchange\upload\upload_SKL.bat вот такой:

cscript D:\1C-Data\CIB\Exchange\VBS\Obmen.Center.vbs "SKL" "D:\1C-Data\CIB\" DOWNLOAD %WINDIR% 1

Файл настройки пакетного задания 1С:Предприятия 7.7 для выгрузки изменений из центральной базы D:\1C-Data\CIB\prm\SKL.Upload.prm в каталоге D:\1C-Data\CIB\prm центральной базы вот такой:

[General]

Quit = 1

AutoExchange = 1

Output= "D:\1C-Data\CIB\\prm\SKL.Upload.log"

[AutoExchange]

SharedMode = Y

ReadFrom = SKL

----------------------------------------------------------------------------------------------------------------

*Еще для настройки локального обмена есть такие публикации Александра и Никиты, а так же «Мастер пакетных файлов для 1Сv7.7» для настройки любого пакетного задания и в том числе автообменаДалее возможные способы настройки обмена через интернет.


 3) Настраиваем обмен по протоколу ФТП.

В комментариях к неубиваемой базе было мнение записывать файл на ФТП примерно так:

------------------------- начало цитаты -----------------------------

' запись архива на FTP 
   ' сначала подготовим сценарий команд FTP 
   set f = fso.OpenTextFile("c:\ftp_cfg.tmp", 2, 1) 
   ' тут пишем адрес FTP (ftp.domain.com) и номера порта (21, если не сказано другое) 
   f.WriteLine "OPEN ftp.domain.com" 
   ' Ваш аккаунт на FTP. Во второй строчке просто пишется пароль. 
   f.WriteLine "anonymous" 
   f.WriteLine "" 
   ' выбор каталога на FTP сервере, куда сохранять ваш архив 
   f.WriteLine "CD pub"
   f.WriteLine "CD exchange.lutek.ru"
   f.WriteLine "bin"
   ' закачка архива 
   f.WriteLine "SEND " + filename 
   ' завершение сеанса FTP 
   f.WriteLine "BYE" 
   f.Close 
   ' запустим FTP-клиент с только что созданным сценарием 
   sh.Run "FTP -i -v -s:c:\ftp_cfg.tmp",10,1 
   ' удалим сценарий 
   fso.DeleteFile("c:\ftp_cfg.tmp") 

------------------------- конец цитаты -----------------------------

Но я уже давно привык к мощному ФТП-клиенту winscp и сделал настройки для него. При подготовке этой статьи наткнулся на подходящую респектабельную ссылку с картинками: http://center-comptech.ru/1c_7_7_nastroyka_avtoobmena_cherez_ftp.html.

Вот мои настройки. Батник запуска скачивания апдейтов для центральной базы D:\1C-Data\CIB\Exchange\download\download_SKL_run.bat следующего содержания:

runas /savecred /user:file-server\admin D:\1C-Data\CIB\Exchange\download\download_SKL.bat

D:\1C-Data\CIB\Exchange\WinSCP.com /script=D:\1C-Data\CIB\Exchange\download.txt /log=D:\1C-Data\CIB\Exchange\exchange.log

WinSCP устанавливается в папку D:\CIB\Exchange. Настройки подключений сохраняются в файл WinSCP.ini, пароль подключения шифруется. Файл WinSCP.ini формируется автоматически при создании нового подключения в графическом режиме WinSCP.exe (у меня оно называется snkosm), когда вы скачали, распаковали и запустили клиент и добавили новый логин (stored session). В расширенном режиме настройки (advanced options) можно настроить таймауты соединений (connections), а когда установите соединение в режиме ФТП-браузера будет доступна настройка  options->preferences->presets->binary особенностей передачи и записи файлов на ФТП сервер.

 Настройки winscp для УРБД

Там есть русский интерфейс (скачивается отдельно) и все понятно. Если будут вопросы по настройке клиента, допишу об этом.

Вот настройка D:\1C-Data\CIB\Exchange\download.txt для пакетного запуска WinSCP на загрузку в центральную базу:

open snkosm

option transfer binary

option confirm off

cd exchange

get SKL1.zip \\file-server\1C-Data\ExchangeC\SKL1.zip

rm SKL1.zip

close

exit

Вот настройка пакетного запуска WinSCP для выгрузки изменений из центральной базы на ФТП D:\1C-Data\CIB\Exchange\upload.txt:

open snkosm

option transfer binary

option confirm off

cd exchange

put \\file-server\1C-Data\ExchangeC\SKL0.zip \SKL0.zip

close

exit

snkosm - это имя соединения, которое подхватывается в файле настройки акетного задания winscp, само же соединение редактируется в графическом интерфейсе winscp.

Настройки автообмена в периферийной базе (папка обмена ExchangeK):

Exchange копия\prm\SKL.Upload.prm

[General]
Quit = 1
AutoExchange = 1
Output= "D:\1C-Data\Копия\\prm\SKL.Upload.log"
[AutoExchange]
SharedMode = Y
ReadFrom = SKL

Exchange копия\prm\SVR.Download.prm

[General]
Quit = 1
AutoExchange = 1
Output= "D:\1C-Data\CIB\\prm\SKL.Download.log"
[AutoExchange]
SharedMode = Y
WriteTo = SKL

Exchange копия\Exchange\download\download_SKL.bat

rem "C:\Program Files\The Bat!\thebat.exe"/NOLOGO /CHECKautoobmen_sklad@mail.ru /EXIT;
cscript D:\1C-Data\Копия\Exchange\VBS\Obmen.Peref.vbs "SKL" "D:\1C-Data\Копия\" UPLOAD %WINDIR% 1

Exchange копия\Exchange\download\download_SKL_run.bat

D:\1C-Data\Копия\Exchange\WinSCP.com /script=D:\1C-Data\Копия\Exchange\download.txt /log=D:\1C-Data\Копия\Exchange\exchange.log
D:\1C-Data\Копия\Exchange\download\download_SKL.bat

Exchange копия\Exchange\upload\upload_SKL.bat

cscript "D:\1C-Data\Копия\Exchange\VBS\Obmen.peref.vbs" "SKL" "D:\1C-Data\Копия\" DOWNLOAD %WINDIR% 1
rem "C:\Program Files\The Bat!\thebat.exe"/NOLOGO /MAIL;USER="autoobmen_sklad@mail.ru";TO="autoobmen_cib@mail.ru";ATTACH="D:\1C-Data\ExchangeK\SKL1.zip";SUBJECT="from SKL";SEND; /EXIT

Exchange копия\Exchange\upload\upload_SKL_run.bat

cscript "D:\1C-Data\Копия\Exchange\VBS\Obmen.peref.vbs" "SKL" "D:\1C-Data\Копия\" DOWNLOAD %WINDIR% 1
rem "C:\Program Files\The Bat!\thebat.exe"/NOLOGO /MAIL;USER="autoobmen_sklad@mail.ru";TO="autoobmen_cib@mail.ru";ATTACH="D:\1C-Data\ExchangeK\SKL1.zip";SUBJECT="from SKL";SEND /EXIT
D:\1C-Data\Копия\Exchange\WinSCP.com /script=D:\1C-Data\Копия\Exchange\upload.txt /log=D:\1C-Data\Копия\Exchange\exchange.log

Exchange копия\Exchange\VBS\Obmen.Peref.vbs

------------------------- начало цитаты -----------------------------

Set FS = CreateObject("Scripting.FileSystemObject")
Set Shell = WScript.CreateObject("WScript.Shell")
Set ArgObj = WScript.Arguments

Dim CodeIB
Dim pathIB
Dim Work
Dim pathWin

Dim path_nameUploadPRM
Dim path_nameUploadLog
Dim path_nameDownloadPRM
Dim path_nameDownloadLog
Dim path_nameFullLog

Dim path1cv7

InitialsSub
WorkSub

Sub InitialsSub

If ArgObj.Count < 3 Then
WScript.Echo "Использование: Obmen.Peref.vbs "
WScript.Quit (GENERAL_FAILURE)
End If

CodeIB = ArgObj.Item(0)
pathIB = ArgObj.Item(1)
Work = ArgObj.Item(2)

V77CLSID = Shell.RegRead("HKEY_CLASSES_ROOT\V77.Application\CLSID\")
path1cv7 = Shell.RegRead("HKEY_CLASSES_ROOT\CLSID\"&V77CLSID&"\LocalServer32\")

If FS.FolderExists(pathIB)=False Then
WScript.Echo "Указанный каталог информационной базы не существует: "+pathIB
WScript.Quit (GENERAL_FAILURE)
End if

pathPRM = pathIB&"\prm\"

If FS.FolderExists(pathPRM)=False Then
FS.CreateFolder(pathPRM)
End if

nameUploadPRM = CodeIB & ".Upload.prm"
nameUploadLog = CodeIB & ".Upload.log"
nameDownloadPRM = CodeIB & ".Download.prm"
nameDownloadLog = CodeIB & ".Download.log"
nameFullLog = "Distr.log"

path_nameUploadPRM = pathPRM & nameUploadPRM
path_nameUploadLog = pathPRM & nameUploadLog
path_nameDownloadPRM = pathPRM & nameDownloadPRM
path_nameDownloadLog = pathPRM & nameDownloadLog
path_nameFullLog = pathPRM & nameFullLog

End Sub

Sub WorkSub

'Загрузка из
If Work = "UPLOAD" Then
UploadSub
ElseIf Work = "DOWNLOAD" Then
DownloadSub
End If

End Sub

Sub UploadSub

set filestream = FS.OpenTextFile(path_nameUploadPRM,2,1)

filestream.Write(_
"[General]" & vbNewLine & _
"Quit = 1" & vbNewLine & _
"AutoExchange = 1" & vbNewLine & _
"Output= """ & path_nameUploadLog &"""" & vbNewLine & _
"[AutoExchange]" & vbNewLine & _
"SharedMode = Y" & vbNewLine & _
"ReadFrom = *" & vbNewLine & _
"")
filestream.Close()

If FS.FileExists(path_nameUploadLog) = True Then
FS.DeleteFile(path_nameUploadLog)
End If
Shell.Run """" & path1cv7 & """ config /d""" & pathIB & """ /NURBD /Purbd /@""" & path_nameUploadPRM & """" , vbNoFocus,True
UploadFileName = ""
UploadErrorDescriprion = ""
UploadSucces = 0
UploadFail = 0
sMessage = ""

If FS.FileExists(path_nameUploadLog) = True Then

set filestream = FS.OpenTextFile(path_nameUploadLog,1)

While filestream.AtEndOfStream = False

sLine = filestream.ReadLine()

Ar = Split(sLine,";")
If UBound(Ar)>=7 Then
If Ar(4)="Distr" Then

Sobitie = Ar(5)
If Sobitie="DistUplBeg" Then
UploadFileName = Ar(7)
sMessage = sMessage & "Выполнена попытка загрузки из файла: " & UploadFileName & vbNewLine & vbNewLine
ElseIf Sobitie="DistUplErr" Then
sMessage = sMessage & "Во время загрузки возникла ошибка: " & Ar(7) & vbNewLine & vbNewLine
UploadCodeError = cCur(Ar(6))
ElseIf Sobitie="DistUplFail" Then
UploadFail = cCur(Ar(6))
sMessage = sMessage & "ЗАГРУЗКА НЕ БЫЛА ВЫПОЛНЕНА! " & vbNewLine & vbNewLine
ElseIf Sobitie="DistUplSuc" Then
UploadSucces = cCur(Ar(6))
sMessage = sMessage & "Загрузка успешно завершена! " & vbNewLine & vbNewLine
End If

End If

End if

Wend

filestream.Close()

Else
sMessage = sMessage & "Программа 1С:Предприятие не была запущена! " & vbNewLine & vbNewLine
End If

If UploadSucces = 1 Then
msgbox sMessage, vbOKOnly+vbInformation , "Загрузка выполнена успешно."
ElseIf UploadFail = 1 Then
msgbox sMessage, vbOKOnly + vbCritical , "ЗАГРУЗКА НЕ ВЫПОЛНЕНА !!!"
Else
msgbox sMessage, vbOKOnly + vbExclamation, "Результат работы неизвестен !!!"
End If

End Sub

Sub DownloadSub

set filestream = FS.OpenTextFile(path_nameDownloadPRM,2,1)

filestream.Write(_
"[General]" & vbNewLine & _
"Quit = 1" & vbNewLine & _
"AutoExchange = 1" & vbNewLine & _
"Output= """ & path_nameDownloadLog &"""" & vbNewLine & _
"[AutoExchange]" & vbNewLine & _
"SharedMode = Y" & vbNewLine & _
"WriteTo = *" & vbNewLine & _
"SendTo = *" & vbNewLine & _
"")

filestream.Close()

If FS.FileExists(path_nameDownloadLog) = True Then
FS.DeleteFile(path_nameDownloadLog)
End If

Shell.Run """" & path1cv7 & """ config /d""" & pathIB & """ /NURBD /Purbd /@""" & path_nameDownloadPRM & """" , vbNoFocus,True

DownloadFileName = ""
DownloadErrorDescriprion = ""
DownloadSucces = 0
DownloadFail = 0
sMessage = ""

If FS.FileExists(path_nameDownloadLog) = True Then

set filestream = FS.OpenTextFile(path_nameDownloadLog,1)

While filestream.AtEndOfStream=False
sLine = filestream.ReadLine()

Ar = Split(sLine,";")
If UBound(Ar)>=7 Then
If Ar(4)="Distr" Then

Sobitie = Ar(5)
If Sobitie="DistDnldBeg" Then
DownloadFileName = Ar(7)
sMessage = sMessage & "Выполнена попытка выгрузки: " & DownloadFileName & vbNewLine & vbNewLine
ElseIf Sobitie="DistDnldErr" Then
sMessage = sMessage & "Во время выгрузки возникла ошибка: " & Ar(7) & vbNewLine & vbNewLine
DownloadCodeError = cCur(Ar(6))
ElseIf Sobitie="DistDnldFail" Then
DownloadFail = cCur(Ar(6))
sMessage = sMessage & "ВЫГРУЗКА НЕ БЫЛА ВЫПОЛНЕНА! " & vbNewLine & vbNewLine
ElseIf Sobitie="DistDnldSuc" Then
DownloadSucces = cCur(Ar(6))
sMessage = sMessage & "Выгрузка успешно завершена! " & vbNewLine & vbNewLine
End If

End if

End If

Wend

filestream.Close()

Else
sMessage = sMessage & "Программа 1С:Предприятие не была запущена! " & vbNewLine & vbNewLine
End If

If DownloadSucces = 1 Then
msgbox sMessage, vbOKOnly + vbInformation, "Выгрузка выполнена успешно."
ElseIf DownloadFail = 1 Then
msgbox sMessage, vbOKOnly + vbCritical , "ВЫГРУЗКА НЕ ВЫПОЛНЕНА !!!"
Else
msgbox sMessage, vbOKOnly + vbExclamation, "Результат выгрузки неизвестен !!!"
End If

End Sub

------------------------- конец цитаты -----------------------------

Exchange копия\Exchange\download.txt

open snkosm
option transfer binary
option confirm off
cd exchange
get SKL0.zip d:\1C-Data\ExchangeK\SKL0.zip
rm SKL0.zip
close
exit

Exchange копия\Exchange\upload.txt

open snkosm
option transfer binary
option confirm off
cd exchange
put d:\1C-Data\ExchangeK\SKL1.zip \SKL1.zip
close
exit

Все это есть в файле для скачивания, все содержимое подпапки "F:\Exchange копия" распаковывается непосредственно в информационную базу (в архиве две папки, одна для центра другая для периферийной базы).

Есть еще несколько вещей, о которых хочется упомянуть в заключение.

В некоторых публикациях предлагаются платные способы решения нашей задачи - УРБД Мастер и ROBOтяга, описывать которые здесь подробно не будем, предпочтем вручную поколупаться, скопировать и поправить несколько батников проприетарному ПО.

Понравилась статья «Автообмен через dropbox» от http://infostart.ru/profile/36474/ (http://infostart.ru/public/72556/), но только увидел её, а сам не пробовал.

О том, как организовать обмен по почте можно писать отдельно – это не просто и многие от этого способа плюются, но у него есть свои достоинства, наример – логи ФТП не всегда есть у нас в распоряжении, то есть обвинить в ошибке при желании можно и программиста (размыта ответственность) а вот пришло ли письмо на почту и когда оно пришло все могут видеть однозначно. Рою в сторону воспользоваться клиентом The bat:

Загрузка (центральная база) в bat-файле download_SKL.bat

"C:\Program Files (x86)\The Bat!\thebat.exe"/NOLOGO /CHECKautoexchange_cib@mail.ru /EXIT;

И выгрузка (центральная база)

"C:\Program Files (x86)\The Bat!\thebat.exe"/NOLOGO /MAIL;USER="autoexchange_cib@mail.ru";TO=" autoexchange_skl@mail.ru";ATTACH="D:\1C-Data\ExchangeC\SKL0.zip";SUBJECT="from CIB";SEND /EXIT

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

В общем пакеты отправляются и принимаются, но пока не поборол зависание The bat после отправки письма с вложением. В гугли можно выловить несколько коварных настроек реестра для The bat, но это не так быстро как с winscp...

При обмене по почте могут быть проблемы с рассылкой измененной конфигурации из-за большого размера файлов. Выходом может служить способ перепаковки (побить архив), предложенный http://infostart.ru/profile/20743/ - на Инфостарте не выложено, а выложено в http://venger.narod.ru/storage/1Cv77_BatchFiles.zip Пакетные файлы (*.bat) для архивации/обновления и/или отсылки по почте (многотомными архивами с паролем) баз данных 1С:Предприятие 7.7 (dbf-версий).

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
УРБД через интернет
.zip 7,74Mb
04.05.13
38
.zip 7,74Mb 38 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Alex (AlexBugs) 08.05.13 08:06
URBDmaster купили и все само делается по FTP, который стоит на севере 1С. На крайняк по почте делаем обмен.
2. uriy uriy (uriy) 08.05.13 10:39
(1) Вот именно присоединяюсь, сам купил урбд мастер настроил за 20 минут, первый раз устанавливал. Все работает уже 3 года без проблем и по почте и по сети и по фтп. Короче УРБД-Мастер рулит. Стоит 1700р
3. Сергей Космачев (ksnik) 08.05.13 14:05
(1) AlexBugs,
(2) uriy,
получается что на сервере 1С у вас обмен локальный, а на каждую периферийку куплено по своему УРБД-мастеру? Нет смысла предлагать всем закрытое, ресурсозависимое и неизвестно как лицензируемое решение. Вы же не хотите чтобы когда у них все накроется все айтишники не знали, как сделать обмен по интернету потому что когда-то отказались от универсальных технологий в угоду однажды купленному?
4. uriy uriy (uriy) 09.05.13 11:48
(3) Полностью несогласен с вами.
есть сайт программы с поддержкой и инструкциями. и пробной программой http://www.urbdmaster.com/

Обзор на пальцах.
На сервере -клинеты подключены напрямую к базе по сети, а для синхронизации тут уже стоит урбд-мастер и он поддерживает обмен по почте (я использовал один почтовый адрес для всех обменов), есть локально (нужен такой вариант редко, обычно при плохой или не стабильной связи), и FTP - тоже неплохой вариант.
Я настраивал и штатными средствами. Но остановился именно на урбд-матере, по простой причине поставил и забыл все автоматом первоначальная настройка 10-15 минут (на среднее знание, интуитивно понятный интерфейс), дальнейшего участия человека не требуется (ну если не надо сделать выгрузку загрузку срочно то это один щелчек(два щелчка) мыши, а это сможет любой и бух и оператор.
Одна лицензия на неограниченное число подключений, т.е. нужна только одна лицензия ни больше ни меньше.
Можно сохранить копию установленной программы или файл базы данных урбд (на случай если база обмена сбросится -такое видел только один раз за 3 года). Просто копировал по верх и вуаля все настойки на своем месте.

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

Вообщем куча нужных полезностей

НУ И КАК В ЛЮБОЙ ПРОГРАММЕ ЕСТЬ ЛОЖКА ДЕГТЯ.
УРБД-МАСТЕР ХРАНИТ СВОЮ БАЗУ В ВИДЕ MDB (microsoft office accsess)- а это как все понимают стоит отдельно в пакете билла гейтса в нашем любимом офисе.

Следовательно она не будет работать без майкрософт офиса, и притом нужен не базовый.

Рекомендовал многим и более и менее опытным it-шникам 80% из них ставили и используют по сей день.
5. Сергей Космачев (ksnik) 09.05.13 12:12
(4) uriy, а нужно ли платить за каждую копию программы или в периферийных узлах устанавливаются бесплатные копии? А если железо поменять второй раз покупать эту программу не нужно?
6. uriy uriy (uriy) 09.05.13 20:17
(5) Покупается одна лицензия (уже 1980рублей) и она ставится на все урбд (лицензия программная без проверки количества клиентов).Получил файлик скинул в каталог и все пользуюсь. Пере установил систему поставил программу а скинул всю папку и с настройками и с ключом 1 минута и автообмен готов.

Нужно платить только за одну копию программы, да и эта цена по соотношению с продуктом 1с ничтожна.

Есть Еще вопросы?
7. Сергей Космачев (ksnik) 09.05.13 20:59
(6) uriy, первый мой вопрос был не про перестановку системы а про смену компа, а второй не про все УРБД на центральной машине а про периферийные базы, что делать в этих случаях Вы не ответили. лясать с бубном? А вдруг сразу за заменой компа сервера прийдут проверять лицензию, что тогда делать?
8. uriy uriy (uriy) 09.05.13 21:11
(7) Лицензию чего 1с или УРБД Мастер?
9. uriy uriy (uriy) 09.05.13 21:18
(7) Не совсем понял вопроса. Лицензия УРБД мастер покупается 1 шт и ставится на все машины (в программе после регистрации указывается кто владелец и адресс эл.почты),я платил через сбербанк на какойто он лайн интернет магазин где мне выставили счет, через 3 дня получил.
Лицензия не привязана к железу является "корпоративной". Может знакомы с лицензированием Windows. Лицензия выдается на организацию а не на технику.
Что касается 1с. - то тут правила едины и думаю вы их знаете (что по средствам урбд-мастера что штатными средствами).
10. Сергей Космачев (ksnik) 09.05.13 22:46
(9) uriy, спасибо вероятно прога не плохая, понятно, но описанный мной способ тоже будучи настроен однажды так же восстанавливается из архива копированием, работает по расписанию windows и вообще не требует лицензии.
11. Сергей Космачев (ksnik) 09.05.13 22:52
Для любителей заплатить денег чтоб все работало вот еще вдогонку ссылка Cislink.com
1. EDI решения - Решения для электронного обмена данными различного уровня сложности
2. Сервис Контроля Данных (DTS) - Сервис контроля данных CISLink позволяет обеспечить детальный сбор вторичных продаж в сети дистрибьюции производителя.
3. Автоматизированная Система Мобильной Торговли (SFA)
Автоматизированная Система Мобильной Торговли позволяет вашей компании автоматизировать деятельность торговых представителей с помощью терминалов сбора данных (коммуникаторов и планшетов на базе операционных систем Android Windows Mobile).
4. Электронная торговая площадка - Аукционы в режиме реального времени и запросы котировок цен
12. Andrej Kuzmuk (skelelaz) 20.03.14 00:17
Хорошо расписано. За это спасибо. Сам долго искал, как бы через емейл настроить обмен.
13. Павел Кузнецов (Pavel_nv) 20.03.14 07:28
Сам пользовался УРБД мастером, но сейчас если приходиться настраивать обмены, то ставлю на всех точках dropbox под одной учеткой, настраиваю все базы на обмен через его папку типовым обменом.
14. Роман Сафонов (mt111) 31.07.14 20:12
планируем расширятся, из всех расмотреных вариантов пока склоняемся к этому
15. Вика Козлова (natarezn) 22.09.14 12:46
я уже работаю с РИБ. вот буду настраивать выгрузку.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа