1С 7.7: Организация автообмена через FTP

в 10:46, , рубрики: 1с 7.7, Песочница, системное администрирование, метки:

В данной статье мы рассмотрим организацию автообмена 1С: Предприятие 7.7 с использованием УРБД (управление распределенными базами данных) через FTP сервер. Для конкретизации задачи, предположим, что у нас есть центральный офис и несколько удаленных филиалов (торговых точек), которые будут обмениваться с центральным офисом информацией посредством автообмена и распределенных баз данных.

Подробно останавливаться на конфигурировании распределенной ИБ мы не будем, предположив, что вы уже проделывали это не раз. Наша задача — свести «пользовательскую составляющую» автообмена к минимуму, т.е. — добиться того чтобы для проведения автообмена пользователь запускал некий один ярлык, после запуска которого информация из центральной базы, попадала бы в перефирийную и наооборот. Для организации всего вышесказанного нам потребуются FTP-сервер, а также доступ в интернет на всех торговых точках. Предположим конфигурация распределенной базы данных у нас следующая (скриншот с центральной ИБ):

image

При этом в настройках параметров автообмена режим установлена в автоматический, каталог выгрузки — C:DBCP, каталог загрузки — C:DBPC (где C:DB — это собственно путь к центральной базе), а имена файлов выгрузки и загрузки для указанных перефирийных ИБ имеют следующие значения:

