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