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

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

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

29 ответов

49 просмотров

Рекурсивно 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-запросов дает много информации для размышлений

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта