Имя: Пароль:
1C
1С v8
Внешняя обработка в батнике
0 inmortal203
 
31.07.13
17:26
Не до конца срабатывает внешняя обработка обмена между базами УНФ -> БУ.

Вот код батника:

c:
cd "C:\Program Files (x86)\1cv82\8.2.16.362\bin"
1cv8c.exe ENTERPRISE /FDB /F "D:\Test" /N Exchange /P 111 /UC 222 /Execute "C:\Users\7\Desktop\Unloading\V8Exchan82.epf" /Out"C:\Users\7\Desktop\Unloading\vigruzka_log.txt" [-NoTruncate]

Воспользовался стандартной обработкой. Создал процедуру автообмен, которую поместил в ПриОткрытии. В ней прописал вручную все параметры и сэмулировал нажатие клавиши ЭНТЕР для выгрузки. Так вот все срабатывает хорошо, но выгрузка не идет. Выгружено - 0 объектов. Тут нажимаешь физически энтер, и, о чудо! выгружено - 10 объектов. Не важно как нажать кнопку, ЭНТЕРом или мышкой, сработает! А вот программное нажатие срабатывает, но судя по всему при нем не отрабатывают какие то события, другого обьяснения нет...
1 Ахиллес
 
31.07.13
17:30
Ох уж эти сказочники, ох уж эти сказочки.
А делов то на 5 минут отладки.
2 inmortal203
 
31.07.13
17:31
(1) При отладке как раз все ОК
3 Ахиллес
 
31.07.13
17:32
(2) Процедура выгрузки запускается, но не выгружает?
4 inmortal203
 
31.07.13
17:32
+ еще момент, на другом компе тоже все срабатывает. но другой комп это к сожалению мой... а не заказчика
5 Ахиллес
 
31.07.13
17:33
" сэмулировал нажатие клавиши ЭНТЕР " вот это меня несколько смущает, нельзя ли поподробнее?
6 inmortal203
 
31.07.13
17:35
(3) Ага. Запускается 1С, запускается обработка, происходит считывание правил, затем я список выгружаемых объектов программно редактирую, оставляя только пару доков, затем следует нажатие энтер

    Shell = Новый COMОбъект("WScript.Shell");
    Shell.SendKeys("{ENTER}");

Это все сопровождается системными сообщениями об успешных операциях, затем происходит выгрузка, но объекты не выгружаются. И кстати лог из батника

/Out"C:\Users\7\Desktop\Unloading\vigruzka_log.txt" [-NoTruncate]

так же не создается...
7 inmortal203
 
31.07.13
17:36
а на моем компе, и лог, и выгрузка, все как заказывали)) маразм
8 Ахиллес
 
31.07.13
17:37
Вместо вот этой куиты "    Shell = Новый COMОбъект("WScript.Shell");
    Shell.SendKeys("{ENTER}");"
просто вставь вызов процедуры нужной.
9 inmortal203
 
31.07.13
17:38
сначала выгрузка вообще не шла, но дело оказалось в этом 1cv8c.exe, а было 1cv8.exe. Обработка под тонкий клиент, а запускался толстый.
10 inmortal203
 
