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