208 похожих чатов

Добрый день Может ли быть проблема с получением данных в CIBlockElement::GetList

по XML_ID, если сильном много запросов подряд? На сайте есть импорт, в котором каждый элемент ищется по XML_ID и обновляется. Но с какого-то элемента - порядка 6000+ CIBlockElement::GetList возвращает пустоту

29 ответов

16 просмотров

Рекурсивно AJAXом долбить?

Nadezhda-Kurganova Автор вопроса
avel07
Рекурсивно AJAXом долбить?

Что именно рекурсивно ajax'ом? Рекурсии точно нет никакой

Nadezhda Kurganova
Что именно рекурсивно ajax'ом? Рекурсии точно нет ...

Ну получать callback и в нём обратно вызывать запрос

Nadezhda Kurganova
Что именно рекурсивно ajax'ом? Рекурсии точно нет ...

Возможно ваша проблема происходит из-за того, что заканчивается время исполнения PHP

Nadezhda-Kurganova Автор вопроса
avel07
Возможно ваша проблема происходит из-за того, что ...

Нет, в лог-то он в этом момент пишет, дальнейшая логика отрабатывает, но условие по результатам CIBlockElement::GetList не срабатывает ,потому что там пусто. Импорт свой

Пустоту или false? Вообще нормальный импорт разбивают по шагам. Рекомендации "перейти на d7" выкинуть и забыть.

Nadezhda-Kurganova Автор вопроса
Eugene Zhukov
Пустоту или false? Вообще нормальный импорт разбив...

Пустоту, то есть 0 найденных элементов. Да, видимо придется. Изначально элементов для обмена было не много, поэтому деления на шаги не делали, сейчас видимо придется. Только суть в том, что 1С для обмена не обращается к сайту никак, а просто выгружает файл в папку. Поэтому придется использовать какую-то свою идею для шагов, возможно, через агенты

Nadezhda Kurganova
Пустоту, то есть 0 найденных элементов. Да, видимо...

Так, вот теперь стало интересно. Вы в импорте количество элементов считаете или элемент ищите по XML_ID? Насчет файла - ну, распарсите его во временную таблицу, дальше по шагам ее.

Nadezhda-Kurganova Автор вопроса
Eugene Zhukov
Так, вот теперь стало интересно. Вы в импорте коли...

Элемент по XML_ID. И вот такое условие по результату не работает if($ob = $res->GetNext()) {}

Тогда почему 0? И фильтр покажите.

Nadezhda-Kurganova Автор вопроса
Eugene Zhukov
Тогда почему 0? И фильтр покажите.

Потому что пробовала выводить количество для теста. Фильтр вообще простой $arSelect = Array("ID", "NAME", "ACTIVE"); $arFilter = Array("IBLOCK_ID"=>self::IBLOCK_STOREROOM_ID, "XML_ID"=>$id); $res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect); Он работает до какого-то элемента, а потом в результатах пусто. Если этот же фильтр с теми же данными просто скопировать в тестовый файл - всё нормально находит. А именно в цикле работы над данными импорта в какой-то момент перестает выдавать результат

Nadezhda Kurganova
Потому что пробовала выводить количество для теста...

Нельзя с базой так жестоко (я про фильтр). Замените ключ "XML_ID" на "=XML_ID" - сейчас у вас поиск по подстроке, что ухудшает работу с ростом числа элементов. В оправдание могу сказать, что вы повторили мою ошибку 15-летней примерно давности. Только я Оракл валить пытался.

Nadezhda Kurganova
Спасибо!

И GetNext вам тоже не нужен. Используйте Fetch

Nadezhda-Kurganova Автор вопроса
Eugene Zhukov
И GetNext вам тоже не нужен. Используйте Fetch

Спасибо за подсказки в оптимизации работы, но в целом по проблеме не помогло. Как-то через раз находятся элементы: https://photo-screen.ru/i/2FMZaMVSM - хотя все они именно с этими кодами из 1С есть в инфоблоке - и поиск по инфоблоку по внешнему коду в админке их находит

Nadezhda Kurganova
Спасибо за подсказки в оптимизации работы, но в це...

Т.е. в админке находит всегда, в скрипте для АПДЕЙТА - отслучая к случаю? Документооборот и бизнес-процессы выключены?

Nadezhda-Kurganova Автор вопроса
Eugene Zhukov
Т.е. в админке находит всегда, в скрипте для АПДЕЙ...

Для первых 6404 нормально, а дальше от случая к случаю

В настройках инфоблока

Nadezhda Kurganova
Для первых 6404 нормально, а дальше от случая к сл...

Попробуйте свой if заменить на $ob = $res->Fetch(); unset($res); if ($ob)

Nadezhda-Kurganova Автор вопроса
Eugene Zhukov
В настройках инфоблока

Редакция Стандарт - там видимо и нет такого

Nadezhda-Kurganova Автор вопроса
Eugene Zhukov
Нельзя с базой так жестоко (я про фильтр). Заменит...

Если я буду использовать в фильтре array('NAME' => 'NAME'), то будет поиск медленнее, чем использование array('=NAME' => 'NAME') ?

поиск по подстроке, конечно медленнее

Dmitriy
поиск по подстроке, конечно медленнее

Я даже не замечал, что это так работает 😅 Для меня небольшой шок

Ilya Mazyarov ⚡
Я даже не замечал, что это так работает 😅 Для меня...

Просмотр sql-запросов дает много информации для размышлений

Похожие вопросы

Обсуждают сегодня

Do any of you guys have interesting projects one could join? I'm a Middle Full-Stack developer (JS/TS, React & Node)
Lev Shapiro
35
Типа вызывать GetParent и проверять на соответствие GetModuleHandle?
The Bird of Hermes
28
$res = json_decode($наша строка из респонса); $res1 = array_map(fn($o) => $o->name, $res->breadcrumbs[0]->entities); Как такое будет на Хаскеле?.. В начале весь джейсон, в ко...
Хаскель Моисеевич Гопник
20
Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
10
Хтось використовував Vapor на Windows?
Jaroshevskii
15
Тут кста кто-нибудь NeoVim использует?
Simple Sorcerer
13
А чем вам питонисты не угодили?😂
.
79
у меня вопрос на счет .global <name> для чего это нужно если я пишу на ассемблере? только для того что бы сделать это видимым для линкера? вот что написано в докумментации GA...
Simple Sorcerer
1
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
52
У меня вот только только был затык при изучении одной темы. Я настолько привык к джс, что мозг с трудом признал таки, что f и \x -> f x - это равные функции. Потому что в д...
xfides Barabanov
7
Карта сайта