Имя: Пароль:
1C
 
1С:Контрагент, запилить для 77
,
0 Злопчинский
 
20.01.17
23:27
По рецепту в http://catalog.mista.ru/public/577575/
запилил обработку, добился код ответа = 200
.
в тексте ответа приходит
в тексте приходит

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:getCorporationRequisitesByINNResponse xmlns:ns1="http://ws.orgregister.company1c.com/"></ns1:getCorporationRequisitesByINNResponse></soap:Body></soap:Envelope>;

и все..

что это такое?
с чем его курить?
где инфа в виде иксемеля?
1 Злопчинский
 
20.01.17
23:28
INN = "7721562305";  
    
  URL="https://api.orgregister.1c.ru/orgregister/v5?wsdl";;  
  WinHttp=создатьобъект("WinHttp.WinHttpRequest.5.1");  
      
  t1 = "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""no""?>  
  |<SOAP-ENV:Envelope xmlns:SOAPSDK1=""http://www.w3.org/2001/XMLSchema"";  
  | xmlns:SOAPSDK2=""http://www.w3.org/2001/XMLSchema-instance"";  
  | xmlns:SOAPSDK3=""http://schemas.xmlsoap.org/soap/encoding/"";  
  | xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/envelope/"";  
  | xmlns:ns1=""http://ws.orgregister.company1c.com/"">;  
  |<SOAP-ENV:Body>  
  | <ns1:getCorporationRequisitesByINN >  
  | <ns1:INN >"+INN+"</ns1:INN>  
  | <ns1:configurationName>0</ns1:configurationName>    
  | <ns1:getCorporationRequisitesByINN>  
  |</SOAP-ENV:Body>  
  |</SOAP-ENV:Envelope>";    
        
  WinHttp.Open("POST",URL);    
  WinHttp.SetCredentials("Логин","Пароль",0);  //к сожалению, подписка ИТС должна быть  
  WinHttp.send(t1);  
  Ответ = WinHttp.responsetext();    
        
  Сообщить(WinHttp.Status);  
    
  Если WinHttp.Status = 200 тогда // выводим для отладки  
      т1 = 1;  
      для ии=1 по  25  Цикл  
          Сообщить(сред(Ответ,т1,250));    
          т1 =     т1 + 250;  
      КонецЦикла;  
  КонецЕсли;
2 Fram
 
20.01.17
23:44
(1) ";" зачем в конце строк внутри xml запроса?
3 Fram
 
20.01.17
23:48
И еще тупой вопрос. Тут то подставил свое надеюсь?
WinHttp.SetCredentials("Логин","Пароль",0);
4 Злопчинский
 
20.01.17
23:50
(3) да, тут норм
5 Злопчинский
 
20.01.17
23:50
(2) не знаю, я тупой в новомодных технологиях.
содрал по ссылке и все
6 Злопчинский
 
20.01.17
23:52
t1 = "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""no""?>  
  |<SOAP-ENV:Envelope xmlns:SOAPSDK1=""http://www.w3.org/2001/XMLSchema"";  
  | xmlns:SOAPSDK2=""http://www.w3.org/2001/XMLSchema-instance"";  
  | xmlns:SOAPSDK3=""http://schemas.xmlsoap.org/soap/encoding/"";  
  | xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/envelope/"";  
  | xmlns:ns1=""http://ws.orgregister.company1c.com/"">;  
  |<SOAP-ENV:Body>  
  | <ns1:getCorporationRequisitesByINN>  
  | <ns1:INN >"+INN+"</ns1:INN>  
  | <ns1:configurationName>0</ns1:configurationName>    
  | <ns1:getCorporationRequisitesByINN>  
  |</SOAP-ENV:Body>  
  |</SOAP-ENV:Envelope>";
7 Злопчинский
 
20.01.17
23:54
(2) точки с запятой миста влупила при пасте (сильно умная). в оригинале норм все

https://content.screencast.com/users/Che66/folders/Jing/media/ad28173a-51f3-48a3-a784-04eb489e6a6a/2017-01-20_2353.png
8 Злопчинский
 
20.01.17
23:55
в (7) третья строчка текста снизу по идее д.б. закрывающий тег, поправил, попробовал - результат без изменений
9 Злопчинский
 
