'----****
'----**** MyBusiness POS V20
'----**** Version del script: 1.0
'----**** 19/02/2020
'----****
Sub Main()
Dim rstTarea
Dim nId
Dim Query
Set rstTarea = CreaRecordSet( "SELECT MAX(id) FROM concentradortareas WHERE tarea = 'INVENTARIO'", Ambiente.Connection, false )
nId = Val2( rstTarea(0) )
Set rstTarea = CreaRecordSet( "SELECT * FROM concentradortareas WHERE id = '" & nId, Ambiente.Connection, false )
If Not rstTarea.EOF Then
If (rstTareas("Fecha") - Date) >= Val2( Combo2.Text ) Then
ProcesaInventario
Set Query = NewQuery()
Query.ErrorOculto = True
Set Ambiente.Connection = Ambiente.Connection
Query.strState = "INSERT"
Query.AddField "concentradortareas", "id" , TraeSiguiente( "concentradortarea", Ambiente.Connection )
Query.AddField "concentradortareas", "tarea", "inventario"
Query.AddField "concentradortareas", "fecha", Date
Query.CreateQuery
Query.Execute
End If
End If
End Sub
Sub ProcesaInventario
ClasificaObsoleto ""
ClasificaProd
ColocaProductosDeKits
ClasificaAltoMediobajolento
ClasificaAltos
ClasificaObsoleto "Obsoleto"
FinalizaTarea
End Sub
Sub ClasificaObsoleto( cObsoleto )
Dim dFechaInicial
Dim dFechaFinal
Dim nPeriodosNuevo
Dim nPeriodos
Dim rstProds
Dim rstMovsinv
dFechaInicial = DateSerial( 1999, 2, 1 )
dFechaFinal = Date
nPeriodosNuevo = 6
If clEmpty( (cObsoleto) ) Then
Set rstProds = CreaRecordSet( "SELECT articulo FROM prods ORDER BY articulo", Ambiente.Connection, false )
Else
Set rstProds = CreaRecordSet( "SELECT articulo FROM prods WHERE clasificacion = '" & cObsoleto & "' ORDER BY articulo", Ambiente.Connection, false )
End If
While Not rstProds.EOF
Set rstMovsinv = CreaRecordSet( "SELECT articulo, f_movim FROM movsinv WHERE articulo = '" & rstProds("Articulo") & "' AND ent_sal = 'E' ORDER BY f_movim", Ambiente.Connection, false )
If rstMovsinv.EOF Then
Set rstMovsinv = CreaRecordSet( "SELECT articulo, f_movim FROM kardex WHERE articulo = '" & rstProds("Articulo") & "' AND ent_sal = 'E' ORDER BY f_movim", Ambiente.Connection, false )
End If
If rstMovsinv.EOF Then
Ambiente.Connection.Execute "UPDATE prods SET clasificacion = 'Nuevo sin movimiento' WHERE articulo = '" & rstProds("articulo") & "'"
Else
nPeriodos = DateDiff( "m", dFechaInicial, rstMovsinv("f_movim") )
If nPeriodos <= nPeriodosNuevo Then
Ambiente.Connection.Execute "UPDATE prods SET clasificacion = 'Nuevo sin movimiento' WHERE articulo = '" & rstProds("articulo") & "'"
End If
If nPeriodos > nPeriodosNuevo And nPeriodos <= 12 Then
Ambiente.Connection.Execute "UPDATE prods SET clasificacion = 'Obsoleto < 1 año' WHERE articulo = '" & rstProds("articulo") & "'"
End If
If nPeriodos > 12 And nPeriodos <= 24 Then
Ambiente.Connection.Execute "UPDATE prods SET clasificacion = 'Obsoleto > 1 año' WHERE articulo = '" & rstProds("articulo") & "'"
End If
If nPeriodos > 24 And nPeriodos <= 36 Then
Ambiente.Connection.Execute "UPDATE prods SET clasificacion = 'Obsoleto > 2 años' WHERE articulo = '" & rstProds("articulo") & "'"
End If
If nPeriodos > 36 Then
Ambiente.Connection.Execute "UPDATE prods SET clasificacion = 'Obsoleto > 3 años' WHERE articulo = '" & rstProds("articulo") & "'"
End If
End If
rstProds.MoveNext
Wend
End Sub
Sub ClasificaProd()
Dim nFechaInicial
Dim nFechaFinal
Dim nPeriodos
Dim n
Dim strSQL
Dim dFechaAnterior
Dim Query
Dim dFechaInicialVenta
Dim dFechaFinalVenta
Dim nCantidad
Dim rstMovsinv
Dim Fecha
Dim nActivos
Dim cClasificacion
Dim rstEntradas
Dim rstSalidas
dFechaInicial = DateSerial( 1999, 2, 1 )
dFechaFinal = Date
nPeriodosNuevo = 6
nPeriodos = DateDiff( "m", dFechaInicial, dFechaFinal )
nPeriodos = Abs( nPeriodos )
Ambiente.Connection.Execute "DELETE FROM histprods"
Set Query = NewQuery()
Set Query.Connection = Ambiente.Connection
Query.ErrorOculto = True
For n = 0 To nPeriodos
dFechaAnterior = DateAdd( "m", n * -1, dFechaFinal )
dFechaInicialVenta = Ud( Month( dFechaAnterior ), Year( dFechaAnterior ), False )
dFechaFinalVenta = Ud( Month( dFechaAnterior ), Year( dFechaAnterior ), True )
strSQL = ""
strSQL = strSQL & "SELECT partvta.articulo, prods.kit, SUM( cantidad ) AS 'cantidad'"
strSQL = strSQL & " FROM partvta, prods, ventas"
strSQL = strSQL & " WHERE partvta.articulo = prods.articulo"
strSQL = strSQL & " AND partvta.venta = ventas.venta"
strSQL = strSQL & " AND ventas.estado = 'CO' AND ventas.cierre = 0"
strSQL = strSQL & " AND ventas.f_emision >= " & FechaSQL( dFechaInicialVenta, Ambiente.Connection )
strSQL = strSQL & " AND ventas.f_emision <= " & FechaSQL( dFechaFinalVenta, Ambiente.Connection )
strSQL = strSQL & " GROUP BY prods.articulo, prods.kit"
strSQL = strSQL & " ORDER BY prods.articulo, prods.kit"
Set rstProds = CreaRecordSet( (strSQL), Ambiente.Connection, false )
While Not rstProds.EOF
Set rstMovsinv = CreaRecordSet( "SELECT f_movim FROM movsinv WHERE ent_sal = 'E' AND articulo = '" & rstProds("articulo") & "' ORDER BY f_movim", Ambiente.Connection, false )
If rstMovsinv.EOF Then
Set rstMovsinv = CreaRecordSet( "SELECT f_movim FROM kardex WHERE ent_sal = 'E' AND articulo = '" & rstProds("articulo") & "' ORDER BY f_movim", Ambiente.Connection, false )
End If
dFecha = DateSerial( 1900, 1, 1 )
nActivos = 0
cClasificacion = "Obsoleto"
If Not rstMovsinv.EOF Then
dFecha = rstMovsinv("f_movim")
nActivos = DateDiff( "m", dFechaFinal, rstMovsinv("f_movim") )
nActivos = Abs( nActivos )
If nActivos <= nPeriodosNuevo Then
cClasificacion = "Nuevo"
End If
End If
If rstProds("kit") = 0 Then
Query.Reset
Query.AddField "histprods", "articulo", rstProds("articulo")
Query.AddField "histprods", "month", Month( dFechaAnterior )
Query.AddField "histprods", "year", Year( dFechaAnterior )
Query.AddField "histprods", "cantidad", Val2( rstProds("cantidad") )
Query.AddField "histprods", "entrada", dFecha
Query.AddField "histprods", "activos", nActivos
Query.AddField "histprods", "clasificacion", cClasificacion
Query.AddField "histprods", "mesyear", "" & Year( dFechaAnterior ) & strCero( Month( dFechaAnterior ),2 )
Query.strState = "INSERT"
Query.CreateQuery
Query.Execute
End If
rstProds.MoveNext
Wend
Next
End Sub
Sub ColocaProductosDeKits()
Dim nFechaInicial
Dim nFechaFinal
Dim nPeriodos
Dim n
Dim strSQL
Dim dFechaAnterior
Dim Query
Dim dFechaInicialVenta
Dim dFechaFinalVenta
Dim nCantidad
Dim rstMovsinv
Dim Fecha
Dim nActivos
Dim cClasificacion
Dim rstEntradas
Dim rstSalidas
dFechaInicial = DateSerial( 1999, 2, 1 )
dFechaFinal = Date
nPeriodosNuevo = 6
nPeriodos = DateDiff( "m", dFechaInicial, dFechaFinal )
nPeriodos = Abs( nPeriodos )
Set Query = NewQuery()
Set Query.Connection = Ambiente.Connection
Query.ErrorOculto = True
For n = 0 To nPeriodos
dFechaAnterior = DateAdd( "m", n * -1, dFechaFinal )
dFechaInicialVenta = Ud( Month( dFechaAnterior ), Year( dFechaAnterior ), False )
dFechaFinalVenta = Ud( Month( dFechaAnterior ), Year( dFechaAnterior ), True )
strSQL = ""
strSQL = strSQL & "SELECT comppart.componente, prods.kit, SUM( movsinv.cantidad ) AS 'cantidad'"
strSQL = strSQL & " FROM (movsinv INNER JOIN prods ON movsinv.articulo = prods.articulo) "
strSQL = strSQL & " INNER JOIN comppart ON comppart.componente = movsinv.articulo "
strSQL = strSQL & " WHERE f_movim >= " & FechaSQL( dFechaInicialVenta, Ambiente.Connection )
strSQL = strSQL & " AND f_movim <= " & FechaSQL( dFechaFinalVenta, Ambiente.Connection )
strSQL = strSQL & " GROUP BY comppart.componente, prods.kit "
strSQL = strSQL & " ORDER BY comppart.componente, prods.kit "
Set rstProds = CreaRecordSet( (strSQL), Ambiente.Connection, false )
While Not rstProds.EOF
Set rstMovsinv = CreaRecordSet( "SELECT f_movim FROM movsinv WHERE ent_sal = 'E' AND articulo = '" & rstProds("componente") & "' ORDER BY f_movim", Ambiente.Connection, false )
If rstMovsinv.EOF Then
Set rstMovsinv = CreaRecordSet( "SELECT f_movim FROM kardex WHERE ent_sal = 'E' AND articulo = '" & rstProds("componente") & "' ORDER BY f_movim", Ambiente.Connection, false )
End If
dFecha = DateSerial( 1900, 1, 1 )
nActivos = 0
cClasificacion = "Obsoleto"
If Not rstMovsinv.EOF Then
dFecha = rstMovsinv("f_movim")
nActivos = DateDiff( "m", dFechaFinal, rstMovsinv("f_movim") )
nActivos = Abs( nActivos )
If nActivos <= nPeriodosNuevo Then
cClasificacion = "Nuevo"
End If
End If
Set rstHistProds = CreaRecordSet( "SELECT cantidad FROM histprods WHERE articulo = '" & rstProds("componente") & "' AND month = " & Month( dFechaAnterior ) & " AND year = " & Year( dFechaAnterior ), Ambiente.Connection, false )
If Not rstHistProds.EOF Then
If rstProds("kit") = 0 Then
Query.Reset
Query.AddField "histprods", "articulo", rstProds("componente")
Query.AddField "histprods", "month", Month( dFechaAnterior )
Query.AddField "histprods", "year", Year( dFechaAnterior )
Query.AddField "histprods", "cantidad", Val2( rstProds("cantidad") ) + Val2(rstHistProds("cantidad"))
Query.AddField "histprods", "entrada", dFecha
Query.AddField "histprods", "activos", nActivos
Query.AddField "histprods", "clasificacion", cClasificacion
Query.AddField "histprods", "mesyear", "" & Year( dFechaAnterior ) & strCero( Month( dFechaAnterior ), 2)
Query.strState = "UPDATE"
Query.Condition = "articulo = '" & rstProds("componente") & "' AND month = " & Month( dFechaAnterior ) & " AND year = " & Year( dFechaAnterior )
Query.CreateQuery
Query.Execute
End If
End If
rstProds.MoveNext
Wend
Next
End Sub
Sub ClasificaAltoMediobajolento()
Dim nPorcentajeAlto
Dim nPorcentajeMedio
Dim nPorcentajeBajo
Dim nPorcentajeLento
Dim nPorcentajeObsoleto
Dim nMesAnterior
Dim nYearAnterior
Dim nMesActual
Dim nYearActual
Dim dFechaAnterior
Dim dFechaActual
Dim strSQL
Dim nPeriodos
Dim nPeriodosNuevo
nPorcentajeAlto = Int( 12 * 0.7 )
nPorcentajeMedio = Int( 12 * 0.6 )
nPorcentajeBajo = Int( 12 * 0.5 )
nPorcentajeLento = Int( 12 * 0.4 )
nPorcentajeObsoleto = Int( 12 * 0.3 )
nPeriodosNuevo = 6
dFechaAnterior = DateAdd( "m", -13, Date )
nMesAnterior = Month( dFechaAnterior )
nYearAnterior = Year( dFechaAnterior )
dFechaActual = DateAdd( "m", -1, Date )
nMesActual = Month( dFechaActual )
nYearActual = Year( dFechaActual )
strSQL = ""
strSQL = strSQL & "SELECT articulo, COUNT(*) FROM histprods "
strSQL = strSQL & " WHERE clasificacion <> 'Nuevo'"
strSQL = strSQL & " AND mesyear >= '" & "" & nYearAnterior & strCero( (nMesAnterior), 2 ) & "'"
strSQL = strSQL & " AND mesyear <= '" & "" & nYearActual & strCero( (nMesActual), 2 ) & "'"
strSQL = strSQL & " GROUP BY articulo "
strSQL = strSQL & " ORDER BY articulo "
Set rstProds = CreaRecordSet( (strSQL), Ambiente.Connection, false )
While Not rstProds.EOF
nCuantos = Val2( rstProds(1) )
If nCuantos > nPorcentajeMedio Then
Ambiente.Connection.Execute "UPDATE histprods SET clasificacion = 'Alto', meses = " & nCuantos & " WHERE articulo = '" & rstProds("articulo") & "'"
End If
If nCuantos <= nPorcentajeMedio And nCuantos > nPorcentajeBajo Then
Ambiente.Connection.Execute "UPDATE histprods SET clasificacion = 'Medio', meses = " & nCuantos & " WHERE articulo = '" & rstProds("articulo") & "'"
End If
If nCuantos <= nPorcentajeBajo And nCuantos > nPorcentajeLento Then
Ambiente.Connection.Execute "UPDATE histprods SET clasificacion = 'Bajo', meses = " & nCuantos & " WHERE articulo = '" & rstProds("articulo") & "'"
End If
If nCuantos <= nPorcentajeLento And nCuantos > nPorcentajeObsoleto Then
Ambiente.Connection.Execute "UPDATE histprods SET clasificacion = 'Lento', meses = " & nCuantos & " WHERE articulo = '" & rstProds("articulo") & "'"
End If
If nCuantos <= nPorcentajeObsoleto Then
Ambiente.Connection.Execute "UPDATE histprods SET clasificacion = 'Obsoleto', meses = " & nCuantos & " WHERE articulo = '" & rstProds("articulo") & "'"
End If
rstProds.MoveNext
Wend
Set rstProds = CreaRecordSet( "SELECT articulo, clasificacion FROM histprods WHERE clasificacion <> '' GROUP BY articulo ORDER BY articulo", Ambiente.Connection, false )
While Not rstProds.EOF
Ambiente.Connection.Execute "UPDATE prods SET clasificacion = '" & rstProds("Clasificacion") & "' WHERE articulo = '" & rstProds("Articulo") & "'"
rstProds.MoveNext
Wend
End Sub
Sub ClasificaAltos
Dim nPorcentajeAlto
Dim nPorcentajeMedio
Dim nPorcentajeBajo
Dim nPorcentajeLento
Dim nPorcentajeObsoleto
Dim nMesAnterior
Dim nYearAnterior
Dim nMesActual
Dim nYearActual
Dim dFechaAnterior
Dim dFechaActual
Dim strSQL
Dim nPeriodosNuevo
nPeriodosNuevo = 6
nPorcentajeAlto = Int( nPeriodosNuevo * 0.7 )
nPorcentajeMedio = Int( nPeriodosNuevo * 0.6 )
nPorcentajeBajo = Int( nPeriodosNuevo * 0.5 )
nPorcentajeLento = Int( nPeriodosNuevo * 0.4 )
nPorcentajeObsoleto = Int( nPeriodosNuevo * 0.0 )
Ambiente.Connection.Execute "UPDATE prods SET clasificacion = 'Nuevo sin movimiento' WHERE clasificacion LIKE 'Nuevo%'"
strSQL = ""
strSQL = strSQL & "SELECT articulo, activos FROM histprods "
strSQL = strSQL & " WHERE clasificacion LIKE 'Nuevo%'"
strSQL = strSQL & " GROUP BY articulo "
strSQL = strSQL & " ORDER BY articulo "
Set rstProds = CreaRecordSet( (strSQL), Ambiente.Connection, false )
While Not rstProds.EOF
nCuantos = Val2( rstProds(1) )
If nCuantos > nPorcentajeMedio Then
Ambiente.Connection.Execute "UPDATE histprods SET clasificacion = 'Nuevo Alto' WHERE articulo = '" & rstProds("articulo") & "'"
End If
If nCuantos <= nPorcentajeMedio And nCuantos > nPorcentajeBajo Then
Ambiente.Connection.Execute "UPDATE histprods SET clasificacion = 'Nuevo Medio' WHERE articulo = '" & rstProds("articulo") & "'"
End If
If nCuantos <= nPorcentajeBajo And nCuantos > nPorcentajeLento Then
Ambiente.Connection.Execute "UPDATE histprods SET clasificacion = 'Nuevo Bajo' WHERE articulo = '" & rstProds("articulo") & "'"
End If
If nCuantos <= nPorcentajeLento And nCuantos > nPorcentajeObsoleto Then
Ambiente.Connection.Execute "UPDATE histprods SET clasificacion = 'Nuevo Lento' WHERE articulo = '" & rstProds("articulo") & "'"
End If
If nCuantos <= nPorcentajeObsoleto Then
Ambiente.Connection.Execute "UPDATE histprods SET clasificacion = 'Nuevo sin venta' WHERE articulo = '" & rstProds("articulo") & "'"
End If
rstProds.MoveNext
Wend
Set rstProds = CreaRecordSet( "SELECT articulo, clasificacion FROM histprods GROUP BY articulo ORDER BY articulo", Ambiente.Connection, false )
While Not rstProds.EOF
Ambiente.Connection.Execute "UPDATE prods SET clasificacion = '" & rstProds("Clasificacion") & "' WHERE articulo = '" & rstProds("Articulo") & "'"
rstProds.MoveNext
Wend
End Sub