|
0 / 0 / 0
Регистрация: 12.10.2022
Сообщений: 6
|
|||||||||||
Не работет CCatalogProduct::Update в обработчике12.10.2022, 06:17. Показов 7115. Ответов 10
Написал вот такой обработчик, который берёт вес из свойств торгового предложения и подставляет в параметр торгового каталога
Пробовал скрипт, который находится в if, в командной строке, естественно подставлял в $PRODUCT_ID id торгового предложения, скрипт работал. Мне подсказали такое решение https://dev.1c-bitrix.ru/commu... obloka.php Написал в /local/php_interface/iblock_element_edit_before_save.php:
Не сработало. Что-то не так сделал?
0
|
|||||||||||
| 12.10.2022, 06:17 | |
|
Ответы с готовыми решениями:
10
Ошибка: Query-based update failed because the row to update could not be found DataGrid update ПРОБЛЕМА: Key column information is insufficient or incorect. Too many rows were affected by update Не получается сделать Update (Update requires a valid InsertCommand) |
| 13.10.2022, 09:40 | |
|
Суть в том, что у вас не правильно выбрано событие под задачу. Если утрировано сейчас происходит следующая последовательность
1 Выполняется ваша функция 2 выполняется обновление элемента инфоблока (данными из формы) 3 выполняется обновление товара (данными из формы) Таким образом работа вашего метода сразу же перезаписывается данными формы. И тут надо понять что вы хотите в итоге. Как я понимаю ваша цель при изменении значения в VES менять значения веса товара по заданной формуле. Таким образом я бы предложил использовать событие OnAfterIBlockElementUpdate и событие обновления продукта. (т.к. могут быть разные сценарии изменения свойства) Так же дополнительно (примечания не приводящие к ошибке но полезно знать) имейте ввиду что в arFields есть значение VES (если оно менялось). единственная сложность она там в зависимости от ситуации в массиве либо с индексом VES либо с ID этого свойства (сбросьте в лог файл $arFields и найдете) - т.е можно избежать лишнего запроса. Подключаете модуль catalog в цикле (да он выполняется в данном случае один раз, но тем не менее) и устаревшей функцией (посмотрите как подключается iblock) Так же метод CCatalogProduct::Update($PRODUCT_ID, $arFieldsCustom); объявлен устаревшим и однажды в обозримом будущем с обновлением битрикс он перестанет работать. Кроме того советую не засорять init.php в т.ч. и инклудами безусловными. Лучше использовать классы и автозагрузку. Сейчас нет времени накидать пример. Если не разберетесь сами пишите - по возможности помогу
0
|
|
|
0 / 0 / 0
Регистрация: 12.10.2022
Сообщений: 6
|
|
| 13.10.2022, 10:26 [ТС] | |
|
В $arFields нет доступа к Торговый каталог -> Параметры -> Вес и размеры.
В каждом торговом предложении есть свойство Вес, который заполнялся в 1С. В корзине и в оформлении заказа вес берётся из параметра торгового каталога каждого торгового предложения. Для подсчёта доставки также берётся из параметров. Мне нужно взять вес из свойства и засунуть в вес из параметра. Чтобы потом автоматически при выгрузке товаров из 1С все веса встали в параметры, и по итогу корзина и оформление заказа показывали правильный вес. На всякий случай прикладываю фото, тут взят товар, зашёл в торговое предложение, показано его свойство вес элемента и его параметр вес торгового каталога. Я вот перепробовал всё, пытался поменять код в class.php в корзине и в оформлении заказа(во втором не было этого файла), потом решил через обработчик делать и нашёл только CCatalogProduct::Update, который поменял вес в параметре через код командной строки. Как добраться до этого параметра, может быть есть другие способы, чтобы поместить вес туда куда надо?
0
|
|
| 13.10.2022, 12:20 | ||||||||||||
|
Добавлено через 1 минуту Направление мыслей у вас в исходном коде верное. Но не верно выбраны обработчики событий - я вам сказал какие искать... Позже постараюсь накидать пример (у меня сейчас со временем очень сложно) Добавлено через 1 час 32 минуты Чтобы не замусоривать init.php и не инклудить вечно лишние файлы без надобности. Рекомендую выносить обработчики в классы и использовать автозагрузку. В примерах ниеже "MyProject" это имя проекта. Например, для этого форума у меня бы было "Cyberforum". Так же обратите внимание нужен обработчик именно OnAfterIBlockElementUpdtae. т.к. в вашем примере вы. по сути, берете старой значение VES. Файл класса /local/MyProject/Handlers/ProductNormalizer.php
0
|
||||||||||||
|
0 / 0 / 0
Регистрация: 12.10.2022
Сообщений: 6
|
|
| 24.10.2022, 10:23 [ТС] | |
|
Спасибо за ответ, просто скопировал и вставил так, как и у вас, но при обновлении торгового предложения идёт бесконечная загрузка
0
|
|
| 24.10.2022, 10:29 | |
|
Проверьте не вызывает ли это (вызов при сохранении элемента ИБ обновления товра, а соответственно и вызывается метод н а его обновление) цикличности.
Вероятно лучше сделать у класса некое статическое свойство, которое будет являться флагом, чтобы не зацикливалось.
0
|
|
|
0 / 0 / 0
Регистрация: 12.10.2022
Сообщений: 6
|
||||||||||||||||
| 24.10.2022, 13:42 [ТС] | ||||||||||||||||
|
Добавил свойство:
Проверил функцию calcWeight, он не отрабатывает. То есть засунул в функцию:
0
|
||||||||||||||||
|
0 / 0 / 0
Регистрация: 12.10.2022
Сообщений: 6
|
|||||||||||||||||||||
| 25.10.2022, 09:25 [ТС] | |||||||||||||||||||||
|
Программа стопорится на:
Написал тоже самое, что и в моём было вместо GetProperty, GetList:
Я решил сделать через arFields, вот весь код, он не зацикливается, вызывается пару раз onBeforeProductUpdate, но из-за флага запрещает запускаться: Вес в параметре не изменяется. Вроде UPDATE в onAfterIBlockElementUpdate сработал, но ничего не изменилось((
0
|
|||||||||||||||||||||
| 25.10.2022, 10:10 | |
|
Странно... у меня тот код, что я приводил срабатывал - я его тогда проверял. даже без флага. Правда я редактировал только в админке. Кстати флаг включать, можно только перед Product::update и потом надо не забывать его "отпускать" иначе при массовой загрузке у вас только у первого товара произойдет расчет
0
|
|
|
0 / 0 / 0
Регистрация: 12.10.2022
Сообщений: 6
|
|||||||||||
| 25.10.2022, 14:18 [ТС] | |||||||||||
|
Поставил после update :
В функции onBeforeProductUpdate $productId возвращает 0;
0
|
|||||||||||
| 25.10.2022, 14:18 | |
|
Помогаю со студенческими работами здесь
11
Дедлоки между update limit N и update по primary key Перевести UPDATE SQL в linq Update (linq2db) Не работет Singleton Не работет подсветка Не работет сайт Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|