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

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

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

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

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

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

33 ответов

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

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

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

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

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
Точно, оно. У тебя там имена потоков выставляются?
Александр (Rouse_) Багель
11
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Карта сайта