Цель: для товаров, у которых выключен количественный учёт, автоматически проставлять определенное количество для каждого склада.
Решение: написан обработчик событий OnAfterIBlockElementUpdate и OnAfterIBlockElementAdd, который товары с выключенным кол.учётом фильтрует и проверяет наличие записей об остатках на складах. Если их нет, то создает их методом CCatalogStoreProduct::Add для каждого склада.
При тестировании было выявлено, что записи успешно создаются, возвращается номер записи, а по факту их нет, ни в таблице b_catalog_store_product, ни в форме редактирования торг. предложения.
Этот же код добавления записи на склад был протестирован в другом месте, не в обработчике данных событий, записи успешно создавались и не удалялись.
Далее я повесила обработчик на событие OnStoreProductDelete и проверила его выполнение. Оказалось, что он выполняется и возвращает ид как раз эти прежде созданных записей. Поставила ему return false и записи не удалились, но это не решение конечно.
Вопрос: почему именно в обработчиках OnAfterIBlockElementUpdate и OnAfterIBlockElementAdd после добавления CCatalogStoreProduct::Add срабатывает событие их удаления, которое я не вызывала?
Решение: написан обработчик событий OnAfterIBlockElementUpdate и OnAfterIBlockElementAdd, который товары с выключенным кол.учётом фильтрует и проверяет наличие записей об остатках на складах. Если их нет, то создает их методом CCatalogStoreProduct::Add для каждого склада.
При тестировании было выявлено, что записи успешно создаются, возвращается номер записи, а по факту их нет, ни в таблице b_catalog_store_product, ни в форме редактирования торг. предложения.
Этот же код добавления записи на склад был протестирован в другом месте, не в обработчике данных событий, записи успешно создавались и не удалялись.
Далее я повесила обработчик на событие OnStoreProductDelete и проверила его выполнение. Оказалось, что он выполняется и возвращает ид как раз эти прежде созданных записей. Поставила ему return false и записи не удалились, но это не решение конечно.
Вопрос: почему именно в обработчиках OnAfterIBlockElementUpdate и OnAfterIBlockElementAdd после добавления CCatalogStoreProduct::Add срабатывает событие их удаления, которое я не вызывала?