Perspective of three (or four) modules to manage multiwarehouse stock and movements of material between warehouses.
You have two virtual warehouse, Sales and Purchase. These warehouses simulate the stock movement when you do a purchase or sale.
To work correctly, you have to create your physical warehouse to do the purchase stock movement to your warehouse or when you do a sale from your physical warehouse.
You can do these movements using the virtual warehouse, for example:
To make the creation of movements easier we have added a Massive Movements module. This module will permit you to quickly move many products between warehouses by creating records.
We have created three workflows to help control the stock when working with PO and Invoice (SO). The first two are related to the normal work sequence in coreBOS while the third is to handle returns.
As normal, to configure workflows you have to go to Settings->Workflows, where we have already added the new workflows related to the entities, so you just have to configure them depending on your business model conditions.
This is when you make a sale through an Invoice or Sales Order. You have to edit the first workflow (module -> Invoice , description -> UpdateInventoryProducts On Every Save), then edit the Task and change the UpdateInventory function to mwDecrementStock.
This is when you buy products on a Purchase Order. You have to create a new workflow with the Purchase Order module and create a new task selecting Invoke Custom Function. In this task, you have to select the mwIncrementStock.
You return stock when you cancel an Invoice (Sales Order) or return products to your vendor. Normally you would create new workflows with a condition depending on some status field on the record. The mwReturnStock custom function knows when it is returning a Sale or a Purchase so we use the same custom function for both.
If we have products to import and we want to initialize the stock, we have to follow the next steps.
First we have to import a CSV with products to the Products module.
Now we have all our products imported and we want to initialize the stock and first movement from the virtual Purchase warehouse to our warehouse.
If you have created a new warehouse, you can export the products that you need to initialize from the Products Module. We need the CSV that coreBOS generates to obtain the product number in the application. Something like this: Products::::PRO27
Now we can edit this CSV and add or delete columns we need to import Movements to coreBOS. We have to obtain a CSV like this:
En las pestañas de movimientos y stock, ayudaría muchísimo si pudieramos saber de qué IN, SO o PO se está haciendo el movimiento, hoy es difícil rastrear este movimiento.
Stock es el número de unidades totales de un producto en un almacén, es el resultado de TODOS los movimientos realizados, por tanto no tiene sentido tener una factura o compra asociada.
El movimiento, en cambio, es EXACTAMENTE el cambio de unidades de stock entre dos almacenes como resultado de una venta o compra, por tanto en el mismo movimiento tienes un enlace a la entidad que ha generado el movimiento e incluso el número de línea en el mismo. Deberías poder ir a la vista detalle de cualquier movimiento y verás el registro que lo ha generado.
Para poder ver todos los movimientos que representan el stock actual deberías poder hacer un informe o filtro en un almacén y un producto. Esos movimientos son los que representan el stock actual en el almacén.
The concept/menu item "stock", I’m afraid that I don’t know how/why it's used?
As can be read above, the stock module is to make reporting and filtering on stock easy. It is automatically filled in when a movement is created. The movement will automatically create/update the stock records in the stock module, so there is no need to do anything there. It is just for reporting. We could have saved that information internally and then invented some way for you to filter and report on the stock but we figured that adding the information to a normal module would consume the same database space (more or less) and we wouldn't have to invent anything, all users would already know how to report and filter on the information there.