Обмен с помощью WMI

10.11.14

Интеграция - Обмен между базами 1C

Полный контроль над процессом, осуществляемый из единого центра.

Читаю здешние темы "обмен через FTP", "через облачный севис", "через почту"... Все эти механизмы имеют кучу недостатков:

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

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

- При необходимости внепланового обмена, надо руками лезть во все базы и запускать в них обменные процессы.

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

 - И т.д.

Использование механизма WMI позволяет исключить все эти неприятности и получить еще кучу плюшек.

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

Я создал отдельную базу, которая (кроме всего прочего), осуществляет обмен РИБ по расписанию регламентного задания.

1. Можно сначала сделать резервную копию (если надо).

2. Проконтролировав выполнение 1 этапа делаем выгрузку центрального узла для всех периферий.

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

4. Загружаем одновременно (последовательно запустив процессы в цикле) периферийные базы.

5. Анализируем лог загрузки и обрабатываем ошибку, если она есть: изменяем номер сообщения или выгружаем, передаем и загружаем конфигурацию центрального узла и т.д. - в зависимости от вида сбоя. Контролируем - не вышло - отмечаем сбой (в дальнейшем "***").

6. В случае загрузки конфигурации, повторяем загрузку выгрузки центра.

7. Выгружаем периферию. ***

8. Передаем выгрузку периферии в центр. ***

9. Загружаем в центральной узел. ***

Все управление осуществляется одной отдельной базой, которая последовательно запускает распределённые базы в описанном выше порядке, контролирует и фиксирует результаты выполнения.

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

Теперь наконец о собственно механизмах WMI.

Запуск удаленной базы:

Locator=Новый COMОбъект("WbemScripting.SWbemLocator");

objWMIService=Locator.ConnectServer(КомпIP,"\root\cimv2", Константы.ЛогинАдминистратора.Получить(),Константы.ПарольАдминистратора.Получить());

Ели база на том же компьютере что и Управляющая БД, то

objWMIService=Locator.ConnectServer(".");

objProcess=Ст.objWMIService.Get("Win32_Process");

intProcessID=0;              

strCommand= ПутьКИсполняемымФайлам1С+"1cv8.exe ENTERPRISE /S /NZipOut /P"+СокрЛП(Константы.ПарольZip.Получить())+" /DisableStartupMessages  /Out"+ИмяФайлаЛогаВыгрузки;                                       

objProcess.Create(strCommand,null,,intProcessID);

После запуска базы контролируем окончание процесса:

 

pEnum=Ст.objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = '1cv8.exe'");  

                Для Каждого Object Из pEnum Цикл

                               Про=Object.Properties_;

                               Для Каждого Свойство Из Про Цикл

                                               Если Свойство.Name="ProcessId" Тогда

                                                               Если Свойство.Value=Ст.intProcessID Тогда

                                                                              Если ТекущаяДата()>Ст.Ждать Тогда

                                                                                              Попытка

                                                                                                              Object.Terminate();

                                                                                              Исключение

                                                                                              КонецПопытки;

                                                                                              Ст.Лог=Ст.Лог+"Превышен лимита ожидания операции!"+Символы.ПС;

                                                                                              Ст.Ждать=0;

                                                                                              Возврат Ложь;

                                                                              Иначе

                                                                                              Возврат Истина;

                                                                              КонецЕсли;

                                                               КонецЕсли;

                                                               Прервать;

                                               КонецЕсли;

                               КонецЦикла; 

                КонецЦикла;


В модуль конфигурации РИБ надо добавить процедуры:

 

Процедура ПередНачаломРаботыСистемы(Отказ)

                Если ИмяПользователя()="Zip" Тогда

                               Ждать(5);

                               Если ЗагрузкаОбмена(ПараметрЗапуска) Тогда

                                               ВыгрузкаОбмена(ПараметрЗапуска);                

                               КонецЕсли;       

                               Отказ=Истина;

                ИначеЕсли ИмяПользователя()="ZipOut" Тогда

                               Ждать(5);

                               ВыгрузкаОбмена(ПараметрЗапуска);                

                               Отказ=Истина;

                ИначеЕсли ИмяПользователя()="ZipIn" Тогда

                               Ждать(5);

                               Если ПараметрЗапуска="NodeOff" Тогда

                                               Попытка

                                                               ПланыОбмена.УстановитьГлавныйУзел(Неопределено);

                                                               //Сообщить("Распределение отключено.");

                                               Исключение

                                                               //Сообщить("Распределение уже отключено.");

                                               КонецПопытки;

                               ИначеЕсли ПараметрЗапуска="NodeOn" Тогда

                                               Попытка

                                                               ГлавныйУзел=ПланыОбмена.Филиалы.НайтиПоКоду("000");

                                                               ПланыОбмена.УстановитьГлавныйУзел(ГлавныйУзел);         

                                                               //Сообщить("Распределение включено.");

                                               Исключение

                                                               //Сообщить("Распределение уже включено.");

                                               КонецПопытки;

                               Иначе

                                               ЗагрузкаОбмена(ПараметрЗапуска);

                               КонецЕсли;

                               Отказ=Истина;

                               КонецЕсли;

                КонецЕсли;