20.01.17
23:56
а блин я тупой наверное .... сек
10 Злопчинский
 
21.01.17
00:04
1. вводился неверный ИНН - вводил свой = 12 символов, обрезался до 10.
поправил, результат = 0

2. взял ИНН организации, поменялось. код ответа = 500
о, повторил запрос, проплевалось!
получил ответ!!!
11 Fram
 
21.01.17
00:06
а я все время 500 получаю
12 Злопчинский
 
21.01.17
00:09
(11) значит ты тупой ;-0)
ШУЧУ!
13 Злопчинский
 
21.01.17
00:09
такс, где-то там на ИС был еще красивый вариант вывода в дерево иксемеля.. да и уменя где-то есть
14 Fram
 
21.01.17
00:10
(8) да там / забыл автор поставить
15 Fram
 
21.01.17
00:18
вот что в ответе при статусе 500
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><soap:Fault><faultcode>soap:Server</faultcode><faultstring>SERVER-11: Option 9eac7d22-ce3f-4dc0-9558-c593463847ef exceeds maxVolume 7200</faultstring></soap:Fault></soap:Body></soap:Envelope>
16 Злопчинский
 
21.01.17
00:25
четотам больше допустимого значения
17 Злопчинский
 
21.01.17
00:25
у меня читается ок, но смотреть не хочет иксемель - говорит энкодингеррор, символ какой-то ему не нравится
копаюсь
18 Fram
 
21.01.17
00:25
это я вижу.. ответ может
19 Злопчинский
 
21.01.17
00:26
мля, ну почему вот в 1с все быстро получается, а с этими новомодными штучками которые уже не младенцы - все время г... какое-то?
20 Злопчинский
 
21.01.17
00:27
блин как в фаре заменить > на >переводстроки
?
21 Fram
 
21.01.17
00:30
пользуй notepad++
я конечно в курсе что ты еще тот динозавр, но FAR в 2017 году!!!
22 Fram
 
21.01.17
00:31
что ты назваешь новомодным? xml? )))
23 Fram
 
21.01.17
00:32
у меня все время 500.. хоть стой хоть падай
24 Злопчинский
 
21.01.17
00:46
(21) смотрел всякие есть нормальные но они противоречат моему чувсву прекрасного
25 Злопчинский
 
21.01.17
00:47
так.
1. текст ответ в виде иксемеля возвращается без строки кодировки, поэтому делаем так для того чтобы парсеры иксемеля не ругались и смотреть в тексе было удобно

  WinHttp.send(t1);  
  Ответ = "<?xml version=""1.0"" encoding=""CP1251"" standalone=""no""?>"+СокрЛП(WinHttp.responsetext());
  Ответ = СтрЗаменить(Ответ,"/><","/>"+РазделительСтрок+"<");
  Ответ = СтрЗаменить(Ответ,"><",">"+РазделительСтрок+"<");
26 Смотрящий
 
21.01.17
00:49
(21) Прекрасный менеджер ;) Сам пользуюсь
27 Злопчинский
 
21.01.17
00:53
такс,

<ns1:getCorporationRequisitesByINN>  
<ns1:INN>"+INN+"</ns1:INN>  
<ns1:configurationName>0</ns1:configurationName>    
</ns1:getCorporationRequisitesByINN>  

getCorporationRequisitesByINN - это получить по ИНН
<ns1:INN> - сам ИНН
<ns1:configurationName> - непонятно, это что?

здесь https://api.orgregister.1c.ru/orgregister/v5?wsdl
что такое configurationName - не нашел, где смотреть описание?
28 Злопчинский
 