Переферийная ИБ Каталог выгрузки Каталог загрузки Имя файла выгрузки Имя файла загрузки
МГ1 (Ростов) C:DBCP C:DBPC MG1C.zip MG1D.zip
МГ2 (Новосибирск) C:DBCP C:DBPC MG2C.zip MG2D.zip
МГ3 (Калуга) C:DBCP C:DBPC MG3C.zip MG3D.zip
  • Создадим в папке с базой подпапку AutoExchange, т.е. создадим C:DBAutoExchange.
  • Скачаем с NcFTP Client Home Page утилиты ncftpget.exe и ncftpput.exe и положим их в папку AutoExchange. Это консольная версия FTP клиента, в принципе, можно было бы воспользоваться штатным ftp.exe встроенным в ОС, но ввиду того, что с ним бывают определенные проблемы (иногда, когда нет возможности соединиться с FTP серверов в активном режиме, отправка / получение данных не происходит, также отмечен ряд проблем при установленном антивирусе Касперского и т.п.), вообщем, для обеспечения надежного и бесперебойного обмена данными проще воспользоваться утилитами сторонних разработчиков.
  • Создадим в папке AutoExchange файл правил автообмена, назавав его _Exchange.prm:
    [General]
    Quit = 1
    AutoExchange = 1
    Output=Exchange.log 
    [AutoExchange]
    SharedMode = Y
    ReadFrom=*
    WriteTo=*
    

  • Затем в той же самой папке создадим файл пакетного сценария _runobmen.bat или _runobmen.сmd (для корректного отображения кириллицы, плюс, если кириллические символы у вас используются в путях и т.п., файл необходимо создавать в кодировке CP866, сделать это можно в том же блокноте, выбрав в качестве шрифта — Terminal), содержимое файла следующее:
    @echo off
    rem (c) Decker, 2011-2013, decker@compkaluga.ru
    
    set CP_Folder=%~dp0..CP
    set PC_Folder=%~dp0..PC
    rem set DebugMode=-d stdout
    set DebugMode= 
    
    title АвтоОбмен
    color 0b
    setlocal enableextensions
    
    :fromftp
    echo Пробуем загрузить изменения.
    ncftpget.exe -u ftp_user -p ftp_pass -F %DebugMode% ftp.company.ru %PC_Folder% /MG1D.zip
    ncftpget.exe -u ftp_user -p ftp_pass -F %DebugMode% ftp.company.ru %PC_Folder% /MG2D.zip
    ncftpget.exe -u ftp_user -p ftp_pass -F %DebugMode% ftp.company.ru %PC_Folder% /MG3D.zip
    echo ErrorLevel: %ErrorLevel%
    
    echo Работает 1С...АвтоОбмен...
    start "АвтоОбмен" /wait /min "C:Program Files1Cv77BIN1cv7.exe" config /d"%~dp0.." /N"obmen" /P"obmen" /@"%~dp0_Exchange.prm"
    
    :toftp
    echo Пробуем выгрузить изменения.
    ncftpput.exe -u ftp_user -p ftp_pass -F %DebugMode% ftp.company.ru . %CP_Folder%MG1C.zip
    ncftpput.exe -u ftp_user -p ftp_pass -F %DebugMode% ftp.company.ru . %CP_Folder%MG2C.zip
    ncftpput.exe -u ftp_user -p ftp_pass -F %DebugMode% ftp.company.ru . %CP_Folder%MG3C.zip
    echo ErrorLevel: %ErrorLevel%
    exit
    

  • В данном примере с FTP сервера ftp.company.ru (логин — ftp_user, пароль — ftp_pass) с помощью ncftpget.exe последовательно скачиваются файлы обмена MG1D.zip, MG2D.zip, MG3D.zip, полученные от перефирийных баз и складываются в папку %PC_Folder%, т.е. в C:DBPC (каталог загрузки). Затем запускается платформа 1С: Предприятие с именем пользователя obmen и паролем obmen и происходит автообмен. В результате которого в папке %CP_Folder% оказываются подготовленные файлы выгрузки для перефирийных баз, которые затем, с помощью ncftpput.exe последовательно заливаются на ftp сервер. На этом конфигурирование обмена на стороне центральной базы закончено, пользователям достаточно вывести на рабочий стол ярлык к созданному _runobmen.bat или _runobmen.сmd, убедившись при этом, что в свойствах ярлыка рабочей папкой для данного сценария является именно та папка, в которой он находится.
  • Настройка автообмена в каждой из перефирийных баз ничем не отличается, за исключением файла _runobmen.bat или _runobmen.сmd. Рассмотрим этот файл на примере первой перефирийной базы:
    @echo off
    rem (c) Decker, 2011-2013, decker@compkaluga.ru
    
    set CP_Folder=%~dp0..CP
    set PC_Folder=%~dp0..PC
    rem set DebugMode=-d stdout
    set DebugMode= 
    
    title АвтоОбмен
    color 0b
    setlocal enableextensions
    
    :fromftp
    echo Пробуем загрузить изменения.
    ncftpget.exe -u ftp_user -p ftp_pass -F %DebugMode% ftp.company.ru %CP_Folder% /MG1C.zip
    echo ErrorLevel: %ErrorLevel%
    
    echo Работает 1С...АвтоОбмен...
    start "АвтоОбмен" /wait /min "C:Program Files1Cv77BIN1cv7.exe" config /d"%~dp0.." /N"obmen" /P"obmen" /@"%~dp0_Exchange.prm"
    
    :toftp
    echo Пробуем выгрузить изменения.
    ncftpput.exe -u ftp_user -p ftp_pass -F %DebugMode% ftp.company.ru . %PC_Folder%MG1D.zip
    echo ErrorLevel: %ErrorLevel%
    exit
    

  • Здесь, первым действием мы забираем файл выгрузки центральной базы MG1C.zip с сервера и помещаем его в папку CP, затем, запускаем автообмен, и помещаем файл выгрузки из перефирийной базы MG1D.zip из папки PC обратно на сервер. Аналогичный сценарий используется и в двух других перефирийных базах, с разницей лишь в именах файлов.

p.s. Статья впервые была опубликована на моем сайте и в блоге, теперь решил использовать ее для получения инвайта на Хабр. Надеюсь, кому-то она окажется полезной.
p.p.s. Если путь к папке с базой содержит пробелы (например, пробелы содержатся в названии одной из папок), то для корректной работы bat'ников, при вызове ncftpget и ncftput %CP_Folder% и %PC_Folder% необходимо взять в кавычки. Если подразумевается путь к папке, то берем в кавычки "%CP_Folder%", если полный путь к файлу, то весь путь целиком, т.е. "%CP_Folder%MG1C.zip".

Автор: Decker

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js