КонецПроцедуры

//------------

Процедура ВыгрузкаОбмена(УзелЗВ)

                ФСО=Новый COMОбъект("Scripting.FileSystemObject");

                Попытка

                               ВыборкаУзлов=ПланыОбмена.Филиалы.НайтиПоНаименованию(УзелЗВ); 

                               Узел=ВыборкаУзлов.Ссылка; 

                               ЭтотУзел=ПланыОбмена.Филиалы.ЭтотУзел();

                               Путь=СокрЛП(ЭтотУзел.Место);

                               Если ПланыОбмена.ГлавныйУзел()=Неопределено Тогда

                                               //Путь=СокрЛП(ЭтотУзел.ПутьКБД)+"PC\";

                                               //ПутьП=СокрЛП(ЭтотУзел.ПутьКБД)+"PC\";

                                               

                                               //НФ=НайтиФайлы(ПутьП, СокрЛП(Узел.Код)+"-"+СокрЛП(ЭтотУзел.Код)+".zip");

                                               НФ=НайтиФайлы(Путь, СокрЛП(Узел.Код)+"-"+СокрЛП(ЭтотУзел.Код)+".zip");

                                               Попытка

                                                               ФайлЗ=НФ[0].ПолноеИмя;

                                                               ФСО.DeleteFile(ФайлЗ);

                                               Исключение

                                                               Возврат;

                                               КонецПопытки;

                               //Иначе

                               //            Путь=СокрЛП(ЭтотУзел.ПутьКБД)+"PC\";

                               //            ПутьП=СокрЛП(ЭтотУзел.ПутьКБД)+"CP\";

                               КонецЕсли;

                               

                               ИмяФайлаСообщения=Путь+"Выгрузка.xml"; 

                               ЗаписьXML=Новый ЗаписьXML(); 

                               ЗаписьXML.ОткрытьФайл(ИмяФайлаСообщения); 

                               ЗаписьСообщения=ПланыОбмена.СоздатьЗаписьСообщения(); 

                               ЗаписьСообщения.НачатьЗапись(ЗаписьXML,Узел); 

                                ПланыОбмена.ЗаписатьИзменения(ЗаписьСообщения,Константы.ТранзакцииОбмена.Получить()); 

                               ЗаписьСообщения.ЗакончитьЗапись(); 

                               ЗаписьXML.Закрыть(); 

                               ЗФ=Новый ЗаписьZipФайла(Путь+СокрЛП(ЭтотУзел.Код)+"-"+СокрЛП(Узел.Код)+".zip"); 

                               ЗФ.Добавить(ИмяФайлаСообщения);

                               ЗФ.Записать();

                               Сообщить("Выгружены данные ("+ЭтотУзел+" - "+УзелЗВ+") -  "+ТекущаяДата());

                Исключение

                               ОО=ОписаниеОшибки();

                               ЗаписьЖурналаРегистрации("ОБМЕН.Выгрузка ("+ЭтотУзел+" - "+УзелЗВ+")", УровеньЖурналаРегистрации.Ошибка, , , ОО);

                               Сообщить(">>> ВЫГРУЗКА("+ЭтотУзел+" - "+УзелЗВ+"): "+ОО);

                КонецПопытки;

                Попытка

                               ФСО.DeleteFile(Путь+"Выгрузка.xml");

                Исключение

                КонецПопытки;

КонецПроцедуры

//------------

Функция ЗагрузкаОбмена(УзелЗВ)

                Первый=Истина;

                ЭтотУзел=ПланыОбмена.Филиалы.ЭтотУзел();

