|   |   | 
| 
 | ИС ЭСФ Казахстан - 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 не используются. Хотя в списке параметров они есть.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |