Связаться
  • OpenCart
  • Импорт и экспорт
  • v1.0.0

Order Archive для OpenCart — архив старых заказов без потери истории

Модуль для OpenCart 4, 3 и 2.3 переносит старые выполненные заказы из рабочих таблиц в отдельный архив. Список заказов в админке и поиск становятся легче, а покупатель по-прежнему видит все свои заказы в кабинете, отчёты считают и архивные, страница заказа открывается как раньше. Любое изменение архивного заказа сначала возвращает его в магазин. Без правок ядра и OCMOD.

Скачать Free
Pro · лицензия навсегда Чем больше сайтов, тем дешевле каждый
Совместимость
OpenCart 4.0.2 – 4.1.x (проверено на 4.1.0.3 и 4.0.2.3, в том числе с DB_DRIVER=pdo) · OpenCart 3.0.x (проверено на 3.0.5.0) · OpenCart 2.3.0.2 (PHP 7.0) · работает рядом с модулями CatCode: Новая Почта Premium, Multi PRRO, KeyCRM / SalesDrive / KeepinCRM Sync, Returns & Exchanges, One Page Checkout, Payment Status Sync · MariaDB 10.11
Версия
v1.0.0 (OpenCart 4)
v1.0.0 (OpenCart 3.x)
v1.0.0 (OpenCart 2.3)
Лицензия
один сайт, навсегда
Триал
7 дней, без карты, один на сайт
Или все 173 Pro-модулей в All Access — 4 990 ₴ / год

Что есть во Free,
а что даёт Pro

Бесплатная версия работает без ограничения по времени. Pro добавляет остальные функции из таблицы.

Функция Free Pro
Перенос старых заказов в отдельные таблицы-архив кнопкой «Архивировать сейчас», с прогрессом и остановкой ✔ ✔
Правила: старше N месяцев, в выбранных финальных статусах, без изменений N дней ✔ ✔
Защита: самый новый заказ, подписки, проданные сертификаты, загрузки, недавние возвраты остаются в магазине ✔ ✔
Не трогает заказы, с которыми ещё работают модули CatCode (ТТН в очереди, CRM-синхронизация, чек ПРРО, проверка оплаты) ✔ ✔
Кабинет покупателя: архивные заказы в списке на своих местах, страница заказа, возврат товара, «Купить снова» ✔ ✔
Страница заказа и счёт в админке открывают архивный заказ; опция «возвращать в магазин при открытии» ✔ ✔
Любое изменение архивного заказа (статус, оплата, CRM, ПРРО-возврат) сначала возвращает его в магазин ✔ ✔
Отчёты продаж, купленных товаров, покупателей и маркетинга считают и архивные заказы ✔ ✔
Под отфильтрованным списком заказов — «ещё N в архиве» со ссылкой ✔ ✔
Поиск в архиве по номеру, покупателю, e-mail, телефону, дате, статусу; просмотр и печать ✔ ✔
Возврат в магазин одного, выбранных или всех найденных — строка в строку, как было ✔ ✔
Оптимизация таблиц и журнал действий ✔ ✔
Админка на украинском, русском и английском, сборки для OpenCart 4.x, 3.x и 2.3 ✔ ✔
Архивация по расписанию: планировщик OpenCart 4 или cron хостинга с ключом — ✔
Незавершённые оформления (статус «отсутствует»), старше N дней, — в архив — ✔
Экспорт архива в CSV по фильтру, до 100 000 заказов — ✔
Окончательное удаление архивных заказов старше N месяцев (выключено по умолчанию) — ✔

Как это выглядит

Страница архивного заказа в кабинете покупателя OpenCart
Кабинет покупателя (OpenCart 4.1): архивный заказ #4 открывается так же, как до архивации, — адреса, доставка и оплата, товары и суммы, кнопки «Купить снова» и «Вернуть товар».
Обзор модуля Order Archive в админке OpenCart 4.1: заказы в магазине и в архиве, правила, кнопка «Архивировать сейчас»
Вкладка «Обзор» (OpenCart 4.1, английская админка): сколько заказов в магазине и в архиве, размеры таблиц, правила простыми словами, кнопки «Сколько уйдёт сейчас?» и «Архивировать сейчас», оптимизация таблиц, окончательное удаление (Pro) и журнал действий.
Поиск в архиве заказов OpenCart: фильтр по покупателю, список архивных заказов, кнопки возврата
Вкладка «Архив»: поиск по номеру, покупателю, e-mail, телефону, дате и статусу. Каждый заказ можно просмотреть, распечатать или вернуть в магазин; можно вернуть выбранные или все найденные.

Главное о модуле

Как это выглядит для покупателя