~АА:      

                Попытка

                               Если Первый Тогда

                                               ФСО=Новый COMОбъект("Scripting.FileSystemObject");

                                               Попытка

                                                               ФСО.DeleteFile(СокрЛП(ЭтотУзел.Место)+"New.txt");

                                               Исключение

                                               КонецПопытки;

                                               ВыборкаУзлов=ПланыОбмена.Филиалы.НайтиПоНаименованию(УзелЗВ); 

                                               Узел=ВыборкаУзлов.Ссылка; 

                                               Путь=СокрЛП(ЭтотУзел.Место);

                                               //Если ПланыОбмена.ГлавныйУзел()=Неопределено Тогда

                                               //                           Путь=СокрЛП(ЭтотУзел.ПутьКБД)+"PC\";

                                               //            Иначе

                                               //                           Путь=СокрЛП(ЭтотУзел.ПутьКБД)+"CP\";

                               //            КонецЕсли;

                                               НФ=НайтиФайлы(Путь, СокрЛП(Узел.Код)+"-"+СокрЛП(ЭтотУзел.Код)+".zip");

                                               Попытка

                                                              ФайлЗ=НФ[0].ПолноеИмя;

                                               Исключение

                                                               Возврат Ложь;

                                               КонецПопытки;

                                               ЗФ=Новый ЧтениеZipФайла(ФайлЗ); 

                                               ЗФ.ИзвлечьВсе(Путь);

                                               ИмяФайлаСообщения=Путь+"Выгрузка.xml";

                               КонецЕсли;

                               ЧтениеXML=Новый ЧтениеXML(); 

                               ЧтениеXML.ОткрытьФайл(ИмяФайлаСообщения); 

                               ЧтениеСообщения=ПланыОбмена.СоздатьЧтениеСообщения(); 

                               ЧтениеСообщения.НачатьЧтение(ЧтениеXML); 

                               Попытка

                                               ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения,Константы.ТранзакцииОбмена.Получить()); 

                                               

                                               Об=Узел.ПолучитьОбъект();

                                               Об.ДатаОбмена=ТекущаяДата();

                                               Об.Записать();

                               Исключение

                                               ОО=ОписаниеОшибки();

                                               ЧтениеXML.Закрыть(); 

                                               ФСО.DeleteFile(Путь+"Выгрузка.xml");

                                               Если ПланыОбмена.ГлавныйУзел()<>Неопределено Тогда

                                                               ФСО.DeleteFile(ФайлЗ);

                                               КонецЕсли;

                                               Если Найти(Строка(ОО),"изменения конфигурации")>0 Тогда

                                                               Если КонтрольПериферии() Тогда

                                                                              ФСО.CreateTextFile(СокрЛП(ЭтотУзел.Место)+"New.txt");

                                                                              Сообщить("Загружена конфигурация ("+УзелЗВ+" - "+ЭтотУзел+") -  "+ТекущаяДата());

                                                               КонецЕсли;

                                                               Сообщить(">>> ЗАГРУЗКА ("+УзелЗВ+" - "+ЭтотУзел+"): "+ОО);

                                                               Возврат Истина;

                                               Иначе  

                                                               ЗаписьЖурналаРегистрации("ОБМЕН.Загрузка ("+УзелЗВ+" - "+ЭтотУзел+")",                УровеньЖурналаРегистрации.Ошибка, , , ОО);

                                                               Сообщить(">>> ЗАГРУЗКА ("+УзелЗВ+" - "+ЭтотУзел+"): "+ОО);

                                                               Возврат Ложь;

                                               КонецЕсли;

                               КонецПопытки;

                               ЧтениеСообщения.ЗакончитьЧтение(); 

                               ЧтениеXML.Закрыть(); 

                               ФСО.DeleteFile(Путь+"Выгрузка.xml");

                               Если ПланыОбмена.ГлавныйУзел()<>Неопределено Тогда

                                               ФСО.DeleteFile(ФайлЗ);

                               КонецЕсли;

                               Сообщить("Загружены данные ("+УзелЗВ+" - "+ЭтотУзел+") -  "+ТекущаяДата());

                               Возврат Истина;

                Исключение

                               ОО=ОписаниеОшибки();

                               //=========

                               Если Найти(Строка(ОО),"Номер сообщения меньше или равен")>0 Тогда

                                               Об=Узел.ПолучитьОбъект();

                                               Об.НомерПринятого=Об.НомерПринятого-1;

                                               Об.Записать();

                                               Первый=Ложь;

                                               Перейти ~АА;  

                               КонецЕсли;

                               //=========

                               Попытка

                                               ФСО.DeleteFile(Путь+"Выгрузка.xml");

                               Исключение

                               КонецПопытки;

                               Попытка

                                               Если ПланыОбмена.ГлавныйУзел()<>Неопределено Тогда

                                                               ФСО.DeleteFile(ФайлЗ);

                                               КонецЕсли;

                               Исключение

                               КонецПопытки;

                               ЗаписьЖурналаРегистрации("ОБМЕН.Загрузка", УровеньЖурналаРегистрации.Ошибка, , , ОО);

                               Сообщить(">>> ЗАГРУЗКА("+УзелЗВ+"): "+ОО);

                               Возврат Ложь;

                КонецПопытки;

