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

Всем добрый день. Есть инфоблок с автомобилями. Есть HL блок с водителями. Элементы

инфоблока с автомобилями получают список водителей через "справочник" (код HL записи).
В это время записи HL блока с водителями получают информацию об автомобилях через привязку HL записей к элементам инфоблока (ID).

Когда я сохраняю информацию об автомобиле в HL записи (у водителя) - срабатывает событие, которое передает код HL записи с водителем в элемент инфоблока с автомобилем по ID.
Однако срабатывает это событие лишь со второго раза. Т.е. я задаю водителю автомобиль и сохраняю. В элементе инфоблока ничего не меняется. Тогда я захожу к этому же водителю еще раз и просто сохраняю. И лишь тогда событие передает запись в элемент инфоблока.

Такое ощущение, что сразу после первого сохранения событие не получает инфу об изменениях, хотя через Debug всё нормально. И лишь после второго сохранения, когда у записи уже была информация об автомобиле, он передает код водителя в элемент.

Вопрос: кто сталкивался с подобным? Или есть какие-нибудь соображения, как решить проблему?

33 ответов

12 просмотров
Андрей- Автор вопроса

Самое забавное, что есть событие, которое, наоборот, при сохранении элемента инфоблока передает информацию об автомобиле к водителю в HL. И событие нормально отрабатывает, с первого сохранения.

Андрей- Автор вопроса
Андрей- Автор вопроса
Андрей- Автор вопроса

А когда ты через дебаг распечатываешь поля в updateIblockElement, там старое значение driver или новое?

Андрей
screenshot

И ещё вопрос немного не по теме - зачем current? Сейчас запись выглядит так - создадим массив, положим в него ещё массив, а потом сразу вытащим) Можно просто убрать current и внешний массив. Будет то же самое в твоëм случае.

Андрей- Автор вопроса
Alexey Nazarov
И ещё вопрос немного не по теме - зачем current? ...

Ну кстати, логично, можно попробовать

Андрей
Новое

А что в результате работы метода update? Он возвращает либо true либо описание ошибки

Андрей
Ну кстати, логично, можно попробовать

Это не решит проблему. Просто выглядит странно))

Андрей- Автор вопроса
Alexey Nazarov
А что в результате работы метода update? Он возвра...

Ниче не возвращает. Он срабатывает. Но почему-то со старым значением (до сохранения) .

Андрей
Ниче не возвращает. Он срабатывает. Но почему-то с...

"Ничë" - это false? 😁 Значит он не отрабатывает. Тебе надо вывести в лог el->LAST_ERROR

Андрей- Автор вопроса
Alexey Nazarov
"Ничë" - это false? 😁 Значит он не отрабатывает. ...

Тогда где смотреть, что он возвращает? Потому что когда событие непосредственно срабатывает, запись спокойно сохраняется, никакой ошибки нет. Значит это true?

Андрей
Тогда где смотреть, что он возвращает? Потому что ...

Нет. Надо записать результат работы в переменную. $а = $el-> update If(! $a) { log($el->LAST_ERROR); }

Андрей- Автор вопроса
Андрей- Автор вопроса
Alexey Nazarov
Нет. Надо записать результат работы в переменную. ...

Так а лог где должен появиться? Сразу после сохранения на экране?

Андрей
Так а лог где должен появиться? Сразу после сохран...

Нет. Его в файл обычно пишут. У Битрикса есть методы, типа Debug::writeToFile

Андрей- Автор вопроса
Андрей
Так а лог где должен появиться? Сразу после сохран...

А как ты до этого смотрел что в переменной $driver?

Андрей- Автор вопроса
Андрей
Через Debug::dumpToFile($arUserFields, 'fields', '...

А ну это почти то же самое что я писал выше. Можешь так и делать

Андрей- Автор вопроса
Alexey Nazarov
А ну это почти то же самое что я писал выше. Може...

Но только он туда не ошибку получит, а поля

Андрей
Но только он туда не ошибку получит, а поля

Само собой, что ты выведешь другую инфу - результат работы и описание ошибки😁 Я имел ввиду, что метод можешь использовать этот же.

Андрей- Автор вопроса
Андрей
Debug::dumpToFile($a, 'array', 'LogDrivers');

Да. И заодно ещë $el->LAST_ERROR сразу выведи.

Андрей- Автор вопроса
Alexey Nazarov
Да. И заодно ещë $el->LAST_ERROR сразу выведи.

Я извиняюсь, вопросы могут казаться глупыми. Но как это должно выглядеть в целом? 😄У меня вот так. И файл не создается

Андрей- Автор вопроса
Андрей- Автор вопроса
Андрей- Автор вопроса
Андрей- Автор вопроса
Андрей- Автор вопроса

Короче выкрутился так. Создал публичную переменную в классе. Через before передал ID, в before, видите ли, он берет новый ID, и в after передал эту публичную переменную в качестве ID. Колхоз, но ничего другого я не придумал.

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

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

@Aiwan что такое база образца?
Alexey
27
Не многие знают, а кто знает, тот уже успел забыть, что в далёком 2004 году эта игра произвела настоящий фурор, настолько революционной была технология, применяемая для её соз...
ICCID
4
Короче я тут узнал полный пиздец Что кучу постов которые я создавал через posted Спустя время не могу редактировать и менять Мол телега возвращае ошибку Это реально так ...
inc.
13
коллеги, добрый вечер! А никто не знает как модальная форма может себя закрыть? Ну допустим модальная форма определила, что смысла ей работать нет и хочет вернуть modalResult...
Михаил
83
Хотя у меня сейчас есть более сложная задача, вот её думаю: как объяснить челу переходного возраста противоположного полу, обучающегося в польском колледже (а-ля наш техникум)...
Вячеслав Кузьменко
15
Добрый день Хочу начать обучение языку, не являюсь представителем it, буду благодарна за помощь, совсем пока не понимаю ничего) Подскажите, пожалуйста, где можно начать первы...
Sara Lala
30
что читать по делфи?вообще 0 в нем
fd dsds
9
const dirname = new URL((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.src || new UR...
Kirill Shaplyko
4
how would you do any of that offline?
Thomas
7
Привет, сталкивался кто с такой ситуацией? У меня есть модальное окно Bootstrap, в нем кнопка закрытия: <button type="button" class="btn-close" data-bs-dismiss="modal" aria-...
Виталий
3
Карта сайта