Спасибо за уточнение. Действительно, при правах на чтение для всех условие проходит корректно.
А есть ли какая-либо возможность выполнять агент от какого-то пользователя? Поскольку дальше идет удаление всех элементов, без пользователя это не срабатывает.
Полный текст скрипта, на всякий случай:
[COLOR=#cccccc][FONT=Consolas, Courier New, monospace][SIZE=14px][CODE]function cleanQuery()
{
// Добавим запись в лог о запуске агента
AddMessage2Log('Запуск скрипта cleanQuery');
// Добавляем значения очищаемого инфоблока. Два, чтобы избежать ошибок
$query_id = 22;
$query_symbol = 'line';
global $LOG_FILENAME;
// Подключаем модуль инфоблоков
if(CModule::IncludeModule('iblock')){
AddMessage2Log("Первый брейк-поинт. Модуль инфоблоков был подключен");
// Проверим, что инфоблок с этим ID имеет правильный символьный код (line)
AddMessage2Log('Получение инфоблока по ID: ' . CIBlock::GetByID($query_id)->Fetch());
if($res = CIBlock::GetByID($query_id)->Fetch()['CODE'] == $query_symbol){
AddMessage2Log("Второй брейк-поинт. ИД инфоблока совпадает с символьным кодом");
// $result['matching'] = True;
// Отберем все элементы в инфоблоке с очередью и запишем их в $IDs_to_delete
$arFilter = Array(
'IBLOCK_ID' => $query_id,
'IBLOCK_CODE' => $query_symbol
);
if($elements = CIBlockElement::GetList(Array(), $arFilter)){
while($element = $elements->Fetch()){
$IDs_to_delete[] = $element['ID'];
}
}
AddMessage2Log("Третий брейк-поинт. Получены ID элементов на удаление $IDs_to_delete");
// Переберем $IDs_to_delete и для каждого элемента произведем удаление
if($IDs_to_delete){
AddMessage2Log("Перебор айдишников начался");
if(CIBlock::GetPermission($query_id)>='W'){
AddMessage2Log("Доступ к инфоблоку на изменение элементов получен");
global $DB;
foreach($IDs_to_delete as $id){
$DB->StartTransaction();
if(!CIBlockElement::Delete($id)){
$DB->Rollback();
} else {
$DB->Commit();
//$result['delete'][] = "Объект $id из инфоблока $query_id был удален";
}
}
} else {
AddMessage2Log('Что-то пошло не так с доступом к инфоблоку');
}
}
} else {
AddMessage2Log("Второй брейк-поинт. ИД инфоблока НЕ СОВПАДАЕТ с его символьным кодом $query_symbol != $res");
}
} else {
AddMessage2Log("Первый брейк-поинт. Модуль инфоблоков не был подключен");
}
return "cleanQuery();";
}[/CODE][/SIZE][/FONT][/COLOR][COLOR=#cccccc][FONT=Consolas, Courier New, monospace][SIZE=14px]
[/SIZE][/FONT][/COLOR]
Мне, к примеру, не очень понятно поле "ID Пользователя" в настройке агента. Я полагал, что это пользователь, от имени которого нужно выполнить агент?
[URL=https://disk.yandex.ru/i/w858WdIfl9JP_w]https://disk.yandex.ru/i/w858WdIfl9JP_w[/URL]
[COLOR=#cccccc][FONT=Consolas, Courier New, monospace][SIZE=14px]
[/SIZE][/FONT][/COLOR]
[COLOR=#cccccc][FONT=Consolas, Courier New, monospace][SIZE=14px]
[/SIZE][/FONT][/COLOR]