21.01.17
01:02
CP1251 - неправильно

  WinHttp.send(t1);  
  Ответ = "<?xml version=""1.0"" encoding=""windows-1251"" standalone=""no""?>"+СокрЛП(WinHttp.responsetext());
  Ответ = СтрЗаменить(Ответ,"/><","/>"+РазделительСтрок+"<");
  Ответ = СтрЗаменить(Ответ,"><",">"+РазделительСтрок+"<");

  Сообщить("Статус выполнения запроса: "+WinHttp.Status);  

  Если WinHttp.Status <> 200 Тогда Возврат; КонецЕсли;
    
    Т = СоздатьОбъект("Текст");
      Т.ДобавитьСтроку(Ответ);
      ИмяФайла = КаталогПользователя()+""+_GetPerformanceCounter()+".xml";
      ИмяФайла = "c:\1.xml";
      Т.Записать(ИмяФайла);
      //ЗапуститьПриложение(ИмяФайла);

    Иксемель = СоздатьОбъект("Microsoft.XMLDOM");
        Иксемель.Load(ИмяФайла);
        Корень = Иксемель.DocumentElement; ОбработатьУзел(Корень, 0); //тест чтения
      Иксемель = "";
29 Злопчинский
 
21.01.17
01:02
//**************************************************************************************
//
Процедура ОбработатьУзел(Узел, Уровень=0)
    Состояние(Уровень);

    КолвоУзлов = Узел.childNodes.length;
    Для СчУзлов = 0 По КолвоУзлов-1 Цикл
        
        ТекУзел = Узел.childNodes.item(СчУзлов);
        Если ТекУзел.nodeType <> 1 Тогда Продолжить; КонецЕсли;
        
        Стр = Формат("","С"+Уровень*8);
        
        СтрАтрибуты = "";
        Для счАтрибутов = 0 По ТекУзел.attributes.length-1 Цикл
            Атрибут     = ТекУзел.attributes.item(счАтрибутов);
            СтрАтрибуты    = СтрАтрибуты + ?(СтрАтрибуты="","",";") + Атрибут.nodename+"="+Атрибут.value;
        КонецЦикла;
        
        ТекстУзла = "";
        Если ТекУзел.childNodes.length = 1 Тогда
            Если  ТекУзел.childNodes.item(0).nodetype = 3 Тогда ТекстУзла = ТекУзел.childNodes.item(0).text; КонецЕсли;
        КонецЕсли;
        
        Стр = Стр + ТекУзел.tagName + ?(СтрАтрибуты="","","("+СтрАтрибуты+")" ) + ": " +ТекстУзла;
        Сообщить(Стр);
        
        ОбработатьУзел(ТекУзел, Уровень+1);
    КонецЦикла;
    
    Состояние("");
КонецПроцедуры // ОбработатьУзел()
30 Fram
 
21.01.17
01:11
Нафига файл когда можно
Иксемель.LoadXML(Ответ);  
А?
31 Fram
 
21.01.17
01:12
И открой для себя XPath
32 Злопчинский
 
21.01.17
01:13
как бы все получилось, ВПФ к контрагентам пришпилил
осталось повыдергивать атрибуты, значение и текст
33 Злопчинский
 
21.01.17
01:13
(30) я неграмотный
34 Злопчинский
 
21.01.17
01:14
если че я кустарно, по-дедовски распарсю...
https://content.screencast.com/users/Che66/folders/Jing/media/c631883a-84ca-4ae8-bd33-a9ebbe4061a7/2017-01-21_0110.png
35 Fram
 
21.01.17
01:15
А вообще в V7plus есть класс для работы с XML :)
36 Злопчинский
 
21.01.17
01:16
тут интереснее как это разложить нормально из

                                        Состав(xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance;xsi:type=АдресРФ):
                                                СубъектРФ: КРАСНОЯРСКИЙ край
                                                Город: КРАСНОЯРСК г
                                                Улица: АКАДЕМГОРОДОК ул
                                                ДопАдрЭл(ТипАдрЭл=10100000;Значение=660036):
                                                ДопАдрЭл:
                                                        Номер(Тип=1010;Значение=18):
                                                ДопАдрЭл:
                                                        Номер(Тип=2010;Значение=93):


..разложить в нормальный вид надо где-то вытаскивать схему что и как кодируется в адресных элементах...? где это взять?
вот это: xsi:type=АдресРФ
37 Злопчинский
 
21.01.17
01:17
(35) в7+ не люблю, она мне регулярно прогу крашило, без нее работаю
38 Djelf
 
21.01.17
01:17
(29) Небольшая упрощалка

