vmTable store insertObject

Ошибка vmTable store insertObject в VirtueMart

После того, как клиент подтверждает заказ на сайте, выводится ошибка «vmTable store insertObject». При этом заказ формируется в административной части сайта и продавцу приходит письмо о том, что поступил новый заказ. Клиент также получает письмо о том, что он оформил заказ на сайте. То есть всё работает, но сообщение об ошибке есть.

Как найти причину ошибки

Для того чтобы понять в чем проблема, нужно посмотреть журнал ошибок VirtueMart (com_virtuemart.log.php). Для этого:

  1. Перейдите в КомпонентыVirtueMartПанель управленияИнструментыОтчёты.
  2. Откройте com_virtuemart.log.php.
  3. Посмотрите ошибки, которые возникают

Например, у меня ошибка 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. Для этого:

  1. Перейдите в phpMyAdmin.
  2. Найдите таблицу #__virtuemart_order_calc_rules.
  3. Перейдите во вкладку "Структура".
  4. Нажмите на значок «Редактировать» в колонке «Действие» напротив поля virtuemart_calc_id.
  5. В колонке «Атрибуты» измените параметр с «UNSIGNED» на «ничего» (пусто).
  6. Нажмите "Сохранить".

Внимание!

У вас может быть другая проблема. В этом примере показано, как я нашел и исправил ошибку vmTable store insertObject в VirtueMart 4. Вы должны сначала просмотреть файл com_virtuemart.log.php и убедиться в том, что у вас такая же ошибка и поле virtuemart_calc_id таблицы #__virtuemart_order_calc_rules имеет атрибут UNSIGNED.

Обязательно сделайте резервную копию перед тем, как проводить какие-либо манипуляции с файлами сайта или его базой данных.

Main Menu