Имя: Пароль:
1C
 
ИС ЭСФ Казахстан - 2
,
0 Вася Теркин
 
20.04.18
09:46
В продолжение https://www.forum.mista.ru/topic.php?id=814278&all=1

Сделал запросец HTTP, хочу список всех ЭСФ за квартал взять.
Засылаю в ВыполнитьМетодВебСервиса.

Там все отлично проходит, выполняет по концовке
        HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
        ТекстОтвета = СокрЛП(HTTPОтвет.ПолучитьТелоКакСтроку());    
и возвращает ответ.
Когда прогоняю через XDTO на выходе не более 1000 значений. А как оттуда следующие тысячи вытаскивать?
То есть:

                СписокХДТО = Обработка.ВернутьСписокЭСФСПортала(Спр.Ссылка,Перечисления.НаправленияЭСФ.Входящий,НачПериода,КонПериода);
                Для каждого Эл из СписокХДТО Цикл
                    //Сообщить("" + Эл.registrationNumber);
                    Стр = ТЗ.Добавить();
                    Стр.Дата  = Дата(СтрЗаменить(Лев(Эл.inputDate,10),"-",""));
                    Стр.РегНомер = Эл.registrationNumber;
                    Стр.Статус = Эл.invoiceStatus;
                    Стр.Количество = 1;
                КонецЦикла;

так дает только первую тысячу, а у меня много тысяч.
1 Вася Теркин
 
20.04.18
09:48
В принципе такую функцию сделал

