Имя: Пароль:
1C
1С v8
нужно автоматизировать выгрузку с двух баз и потом также загрузить их в одну базу.
, ,
0 razbiralshik
 
29.05.18
07:43
нужно автоматизировать выгрузку с двух баз и потом также загрузить их в одну базу.
Есть обработка УниверсальныйОбменДаннымиXML, с написанными правилами выгрузки документов для обеих баз и загрузки в базу, нужно делать выгрузку/загрузку каждую ночь.
Как лучше сделать:
В базе загрузки срабатывает регламент, както подключаемся по COM к базам выгрузки, както туда передаем эту внешнюю обработку с правилами, потом получаем файл выгрузки...
Но как передавать внешнюю обработку в эти базы по ком чтобы там запустить ее еще?
1 _stay true_
 
29.05.18
07:47
(0)Позовите специалиста
2 _stay true_
 
29.05.18
07:48
(0) Шучу)))
В ключах конфигуратора есть параметр, октрывающий внешнюю обработку. А там можно в "ПриСозданииНаСервере", например, всё, что хочешь запустить.
3 razbiralshik
 
29.05.18
07:50
(2)
ну вод подключаемся к базе:
ZUP_COM          = V8.Connect(СтрокаСоединения);
Как теперь отправить туда обработину?
4 _stay true_
 
29.05.18
07:55
(3) &НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды, ZUP_COM)

    //Помещаем обработку во временном хранилище
    АдресХранилища = "";
    Результат = ZUP_COM.ПоместитьФайл(АдресХранилища, "C:\ВнешняяОбработка.epf", , Ложь);          
    ИмяОбработки = ПодключитьВнешнююОбработку(АдресХранилища);
    
    // Откроем форму подключенной внешней обработки
    ОткрытьФорму("ВнешняяОбработка."+ ИмяОбработки +".Форма");

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

&НаСервере
Функция ПодключитьВнешнююОбработку(АдресХранилища, ZUP_COM)

    Возврат ZUP_COM.ВнешниеОбработки.Подключить(АдресХранилища);

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


Как-то так не пробовал?
5 razbiralshik
 
29.05.18
08:04
(4) пишет
{ВнешняяОбработка.ВнешняяОбработка2.Форма.Форма.Форма(399)}: Метод объекта не обнаружен (ПоместитьФайл)
    Результат      = ZUP_COM.ПоместитьФайл(АдресХранилища, "C:\Users\fedorovay\Desktop\V8Exchan82.epf", , Ложь);

наверное нужно адрес хранилища в COM базе определить или в чемто другом дело?
6 _stay true_
 
29.05.18
08:39
(5) Скорее всего. Попробуй поместить в хранилище обработку уже по комке
7 razbiralshik
 
29.05.18
09:09
(6) база по кому версия платформы 8.1, может в 8.1 нет метода ПоместитьФайл?
8 b_ru
 
29.05.18
09:14
А зачем передавать внешнюю обработку? Если база типовая, то в ней УниверсальныйОбменДаннымиXML и так есть. Если не типовая, то ничто не должно мешать ее туда добавить.
9 razbiralshik
 
29.05.18
09:17
(8) эту обработку для регламентного запуска придется модифицировать, а в базе встроена типовая обработка и ее нельзя трогать какбы.
10 b_ru
 
29.05.18
09:20
(9) Ну модифицировать то надо только ту, которая запускается по регламентному заданию (хотя я вот не трогал типовую, а сделал свою затычку, которая запускает типовую). А в другой базе прекрано отработает и немодифицированная, ведь ее по COM будут дергать, а не регламентным заданием.
11 razbiralshik
 
29.05.18
09:24
(10) тогда самый лучший вариант поместить обработку в каждую базу в справочник - внешние обработки.
Но вот как потом обратиться к процедуре модуля объекта этой обработки пока непонятно:

    УниверсальныйОбменДаннымиXMLМск = ZUP_COM.Справочники.ВнешниеОбработки.НайтиПоНаименованию("УниверсальныйОбменДаннымиXML");
    УниверсальныйОбменДаннымиXMLМск.ВыполнитьВыгрузку();


так не работает
12 Мимохожий Однако
 
29.05.18
09:26
(11) Какая ошибка?
13 razbiralshik
 
29.05.18
09:28
(12)
{ВнешняяОбработка.ВнешняяОбработка2.Форма.Форма.Форма(351)}: Метод объекта не обнаружен (ВыполнитьВыгрузку)
    УниверсальныйОбменДаннымиXMLМск.ВыполнитьВыгрузку();
14 zva
 
29.05.18
09:33
Что мешает в двух базах регламентно запускать выгрузку в 01:00 в каталог, по окончании переименовывать файл в база+дата
В приемнике регламентно в 03:00 искать файл по имени и загружать без всяких СОМ
15 J_B
 
29.05.18
09:33
А почему бы регламент не запускать в базах-отправителях?

УниверсальныйОбменДаннымиXML умеет подключаться к базе приемнику
16 razbiralshik
 
29.05.18
09:55
Вот так вот заработало вроде как:

    V8      = ОбщегоНазначенияКлиентСервер.ПолучитьКомКоннектор();
    ZUP_COM = V8.Connect("Srvr=msk02serv1c04;Ref=Demo3");
    ОбработкаКоманды(ZUP_COM);


Процедура ОбработкаКоманды(ZUP_COM)
    ВнешняяОбработка = ZUP_COM.Справочники.ВнешниеОбработки.НайтиПоНаименованию("УниверсальныйОбменДаннымиXML");
    ДвоичныеДанные = ВнешняяОбработка.ХранилищеВнешнейОбработки.Получить();
    ИмяФайла = ZUP_COM.ПолучитьИмяВременногоФайла("epf");
    ДвоичныеДанные.Записать(ИмяФайла);
    Обработка = ZUP_COM.ВнешниеОбработки.Создать(ИмяФайла);
    Обработка.ВыполнитьВыгрузку();
КонецПроцедуры



Но пишет еще какюуто дичь:
{ВнешняяОбработка.ВнешняяОбработка2.Форма.Форма.Форма(357)}: Ошибка при вызове метода контекста (ВыполнитьВыгрузку)
    Обработка.ВыполнитьВыгрузку();
по причине:
Произошла исключительная ситуация (1C:Enterprise 8.3.10.2580): {ВнешняяОбработка.УниверсальныйОбменДаннымиXML(11616)}: Ошибка при вызове конструктора (Файл)
Установлен безопасный режим. Выполнение операции запрещено
17 Bob_
 
29.05.18
10:04
Функция СведенияОВнешнейОбработке() Экспорт
    
    
    // Зададим право обработке на использование безопасного режима. Более подробно можно узнать в справке к платформе (метод УстановитьБезопасныйРежим)
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);

отсюда походу
18 razbiralshik
 
29.05.18
10:10
(17) это куда прописать надо?
в обработку которой запускаю код?
или в обработку которая помещена в справочник внешних обработок?
19 Bob_
 
29.05.18
10:13
в обработке которая помещена в справочник проверить функцию СведенияОВнешнейОбработке() , и установить безопасный режим - ложь
20 razbiralshik
 
29.05.18
10:19
(19) Добавил в модуль объекта доработки, и поместил ее во внешний справочник:
Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = Новый Структура;
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
    Возврат ПараметрыРегистрации;
КонецФункции


но ничего не поменялось, таже ошибка.
21 Bob_
 
29.05.18
10:22
у пользователя попробуй снять галку - защита от опасных действий
22 zva
 
29.05.18
10:24
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.