Как распределены остатки в БД по полям

Добрый вечер,

Есть вопрос по остаткам. Сделан скрипт импорта с сайта поставщиков остатков, не пойму как они хранятся в базе. (у меня 2 склада)

По остаткам в базе есть следующие поля:

shop_product.count - здесь я так понимаю хранится общее количество товаров UPDATE shop_product as P SET P.count = (select sum(count) from shop_product_stocks as S where P.id = S.product_id group by S.product_id) ) или здесь надо количество по sku суммировать ?

shop_product_skus.count - здесь храниться сумма всех товаров из stocks, без учета склада?
shop_product_stocks.count - здесь количество sku по разным складам?

Напишите пожалуйста схему как эти три поля зависят друг от друга, где какие остатки выводятся в админке и на витрине.

ps еще есть товары с одним sku у них не создается запись в shop_product_stocks?

2 ответа

  • 2
    Леонид Вакуленко Webasyst 18 февраля 2015 09:05 #

    Для SKU может быть включен или выключен режим детализации по складам. Если в shop_product_stocks есть записи для такого SKU, то режим включен. Если нету, то режим выключен.

    В режиме детализации по складам остатки хранятся в shop_product_stocks.count, а в shop_product_skus.count - их сумма. Менять отдельно только shop_product_skus.count бесполезно, он перезапишется при следующем изменении остатков.

    Без детализации по складам остатки хранятся в shop_product_skus.count.

    В shop_product.count хранится сумма по всем shop_product_skus.count. Менять отдельно shop_product.count бесполезно.

    Во всех случаях NULL = бесконечно.

    • +1
      Леонид Вакуленко Леонид Вакуленко Webasyst 18 февраля 2015 09:11 #

      Да, ещё есть shop_product_stocks_log - это "Журнал изменений остатков" в редакторе товара. Если меняете остатки, будет небесполезно вписать туда запись для истории.

    • +1
      Александр Галеев Александр Галеев 8 ноября 2015 18:52 #

      Добрый день. А как сделать так, чтобы NULL был не бесконечность, а 0? Т.е. чтобы товары, у которых нет значения в shop_product.count считались отсутствующими и не были доступны для заказа через корзину?

      • +1

        Вопрос звучит странно. Сделать это сложно. Подозреваю, что лучше найти другой способ.

        Расскажите, зачем это нужно? То есть в чём изначальная причина, что там должен быть NULL (т.е. бесконечное количество), а не честный и правильный 0?

        • +1
          Александр Галеев Александр Галеев 9 ноября 2015 06:32 #

          Ну, во первых, когда контент-менеджер добавляет товар, он не заполняет ни цену ни наличие, дабы не тратить на эти поля время. Соответственно там остается пустое поле, которое делает товар доступным для заказа через корзину. И второе, есть у нас 1 сторонняя программа, которая обновляет цены и наличие обрабатываю прайс-листы поставщиков, так вот с 6 вебасистом она пока очень плохо работает, а саппорт там никакущий, поэтому и пытаюсь найти решение данной проблемы с другой стороны)

          • +2

            Во много раз проще (и идеологически правильнее) будет починить обновлялку цен, чем найти и аккуратно исправить все места в исходниках магазина, которые проверяют наличие товара. count=null - это вполне штатный функционал, и означает он как раз, что можно заказывать без ограничений.

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

            Если у вас тысячи таких товаров, можно обновить их напрямую в БД. Один раз или каждый раз при обновлении прайса, например.

            UPDATE shop_product SET count=0 WHERE count IS NULL;
            UPDATE shop_product_skus SET count=0 WHERE count IS NULL;

            (Это сработает, если вы не используете детализацию по складам. Со складами будет чуть сложнее.)

  • 1
    Михаил 18 февраля 2015 10:14 #

    Спасибо за ответ,

    "Для SKU может быть включен или выключен режим детализации по складам" - где это можно включить/выключить ?

    • +1
      Леонид Вакуленко Леонид Вакуленко Webasyst 18 февраля 2015 10:30 #

      В смысле, через интерфейс?

      Включить: в редакторе товара ссылка "По складам" рядом с полем редактирования остатков.

      Выключить: там же, оставить все поля складов пустыми и сохранить.

Добавить ответ

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