01. DATOS GENERALES


Línea de producto: Microsiga Protheus.
Segmento:Servicios - Mercado Internacional.
Módulo:SIGAFAT - Facturación.
Función:
RutinaNombre Técnico
MATA486Transmisión de factura electrónica
Rutina RelacionadaNombre Técnico
FATECOL.INIScript de generación de XML de nota de crédito de cliente.
FATSCOL.INIScript de generación de XML de factura de venta.
FATSECOL.INIScript de generación de XML de factura de venta al exterior.
Ticket:5473256 | 5525395
Requisito/Story/Issue:DMINA-6420 | DMINA-6480 (DMINA-6497)
Versión:11.8 | 12.1.17 | 12.1.23


02. SITUACIÓN/REQUISITO

Al momento de intentar Transmitir una Factura de Exportación (Cliente con A1_EST = EX), se obtiene la respuesta "109-[Linea 02 Factura General] El campo TRM es un campo compuesto requerido para Facturas de Exportación, debe enviar los códigos 81,83,84,85".

Al parecer está siendo requerido el campo TRM, por lo cual se solicita que sea evaluada la inclusión de esta información por estándar.

03. SOLUCIÓN

Desarrollar funcionalidad para que al transmitir los documentos de exportación genere de forma automática los campos extensibles relacionados a TRM.

Configuraciones previas:

  • Cliente extranjero; Campo de estado (A1_EST) igual a "EX".
  • El campo Moneda DIAN (CTO_MOESAT) de la moneda contable "01" debe ser diferente a la Moneda del documento (F2/F1_MOEDA).

Pasos para validar la solución:

  1. Acceda a la rutina de facturación; SIGAFAT | Actualizaciones | Facturación | Facturación (MATA467N).
    - Registre una Factura de Exportación.
  2. Acceda a la rutina de transmisión; SIGAFAT | Actualizaciones | Facturación | Transmitir Factura Electrónica (MATA486).
    - Seleccione la opción Otras Acciones | Transmitir.
    - Especifique los parámetros del proceso y confirme.
    - El sistema indicará que la transmisión fue exitosa.
    - Desde la ruta de facturas autorizadas, visualice el archivo XML recibido del proveedor tecnológico. Verifique la existencia del nodo cac:PaymentExchangeRate el cual contiene los campos TRM:


Punto de entrada M486CEXT - Campos extensibles.

Ejemplo de generación de los campos correspondientes a TRM (81, 83, 84 y 85):

#Include "Protheus.ch"
#Include "rwmake.ch"

User Function M486CEXT()

Local aArea := getArea()
Local aAreaSA1 := SA1->(GetArea())
Local aAreaSF1 := SF1->(GetArea())
Local aAreaSF2 := SF2->(GetArea())
Local aCampos := {}
Local cSerie := ParamIXB[1,1]
Local cFactura := ParamIXB[1,2]
Local cCliente := ParamIXB[1,3]
Local cLoja := ParamIXB[1,4]
Local cEspecie := ParamIXB[2]
Local cEst := ""
Local cTxMoeda := ""

dbSelectArea("SA1")
dbSetOrder(1)
dbSeek(xFilial("SA1")+cCliente+cLoja)
If !Empty(SA1->A1_CONTATO)
    aAdd( aCampos , {"Destinatario", "", "48", "1", Alltrim(SA1->A1_CONTATO), "1"} )
EndIf

If !Empty(SA1->A1_HPAGE)
    aAdd( aCampos , {"Pagina web", "", "1", "1", Alltrim(SA1->A1_HPAGE), "1"} )
EndIf
SA1->(RestArea(aAreaSA1))

If Alltrim(cEspecie) $ "NF|NDC"
    dbSelectArea("SF2")
    dbSetOrder(1)
    dbSeek(xFilial("SF2")+cFactura+cSerie)
    cEst := SF2->F2_EST
    cTxMoeda := Alltrim(Str(SF2->F2_TXMOEDA))
    SF2->(RestArea(aAreaSF2))

Else
    dbSelectArea("SF1")
    dbSetOrder(1)
    dbSeek(xFilial("SF1")+cFactura+cSerie)
    cEst := SF1->F1_EST
    cTxMoeda := Alltrim(Str(SF1->F1_TXMOEDA))
    SF1->(RestArea(aAreaSF1))

EndIf

If cEst == "EX"
    aAdd( aCampos , {"Tasa de Cambio" , "", "81", "1", "" , "1"} )
    aAdd( aCampos , {"Moneda Origen" , "", "83", "1", "USD" , "1"} )
    aAdd( aCampos , {"Moneda Final" , "", "84", "1", "COP" , "1"} )
    aAdd( aCampos , {"Valor del Calculo", "", "85", "1", cTxMoeda, "1"} )
Endif

RestArea(aArea)

Return aCampos


Scripts de generación de documentos electrónicos (archivos XML).

Las modificaciones realizadas son para el correcto manejo de campos cuando el cliente es persona física. En el nodo fe:AccountingCustomerParty (datos del receptor) se incluye uno de los siguientes subnodos dependiendo del tipo de persona:


Tipo de personaSubnodoAtributoContenidoDescripción
Jurídicafe:PartyLegalEntitycbc:RegistrationNameA1_NOMERazón social / Nombre completo
Físicafe:Personcbc:FirstNameA1_NOMEPRIPrimer nombre


cbc:MiddleNameA1_NOMEPESSegundo nombre


cbc:FamilyNameA1_NOMEPATSegundo apellido