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

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

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

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

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

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

33 ответов

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

Самое забавное, что есть событие, которое, наоборот, при сохранении элемента инфоблока передает информацию об автомобиле к водителю в 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. Колхоз, но ничего другого я не придумал.

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

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

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
70
Добрый день, не подскажите, если в OC-V3 поменять страндартную директорию /storage/ на /storage2/ - не будет сильно много проблем ?
Max Dubovsky
32
Хотел бы спросить у знающих, правильную ли я выбрал книгу для начала изучения ассемблера Юрова В.И ? Или есть более лучшие книги для начала обучения?
Botsman
25
Книга Юрова В.И пойдёт для обучения?
Botsman
24
Люди добрые, помогите с идеями, потому что свои закончились. У клиента падает софтина в момент инициализации модуля OtlEventMonitor на RegisterWindowMessage('Gp/OtlTaskEvents/...
Михаил Усков
7
$params = [ 'formid' => 'feedbackForm', 'formTpl' => '@CODE: <form class="form-validate" data-id="ajax_form"> <fieldset class="margin-bottom-md"> ...
Pathologic
1
> Примечательно, что новый владелец удаляет из GitHub любые жалобы, указывающие на подозрительную активность или смену владельца, и, видимо, рассчитывает на то, что пользовате...
Alex Sherbakov
2
GridView fully ignored first parent(SizedBox), and take width from second parent(Container). How can I constrain GridView by first parent? Widget build(BuildContext context) {...
Hamster
1
'frakturBold' => ['𝖆', '𝖇', '𝖈', '𝖉', '𝖊', '𝖋', '𝖌', '𝖍', '𝖎', '𝖏', '𝖐', '𝖑', '𝖒', '𝖓', '𝖔', '𝖕', '𝖖', '𝖗', '𝖘', '𝖙', '𝖚', '𝖛', '𝖜', '𝖝', '𝖞', '𝖟', '𝕬', '𝕭', '𝕮', '𝕯'...
Roma
4
Hey there Which is the best Linux destro for developers (coding)? To my research on reddit, they said Linux mint is good for mid level spec and Ubuntu for high Lev hardwar...
Wiz 🪄
11
Карта сайта