Функция   хмлПолучитьАтрибут(хмлДок, Знач ИмяУзла = "", Знач ИмяАтрибута = "", Знач ЗначениеПоУмолчанию = "")
    Рез = "";
    Попытка
        Узел = ?(ИмяУзла = "", хмлДок,хмлДок.selectSingleNode(ИмяУзла));
        Если ИмяАтрибута = "" Тогда
            Рез    = Узел.text;
        Иначе
            Рез    = Узел.attributes.getNamedItem(ИмяАтрибута).Text;
        КонецЕсли;
    Исключение
        Рез    = ЗначениеПоУмолчанию;
    КонецПопытки;
    Возврат СокрЛП(Рез);
КонецФункции // ПолучитьАтрибутXML()

(30) Вылетает на больших файлах.
(31) Дал бы ссылку что-ли хоть на это http://www.zvon.org/xxl/XPathTutorial/General_rus/examples.html
(34) ns:* убиваю, они мне не нравятся :)
39 Fram
 
21.01.17
01:20
(38) большие файлы не надо в ДОМ грузить - это г.внокод, только маленькими кусками, потому что дом полностью в память грузится
тоже не понимаю назначение неймспейсов в xml. гемору от них больше чем толку
40 Злопчинский
 
21.01.17
01:20
как удобно получить/разложить типа?
ТипАдрЭл=10100000

как написать "указивку" что ТипАдрЭл=10100000 - это индекс и надо пихать в реквизит индекс?
так чтобы это не писать подробно руками при загрузке?

то есть (типа как в снеговике? - чтото там есть) описать соответсвие разных реквизитов разных справочников у меня в базе 77 разным атрибутам разных тегов...???

как расписать что