КонецФункции

 //------------

Процедура Ждать(СекЖ)

                Врем=ТекущаяДата()+СекЖ;

                КК=1;

                Пока Врем>=ТекущаяДата() Цикл

                               Предупреждение("Ждем: "+КК, 1, "Задержка...");    

                               КК=КК+1;            

                КонецЦикла;

КонецПроцедуры         

//-------------

Функция ПолучитьСервер(Стр) Экспорт

                Пром=СтрЗаменить(Стр,"\\","");

                Пром=СтрЗаменить(Пром,":","");

                Поз=Найти(Пром,"\");

                Если Поз=0 Тогда

                               Возврат Неопределено;

                Иначе

                               Возврат Лев(Пром,Поз-1);

                КонецЕсли;

КонецФункции             

  

 

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

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

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

 

См. также

SALE! 20%

Перенос данных из УПП 1.3 в ERP 2 / УТ 11 / КА 2. Переносятся документы, справочная информация и остатки

Обмен между базами 1C Платформа 1С v8.3 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) в продаже с 2015 года, постоянно работаем над их развитием | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

45650 36520 руб.

04.08.2015    159730    364    267    

345

SALE! 15%

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 22572 руб.

12.06.2017    134974    721    291    

388

SALE! 20%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0. Переносятся документы, начальные остатки и справочники

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | В продаже с 2019г. | Воспользовались более 176 предприятий! | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

34650 27720 руб.

15.04.2019    68444    180    138    

111

SALE! 20%

Перенос данных из ERP 2 / КА 2 в ЗУП 3. Переносятся остатки, документы и справочники

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Воспользовались более 79 предприятий! | Предлагаем приобрести готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | В продаже с 2020г. | Оперативно обновляем правила до актуальных релизов 1С | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

43450 34760 руб.

03.12.2020    34180    80    58    

78

SALE! 10%

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.87.x) и УТ 11.5 (11.5.16.x).

28000 25200 руб.

23.07.2020    46322    196    64    

158

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9217    9    8    

10

SALE! 10%

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.223.x) и БП 3.0 (3.0.149.x). Правила подходят для версии ПРОФ и КОРП.

28000 25200 руб.

15.12.2021    20266    132    38    

90

SALE! 10%

Перенос данных из БП 3.0 в УТ 11 / КА 2 / ERP 2. Переносятся начальные остатки, документы и справочники

Обмен между базами 1C Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

В продаже с 2014г. | Воспользовались более 122 предприятий! | Перенос данных из БП 3.0 в УТ 11 | из БП 3.0 в КА 2 | из БП 3.0 в ERP | Сэкономьте свое время - используйте готовое решение для перехода! | Постоянно работаем над развитием переноса данных | Обновляем на новые релизы 1С | Есть фильтр выгрузки по организациям | Переносятся начальные остатки на выбранную дату, документы за период времени и вся возможная справочная информация | Перенос сделан на технологии КД 2 (правила конвертации данных)

50722 45650 руб.

31.10.2014    231436    124    327    

296
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. ruskiy1 10.11.14 18:12 Сейчас в теме
глаза сломать можно от такого форматирования кода
2. davdykin 25 10.11.14 22:02 Сейчас в теме
Честно говоря, при беглом чтении кода так и не понял как перекидывается файл. Насколько я понял данный механизм позволяет запускать на удаленном компьютере произвольные процессы, доступ осуществляется по ip-ику (если не прав поправьте), Собственно основной вопрос какие сетевые настройки на целевом и центральном компьютере требуются (проброска портов, dmz, белый ip)?
3. loekyn 19 11.11.14 09:11 Сейчас в теме
За форматирование извините - 2я публикация здесь, поэтому опыта по местным обстоятельствам никакого.

Файл перекидывается простым копированием: если у вас есть удаленный доступ к компьютеру, то чего мудрить?
На центральном и целевом компах должен быть включен WMI. Так же на целевом надо настроить доступ с определенного IP (во избежание) и знать логин и пароль админа целевого компа.
Вот код передачи файла:

