инфоблока с автомобилями получают список водителей через "справочник" (код HL записи).
В это время записи HL блока с водителями получают информацию об автомобилях через привязку HL записей к элементам инфоблока (ID).
Когда я сохраняю информацию об автомобиле в HL записи (у водителя) - срабатывает событие, которое передает код HL записи с водителем в элемент инфоблока с автомобилем по ID.
Однако срабатывает это событие лишь со второго раза. Т.е. я задаю водителю автомобиль и сохраняю. В элементе инфоблока ничего не меняется. Тогда я захожу к этому же водителю еще раз и просто сохраняю. И лишь тогда событие передает запись в элемент инфоблока.
Такое ощущение, что сразу после первого сохранения событие не получает инфу об изменениях, хотя через Debug всё нормально. И лишь после второго сохранения, когда у записи уже была информация об автомобиле, он передает код водителя в элемент.
Вопрос: кто сталкивался с подобным? Или есть какие-нибудь соображения, как решить проблему?
Самое забавное, что есть событие, которое, наоборот, при сохранении элемента инфоблока передает информацию об автомобиле к водителю в HL. И событие нормально отрабатывает, с первого сохранения.
А когда ты через дебаг распечатываешь поля в updateIblockElement, там старое значение driver или новое?
И ещё вопрос немного не по теме - зачем current? Сейчас запись выглядит так - создадим массив, положим в него ещё массив, а потом сразу вытащим) Можно просто убрать current и внешний массив. Будет то же самое в твоëм случае.
Ну кстати, логично, можно попробовать
А что в результате работы метода update? Он возвращает либо true либо описание ошибки
Это не решит проблему. Просто выглядит странно))
Ниче не возвращает. Он срабатывает. Но почему-то со старым значением (до сохранения) .
"Ничë" - это false? 😁 Значит он не отрабатывает. Тебе надо вывести в лог el->LAST_ERROR
Тогда где смотреть, что он возвращает? Потому что когда событие непосредственно срабатывает, запись спокойно сохраняется, никакой ошибки нет. Значит это true?
Нет. Надо записать результат работы в переменную. $а = $el-> update If(! $a) { log($el->LAST_ERROR); }
Ок, тогда это сначала сделаю
Так а лог где должен появиться? Сразу после сохранения на экране?
Нет. Его в файл обычно пишут. У Битрикса есть методы, типа Debug::writeToFile
Ладно. Щас всё попробуем👍
А как ты до этого смотрел что в переменной $driver?
Через Debug::dumpToFile($arUserFields, 'fields', 'LogDrivers');
А ну это почти то же самое что я писал выше. Можешь так и делать
Но только он туда не ошибку получит, а поля
Само собой, что ты выведешь другую инфу - результат работы и описание ошибки😁 Я имел ввиду, что метод можешь использовать этот же.
А что тогда нужно туда передать?
Debug::dumpToFile($a, 'array', 'LogDrivers');
Да. И заодно ещë $el->LAST_ERROR сразу выведи.
Я извиняюсь, вопросы могут казаться глупыми. Но как это должно выглядеть в целом? 😄У меня вот так. И файл не создается
Но всё равно не работает
Обсуждают сегодня