Имя: Пароль:
1C
1С v8
Помогите понять код
0 Eugene_life
 
04.12.13
14:50
Всем доброго дня.
Переношу обработку из версии 7.7 в 8.2. Смысл обработки - получение из сторонней системы биллинга данных (сохраняются в xml и затем парсятся и превращаются в документы). Получилось так, что мне нужно получить дополнительное поле, но не понимаю, где список полей задается.
Под подозрение попала строка скрипта:
Скрипт.Eval("RQ.Option(4)='13056'");
Кто может, объясните мне, пожалуйста, что это означает.
Вот сама функция:
Функция ЗагрузитьФайл(СтрокаАдреса, ИмяВходящегоФайла)
    
    WinH = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
    Поток = Новый COMОбъект("ADODB.Stream");
    Скрипт = Новый COMОбъект("MSScriptControl.ScriptControl");
    Попытка
        Скрипт.Language="javascript";
        Скрипт.AddObject("RQ", WinH);
        Скрипт.Eval("RQ.Option(4)='13056'");  //что это за параметр?
        WinH.Open("GET", СтрокаАдреса, 0);
        
        WinH.setRequestHeader("Accept", "application/xml");
        WinH.SetRequestHeader("Content-Type","text/xml; charset=Windows-1251");
        WinH.Send();
        
        Поток.Mode = 3;
        Поток.Type = 1;
        Поток.Open();
        
        Скрипт.AddObject("Stream", Поток);
        Скрипт.Eval("Stream.Write(RQ.ResponseBody)");
        
        Поток.SaveToFile(ИмяВходящегоФайла, 2);
        Возврат Истина;
    Исключение
        Возврат Ложь;
    КонецПопытки;
    
КонецФункции // ЗагрузитьФайл()
1 Господин ПЖ
 
04.12.13
14:53
>Скрипт.Eval("RQ.Option(4)='13056'");  //что это за параметр?

спроси у авторов биллинга
2 Eugene_life
 
04.12.13
14:56
(1)Они открестились от этой функции. Ее писал какой-то умный программист. Само собой, в тексте ни одного комментария.
3 Господин ПЖ
 
04.12.13
14:58
>Они открестились от этой функции.

пускай дают другую. с документацией
4 Господин ПЖ
 
04.12.13
15:00
тут просто дергается некий скрипт на их стороне с передачей ему хер знает чего... какая там сигнатура и чо вообще происходит - мы будем всей миздой гадать?
5 Eugene_life
 
04.12.13
15:01
(3),(4) Ты, конечно, прав. Но Миста непредсказуема, всегда есть вероятность того, что кто-то просто напишет ответ :)
6 shuhard
 
04.12.13
15:09
(5) и что мешает использовать код есть, раз он работает ?
7 Eugene_life
 
04.12.13
15:13
(6) нужно получать еще одно поле в выгрузке, а напрямую в коде отсутствует список полей. Стало быть, получаются все поля? Но по документации это поле существует (номер документа в биллинге), а в xml-е его нету. Вот и думаю, как же это работает. Отладчик тут бесполезен.
8 Eugene_life
 
04.12.13
15:19
Всем присутствующим спасибо, разобрался. Видимо, прежний программист участвовал в разработке этой системы биллинга (ну, или тесно сотрудничал с разработчиками), и сделал функцию на стороне биллинга. Она в документации не описана, однако продолжает работать. Изменил вызов на функцию, описанную в документации - получил все реальные поля.
9 vhl
 
04.12.13
15:22
(0) Этот код не загружает данные. Здесь просто сохраняется файл из вашей системы биллинга. Загрузка где-то дальше должна идти.
10 CrazyBear
 
04.12.13
15:22
(0) а сам скрипт нельзя посмотреть? или хотя бы отладчиком пошариться по переменной "Поток" может глазами хоть что-то будет понятное...
11 Torquader
 
04.12.13
15:23
(1) Ваша строка задаёт опцию к запросу файла
http://msdn.microsoft.com/en-us/library/windows/desktop/aa384108(v=vs.85).aspx
К авторам билинга он относится точно также, как и к автору этого кода - это параметр запроса (точнее набор параметров)
То есть вся эта "байда" просто заходит на http по СтрокаАдреса, получает оттуда ответ на запрос GET и записывает его в файл ИмяВходящегоФайла.
Запрос формируется на стороне билинга и дополнительные поля добавляются именно там.
12 Eugene_life
 
04.12.13
15:29
(11) я так и понял. Но "фишка" была в том, что функция, которая была в СтрокаАдреса, не описана никак в документации, и техподдержка о ней "ни слухом ни духом". Вылечилось заменой на документированную функцию.
13 Torquader
 
04.12.13
15:46
(12) Видимо, кто-то написал преобразователь на стороне билинга - пусть смотрят php-код - там, наверное, всё описано.