Ошибка #1064 Исправлено

4

Пользователь создал 2 заказа подряд, с разницей в несколько секунд, во втором заказе отображается только доставка, товаров нет. Такое было и раньше, удаляли просто заказ и всё. А теперь мы даже в него зайти не можем, выскакивает такая ошибка.

В db.log вот что:

2020-03-22 21:23:45 109.252.36.200
Query Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')
                GROUP BY pc.id
                ORDER BY pc.name' at line 5
Query: SELECT pc.*, GROUP_CONCAT(tc.type_id SEPARATOR ',') AS type_ids
                FROM shop_product_code AS pc
                    JOIN shop_type_codes AS tc
                        ON tc.code_id=pc.id
                        AND tc.type_id IN (0, )
                GROUP BY pc.id
                ORDER BY pc.name
## wa-system/database/waModel.class.php(266)
#0 wa-system/database/waModel.class.php(366): waModel->run('SELECT pc.*, GR...')
#1 wa-system/database/waDbStatement.class.php(229): waModel->query('SELECT pc.*, GR...')
#2 wa-system/database/waModel.class.php(346): waDbStatement->query(Array)
#3 wa-apps/shop/lib/model/shopProductCode.model.php(40): waModel->query('SELECT pc.*, GR...', Array)
#4 wa-apps/shop/lib/model/shopOrderItemCodes.model.php(33): shopProductCodeModel->getByType(Array)
#5 wa-apps/shop/lib/classes/shopOrder.class.php(772): shopOrderItemCodesModel->extendOrderItems(Array)
#6 wa-apps/shop/lib/classes/shopOrder.class.php(462): shopOrder->getItemsProductCodes()
#7 wa-apps/shop/lib/classes/shopOrder.class.php(606): shopOrder->__get('items_product_c...')
#8 wa-apps/shop/lib/workflow/shopWorkflowEditcodeAction.class.php(22): shopOrder->offsetGet('items_product_c...')
#9 wa-apps/shop/lib/workflow/shopWorkflowState.class.php(93): shopWorkflowEditcodeAction->isAvailable(Object(shopOrder))
#10 wa-apps/shop/lib/classes/shopOrder.class.php(856): shopWorkflowState->getActions(Object(shopOrder))
#11 wa-apps/shop/lib/classes/shopOrder.class.php(460): shopOrder->readActions()
#12 wa-apps/shop/lib/classes/shopOrder.class.php(907): shopOrder->__get('actions')
#13 wa-apps/shop/lib/classes/shopOrder.class.php(460): shopOrder->readWorkflowActionElements()
#14 wa-apps/shop/lib/actions/order/shopOrder.action.php(36): shopOrder->__get('workflow_action...')
#15 wa-system/controller/waViewAction.class.php(161): shopOrderAction->execute()
#16 wa-system/controller/waViewController.class.php(86): waViewAction->display()
#17 wa-system/controller/waDefaultViewController.class.php(48): waViewController->executeAction(Object(shopOrderAction))
#18 wa-system/controller/waController.class.php(21): waDefaultViewController->execute()
#19 wa-system/controller/waViewController.class.php(46): waController->run(NULL)
#20 wa-system/controller/waFrontController.class.php(263): waViewController->run(NULL)
#21 wa-system/controller/waFrontController.class.php(190): waFrontController->runController(Object(waDefaultViewController), NULL)
#22 wa-system/controller/waFrontController.class.php(84): waFrontController->execute(NULL, 'order', NULL)
#23 wa-system/waSystem.class.php(741): waFrontController->dispatch()
#24 wa-system/waSystem.class.php(613): waSystem->dispatchBackend('webasyst/shop/')
#25 index.php(7): waSystem->dispatch()
#26 {main}

Что это и почему это?



