Crear un histórico de costos para los productos

En este ejemplo, mostraré cómo crear un histórico de los costos de los productos comprados y de esta manera para cada producto será posible analizar el progreso.

Grupo ScriptEvento
FichaPost Guardado

Este script se puede insertar en el evento post guardado del producto. Es necesario recordar cambiar o crear los campos que difieren de su base de datos y crear la tabla Cost_items.

cost_table = database.getsql("SELECT * FROM cost_items WHERE gguidp='" ..
dataview.getvalue("gguid") .. "' ORDER by date DESC")

Primero creamos un objeto cost_table recuperando todas las líneas de cost_items y verificamos que el valor del campo gguidp coincida con el valor del gguid del producto actual.

También es posible buscar todas las líneas con los mismos códigos de producto que el actual, depende de cómo se construyeron las tablas. Sin embargo, si decide cambiar el código, el enlace a los costos se perderá automáticamente. Por el contrario, el uso de gguid garantiza que, al cambiar todos los datos del producto, no se pierda el histórico de costos.

Es de notar que la cadena sql ordena las líneas de costo de forma descendente, de esta manera podemos estar seguros de que la primera línea corresponde al último costo guardado.

vote    = false
nr = cost_table.countrows()
rows = cost_table.getrows()

Vamos a crear una variable vote que usaremos para verificar si necesitamos guardar el costo del producto o no. También extraemos el número de líneas y las líneas mismas de cost_table.

if nr == 0 then
        vote = true
else
        -- I proceed to check the current values
        cost = rows[1].getvalue("cost")
        if cost ~= dataview.getvalue("cost") then
               vote = true
        end
end

Si el número de líneas es igual que cero y, por lo tanto, los costos nunca se han guardado, establecemos la variable vote en True.

Si hay líneas, el costo debe extrapolarse de la primera línea que contendrá el último valor guardado, ya que estos se ordenan en orden descendente.

Si el costo es diferente del costo actual del producto, estableceremos la variable vote en True.

if vote == true then
        gridcost = dataview.getatable("cost_items")
        row = gridcost.adddatarow()
        row.setvalue("gguidp",dataview.getvalue("gguid"))
        row.setvalue("date",utility.getnow())
        row.setvalue("ind",database.getind("cost_items"))
        row.setvalue("cost",dataview.getvalue("cost"))
        row.save()
end

Si vote es igual a True, procedemos a guardar los valores. Primero agregamos una nueva línea a gridcost, es decir, la tabla adicional dentro de la ficha del producto. Luego establecemos el gguidp en el gguid del producto para encontrarlo en la próxima búsqueda, seleccionamos la fecha actual, el índice de la línea y el valor del costo. Finalmente guardamos la línea.

Habiendo usado el gguidp para mantener la relación, será posible usar la tabla cost_items como una tabla adicional para tener todo su histórico disponible en el producto.