Функция ВернутьСписокЭСФСПортала(ПрофильИСЭСФ, НаправлениеЭСФ  = Неопределено, Дата1 = Неопределено, Дата2 = Неопределено) Экспорт
    
    Если НаправлениеЭСФ = Неопределено Тогда
        НаправлениеЭСФ = Перечисления.НаправленияЭСФ.Входящий;        
    КонецЕсли;
    
    Если Дата1 = Неопределено Тогда
        Дата1 = НачалоГода(ТекущаяДата());        
    КонецЕсли;
    
    Если Дата2 = Неопределено Тогда
        Дата2 = КонецДня(ТекущаяДата());        
    КонецЕсли;
    
    ПараметрыЭСФ = ЭСФСерверПовтИсп.ПолучитьПараметрыЭСФ();
    ВерсияИСЭСФ = ПараметрыЭСФ.ВерсияИСЭСФ;
    ИдентификаторСессии = ЭСФВызовСервера.ОткрытьСессию(ПрофильИСЭСФ, ВерсияИСЭСФ);
    попытка //Дальше если падает обязательно сессию закрыть;
        ФабрикаInvoiceInfo = ФабрикаInvoiceInfo_Версия2(); // Фабрика для приема сообщений с секцией CDATA
        ШаблонЗапроса = ПолучитьМакет("ЗапросСписокЭСФ").ПолучитьТекст();                
            
        ЗапросXML = ШаблонЗапроса;
        ЗапросXML = СтрЗаменить(ЗапросXML, "[INBOUND_OUTBOUND]", ?(НаправлениеЭСФ = Перечисления.НаправленияЭСФ.Входящий,"INBOUND","OUTBOUND"));
        ЗапросXML = СтрЗаменить(ЗапросXML, "[dateFrom]", Формат(Дата1,"ДФ=yyyy-MM-dd"));
        ЗапросXML = СтрЗаменить(ЗапросXML, "[dateTo]", Формат(КонецДня(Дата2)+1,"ДФ=yyyy-MM-dd"));
        ЗапросXML = СтрЗаменить(ЗапросXML, "[sessionId]", ИдентификаторСессии);

        ОтветXML = ВыполнитьМетодВебСервиса(ЗапросXML, ИмяСервисаInvoiceService(),,ВерсияИСЭСФ);
        ИнформацияОбОшибке = Неопределено;
        Если НЕ ЭтоМодульнаяОшибка(ОтветXML, ИнформацияОбОшибке) Тогда
            
            ОтветXDTO = ЭСФСервер.ОбъектXDTOИзСтрокиXML(ОтветXML, ФабрикаXDTO);
            invoiceInfoList = ЭСФСервер.ПолучитьСвойство(ОтветXDTO.Body.queryInvoiceResponse.invoiceInfoList, "invoiceInfo", Неопределено);                
            Возврат invoiceInfoList;
            
        ИначеЕсли ЭтоМодульнаяОшибкаСессияЗакрыта(ОтветXML) Тогда
                
            ИдентификаторСессии = ОткрытьСессию(ПрофильИСЭСФ, ВерсияИСЭСФ);
            ПредыдущийLastEventId = Неопределено;
            ПредыдущийLastEventDate = Неопределено;            
            ПредыдущийlastInvoiceId = Неопределено;            
        Иначе
            
            ЗакрытьСессию(ПрофильИСЭСФ, ИдентификаторСессии, ВерсияИСЭСФ);
            
            ЗаписьЖурналаРегистрации(
                НСтр("ru = 'ОбменЭСФ.ПолучитьНовыеЭСФ'"),
                УровеньЖурналаРегистрации.Ошибка,,,
                ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
                
            //ВызватьИсключение НСтр("ru = 'При получении новых ЭСФ возникла ошибка.'") + Символы.ПС + ИнформацияОбОшибке.ПодробноеПредставление;
            
        КонецЕсли;
    Исключение
        ЗакрытьСессию(ПрофильИСЭСФ, ИдентификаторСессии, ВерсияИСЭСФ);
    КонецПопытки;
    
    Возврат Неопределено;
    
КонецФункции
2 Вася Теркин
 
20.04.18
09:48
Но все равно выдает только первую тыщу
3 Вася Теркин
 
20.04.18
09:54
У ответа ХДТО
rsCount    "1000"
lastBlock    "false"

но мне надо дальше
4 catena
 
20.04.18
09:55
Ну, надо играться параметрами дэйт фром, дейт ту
5 Вася Теркин
 
20.04.18
09:56
То есть мне нужно несколько сотен запросов чтобы получить несколько сотен тысяч ЭСФ?
6 Вася Теркин
 
20.04.18
09:56
Такой путь не желателен...
7 catena
 
20.04.18
09:57
(6)Все вопросы к КГД.
8 Вася Теркин
 
20.04.18
10:20
И я не заметил чтобы запрос эту тысячу в хронологической последовательности давал. Он дает тыщу штук, но вроде произвольную тыщу из перечня.
Добавил
Стр.LastEventDate  = Эл.inputDate;

Но дело в том, что если я допустим с 4 января по 4 января делаю получаю штук сорок.


2018-01-04T10:15:30.297+06:00
2018-01-04T10:29:49.537+06:00
2018-01-04T10:35:32.795+06:00
2018-01-04T11:17:35.330+06:00
2018-01-04T11:20:37.793+06:00
2018-01-04T11:39:07.727+06:00
2018-01-04T11:45:17.491+06:00
2018-01-04T15:28:14.736+06:00
2018-01-04T15:28:14.736+06:00
2018-01-04T15:33:41.109+06:00
2018-01-04T17:06:34.711+06:00
2018-01-04T20:20:05.220+06:00
2018-01-04T20:20:05.220+06:00
2018-01-04T20:20:05.220+06:00
2018-01-04T08:05:27.586+06:00
2018-01-04T08:05:36.343+06:00
2018-01-04T08:05:45.777+06:00
2018-01-04T08:05:52.150+06:00
2018-01-04T08:05:58.136+06:00
2018-01-04T08:06:03.463+06:00
.....

А если поставлю запрос с 4 по 8 января, то получаю за 4 только до 2018-01-04T20:20:05.220+06:00, а остальные вообще не выдает, а дальше сразу за 5 начинает кидать тоже не полностью.

Он ни по какому полю не сортирует запрос похоже, выдает первые попавшиеся.
9 Вася Теркин
 
20.04.18
10:27
То есть выборка вернется вот так

2018-01-04T10:15:30.297+06:00
2018-01-04T10:29:49.537+06:00
2018-01-04T10:35:32.795+06:00
2018-01-04T11:17:35.330+06:00
2018-01-04T11:20:37.793+06:00
2018-01-04T11:39:07.727+06:00
2018-01-04T11:45:17.491+06:00
2018-01-04T15:28:14.736+06:00
2018-01-04T15:28:14.736+06:00
2018-01-04T15:33:41.109+06:00
2018-01-04T17:06:34.711+06:00
2018-01-04T20:20:05.220+06:00
2018-01-04T20:20:05.220+06:00
2018-01-04T20:20:05.220+06:00
2018-01-05T10:11:03.662+06:00
2018-01-05T10:11:07.657+06:00
2018-01-05T10:11:07.657+06:00
2018-01-05T10:11:07.657+06:00
....
10 catena
 
20.04.18
10:41
Это что за даты? На сколько я помню, сортируются по дате последнего редактирования. Не могу сейчас проверить.
11 Вася Теркин
 
20.04.18
10:48
К сожалению нет... Уже все даты посмотрел какие есть у объекта
                    Стр.inputDate  = Эл.inputDate;
                    Стр.deliveryDate  = Эл.deliveryDate;
                    Стр.lastUpdateDate  = Эл.lastUpdateDate;

Каша какая-то
12 Вася Теркин
 
20.04.18
10:49
Там момент подачи, момент доставки и момент последнего изменения.
13 Вася Теркин
 
20.04.18
10:49
все три даты в разнобой..
14 Вася Теркин
 
20.04.18
10:50
Мне гораздо интереснее почему за 4 число выборка возвращается разная если брать за 1 день или за несколько?
15 piter3
 
20.04.18
10:56
asc    boolean         Направление сортировки
16 Вася Теркин
 
20.04.18
11:00
(15) Это в запрос вставить?
17 Вася Теркин
 
20.04.18
11:01
3.4.2.2 Criteria
нашел...
18 Вася Теркин
 
20.04.18
11:02
Но у меня и так все есть

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"; xmlns:esf="esf">
   <soapenv:Header/>
   <soapenv:Body>
      <esf:queryInvoiceRequest>
         <sessionId>[sessionId]</sessionId>
         <criteria>
            <direction>[INBOUND_OUTBOUND]</direction>
            <dateFrom>[dateFrom]T00:00:00.000+06:00</dateFrom>
            <dateTo>[dateTo]T23:59:59.999+06:00</dateTo>
            <asc>true</asc>
         </criteria>
      </esf:queryInvoiceRequest>
   </soapenv:Body>
</soapenv:Envelope>
19 Вася Теркин
 
20.04.18
11:03
Вот чего ещё есть
orderBy
asc
pageNum
20 Вася Теркин
 
20.04.18
11:03
Это надо попробовать
21 Вася Теркин
 
20.04.18
11:14
Добавил  
           <orderBy>inputDate</orderBy>
получил
"Unmarshalling Error: cvc-complex-type.2.4.a: Invalid content was found starting with element 'orderBy'. One of '{pageNum}' is expected."

Тогда ещё добавил
            <pageNum>1</pageNum>

Теперь
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"; xmlns:esf="esf">
   <soapenv:Header/>
   <soapenv:Body>
      <esf:queryInvoiceRequest>
         <sessionId>c645c455df334854bd3afb59d25bc7c2-991140005177-</sessionId>
         <criteria>
            <direction>INBOUND</direction>
            <dateFrom>2018-01-04T00:00:00.000+06:00</dateFrom>
            <dateTo>2018-01-04T23:59:59.999+06:00</dateTo>
            <orderBy>inputDate</orderBy>
            <asc>true</asc>
            <pageNum>1</pageNum>
         </criteria>
      </esf:queryInvoiceRequest>
   </soapenv:Body>
</soapenv:Envelope>
возвращает пустую выборку
22 Вася Теркин
 
20.04.18
11:40
Главное что и в примере мануала orderBy и pageNum не используются. Хотя в списке параметров они есть.