Для покупателя не меняется ничего. Он заходит в «Историю заказов» и видит все свои заказы — и новые, и трёхлетней давности — в одном списке, в том же порядке и с теми же страницами.

Что получает админ

Пункт «Архив заказов» в меню «Продажи» с тремя вкладками.

Триал стартует, когда вы попросите

Свежая установка — бесплатная версия, ничего не включается само. Кнопка «Попробовать Pro 7 дней» → e-mail → ключ сразу в окне и письмом.

Один ключ — один сайт

Переносите магазин — отвяжите лицензию на старом домене и активируйте на новом сами. Для студий — ключи на 5, 25 сайтов или без ограничений.

Технические требования

  • OpenCart 4.0.2 – 4.1.x (проверено на 4.1.0.3 и 4.0.2.3, с драйвером базы mysqli и pdo), 3.0.x (проверено на 3.0.5.0) или 2.3.0.2.
  • PHP — тот, что нужен вашей версии OpenCart: сборку для 2.3 проверили на PHP 7.0, остальные — на PHP 8.1–8.3. Расширение cURL — для лицензии Pro.
  • База: проверено на MariaDB 10.11 с таблицами InnoDB.
  • Расписание (Pro): в OpenCart 4 — штатный планировщик (Расширения → Cron Jobs) или cron хостинга; в 3.x и 2.3 — cron хостинга по адресу с секретным ключом, который показывает модуль.

История версий

v1.0.0 Текущая

Архив старых заказов с чтением для кабинета покупателя, страницы заказа, счёта, отчётов и модулей; автоматический возврат при любом изменении, в том числе из Multi PRRO и Returns &…

Вместе с Order Archive для OpenCart покупают

4 модуля одним заказом — на 40% дешевле, чем по отдельности

Набор «Старт магазина» Order Archive Nova Poshta Premium LiqPay Telegram-уведомления и Viber/SMS покупателям Нужно больше — все 173 модулей в All Access за 4 990 ₴.
3 790 ₴ навсегда вместо 6 260 ₴ поштучно
Купить набор →

Полное описание модуля

Order Archive для OpenCart — модуль для магазинов, у которых за годы накопились десятки тысяч заказов. Штатный OpenCart держит все заказы в одних таблицах: каждый открытый список, поиск, фильтр и счётчик в шапке админки каждый раз проходит и по свежим заказам, и по тем, что выполнены три года назад. Удалять старые заказы нельзя: покупатели открывают их в кабинете, бухгалтерии нужны отчёты, а возвратам и CRM — история.

Модуль переносит старые выполненные заказы в отдельные таблицы-архив и делает так, чтобы OpenCart этого «не заметил»: покупатель по-прежнему видит все свои заказы в кабинете, страница заказа и счёт в админке открываются, отчёты считают и архивные. А любое изменение архивного заказа — новый статус, колбэк оплаты, статус из CRM — сначала возвращает его в магазин. Ядро OpenCart, шаблоны и OCMOD-патчи модуль не трогает.

Магазин на WooCommerce? Для него есть отдельный плагин Order Archive для WooCommerce с тем же подходом: старые заказы в сжатый архив, отчёты и итоги покупателей без изменений, поиск и восстановление одним кликом.

Как это выглядит для покупателя

Для покупателя не меняется ничего. Он заходит в «Историю заказов» и видит все свои заказы — и новые, и трёхлетней давности — в одном списке, в том же порядке и с теми же страницами. Открывает старый заказ — видит товары, суммы, адреса, историю статусов. Кнопка «Купить снова» кладёт товар в корзину, «Вернуть товар» открывает форму возврата, заполненную данными заказа.

Оформление новых заказов архив не затрагивает: штатный чекаут и One Page Checkout работают как обычно, номера новых заказов идут дальше после архивных.

Что получает админ

Пункт «Архив заказов» в меню «Продажи» с тремя вкладками.

Обзор

Сколько заказов в магазине и в архиве, размеры таблиц, самый старый заказ в магазине. Правила записаны обычным языком («Заказы, оформленные более 24 мес. назад, в статусах Complete, Canceled, без изменений 90 дней»). Кнопка «Сколько уйдёт сейчас?» считает кандидатов, «Архивировать сейчас» переносит их шагами с прогрессом — запуск можно остановить в любой момент. Ниже — «Оптимизировать таблицы» (возвращает освободившееся место на диск после первой большой архивации) и журнал: что, когда и кто архивировал или возвращал.

Архив

Поиск по номеру, покупателю, e-mail, телефону, дате и статусу. Архивный заказ можно просмотреть и распечатать, не возвращая его. «Вернуть» переносит один заказ в магазин, «Вернуть выбранные» и «Вернуть все найденные» — группу. В Pro здесь же — экспорт найденного в CSV.

Штатный список заказов

Список Продажи → Заказы остаётся таким, каким был, и показывает только заказы магазина — поэтому он и быстрый. Когда вы фильтруете список (по покупателю, номеру, e-mail, статусу), под ним появляется строка «В архиве ещё N заказов по этому фильтру.» со ссылкой на них.

Настройки

  • Правила: возраст заказа в месяцах (по умолчанию 24), статусы, которые можно архивировать (по умолчанию — «завершённые» статусы магазина), сколько дней заказ не менялся (90), размер шага.
  • Защита: оставлять в магазине заказы с загрузками; не архивировать заказы с возвратом, изменённым за последние N дней (180); сколько дней возвращённый заказ остаётся в магазине (90).
  • Совместимость: кабинет покупателя, страница заказа в админке, отчёты, строка под списком заказов, «возвращать в магазин при открытии», счётчики дашборда — каждый слой включается отдельно.
  • Pro: расписание, незавершённые оформления, окончательное удаление.

Как это работает — шаг за шагом

  1. Установка. Модуль создаёт таблицы-архив с той же структурой, что и у таблиц заказов вашего магазина (order, order_product, order_option, order_total, order_history, order_voucher; в 2.3 ещё order_custom_field). Колонки, которые добавили другие модули, архив подхватывает перед каждым запуском.
  2. Выбор кандидатов. Заказы старше N месяцев, в выбранных статусах и без изменений N дней. Никогда не попадают в архив: самый новый заказ, заказы с подпиской или регулярным платежом, с проданным подарочным сертификатом, с загрузками (настройка), с недавним возвратом, недавно возвращённые из архива, а также те, с которыми ещё работает модуль CatCode: ТТН Новой Почты в очереди, неотправленная синхронизация KeyCRM / SalesDrive / KeepinCRM, незавершённый чек ПРРО, открытая заявка Returns & Exchanges, непроверенная оплата в Payment Status Sync.
  3. Перенос. Шагами по 200 заказов (настраивается). Каждый шаг — одна транзакция: строки копируются в архив, количество сверяется по каждой таблице, и только тогда удаляются из магазина. Не сошлось — шаг откатывается полностью.
  4. Чтение. Когда OpenCart через свои модели ищет один заказ (кабинет, страница заказа, счёт, модули, которые читают заказы штатно) и не находит его в магазине, модуль повторяет тот же запрос в архиве. Список в кабинете объединяет оба источника с правильным постраничным делением, отчёты читают магазин и архив вместе.
  5. Изменение. Любая попытка изменить архивный заказ через OpenCart (новый статус, редактирование, номер счёта, удаление), а также чек возврата Multi PRRO и действия с заявкой Returns & Exchanges сначала возвращают его в магазин. Возвращённый заказ остаётся в магазине 90 дней.
  6. Возврат вручную. Из вкладки «Архив» — один, выбранные или все найденные; строки возвращаются такими, какими были.

Что под капотом

  • Без правок ядра и OCMOD. Только события OpenCart: модели заказов в кабинете, чекауте и админке, отчёты, список заказов, страница заказа.
  • Архив — копия структуры, а не новый формат. Таблицы cc_oarch_* создаются как CREATE TABLE … LIKE, поэтому строка в архиве — та же строка заказа, а возврат — точная копия обратно.
  • Транзакции и блокировки. Каждый шаг архивации или возврата — одна транзакция InnoDB и один именованный лок базы, поэтому архивация по расписанию и ручной возврат не пересекаются.
  • Отчёты. На время работы модели отчёта таблицы заказов подменяются на «магазин + архив»; на дашборде — только по отдельному переключателю, чтобы главная админки оставалась быстрой.
  • Что остаётся на месте: транзакции и бонусы покупателей, история купонов (лимиты купонов считают и старые заказы), возвраты, подарочные сертификаты, подписки, таблицы других модулей.
  • Честно об ограничениях. Модули других разработчиков, которые читают таблицу заказов собственным SQL, архивных заказов не видят — поэтому в архив уходят только давно завершённые заказы, а страница заказа в админке по умолчанию возвращает архивный заказ в магазин. Статус, изменённый в KeyCRM для заказа, который уже в архиве, не применяется, пока заказ не возвращён. Блок «Бестселлеры» витрины считает только заказы магазина. Отчёты, которые читают и архив, работают медленнее, чем до архивации (замеры — в FAQ).

