| 
    
            
         
         | 
    
    
  | 
Внешняя обработка в батнике | ☑ | ||
|---|---|---|---|---|
| 
    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)Это как? Запускаешь отлаживать все срабатывает, а запускаешь работать нет? Ну так в режиме отладки и запускай. Ну и еще мне непонятен момент эмуляции нажатия клавиши? А это зачем? Не проще ли в коде перевесить обработчик запуска с кнопки на входную процедуру?  | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |