IMStock (OC 2.3) — Товароучёт (Складской учёт)

Price: 2 800 ₽
* Domain VQmod:

Test domain (not requed) VQmod:

CatalogModules
Author: devimirochnik Write to the author
Sales: 4 (Average rating: 5)
Need paid help with installation?
До нормализации ситуации в Украине, модули для Украины не продаются (касается также и технической поддержки). Как ситуация нормализуется, продажи и техническая поддержка восстановятся. Не касается ХО, ЗО, ЛНР, ДНР.

Обращаю ваше внимание, что в моих модулях нет каких-то "вшитых гадостей". Ключи не требуют подключения к интернету. Поэтому у тех, кто приобрел модуль ранее, проблем с лицензией (и т.п.) не возникнет.


-------------------------------------------------------------------------------

IMStock (OC 2.3) — Товароучёт (Складской учёт)

Версия для OpenCart 3 (ocStore) находится тут:
https://liveopencart.ru/opencart-moduli-shablony/moduli/imstock-oc-3-%E2%80%94-tovarouchyot-skladskoy-uchyot

Что даёт владельцу интернет-магазина возможность вести учёт поступления и списания товара в купе с их закупочной ценой (себестоимостью)? Возможность вести собственными силами учёт товара в одном месте.

Вам не нужно где-то отдельно хранить накладные и списания (сервисы, специальные программы и т.п.), а потом ещё настраивать импорт, ну или выполнять ручную корректировку количества товаров. С модулем IMStock вы можете вести учёт прямо в опенкарте.

В текущий момент модуль относительно небольшой, но если будет интерес, то и модуль будет расти.

-------------------------------------------------------------------------------

Так же вам может быть интересен модуль IMReport (OC 2.3) - Расширенная отчетность продаж и заказов:

https://liveopencart.ru/opencart-moduli-shablony/moduli/otchety/imreport-oc-2-3-rasshirennaya-otchetnost-prodaj-i-zakazov

-------------------------------------------------------------------------------

Демо OpenCart 2.3 (demo / demo).

Ссылка - http://oc2302rs.im-cloud.ru/admin/index.php?route=extension/module/IMStock


Возможности модуля

1. Накладные и Списания товара.
2. Учёт себестоимости (закупочной цены) товаров. Также себестоимость сохраняется в заказах. В текущей версии без опций.


Накладные

У накладных существует два статуса:

1. Создано. Присваивается при создании накладной. Такие накладные можно смотреть, редактировать, удалять и переводить в статус «Завершено»
2. Завершено. Такие накладные можно только смотреть.

ВАЖНО! Накладную из статуса «Завершено» нельзя обратно вернуть в статус «Создано» или удалить. Для вычета товара необходимо воспользоваться Списанием товара.

При изменении статуса из «Создано» в «Завершено» происходит применение товарных позиций, указанных в накладной, в соответствии с формулами.

Формула для количества:

Qact = Qreal + Qpos

Qact – актуальное количество товара.

Qreal – текущее количество товара.

Qpos – количество товара, указанное в позиции накладной.

Формула для закупочной цены (себестоимости):

Вариант 1. Если количество товара в карточке было положительным

PPact = (Qreal * PPreal + Qpos * PPpos) / (Qreal + Qpos)

PPact – актуальная закупочная цена (себестоимость).

Qreal – текущее количество товара.

PPreal – текущая закупочная цена товара.

Qpos – количество товара, указанное в позиции накладной.

PPpos – закупочная цена товара, указанная в позиции накладной.

Вариант 2. Если количество товара в карточке было меньше или равно нулю

PPact = PPpos

PPact – актуальная закупочная цена (себестоимость).

PPpos – закупочная цена товара, указанная в позиции накладной.

Примечание: Закупочная цена выставляется из позиции потому, что физически товаров по текущей себестоимости нет, они восполняются из позиции накладной по указанной закупочной цене.

Дополнительные моменты:

1. Цена товара, указанная в позиции накладной, не может быть отрицательной, но может быть равной 0 (скажем, если товар в качестве акции был предоставлен).

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

3. Учитывайте, что модуль в текущей версии не рассчитан на полноценный учёт предзаказа (так как это требует достаточно много времени). Т.е. формула-то корректная при отрицательном количестве, но, например, если закупочная цена при пополнении из накладной будет отличаться от той, что была в предзаказе, и заказ уже помечен как выполненный (соответственно, количество товара на складе стало отрицательное), то необходим перерасчёт себестоимости заказа, так как у части товара физически иная закупочная цена. Поэтому в текущей версии подразумевается, что реальное списание товара из заказа происходит только в тот момент, когда товара на складе достаточно (как вариант, учтите это при настройке статусов в магазине). И тому подобные моменты.

Пример для понимания. Скажем, купили 100 шт. с закупочной ценой 50 руб, а на складе было всего 50 шт. Но заказ перешёл в статус «Сделка завершена» и товар был списан (в карточке стало -50 шт.). Потом добавили ещё 100 шт., но с закупочной ценой 75 руб. В такой ситуации реальная себестоимость заказа выше, так как 50 шт. было с ЗЦ 50 руб (те, что были в карточке), а недостающие 50 шт. уже с ЗЦ 75 руб. (те, что из накладной).


Списания

У списаний существует два статуса:

1. Создано. Присваивается при создании списания. Такие списания можно смотреть, редактировать, удалять и переводить в статус «Завершено»
2. Завершено. Такие списания можно смотреть и переводить обратно в статус «Создано».

При изменении статуса из «Создано» в «Завершено» происходит применение товарных позиций, указанных в списании, в соответствии с формулами.

Формула для количества:

Qact = Qreal - Qpos

Qact – актуальное количество.

Qreal – текущее количество товара.

Qpos – количество товара, указанное в позиции списания.

Формула для закупочной цены (себестоимости):

PPact = PPreal

PPact – актуальная закупочная цена (себестоимость)

PPreal – текущая закупочная цена товара

При изменении статуса из «Завершено» в «Создано» происходит применение товарных позиций, указанных в списании, в соответствии с формулами.

Формула для количества:

Qact = Qreal + Qpos

Qact – актуальное количество.

Qreal – текущее количество товара.

Qpos – количество товара, указанное в позиции списания.

Формула для закупочной цены (себестоимости):

Вариант 1. Если количество товара в карточке было положительным

PPact = (Qreal * PPreal + Qpos * PPpos) / (Qreal + Qpos)

PPact – актуальная закупочная цена (себестоимость).

Qreal – текущее количество товара.

PPreal – текущая закупочная цена товара.

Qpos – количество товара, указанное в позиции списания.

PPpos – закупочная цена товара, указанная в позиции списания.

Вариант 2. Если количество товара в карточке было меньше или равно нулю

PPact = PPpos

PPact – актуальная закупочная цена (себестоимость).

PPpos – закупочная цена товара, указанная в позиции списания.

Примечание: Закупочная цена выставляется из позиции потому, что физически товаров по текущей себестоимости нет, они восполняются из позиции списания по указанной закупочной цене.

Дополнительные моменты:

1. Цена товара в позиции сохраняется из карточки товара.

2. Количество товара в позиции должно быть положительным (не может быть нулевым или отрицательным).

3. Чтобы было удобнее редактировать Списание, позиции, в которых количество товара больше, чем реальное количество, подкрашиваются красненьким. Позиции, в которых количество товара равно реальному количеству, подкрашиваются жёлтеньким.

4. Если статус списания «Создано», то отображаются актуальные количество товара, его закупочная цена, обычная цена и наименование. Если статус списания «Завершено», то отображаются значения, которые были сохранены в момент изменения статуса списания (перед его применением). Скажем, было 10 шт. товара, списывается 5 шт. В сохраненном виде будет 5 шт. списано и 10 шт., которые были перед списанием, хотя реально стало 5 шт. товара. Это специально сделано, чтобы в последующем было проще анализировать списание.

5. Учитывайте, что модуль в текущей версии не рассчитан на полноценный учёт предзаказа (так как это требует достаточно много времени). Т.е. формула-то корректная при отрицательном количестве, но, например, если закупочная цена при возврате из списания будет отличаться от той, что была в предзаказе, а заказ уже помечен как выполненный (соответственно, количество товара на складе стало отрицательное), то необходим перерасчёт себестоимости заказа, так как у части товара физически иная закупочная цена. Поэтому в текущей версии подразумевается, что реальное списание товара из заказа происходит только в тот момент, когда товара на складе достаточно (как вариант, учтите это при настройке статусов в магазине). И тому подобные моменты.

Пример для понимания. Скажем, купили 100 шт. с закупочной ценой 50 руб, а на складе было всего 50 шт. Но заказ перешёл в статус «Сделка завершена» и товар был списан (в карточке стало -50 шт.). Потом вернули из списания ещё 100 шт., но с закупочной ценой 75 руб. В такой ситуации реальная себестоимость заказа выше, так как 50 шт. было с ЗЦ 50 руб (те, что были в карточке), а недостающие 50 шт. уже с ЗЦ 75 руб. (те, что были возвращены).


Учёт закупочной цены (себестоимости) в заказах

Закупочная цена (себестоимость) сохраняется как для отдельных товаров в заказе, так и в самом заказе (суммарная).

Сохранение закупочной цены товаров в заказе происходит в четырёх случаях. В момент стандартных создания или редактирования заказа. В момент, когда товар списывается из карточки (при соответствующем изменении статуса заказа). В момент, когда товар возвращается в карточку (при соответствующем изменении статуса заказа).

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

При изменении статуса заказа в тот, при котором происходит списание товара стандартным механизмом опенкарта, количество товара корректируется стандартным образом, а закупочная цена товара остаётся неизменной.

При изменении статуса заказа в тот, при котором происходит возврат товара стандартным механизмом опенкарта, количество товара корректируется стандартным образом, а закупочная цена товара рассчитывается по формуле.

Формула для закупочной цены (себестоимости):

Вариант 1. Если количество товара в карточке было положительным

PPact = (Qreal * PPreal + Qporder * PPporder) / (Qreal + Qporder)

PPact – актуальная закупочная цена (себестоимость).

Qreal – текущее количество товара.

PPreal – текущая закупочная цена товара.

Qporder – количество товара, указанное в позиции заказа.

PPporder – закупочная цена товара, указанная в позиции заказа.

Вариант 2. Если количество товара в карточке было меньше или равно нулю

PPact = PPporder

PPact – актуальная закупочная цена (себестоимость).

PPporder – закупочная цена товара, указанная в позиции заказа.

Примечание: Закупочная цена выставляется из позиции потому, что физически товаров по текущей себестоимости нет, они восполняются из позиции заказа по указанной закупочной цене.

Дополнительные моменты:

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

2. Учитывайте, что модуль в текущей версии не рассчитан на полноценный учёт предзаказа (так как это требует достаточно много времени). Т.е. формула-то корректная при отрицательном количестве, но, например, не происходит учёта предыдущих заказов.

Пример для понимания. Заказали 100 шт. с закупочной ценой 50 руб. На складе было 100 шт., т.е. они и списались. Потом поставили товар с ценой 75 руб, ещё 50 шт. На складе стало 50 шт. с ЗЦ 75 рублей. Потом оформили второй заказ с 100 шт. товара с закупочной ценой 75 руб. В карточке товара стало -50 шт. Потом первый заказ полностью вернули и из этого товара в реальности пополнили второй заказ. В такой ситуации себестоимость второго заказа не 100 шт. * 75 руб, а (50 шт. * 75 руб + 50 шт. * 50 руб).

3. Учитывайте, что стандартное редактирование заказа в админке может приводить к возврату и, соответственно, перерасчёту закупочной цены (себестоимости). Пример того, почему это важно. Скажем, вы установили модуль, но в старых-то заказах закупочной цены не было и поэтому у товаров нулевые значения себестоимости (модуль-то не знает какая в то время была себестоимость товаров). Соответственно, при возврате модуль будет считать, что у товаров в заказе была нулевая закупочная цена, и это повлияет на закупочную цену в карточке товаров.


Как перенести данные закупочной цены (себестоимости) из других полей - инструкция

В момент установки модуля к таблице product добавляется поле purchase_price с типом DECIMAL (15, 4) .

Если у вас ранее было аналогичное поле с сохранёнными закупочными ценами (себестоимостью), то ничего делать не нужно (модуль не заменит поле). Единственно, важно убедиться, что тип поля DECIMAL (15, 4) — это важно для точности расчётов.

Если у вас ранее было поле с закупочной ценой, но с другим названием, то для переноса необходимо выполнить следующий SQL-запрос (но обязательно прочтите инструкцию полностью):

------------------------
update `oc_product` set `purchase_price` = `[Field]`
------------------------

Вместо [Field] вставьте то поле, которое вы использовали ранее.

Например, для поля cost запрос будет следующим:

------------------------
update `oc_product` set `purchase_price` = `cost`
------------------------

Как видите, это очень просто, но обязательно прочтите дальше!

Несколько важных моментов:

1. Обязательно сделайте бэкап (стандартная практика для любых случаев)!

2. Если товаров много, то может потребоваться соответствующее время. Учитывайте это.

3. Учтите, что в запросе нужно заменить префикс, если при установке вы изменили стандартный префикс "oc_".

Примечание: Данный инструмент специально не добавлен в модуль, чтобы обычный пользователь не мог случайно перезатереть данные.


Особенности

1. Важно! Чтобы осуществлялся корректный подсчёт закупочной цены (себестоимости) в заказе, лицензия модуля должна быть активной, т.е. введены ключи или действует период 5 дней для ввода ключей после установки модуля (не демо, не триал и т.п.). Иначе при включенных модификаторах модуля сохраняются нулевые значения закупочной цены (себестоимости) заказа и его товаров (в те моменты, когда это предусмотрено модулем). Сделано так по той причине, что иначе может возникать некорректный расчёт (как при частичном, так и при полном отключении расчётов). Ну или вы можете отключить модификаторы модуля (ocmod), тогда никаких расчётов модуль не будет осуществлять.

2. Если вы планируете указывать много позиций в накладных и списаниях, то необходимо увеличить php параметр max_input_vars, так как при действиях с накладными и списаниями передаётся большое количество полей. Когда тестировал, то для порядка 1500 позиций значения в 10000 было вполне достаточно.

3. Учитывайте, что в накладных и списаниях сохраняются актуальные данные только при действиях (например, сохранить и завершить). В частности, в списках списаний может отображаться неактуальная сумма закупочной цены. Происходит это потому, что количество элементов в накладных и списаниях может быть большим и, соответственно, отображение списка накладных и списаний с полноценным пересчётом приводило бы к достаточно большой нагрузке на базу данных.

4. В текущей версии модуль не подразумевает закупочную цену у опций, учитывайте это.

5. Модуль подразумевает, что у товаров должно быть выставлено поле «Вычитать со склада» (Включено вычитание).

6. В случае если у товара не выставлено поле «Вычитать со склада» (Отключено вычитание), то накладные и списания нельзя использовать для такого товара. Однако поле «Закупочная цена» все равно сохраняется в заказе. Но при этом не корректируется закупочная цена товара в те моменты, когда происходит возврат товара на склад (изменение статуса заказа, при котором товар с включенным вычитанием был бы возвращен и была бы пересчитана закупочная цена).

7. Требуется, чтобы в настройках сайта было выставлено mbstring.func_overload 0. Если вы не знаете как это сделать , то уточните в вашем хостинге. В большинстве случаев по умолчанию это значение 0 (вам, как клиенту, ничего не нужно делать), но в некоторых хостингах выставляют значение 2. Это актуально в тех случаях, если у вас возникли проблемы с ключами и активацией модуля.

8. Требуется boostrap и jquery


Установка, переустановка и использование

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

1. Распакуйте архив и скопируйте в корень сайта каталоги «admin» и «system». Не волнуйтесь, никакие файлы не будут заменены.

2. Откройте админку и установите модуль (переустановите). Это обязательно нужно сделать, чтобы были созданы необходимые таблицы модуля и добавлены необходимые поля в стандартные таблицы опенкарта.

3. Откройте Установку расширений и последовательно загрузите файлы "imstock_menu_fast_link.ocmod.xml" и "imstock_purchase_price.ocmod.xml ". После чего обновите модификаторы. Если переустанавливаете модуль (следующие версии), то необходимо удалить предыдущие модификаторы перед установкой.

4. Откройте в админке модуль (редактирование).

5. Пользуйтесь.


Лицензия и использование

Сделано для версий OpenCart 2.3.0.2, ocStore 2.3.0.2-2.3.0.2.3
Лицензия распространяется только для одного сайта (одного интернет-магазина). Т.е. 1 домен + все поддомены = 1 оплата. Лицензия не выписывается для TLD и прочих доменов, которые подразумевают, что пользователи могут создавать поддомены. Например, нельзя в качестве домена указать RU или COM.RU.
Лицензия для тестового домена выписывается только в том случае, когда видно, что данный тестовый домен не может быть использован для реального сайта (интернет-магазина).
Купив модуль, вы автоматически соглашаетесь с текстом лицензии.
Модуль имеет принцип распространения "as is" ("Как есть").
Ввод лицензионного ключа необходимо осуществить в течение 5 дней после установки модуля. Лицензионный ключ состоит из двух частей.
Ключи необходимо вводить так, как они были присланы, без лишних пробелов и символов.
Запрещается несанкционированное использование, копирование, перепродажа, передача модуля третьим лицам, а также иные способы распространения, в том числе в ознакомительных целях.
Если у вас русский домен, то необходимо указывать то имя, которое указано в config.php в корне сайта.
Uploaded:
22.02.2023
Updated:
08.04.2024
Viewed:
1436
Sales:
4

Write a review

Your Name:


Your Review: Note: HTML is not translated!

Rating: Bad           Good

Enter the code in the box below:






Файлы будут доступны после покупки