Имя: Пароль:
1C
1C 7.7
v7: Запуск "*.vbs" из 7.7... проблема
0 serpentt
 
06.06.16
13:30
Пробую запустить скрипт без Досовского окна через "WScript.Shell"
Скрипт получает информацию с сайта https://api.orgregister.1c.ru/orgregister/v2

запускаю из 1С
WshShell = СоздатьОбъект("WScript.Shell");
Запуск = "%comspec% /c "+ВремФайлНаДиске+".vbs";
WshShell.Exec(Запуск);

приходит ответ "не могу расшифровать данные"

Запускаю из "проводника", данный скрипт.... приходят нужные данные.

компьютер WinXP-3sp
1 Звездец
 
06.06.16
13:31
%comspec% что в этой переменной? насколько я помню это не стандартная системная переменная окружения
2 serpentt
 
06.06.16
13:33
(1) comspec система сама определяет какое запускать приложение
3 Звездец
 
06.06.16
13:35
(2) не совсем понял.

в общем посмотри отладчиком Запуск правильно ли ссылается на файл, который нужно запустить и есть ли права записи туда, куда этот скрипт пишет временные данные
4 serpentt
 
06.06.16
13:39
(3)
Хранит путь до текущего командного интерпретатора Windows.
https://ru.wikipedia.org/wiki/Переменная_среды
5 serpentt
 
06.06.16
13:41
(3) Все права в норме...
Если из 1с запустить...

Запуск = "c:\WINDOWS\System32\explorer.exe "+ВремФайлНаДиске+".vbs";
WshShell.Exec(Запуск);

Ответ приходит, но всплывают дополнительные окна по безопасности скрипта.
6 ADirks
 
06.06.16
13:47
Скрипты лучше выполнять непосредственно движком, без всяких файлов.
Например

    Скрипт = СоздатьОбъект("MSScriptControl.ScriptControl");
    Скрипт.Language = "JScript";
    Стр = "
    |function GetNum(str)
    |{
    |    var re = new RegExp('(.*)(Cумма [\\d-\\.,]*.*)', 'i'); //Откинем хвост с суммами
    |    var arr = re.exec(str);
    |    if( arr != null ) str = arr[1];
    |
    |    re = new RegExp('(.*)(НДС[\\s(]*[\\d]*.*)', 'i'); //Откинем хвост с суммами
    |    arr = re.exec(str);
    |    if( arr != null ) str = arr[1];
    |
    |    re = new RegExp('\\d\\d\\.\\d\\d\\.\\d{2,4}', 'ig'); //вычистим даты
    |    str = str.replace(re, '');
    |    re = new RegExp('\\d{2,4}\\s*[гГ]', 'ig'); //вычистим даты
    |    str = str.replace(re, '');
    |
    |    re = new RegExp('\\d{3,}', 'ig'); //вот теперь все циферки будем считать потенциальными номерами счетов
    |    arr = str.match(re);
    |    if( arr == null ) return '';
    |
    |    return '' + arr;
    |}
    |";
    Скрипт.AddCode(стр);

    стрНомера = Скрипт.Run("GetNum", стрНазначениеПлатежа);
7 serpentt
 
06.06.16
13:49
(6) Спасибо. Сейчас испробую
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс