Sistema de Gestión de Negocios "Hexa"
Base de datos de conocimiento.
Doc. Ref. 9557 Título: Script de ayuda a la facturación agrupada Autor: Hexa Última actualización: 15/07/2014#script #pedido #albaran #factura #descuento #cliente #proceso |
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:
- 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.
- 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.
- 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.
- 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.
- 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".
- 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
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:
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)End Sub
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") ThenLoop
Lista = Lista & Pedido.Fields ("Prefijo") & "-" & Pedido.Fields ("Numero") & ","End If
Pedido.MoveNext
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)
Este script puede servir como base para programar otros casos similares con otras condiciones.