Функция ПередачаВыгрузкиПериферии(Ст,ФСО,ТЗ,Сост)	
	Ст.Источник=СокрЛП(Ст.База.МестоВ)+СокрЛП(Ст.База.КодЦ)+"-"+СокрЛП(Ст.Центр.КодЦ)+".zip";
	Ст.Приемник=СокрЛП(Ст.Центр.МестоВ)+СокрЛП(Ст.База.КодЦ)+"-"+СокрЛП(Ст.Центр.КодЦ)+".zip";
	Если Не ПереносФайла(Ст,ФСО,ТЗ,Сост) Тогда
		Возврат Ложь;
	КонецЕсли;
	Возврат Истина;
КонецФункции


Функция ЕстьФайл(ИмяФ,ФСО) 
	Если ФСО.FileExists(ИмяФ) Тогда
		Файл=ФСО.GetFile(ИмяФ);
		Возврат Файл.Size;
	Иначе
		Возврат -1;
	КонецЕсли;	
КонецФункции
//------
Функция ЖдатьФайл(Ст,ФСО)
	Если ФСО.FileExists(Ст.Источник) И ФСО.FileExists(Ст.Приемник) Тогда
		Если ФСО.GetFile(Ст.Источник).Size=ФСО.GetFile(Ст.Приемник).Size Тогда
			Возврат Ложь;
		Иначе
			Возврат Истина;
		КонецЕсли;
	Иначе
		Возврат Истина;
	КонецЕсли;
КонецФункции
//------
Функция Передача(Ст,ФСО,Сост)
	Попытка
		ФСО.CopyFile(Ст.Источник,Ст.Приемник);
		Ст.Ждать=ТекущаяДата()+Константы.ЖдатьМАКС.Получить();
	Исключение
		ОформитьСбой(Ст,Сост,"> "+ОписаниеОшибки()+Символы.ПС);	
		Возврат Ложь;
	КонецПопытки;
	Возврат Истина;
КонецФункции
//------
Функция ПереносФайла(Ст,ФСО,ТЗ,Сост,Центр=0)
	Если ЕстьФайл(Ст.Источник,ФСО)<0 Тогда
		Попытка
			Если Прав(СокрЛП(Ст.Источник),2)="cf" Тогда
				ПрочитатьЛог(Ст,СокрЛП(Ст.Центр.Место)+"Conf.log",ТЗ,Сост);
			Иначе
				Если Центр=0 Тогда
					Источник=СокрЛП(Ст.База.МестоВ)+СокрЛП(Ст.База.КодЦ)+"-"+СокрЛП(Ст.Центр.КодЦ)+".log";
				ИначеЕсли Центр=1 Тогда
					Источник=СокрЛП(Ст.Центр.МестоВ)+СокрЛП(Ст.Центр.КодЦ)+"-Х.log";
				КонецЕсли;
				ПрочитатьЛог(Ст,Источник,ТЗ,Сост);
			КонецЕсли;
		Исключение
			ОформитьСбой(Ст,Сост,"> "+ОписаниеОшибки()+Символы.ПС);	
		КонецПопытки;
		Возврат Ложь;
	Иначе
		Возврат Передача(Ст,ФСО,Сост);
	КонецЕсли;	
КонецФункции
Показать
4. loekyn 19 11.11.14 09:12 Сейчас в теме
Здесь ФСО это

ФСО=Новый COMОбъект("Scripting.FileSystemObject");
5. Elisy 948 12.11.14 11:20 Сейчас в теме
Не совсем понятно. При управлении по WMI доступ осуществляется через IP-адрес. А при копировании файла - через файловую систему
ФСО.CopyFile(Ст.Источник,Ст.Приемник);

Не понятно, как этот способ будет работать в случае, если удаленный сервер опубликован через статический внешний IP-адрес? Способ применим, если 2 сервера находятся внутри локальной сети?
6. loekyn 19 12.11.14 11:34 Сейчас в теме
(5) Elisy,
Это один из вариантов копирования файлов, для случая когда один комп "видит" другой в сети (Грубо говоря к нему можно обратиться "\\DrugoyServer\..." Или "\\123.0.12.105\...." ). Потрясите своего админа что бы он это организовал. Иначе можно воспользоваться другими средствами, коих масса. Основной смысл в том, что если удаленный комп доступен по сети, то незачем использовать FTP, почту и прочие дополнительные источники вероятного сбоя.
(Согласно "теории отказов" чем больше элементов в системе, тем больше вероятность отказа).
Оставьте свое сообщение