Publicado el Dejar un comentario

CLASIFINV Clasifica el inventario

'----**** 
'----**** 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


Deja un comentario