ДопАдрЭл(ТипАдрЭл=10100000; -> индекс ...?
41 Злопчинский
 
21.01.17
01:21
(39) я ваще не знаю что такое неймспейсы
42 Злопчинский
 
21.01.17
01:23
(38) и как красиво сделать чтобы
Состав(xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance;xsi:type=АдресРФ):

превратилось в
Состав(type=АдресРФ):

типа...?
43 Djelf
 
21.01.17
01:24
(39) Ты определись с ответами в (35) и (38).
Они друг другу противоречат.
xmllite пережевывает громадные файлы, но с ним работать сложнее
44 Злопчинский
 
21.01.17
01:24
(38) это не упрощалка, это для получения по именам...
а у меня там функция тупо дерево строит для показа - с мисты содрал давно
45 Fram
 
21.01.17
01:30
(43) в каком месте?
я так понял из твоего ответа на мое замечание в (30), что ты против LoadXML, потому что он не может валится на больших документах? я ответил, что большие документы не надо грузщить в ДОМ. в данном случае документ небольшой, поэтому у него не должно быть ошибок
46 Fram
 
21.01.17
01:30
*он может валиться
47 Djelf
 
21.01.17
01:30
(44) Не... оно все таки упрощалка! 1С розница как увидит тэг, которго она не знает, в xml, так сразу в незнанку - тэг у вас плохой, контрагент плохой, и вообще вы все плохие!
48 Fram
 
21.01.17
01:32
+(45) и даже когда xml читают последовательно, есть смысл куски грузить в DOM, просто потому что работать с DOM удобнее
49 Злопчинский
 
21.01.17
01:33
(47) а там что - так же по дедовски читают все теги атрибуты подряд и спотыкаются если тег не определен и что с ним делать..?
50 Злопчинский
 
21.01.17
01:34
(48) а это как? пример можно - "читают последовательно .. куски грузить в дом..."..?
51 Djelf
 
21.01.17
01:35
(45) А откуда ты знаешь насколько он небольшой?
А завтра в файл ответа напихают столько тэгов, что он разбухнет как космический комар и лопнет при загрузке в 7ку.
Тут лучше перестраховаться, либо действовать в зависимости от размера сообщения.
52 Злопчинский
 
21.01.17
01:35
(47) а так ксати может и правильнее
вот я(ты) определил список тегов и атрибутов нужныхх, по именам их повыдергивал и типа радуемся.

а тут появился новый ВАЖНЫЙ ТЭГ - а мы его просто тупо не обрабатываем .. и ничего не знаем... о нем.. а там зашито "клиент=бяка, болше100 рублей не продавать"
53 Злопчинский
 
21.01.17
01:36
А пример последовательного чтения дайте и как с ним работать..?
54 Злопчинский
 
21.01.17
01:37
(52) ..а так попаляс неизвестный тег/атрибут - сразу ломаемся! все понятно - ЧТОТО случилось...

я такой подход бывает тоже юзаю
55 Fram
 
21.01.17
01:38
(50) ну например тебе могут рпислать 1 xml документ содержащий сотни тысяч узлов содержащих оописание контрагента. в таком случае сам файл следует читать классом для последовательного чтения XML, а узлы описывающие контрагентов загружать в документы ДОМ и уже работать с ДОМом
56 Fram
 
21.01.17
01:38
(53) в том же V7Plus есть класс и для последовательно чтения
57 Злопчинский
 
21.01.17
01:41
в (0) в итоге - ИП-шники не обрабатываются, возвращается пустой содержательный ответ.

может надо какой-то параметр/атрибут прописать или другой тег запроса использовать - я не нашел где это можно посмотерть...
???
58 Djelf
 
21.01.17
01:42
(53) Тут же оно http://www.1cpp.ru/forum/YaBB.pl?num=1332077808
Работает очень быстро и кушает xml`ки вообще любого объема.
59 Fram
 
21.01.17
01:42
у меня все равно 500 возращает вебсервис. хоть что делай. надо будет через SOAPUI попрбовать
60 Злопчинский
 
21.01.17
01:52
(58) учтем. я видел это, но так как с иксемелями работаю редко - то (забыл, хотя в запасниках ссылка лежит) пользуюсь тем что давно адаптировал из сообщественного, хватает
61 Злопчинский
 
21.01.17
01:52
(58) то есть это в текущих 1С++?
62 Злопчинский
 
21.01.17
02:00
(58) мнеб маленький примерчик чтения/разбора последовательного с этим методами 1С++
63 Djelf
 
21.01.17
02:19
(61) Да, есть.
Но последовательный доступ требует больших усилий!
Зато не падает. Загрузка хмл лицензий на алкоголь = упало все, кроме xmlite.
Было на 1с++ пример чтения всего, что-то потерял ссылку.
Была тема...
У меня примера нет, ну делал загрузку реестра алколицензий https://cloud.mail.ru/public/3rP9/SJpQW9KDK
В этой обработке и разгонял скорость загрузки. Получилось!

В обработке есть ВК "Карлик" это ВК на основе curl + 1c, остальное = джентльменский набор.
Это легко заменить на загрузку из фала.

Больше ничего нет ;(
64 Злопчинский
 
21.01.17
03:20
(63) попробую не забыть до завтра - стянуть
65 vcv
 
21.01.17
08:24
(10) "вводился неверный ИНН - вводил свой"
Для ИНН физического лица другой запрос.
А ты запрашиваешь <ns1:getCorporationRequisitesByINN> - информациюо юр.лице по ИНН.
66 vcv
 
21.01.17
08:40
(57) Смотри https://api.orgregister.1c.ru/orgregister/
Там написано для каждой версии сервиса отдельно.
67 Злопчинский
 
21.01.17
09:42
(66) чтото я там вообще упоминания не нашел для
<ns1:INN>"+INN+"</ns1:INN>  
<ns1:configurationName>0</ns1:configurationName>
68 trdm
 
21.01.17
10:17
(58) Черт, блин, а я очень отстал с версиями 1С++ до сих пор 250х использую :(
69 totparen
 
21.01.17
12:40
(64) Не поделитесь ли рабочим кодом парсинга ХМЛ на 1С++ ?
Нужно слезть с v7plus.dll (падает при загрузки XML больше 800 кб.)
70 totparen
 
21.01.17
12:59
хотя... тут (58) можно разобраться. Пример не сложный.
71 Злопчинский
 
21.01.17
13:06
(69) смотри (29) и (38)

код в (29) выводит распарсенный файл в табло

   Иксемель = СоздатьОбъект("Microsoft.XMLDOM");
        Иксемель.Load(ИмяФайла);
        Корень = Иксемель.DocumentElement; ОбработатьУзел(Корень, 0);//тест чтения

      Иксемель = "";
2 + 2 = 3.9999999999999999999999999999999...