21 комментарий

  • +2

    Видимо было установлено последнее обновление Shop-script?

    Ошибка указывает на неправильный запрос в базу данных. Связан он с таблицей 

    shop_type_codes 

    Точнее в этом месте запроса

    AND tc.type_id IN (0, )

    где после запятой отсутствует идентификатор.

    Предполагаю, что данная ошибка связана с новым функционалом Товарных кодов, добавленным в последнем обновлении Shop-script. 

    Если заказ без товаров, то в нём нет и товарных кодов. Поэтому, скорее всего, и возникает ошибка. Разработчики, очевидно, предполагают, что не может быть заказа без товаров, что, в принципе, логично.

    В Вашем случае нужно переделать функционал корзины, чтобы не допускать создание "пустых" заказов. Предполагаю, что они возникают из-за многократного нажатия на кнопку подтверждения оформления заказа в корзине, когда клиент не дожидается ответа сервера. Если так, то решением будет являться блокировка кнопки создания заказа после нажатия.

    • +1
      Алексей Алексей 23 марта 2020 02:31 #

      Да, именно после обновления такая фигня появилась. 

      А как сделать блокировку кнопки?

      И как удалить этот висящий сейчас полузаказ?

      • +2
        А как сделать блокировку кнопки?

        Это зависит от шаблона корзины Вашего сайта. Скорее всего, Вы используете не стандартную корзину, а какой-то плагин или отдельный шаблон корзины.Вероятно, потребуется найти js код, отвечающий за нажатие кнопки "Оформить заказ" и доработать его.

        И как удалить этот висящий сейчас полузаказ?

        Проще всего через базу данных найти заказ по идентификатору в таблице shop_order. Далее в поле state_id поменять значение на deleted. 

        Ещё можете попробовать такой вариант. Откройте заказ по прямой ссылке на редактирование

        https://domain/webasyst/shop/?action=orders#/orders/edit/order_id/
        domain - url сайта
        order_id - id заказа

        Если откроется, то добавьте хотя бы один товар и сохраните. Далее уже удалите стандартно...

        • +1
          Алексей Алексей 24 марта 2020 15:37 #

          Спасибо! По ссылке для редактирования удалось добавить товар и после этого удалить заказ.


          Да, мы используем плагин "Заказ на одной странице".

        • +2
          Александр Галкин Александр Галкин 24 марта 2020 13:27 #

          такая же проблема

          • +1
            Алексей Алексей 24 марта 2020 14:19 #

            будем надеться, что починят, раз статус "принято" появился.

            А вообще, у нас много косяков повылезало после последнего обновления.

          • +2
            Михаил Ушенин Михаил Ушенин Webasyst 30 марта 2020 14:20 #

            Попробуйте в качестве быстрого исправления в файле wa-apps/shop/lib/model/shopProductCode.model.php перед строкой

            $sql = "SELECT pc.*, GROUP_CONCAT(tc.type_id SEPARATOR ',') AS type_ids

            добавить

            if (!$type_id) {
                $type_id = 0;
            }

          • +1
            Михаил Ушенин Михаил Ушенин Webasyst 9 апреля 2020 12:36 #

            Мы выпустили обновление Shop-Script с исправлением этой ошибки. Обновление можно установить в «Инсталлере».

            Проверьте, пожалуйста. Сообщите, если проблема сохранилась.

            • +1
              Алексей Алексей 8 мая 2020 04:20 #

              А можно сделать на уровне движка, а не шаблона, чтобы пользователь "тыркающий" несколько раз подряд на кнопку оформления заказа получал только один заказ, а не несколько?

              • +1

                Почему вы задаёте этот вопрос? В вашей теме дизайна нет блокировки повторного нажатия на кнопку оформления заказа?

                • +2
                  Алексей Алексей 11 мая 2020 01:01 #

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

                • +4

                  Михаил, в многих темах дизайна, есть нормальные всплывающие окна, есть нормальный слайдер товаров (я про рекомендованные), но вы то зашиваете свое и без права редактирования. Если вы и берете все управление корзиной уже на свою сторону, тогда вносите все такие просьбы уже сами в свой код

                  • +1

                    Что именно мы зашиваем?

                    • +2

                      А разве ничего? Вся корзина - встроена в движок. Речь про одностраничную само собой. Ваша идея и стремление, почему так сделано понятна, хоть и не идеальна. Вы полностью ее контролируете, дав нам, разработчикам, только подписываться на события. Если весь контроль и логика вшита в движок, то и будьте добры, продумайте все возможные проблемы, в том числе и блокировка повторного нажатия. Но нет же, вы перекладываете это на сторонних разработчиков.

                      P.S. что касательно списка рекомендуемых товаров. Вот клиент не хочет выводить список товаров, который подбирает движок. Не нравится карусель товаров, в которой он выводится. Что мне делать с этим кодом? 

                      {$wa->shop->checkout()->crossSelling([
                          "DEBUG" => true,
                          "wrapper" => "#js-cross-selling-section"
                      ])}

                      как вырубить вашу карусель, как вырубить вашу подборку и вставить к примеру кастомный список товаров - документации нет, ибо и такой возможности нет.

                      Надеюсь я ответил на ваш вопрос

                      • +1

                        В какой теме дизайна возможно двойное нажатие на кнопку подтверждения заказа при оформлении заказа в корзине?

                        • +2

                          Этот вопрос должен быть адресован автору выше


                          А по сути какая разница? Это так сложно реализовать? К примеру если на момент оформления заказа, будет 500 ошибка, клиент этого не видит, и судорожно несколько раз жмет кнопку

                        • +1
                          replicant replicant 11 мая 2020 11:57 #

                          С пошаговым оформление понятно. А как быть с оформлением в корзине?

                          Добавить комментарий

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