31.07.13
17:39
(8) я поначалу так сделал) но потом решил вот попробовать хардкор. "Если ты хочешь чтоб тебе нажали кнопку - на тебе!!!" Но нет, не хочет(
11 Ахиллес
 
31.07.13
17:40
(10) Забей. В этой обработке шелл не пень не впёрся. Сделал и забыл.
12 inmortal203
 
31.07.13
17:41
&НаКлиенте
Процедура Автообмен()
    
    ИзменитьРежимОбработки(ЭтоКлиент);
    
    Объект.ИмяФайлаПравилОбмена = "#####";
    
    Файл = Новый Файл(ИмяФайлаПравил);
    Если Не Файл.Существует() Тогда
        Возврат;
    КонецЕсли;
    
    ПравилаЗагружены = Истина;
    
    /////////////////Чтение правил обмена/////////////////
    АдресФайлаПравилВХранилище = "";
    ИмяФайлаДляРасширения = "";
    
    Если ЭтоКлиент Тогда
        Если Не ПоместитьФайл(АдресФайлаПравилВХранилище, "Файл правил обмена", ИмяФайлаДляРасширения,,УникальныйИдентификатор) Тогда
            Возврат;
        КонецЕсли;
    Иначе
        Если ПустаяСтрока(Объект.ИмяФайлаПравилОбмена) Тогда
            Предупреждение(НСтр("ru = 'Выберите файл правил обмена.'"));
            Возврат;
        КонецЕсли;
    КонецЕсли;
    
    Объект.ФлагОшибки = Ложь;
    
    Состояние(НСтр("ru = 'Выполняется чтение правил обмена. Пожалуйста, подождите...'"));
    ВыполнитьЗагрузкуПравилОбмена(АдресФайлаПравилВХранилище, ИмяфайлаДляРасширения);
    
    Если Не Объект.ФлагОшибки Тогда
        ПравилаЗагружены = Истина;
    Иначе
        ПравилаЗагружены = Ложь;
    КонецЕсли;
    /////////////////Чтение правил обмена/////////////////
    
    ПрямаяВыгрузка = Истина;
    ПрямаяВыгрузкаПриИзмененииЗначения();
    
    Объект.КаталогИнформационнойБазыДляПодключения = "####";
    
    Объект.ВерсияПлатформыИнформационнойБазыДляПодключения = "V82";
    Объект.ПользовательИнформационнойБазыДляПодключения = "Бухгалтерия";
    Объект.ПарольИнформационнойБазыДляПодключения = "";
    
    ПериодВыгрузки.ДатаНачала = НачалоДня(ТекущаяДата());
    ПериодВыгрузки.ДатаОкончания = КонецДня(ТекущаяДата());
    
    Объект.ДатаНачала = НачалоДня(ТекущаяДата());
    Объект.ДатаОкончания = КонецДня(ТекущаяДата());
    
    
    /////////////////Выбор необходимых объектов для выгрузки/////////////////
    
    Для Каждого ПервыйУровень ИЗ Объект.ТаблицаПравилВыгрузки.ПолучитьЭлементы() Цикл
        ПервыйУровень.Включить = 0;
        Для Каждого ВторойУровень Из ПервыйУровень.ПолучитьЭлементы() Цикл
            ВторойУровень.Включить = 0;
            Если ВторойУровень.ЭтоГруппа Тогда
                Для каждого ТретийУровень Из ВторойУровень.ПолучитьЭлементы() Цикл
                    Если Найти(ТретийУровень.Наименование,"Расход из кассы")<>0
                        ИЛИ Найти(ТретийУровень.Наименование,"Поступление в кассу")<>0 Тогда
                        ТретийУровень.Включить = 1;
                        ВторойУровень.Включить = 1;
                    Иначе
                        ТретийУровень.Включить = 0;
                    КонецЕсли;
                КонецЦикла;
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    /////////////////Выбор необходимых объектов для выгрузки/////////////////
    
    //ВыполнитьВыгрузкуИзФормы();
    НажатиеЭнтер();
КонецПроцедуры
13 Ахиллес
 
31.07.13
17:42
(12) Хвалишься или жалуешься? Продаёшь или покупаешь?
14 inmortal203
 
31.07.13
23:33
(13) пытаюсь разобраться...
15 Jump
 
01.08.13
00:28
(0)От имени какого пользователя системы запускается программа?.

(2)Это как? Запускаешь отлаживать все срабатывает, а запускаешь работать нет? Ну так в режиме отладки и запускай.

Ну и еще мне непонятен момент эмуляции нажатия клавиши?
А это зачем? Не проще ли в коде перевесить обработчик запуска с кнопки на входную процедуру?
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой