После того, как клиент подтверждает заказ на сайте, выводится ошибка «vmTable store insertObject». При этом заказ формируется в административной части сайта и продавцу приходит письмо о том, что поступил новый заказ. Клиент также получает письмо о том, что он оформил заказ на сайте. То есть всё работает, но сообщение об ошибке есть.
Как найти причину ошибки
Для того чтобы понять в чем проблема, нужно посмотреть журнал ошибок VirtueMart (com_virtuemart.log.php). Для этого:
- Перейдите в Компоненты → VirtueMart → Панель управления → Инструменты → Отчёты.
- Откройте com_virtuemart.log.php.
- Посмотрите ошибки, которые возникают
Например, у меня ошибка vmTable store insertObject в журнале была записана так:
2026-02-13 00:08:41 ERROR vmError: vmTable store insertObject #__virtuemart_order_calc_rules Out of range value for column 'virtuemart_calc_id' at row 1 INSERT INTO `_virtuemart_order_calc_rules`
(`virtuemart_order_calc_rule_id`,`virtuemart_calc_id`,`virtuemart_order_id`,`virtuemart_vendor_id`,`calc_rule_name`,`calc_kind`,`calc_amount`,`calc_result`,`calc_mathop`,`calc_value`,`calc_params`,`created_on`,`created_by`) VALUES
('0','-1','14','1','Жодного','payment','0','0','','0','','2026-02-13 00:08:41','0')
Из этой записи мы можем понять, что ошибка возникает из-за того, что поле virtuemart_calc_id получает значение -1, но в базе данных это поле имеет тип UNSIGNED (беззнаковое), поэтому оно не может содержать отрицательные числа.
Примечание.
Если вы хотите открыть файл com_virtuemart.log.php на хостинге, а не в админке, то найти его можно в папке \administrator\logs\.
Почему это происходит
Значение -1 появляется, когда:
- не выбрано ни одного правила калькуляции (calc rule),
- или правило калькуляции было удалено/деактивировано,
- или есть проблема со скидкой/купоном.
Как решить проблему
Самый простой и лучший вариант — изменить тип поля, чтобы оно могло принимать -1. Для этого:
- Перейдите в phpMyAdmin.
- Найдите таблицу #__virtuemart_order_calc_rules.
- Перейдите во вкладку "Структура".
- Нажмите на значок «Редактировать» в колонке «Действие» напротив поля virtuemart_calc_id.
- В колонке «Атрибуты» измените параметр с «UNSIGNED» на «ничего» (пусто).
- Нажмите "Сохранить".
Внимание!
У вас может быть другая проблема. В этом примере показано, как я нашел и исправил ошибку vmTable store insertObject в VirtueMart 4. Вы должны сначала просмотреть файл com_virtuemart.log.php и убедиться в том, что у вас такая же ошибка и поле virtuemart_calc_id таблицы #__virtuemart_order_calc_rules имеет атрибут UNSIGNED.
Обязательно сделайте резервную копию перед тем, как проводить какие-либо манипуляции с файлами сайта или его базой данных.