Как установить

  1. Скачайте архив для своей версии: cc_orderarchive.ocmod.zip (OpenCart 4.x), cc_orderarchive-oc3.ocmod.zip (3.x) или cc_orderarchive-oc2.ocmod.zip (2.3).
  2. OpenCart 4 и 3: Расширения → Установка расширений → «Загрузить». OpenCart 2.3: скопируйте содержимое папки upload/ из архива в корень магазина.
  3. Расширения → Расширения → Модули → CatCode Order Archive → «Установить».
  4. Откройте Продажи → «Архив заказов» → «Настройки», проверьте правила и статусы, сохраните.
  5. На вкладке «Обзор» нажмите «Сколько уйдёт сейчас?», потом «Архивировать сейчас». Первую большую архивацию лучше запускать в тихий час, а после неё — «Оптимизировать таблицы».

Вопросы
о модуле

Не нашли ответ? Напишите в Telegram — ответим в течение рабочего дня.

@catcode_support Настройка, совместимость, активация
Покупатель увидит свои старые заказы?

Да. Список «История заказов» в кабинете показывает живые и архивные заказы вместе, в том же порядке и с теми же страницами, что и до архивации. Страница архивного заказа, кнопки «Вернуть товар» и «Купить снова» работают. Мы сверяли страницы кабинета до и после архивации на 4.1, 4.0.2, 3.0 и 2.3 — они одинаковые.

Что будет, если архивный заказ изменится?

Модуль сначала возвращает его в таблицы магазина, и только потом OpenCart делает изменение. Так работает для нового статуса из админки, колбэка платёжки, статуса из CRM, чека возврата в Multi PRRO, возврата денег в Returns & Exchanges. История не теряется: старые строки и новая — вместе в живом заказе. Возвращённый заказ остаётся в магазине 90 дней (настраивается), чтобы следующий запуск не забрал его сразу.

Можно ли вернуть всё назад?

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

Отчёты не «просядут»?

Отчёты «Продажи» и «Купленные товары» читают магазин и архив вместе — цифры те же, что и до архивации. Цена этого — скорость самого отчёта: он каждый раз читает и магазин, и архив, поэтому на 60 000 заказов «Продажи» строились 1,7 с вместо 0,3 с, «Купленные товары» — 2,8 с вместо 0,25 с. Если архивные периоды в отчётах не нужны, выключите «Отчёты учитывают архивные заказы». Счётчики на главной странице админки по умолчанию считают только заказы в магазине (так дашборд остаётся быстрым); если нужны полные цифры — включите «Дашборд считает архивные заказы».

А если модуль другого разработчика читает таблицу заказов напрямую?

Такой модуль будет видеть только заказы в магазине. Поэтому архивируются только старые завершённые заказы (по умолчанию — старше 24 месяцев, без изменений 90 дней), а страница заказа в админке по умолчанию возвращает архивный заказ в магазин, как только вы его открываете. Модули CatCode мы проверили вместе с архивом.

Что с возвратами товара?

Штатные возвраты OpenCart остаются на месте. Заказ, по которому возврат менялся за последние 180 дней, не архивируется. Открытые заявки Returns & Exchanges CatCode тоже держат заказ в магазине.

Что будет, если удалить модуль?

Архивные таблицы остаются — в них ваши заказы. Но без модуля OpenCart их не видит. Поэтому перед удалением нажмите «Вернуть все найденные» в разделе «Архив». Повторная установка модуля снова находит архив.

Сколько времени занимает первая архивация?

Зависит от сервера. На локальном стенде (MariaDB 10.11, PHP 8.3) 60 001 сгенерированный заказ: 29 150 подошли под правила и ушли в архив за 6,9 с, полный возврат — 4,4 с, запуск по расписанию — 6,5 с. На хостинге будет медленнее, но каждый шаг ограничен по времени, поэтому запрос не упадёт с тайм-аутом, а прогресс показывает, сколько уже перенесено. Каждый шаг — одна транзакция, поэтому прерванный запуск ничего не ломает: просто нажмите ещё раз.

Можно ли удалять старые заказы навсегда?

Да, в Pro, и только те, что уже в архиве и старше указанного возраста (от 12 месяцев, по умолчанию 84). Это нельзя отменить, поэтому сначала сделайте экспорт в CSV. По умолчанию выключено.

Как модуль ведёт себя с One Page Checkout и новыми заказами?

Новые заказы архив не трогает: они оформляются как обычно, номера идут дальше после архивных. Самый новый заказ никогда не архивируется, чтобы счётчик номеров в MySQL не возвращался назад.

Не тот вариант, что искали?

Делаем кастомные модули под WordPress, WooCommerce, OpenCart и Shopify. Расскажите о задаче — подготовим оценку.

Заказать кастомный модуль