Buscar palabras clave en la documentación    Buscar Ayuda

Doc. Ref. 9557
Título: Script de ayuda a la facturación agrupada
Autor: Hexa
Última actualización: 15/07/2014


Script de ayuda a la facturación agrupada

Hexa dispone de opciones para facturar albaranes o pedidos de forma individual o agrupada, es decir, varios albaranes o pedidos del mismo cliente en una sola factura

Las opciones de facturación agrupada son genéricas y flexibles. Por ello disponen de muchas opciones para adaptarlas a las necesidades de cada situación. Esta flexibilidad puede hacer que el proceso sea lento en caso de que se utilicen repetidamente. Además aparece un riesgo de que el usuario cometa errores si las utiliza de forma rutinaria.

La mejor solición para mejorar el proceso consiste en programar un script que se adapte a las necesidades concretas y repetitivas de la empresa. Este script debería ser fácilmente accesible, constar sólo de las opciones necesarias y mostrar información de ayuda clara para evitar errores.

En el siguiente ejemplo se muestra un script que cumple con las siguientes condiciones:

  1. La empresa factura los pedidos directamente, sin generar albarán. La factura hace la función de albarán de entrega acompañando a las mercancías expedidas al cliente.
  2. Cada día se prepara y factura las mercancías correspondientes a pedidos que el sistema de planificación marca como entregables y en el orden establecido.
  3. El usuario que lanza los procesos, tiene un cierto nivel de decisión a la hora de incluir pedidos planificados para más adelante y así agruparlos en la misma expedición.
  4. No se puede incluir en la misma factura pedidos que, aunque sean del mismo cliente, tienen condiciones de comerciales diferentes. En este caso se considera solo que tengan descuentos comerciales o pronto pago diferentes.

  5. Los pedidos que se preparan en almacén tienen estado "Impreso" y que es el estado en que se dejan una vez impresos los vales de preparación para el personal de almacén. Antes de ser facturados se pasan a estado "Pendiente" (necesario para que puedan ser facturados). El proceso de facturación los deja finalmente en estado "Facturado".
  6. El script está pensado para ser configuraco en un botón de acción del formulario de expliración de pedidos. En el momemnto en que el explorador muestra los pedidos a facturar, el usuario escogerá un pedido y pulsará el botón. El script ejecutará el siguiente proceso:

    • Buisca el cliente del pedido y todos los pedidos del mismo cliente, estado "Impreso" y los mismos descuentos que el pedido inicial.

    • Muestra un mensaje con la lista de pedidos y los descuentos
    • Permite al usuario editar esa lista de pedidos añadiendo o eliminando los que considere necesarios
    • Solicita confirmación de que se ejecute el proceso
    • Ejecuta el proceso y muestra el resultado

    Gracias a un script como este se agiliza el proceso y se reduce el riesgo de errores. Sub Main (PS0, PS1, PS2)

    Prefijo=FH.Igu (PS0, "Prefijo", -1)
    Numero=FH.Igu (PS0, "Numero", -1)
    Lista = Prefijo & "-" & Numero & ","
    Cliente = FH.VAC (BaseDeDatos.Cmp ("Pedido", "Cliente", "" & PS0, False))
    Descuento = FH.VAC (BaseDeDatos.Cmp ("Pedido", "Descuento", "" & PS0, False))
    Descuento2 = FH.VAC (BaseDeDatos.Cmp ("Pedido", "Descuento2", "" & PS0, False))
    Dim Pedido : Set Pedido = CreateObject ("ADODB.Recordset") : Pedido.CursorLocation = 3 'AdUseClient
    Pedido.Open "SELECT Prefijo, Numero FROM Pedido WHERE Estado='Impreso' And Cliente=" & Cliente & " And Descuento=" & FH.SQLC (Descuento) & " And Descuento2=" & FH.SQLC (Descuento2) & " ORDER BY Prefijo, Numero", Cn
    Set Pedido.ActiveConnection = Nothing
    Do While Not Pedido.EOF
    If Prefijo <> Pedido.Fields ("Prefijo") Or Numero <> Pedido.Fields ("Numero") Then
    Lista = Lista & Pedido.Fields ("Prefijo") & "-" & Pedido.Fields ("Numero") & ","
    End If
    Pedido.MoveNext
    Loop
    Pedido.Close : Set Pedido = Nothing
    If Len (Lista) > 1 Then Lista = Left (Lista, Len (Lista) - 1)
    Formularios.MbX "Los pedidos del cliente " & Cliente & " que tienen estado 'Impreso' y que tienen los decuentos " & Descuento * 100 & "% y " & Descuento2 * 100 & "% iguales al pedido seleccionado " & Prefijo & "-" & Numero & " son:" & VbCrLf & Lista
    Lista = Formularios.IBX ("Pedidos a facturar agrupados", "", 0, Lista)
    If Formularios.Mbx ("Facturar los pedidos: " & Lista & "?", VbYesNo) = VbNo Then Exit Sub
    i = 1 : Cond = ""
    Ped = FH.MulTxt ("" & Lista, CInt (i), ",", True)
    Do While Ped <> ""
    Prefijo = FH.MulTxt ("" & Ped, 1, "-", True) : Numero = FH.VAC (FH.MulTxt ("" & Ped, 2, "-", True))
    BaseDeDatos.Modifica "Pedido", "Estado='Pendiente'", "Prefijo=" & FH.SQLT (Prefijo) & " And Numero=" &
    Cond = Cond & "Prefijo=" & FH.SQLT (Prefijo) & " AND Numero=" & Numero & " OR "
    i = i + 1 : Ped = FH.MulTxt ("" & Lista, CInt (i), ",", True)

    Loop
    If Len (Cond) > 4 Then Cond = Left (Cond, Len (Cond) - 4)
    Resultado = ConvierteDocumento.FAP ("" & Cond, "Prefijo, Numero", "Origen='Pedido' Destino='Factura' CalcularLineas='Si' SumarLineas='Si' CalcularDocumento='Si' Agrupar='Si'")
    Formularios.MBx (Resultado)
    End Sub

    Este script puede servir como base para programar otros casos similares con otras condiciones.

    Tags Relacionados:

    script pedido albaran factura descuento cliente proceso