Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

01. DATOS GENERALES


Producto

Solucoes_espanhol
SolucaoTOTVS Backoffice

Línea de producto: 

Linhas_totvs_espanhol
LinhaLínea Protheus

Segmento:

Segmentos_totvs_espanhol
SegmentoBackoffice

Módulo:SIGAFAT - Facturación
Función:

   

Rutina(s)

Nombre Técnico

Fecha

MATA486.PRWDocumentos electrónicos29/03/2022
M486XFUNCO.PRWFunciones genéricas para transmisión de documentos electrónicos29/03/2022
M486PDFCOL.PRWGeneración de factura electrónica en PDF29/03/2022
LOCXNF.PRWNotas Fiscales
.
29/03/2022
LOCXNF2.PRW

Funciones genéricas de Documentos Fiscales

.

29/03/2022
LOCXCOL.PRWFunciones Genéricas de Notas Fiscales Colombia29/03/2022
FATECOL.INIGeneración de XML para Documentos de Entrada
.
29/03/2022
WSNFECOL.PRWCliente de servicio web de facturación29/03/2022

   

País:Colombia
Ticket:N/A
Pacote de ATUSX:010328
Requisito/Story/Issue (informe el requisito vinculado):DMINA-14293

02.   SITUACIÓN/REQUISITO

En Colombia, para el 01 de Agosto, entra en función que los proveedores que no están obligados a facturar, la empresa que les compre debe presentar una factura por ellos, a lo que llama Documento Soporte.
Realizar modificaciones en el módulo de facturación para dar solución a lo establecido en la Resolución Número 000167 del 30 DIC 2021 de la DIAN, Anexo técnico del documento soporte en adquisiciones efectuadas a sujetos no obligados a expedir factura de venta o documento equivalente. En el registro de la Factura de Entrada, identificar cuando es una factura por Documento Soporte. Este tipo de documentos deben generar un comprobante electrónico (XML) y éste debe ser autorizado por la DIAN. 

...

El archivo FateCol.ini se utiliza principalmente para generar los componentes del XML de una Nota de Crédito (NCC), si embargo, el documento soporte se crea como una factura con especie 1 de tipo NF, por lo tanto, en el archivo se realizan las siguientes modificaciones:

    • Se crea la variable lógica _aTotal[116] para indica indicar si es un documento soporte y utilizar los datos del Cliente (SA1)   relacionado al Proveedor (SA2). También se utiliza la variable lógica _aTotal[116] para asignar los nodos relacionados a la Factura (ejemplo: fe:InvoiceLine, fe:Item, fe:Price, etc..)
    • Cuando se utiliza la función fGetTaxas(), se indica que es un documento “NCC” NCCpara obtener los valores de las tablas de Impuestos Variables (SFB) y de Detalle de Factura (SD1) y cuando se utiliza la función fGetTaxDet() se indica que es un documento “NCC” NCCpara obtener los valores de las tablas de Impuestos Variables (SFB), Tes vs. Impuestos (SFC), Encabezado de Factura (SF1)  y y de Detalle de Factura (SD1).
    • Para complementar la consulta realizada en la función FsQuery(), en el filtro de la tabla de control de folios (SFP) se indica la especie “1” Especie 1 - Factura.

LOCXCOL

    • Se crea la función LxVlCabCol(), que es utilizada en el campo Proveedor (F1_FORNECE) cuando es un Docto Soporte y valida si el proveedor seleccionado tiene un cliente Cliente relacionado (A2_CLIENTE Y y A2_LOJCLI).
    • En la función LxCpoCol() al campo Serie (F1_SERIE) se le agrega la consulta “01” estándar “01(muestra la serie y numeración relacionada al Docto. Soporte) y al campo Proveedor (F1_FORNECE) se le agrega la función LxVlCabCol() (Valida el Proveedor vs Cliente).

LOCXNF

    • En la función Mata101n() se asigna el tipo documento “1 1 - Factura” Facturay se activa la variable lógica lDocSp cuando en el grupo de preguntas MT101N se selecciona el tipo de factura “Docto. Soporte”Docto Soporte
    • En la función LocxDlgNF() se asigna el título “DocDoc. Soporte” Soportepara que sea mostrado en el encabezado de la factura.
    • En la Función función GravaCabNF() cuando es documento soporte se asigna valor al campo Doc. Soporte (F1_SOPORT) = “S” Sy cuando el Departamento/Estado (A2_EST) del proveedor es igual a “EX” EXse asigna Tipo Oper. (F1_TIPOPE) = “11” 11”, de lo contrario se asigna F1_TIPOPE = “10”10.
    • En la Función función GravaNFGral() se realiza la auto numeración (de número documento) con la función AtuNumNF() cuando es un Docto. Soporte.
    • En la función MontaCfgNf() se asigna el título “DocDoc. Soporte” Soportepara que sea mostrado en el encabezado de la factura.
    • En la función LocxVal() cuando  cuando es documento soporte se asigna y valida el folio (números de documento).


LOCXNF2

    • En la función LxExSer2() se obtiene la serie Serie 2 (F1_SERIE2) por medio de la serie y el número de documento cuando es documento soporte.
    • En la Función función FValDocSer() se valida la serie Serie, numero Número de documento Documento y se asigna la serie Serie 2 cuando es documento soporte.

M486PDFCOL

    • En la Función función ImpXmlPDF() cuando es documento soporte Documento Soporte se asignan los filtros F1_SERIE = “NF” NFy F1_SOPORT=“S” Sal query de la tabla SF1.


M486XFUNCO

    • En la Función función M486XMLHKA() cuando es documento soporte Documento Soporte se obtienen los valores (cliente Cliente y tienda) Tienda relacionados al proveedor Proveedor, estos valores posteriormente se utilizaran para obtener la actividad económica Actividad Económica y los detalles tributarios Detalles Tributarios. También se asigna al elemento ctipoDocumento = “05” 05que indica que es un documento soporte Documento Soporte y se excluye la generación de los elementos “CamposExtr”CamposExtr.
    • En la función M486DETDOC() cuando es documento soporte Documento Soporte se asignan los elementos “descripcion2”, “descripcion3” y “descripcionTecnica”descripcion2”, “descripcion3” y “descripcionTecnica.
    • Dentro del elemento “descripcion3” descripcion3se asigna la fecha Fecha de compra Compra y la forma Forma de transmisión Transmisión (1 = Por Operación, 2 = Acumulado Semanal) los valores separados por un punto y coma.


MATA486

    • En la función MATA486() se indica el tipo Tipo de documento Documento (nTDTras = 6) cuando en el grupo de preguntas MATA486 se selecciona el tipo de factura “Docto. Soporte” Tipo de FacturaDocto. Soporte
    • En la función M486VLDDOC() cuando es documento soporte Documento Soporte se asignan los filtros F1_ESPECIE = “NF” NFy F1_SOPORT=“S” Sal query de la tabla SF1 para informar los documentos que serán procesados. También se validan los datos del cliente Cliente relacionado al proveedor Proveedor (A2_CLIENTE Y y A2_LOJCLI).
    • En la función M486GETINF() cuando es documento soporte Documento Soporte se asignan los filtros F1_ESPECIE = “NF” NFy F1_SOPORT=“S” Sal query de la tabla SF1 para obtener los documentos que han sido transmitidos.
    • En la función M486VisNFE() cuando es documento soporte Documento Soporte se activa la variable lógica lDocSp y se inicializa la variable nTipo = 10 para visualizar de forma correcta la factura.
    • En la función M486BRWSFX() se inicializan las variables necesarias para llenar el browse principal dependiendo del tipo de documento. Se informa el tipo de documento “NCC” Tipo de DocumentoNCCpara trabajar sobre la tabla SF1.
    • En la función M486SENDPT() cuando es documento soporte Documento Soporte se el array aOpcDoc con los elementos relacionados a la factura (Invoice) que serán procesados en la función M486XMLHKA().
    • Se crea la función M486ClieDS(), que obtiene los datos del cliente Cliente relacionado al proveedor Proveedor (A2_CLIENTE Y A2_LOJCLI).

...

    • Se actualiza a versión 4.0 del servicio web del proveedor tecnológico.


Totvs custom tabs box
tabsPre-Condiciones,Pasoscondiciones, Procedimiento, Regla de rechazo DSAJ05b
idsPre-Condiciones,Pasospaso1,paso2,paso3
Totvs custom tabs box items
defaultyes
referenciaPre-Condicionespaso1
  1. Realizar un respaldo del repositorio (RPO).
  2. Aplicar el parche correspondiente al issue DMINA-14293.
  3. Validar que las rutinas actualizadas en el repositorio, coincidan con las descritas en el encabezado del presente Documento Técnico, así como la fechalas fechas.
  4. Contar con la configuración mencionada en el Documento Técnico de la sección 05. ASUNTOS RELACIONADOS.
  5. Modificar el diccionario de datos como se indica en la sección sección 04. INFORMACIÓN ADICCIONAL.
  6. Los proveedores no obligados a facturar, se registran como clientes con toda la información de identificación, dirección, responsabilidades, etc..
    1. Crear un Cliente (MATA030) con los datos del Proveedor y asignar los tributos de la DIAN. Esto es necesario pera crear la factura de venta a nombre del proveedor. Por legado, el sistema requiere tener un registro en el catalogo clientes para que se pueda facturar.
    2. Crear un  Proveedor (MATA020) y relacionarlo al Crear un  Proveedor(MATA020) y relacionarlo al Cliente mediante los campos Cod. Cliente(A2_CLIENTE) y Tda. Cliente(A2_LOJCLI). Esto es necesario para el registro de la factura de entrada. Por legado, el sistema requiere tener un registro en el catalogo de proveedores para que se pueda ingresar la factura de entrada.
  7. Dentro del configurador en la opción "Diccionarios / tablas genéricas", en la tabla genérica "00 - 01 - Series de Facturas"  agregar , agregar la serie "DCS" y el número inicial para el Documento Soporte.
  8. Dentro de Control de Formularios (MATA992), agregar la serie "DCS" con especie "1=FCT / NF" y en la Serie 2 agregar el prefijo MXDS (puede ser cualquier otro prefijo siempre y cuando cuente con 4 caracteres), también asignar el número inicial y final y los campos que son obligatorios.

  9. Configurar los siguientes parámetros (SX6):

    ParámetroContenidoDescripción
    MV_CFDIAMB  2Indica el ambiente de trabajo de certificación
    defactura
    de factura electrónica: 1=Producción, 2=Homologación.
    MV_PROVFE    DFACTURAIdentifica el Fact. Electrónico/Prov. Tecnológico servicios de certificación de factura electrónica. Indicar alguno de estos: TSS o DFACTURA
    MV_TIPOFE     1Indica el modelo de transmisión electrónica, 0 o vacío = Val. Posterior y 1 = Val. Previa.
    MV_TKN_EMP cf5a933c22080afd84ca4e699983e3952c811dd9Token Empresa - The Factory HKA.
    MV_TKN_PAS 4219be96602655094acb0fe281ab1bf7e4ad9c46Token Password - The Factory HKA.
    MV_WSRTSS    http://demoemision21v4.thefactoryhka.com.co/ws/v1.0/Service.svc?wsdlURL del servicio web.
    MV_CFDDOCSGetSrvProfString('startpath','')+'\cfd\facturas\'                                   Directorio donde se grabaran las facturas electrónicas.      


    Realizar las siguientes modificaciones al archivo de configuración FatecolFATECOL.iniINI. Las líneas en color azul se agregan, las líneas en color verde se reemplazan.

  10. Nota

    //FATECOL.INI -- NFE Colombia v2 - Resolucion 0019 / FEB. 2016
    [XXX POSICIONAMENTOS]
    (PRE) SA2->(DbSetOrder(1))
    (PRE) _aTotal[116] := If(SF1->(FieldPos("F1_SOPORT")) > 0 ,If(SF1->F1_SOPORT =='S'.AND. Alltrim(SF1->F1_TIPOPE) $'10|11', .T.,.F. ) , .F.)
    (PRE) If(_aTotal[116] ,SA2->(MSSeek(xFilial("SA2")+SF1->F1_FORNECE+SF1->F1_LOJA)) , .T.)
    (PRE) If(_aTotal[116] ,SA1->(MSSeek(xFilial("SA1")+SA2->A2_CLIENTE+SA2->A2_LOJCLI)) , .T.)
    (PRE) If(AllTrim(SF1->F1_ESPECIE)=="NCC",SA2->(MSSeek(xFilial("SA2")+SF1->F1_FORNECE+SF1->F1_LOJA)) , .T.)
    (PRE) If(AllTrim(SF1->F1_ESPECIE)<>"NCC" .AND. !_aTotal[116] ,SA1->(MSSeek(xFilial("SA1")+SF1->F1_FORNECE+SF1->F1_LOJA)) , .T.)
    (PRE) (SE4->(MSSeek(xFilial("SE4")+SF1->F1_COND)) , .T.)
    (PRE) IF( _aTotal[116], AI0->(MSSeek(xFilial("AI0")+SA2->(A2_CLIENTE+A2_LOJCLI))) , AI0->(MSSeek(xFilial("AI0")+SF1->(F1_FORNECE+F1_LOJA))) )



    [XXX INICIALIZACION]
    (PRE) SD1->(DbSetOrder(1))
    (PRE) SB1->(DbSetOrder(1))
    (PRE) SYA->(DbSetOrder(1))
    (PRE) SC6->(DbSetOrder(1))
    (PRE) SE4->(DbSetOrder(1))
    (PRE) CTO->(DbSetOrder(1))
    (PRE) SAH->(DbSetOrder(1))
    (PRE) SE1->(DbSetOrder(2))

    (PRE) _aTotal[033] := ALLTRIM (SF1->F1_ESPECIE)
    (PRE) _aTotal[075] := Alltrim(SM0->M0_NOMECOM)
    (PRE) _aTotal[092] := IIF(_aTotal[116], Posicione("SA1",1,xFilial("SA1")+SA2->A2_CLIENTE+SA2->A2_LOJCLI,"A1_EST") ,Posicione("SA1",1,xFilial("SA1")+SF1->F1_FORNECE+SF1->F1_LOJA,"A1_EST"))
    (PRE) _aTotal[093] := ""
    (PRE) _aTotal[094] := ""
    (PRE) _aTotal[095] := DtoS(SF1->F1_EMISSAO)
    (PRE) _aTotal[095] := Left(_aTotal[095],4) + "-" + Substr(_aTotal[095],5,2)+ "-" + Right(_aTotal[095],2)
    (PRE) _aTotal[096] := SF1->F1_HORA
    (PRE) _aTotal[097] := fGetTaxas(SF1->F1_DOC, SF1->F1_SERIE, SF1->F1_FORNECE, SF1->F1_LOJA, If(_aTotal[116], "NCC",SF1->F1_ESPECIE))
    (PRE) _aTotal[098] := ALLTRIM( GETNEWPAR( "MV_ID_PROV" , "" ) )
    (PRE) _aTotal[099] := ALLTRIM( GETNEWPAR( "MV_ID_SOFT" , "" ) )
    (PRE) _aTotal[100] := ALLTRIM( GETNEWPAR( "MV_CODESEC" , "" ) )
    (PRE) _aTotal[101] := {"SD1",""}
    (PRE) _aTotal[102] := IIF( _aTotal[033] == "NF" , "1" , IIF( _aTotal[033] == "NCC" , "2" , IIF( _aTotal[033] == "NDC" , "3" , IIF( _aTotal[033] == "NDI" , "4" , IIF( _aTotal[033] == "NCI" , "5" , "" ) ) ) ) )
    (PRE) _aTotal[103] := ""
    (PRE) _aTotal[104] := PADR( Alltrim(SM0->M0_CGC) , 10 , "0" )
    (PRE) _aTotal[105] := IIF( _aTotal[033] == "NF" , "f" , IIF( _aTotal[033] == "NCC"  .or. _aTotal[033] == "NCI" , "c" , IIF( _aTotal[033] == "NDC" .or. _aTotal[033] == "NDI" , "d" , "f" ) ) )
    (PRE) _aTotal[106] := M486XHEX(PADR( ALLTRIM( substr( SF1->F1_DOC , 4 , Len(SF1->F1_DOC) - 3 ) ) , 10 , "0" ),10)
    (PRE) _aTotal[107] := fGetRef(SF1->F1_DOC, SF1->F1_SERIE, SF1->F1_FORNECE, SF1->F1_LOJA, SF1->F1_ESPECIE)
    (PRE) _aTotal[108] := ""
    (PRE) _aTotal[109] := Posicione("CTO",1,xFilial("CTO")+Strzero(SF1->F1_MOEDA,2),"CTO_MOESAT")
    (PRE) _aTotal[110] := {"SFP",""}
    (PRE) _aTotal[111] := ""
    (PRE) _aTotal[112] := ""
    (PRE) _aTotal[113] := ""
    (PRE) _aTotal[114] := "FP_FILUSO='" + cFilAnt + "' AND FP_SERIE='" + SF1->F1_SERIE + "' AND FP_ESPECIE= " +  If(_aTotal[116], "'1'","'2'") + " AND FP_NUMINI <='" + SF1->F1_DOC + "' AND FP_NUMFIM >='" + SF1->F1_DOC + "' AND FP_ATIVO ='1'"
    (PRE) _aTotal[115] := "SFP->FP_FILUSO=cFilAnt .AND. SFP->FP_SERIE=SF1->F1_SERIE .AND. SFP->FP_ESPECIE=" +  If(_aTotal[116], "'1'","'2'") + ".AND. SFP->FP_NUMINI<=SF1->F1_DOC .AND. FP_NUMFIM >=SF1->F1_DOC .AND. SFP->FP_ATIVO = '1'","FP_ATIVO"

    (PREREG) FsQuery(_aTotal[101],1,"D1_DOC='" + SF1->F1_DOC + "' AND D1_SERIE='" + SF1->F1_SERIE + "' AND D1_FORNECE='" + SF1->F1_FORNECE + "' AND D1_LOJA='" + SF1->F1_LOJA + "'","SD1->D1_DOC=SF1->F1_DOC .AND. SD1->D1_SERIE=SF1->F1_SERIE .AND. SD1->D1_FORNECE=SF1->F1_FORNECE .AND. SD1->D1_LOJA=SF1->F1_LOJA","D1_ITEM") .And. .T.
    (PREREG) FsQuery(_aTotal[110],1,_aTotal[114],_aTotal[115]) .And. .T.

    [SFP CONTROL FOMULARIOS]
    (PRE) _aTotal[103] := Dtos( SFP->FP_DTRESOL )
    (PRE) _aTotal[103] := Left(_aTotal[103],4) + "-" + Substr(_aTotal[103],5,2)+ "-" + Right(_aTotal[103],2)
    (PRE) _aTotal[111] := Alltrim( SFP->FP_NUMINI )
    (PRE) _aTotal[112] := Alltrim( SFP->FP_NUMFIM )
    (PRE) _aTotal[113] := Alltrim( SFP->FP_CAI )

    [SD1 GENERANDO_XML]
    (PRE) If(AllTrim(SF1->F1_ESPECIE)=="NCC",SA2->(MSSeek(xFilial("SA2")+SF1->F1_FORNECE+SF1->F1_LOJA)) , .T.)
    (PRE) If(AllTrim(SF1->F1_ESPECIE)=="NCC",SYA->(MsSeek(xFilial("SYA")+SA2->A2_PAIS)) , .T.)
    (PRE) If(AllTrim(SF1->F1_ESPECIE)=="NCC",CTO->(MsSeek(xFilial("CTO")+Strzero(SF1->F1_MOEDA,2))) , .T.)
    (PRE) If(AllTrim(SF1->F1_ESPECIE)<>"NCC",If(_aTotal[116], SA1->(MSSeek(xFilial("SA1")+SA2->A2_CLIENTE+SA2->A2_LOJCLI)),SA1->(MSSeek(xFilial("SA1")+SF1->F1_FORNECE+SF1->F1_LOJA))) , .T.)
    (PRE) If(AllTrim(SF1->F1_ESPECIE)<>"NCC",SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS)) , .T.)
    (PRE) If(AllTrim(SF1->F1_ESPECIE)<>"NCC",CTO->(MsSeek(xFilial("CTO")+Strzero(SF1->F1_MOEDA,2))) , .T.)

    [XXX CABECERA]
    Linha1     C 060 0 Chr(239) + Chr(187) + Chr(191) + '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'

    [XXX FACTURA]
    (PRE) IIf(AllTrim(SF1->F1_ESPECIE)=="NCC",SYA->(MsSeek(xFilial("SYA")+SA2->A2_PAIS)) , .T.)
    (PRE) (SE4->(MSSeek(xFilial("SE4")+SF1->F1_COND)) , .T.)

    (PRE) _aTotal[001] := IIF(_aTotal[116],'<fe:Invoice ','<fe:CreditNote ')
    (PRE) _aTotal[001] += 'xmlns:fe="http://www.dian.gov.co/contratos/facturaelectronica/v1" '
    (PRE) _aTotal[001] += 'xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" '
    (PRE) _aTotal[001] += 'xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" '
    (PRE) _aTotal[001] += 'xmlns:clm54217="urn:un:unece:uncefact:codelist:specification:54217:2001" '
    (PRE) _aTotal[001] += 'xmlns:clm66411="urn:un:unece:uncefact:codelist:specification:66411:2001" '
    (PRE) _aTotal[001] += 'xmlns:clmIANAMIMEMediaType="urn:un:unece:uncefact:codelist:specification:IANAMIMEMediaType:2003" '
    (PRE) _aTotal[001] += 'xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" '
    (PRE) _aTotal[001] += 'xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" '
    (PRE) _aTotal[001] += 'xmlns:sts="http://www.dian.gov.co/contratos/facturaelectronica/v1/Structures" '
    (PRE) _aTotal[001] += 'xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2" '
    (PRE) _aTotal[001] += 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '
    (PRE) _aTotal[001] += 'xsi:schemaLocation="http://www.dian.gov.co/contratos/facturaelectronica/v1 ../xsd/DIAN_UBL.xsd '
    (PRE) _aTotal[001] += 'urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2 ../../ubl2/common/UnqualifiedDataTypeSchemaModule-2.0.xsd '
    (PRE) _aTotal[001] += 'urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2 ../../ubl2/common/UBL-QualifiedDatatypes-2.0.xsd" '
    (PRE) _aTotal[001] += '>' + ( chr(13)+chr(10) )

    (PRE) _aTotal[001] += ' <ext:UBLExtensions>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '     <ext:UBLExtension>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         <ext:ExtensionContent>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '             <sts:DianExtensions>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                 <sts:InvoiceControl>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                     <sts:InvoiceAuthorization>'+ _aTotal[113] +'</sts:InvoiceAuthorization>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                     <sts:AuthorizationPeriod>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                         <cbc:StartDate>'+ _aTotal[103] +'</cbc:StartDate>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                         <cbc:EndDate>'+ _aTotal[103] +'</cbc:EndDate>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                     </sts:AuthorizationPeriod>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                     <sts:AuthorizedInvoices>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                         <sts:Prefix>'+ SF1->F1_SERIE2 +'</sts:Prefix>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                         <sts:From>'+ _aTotal[111] +'</sts:From>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                         <sts:To>'+ _aTotal[112] +'</sts:To>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                     </sts:AuthorizedInvoices>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                 </sts:InvoiceControl>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                 <sts:InvoiceSource>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                     <cbc:IdentificationCode listAgencyID="6" listAgencyName="United Nations Economic Commission for Europe" listSchemeURI="urn:oasis:names:specification:ubl:codelist:gc:CountryIdentificationCode-2.0">CO</cbc:IdentificationCode>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                 </sts:InvoiceSource>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                 <sts:SoftwareProvider>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                     <sts:ProviderID schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)" schemeURI="http://www.unece.org/trade/untdid/d08a/tred/tred3055.htm" schemeName="NIT, RUT" schemeDataURI="www.dian.gov.co/contenidos/servicios/rut_preguntasfrecuentes.html">'+ _aTotal[098] +'</sts:ProviderID>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                     <sts:SoftwareID schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)" schemeURI="http://www.unece.org/trade/untdid/d08a/tred/tred3055.htm" schemeName="Código de Activación" schemeDataURI="http://www.dian.gov.co/micrositios/fac_electronica/documentos/Guia_del_usuario_Habilitacion_Adquirente.pdf">'+ _aTotal[099] +'</sts:SoftwareID>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                 </sts:SoftwareProvider>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                 <sts:SoftwareSecurityCode schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)" schemeURI="http://www.unece.org/trade/untdid/d08a/tred/tred3055.htm" schemeName="Código de Seguridad del Software" schemeDataURI="http://www.dian.gov.co/micrositios/fac_electronica/documentos/Anexo_Tecnico_003_Mecanismos_Sistema_Tecnico_de_Control.pdf">'+ _aTotal[100] +'</sts:SoftwareSecurityCode>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '             </sts:DianExtensions>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         </ext:ExtensionContent>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '     </ext:UBLExtension>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '     <ext:UBLExtension>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         <ext:ExtensionContent>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         </ext:ExtensionContent>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '     </ext:UBLExtension>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += ' </ext:UBLExtensions>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += ' <cbc:UBLVersionID>UBL 2.0</cbc:UBLVersionID>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += ' <cbc:ProfileID>DIAN 1.0</cbc:ProfileID>' + ( chr(13)+chr(10) )
    // Manual con serie
    //(PRE) _aTotal[001] += '   <cbc:ID>'+ SF1->F1_SERIE2 + Alltrim( Str( Val( Substr( SF1->F1_DOC , 4 , 10) ) ) ) +'</cbc:ID>' + ( chr(13)+chr(10) )
    // Manual sin serie
    (PRE) _aTotal[001] += ' <cbc:ID>'+ Alltrim( Str( Val( Substr( SF1->F1_DOC , 4 , 10) ) ) ) +'</cbc:ID>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += ' <cbc:IssueDate>'+ _aTotal[095] +'</cbc:IssueDate>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += ' <cbc:IssueTime>'+ _aTotal[096] +'</cbc:IssueTime>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += ' <cbc:Note><![CDATA['+ Alltrim(SF1->F1_MOTIVO) + ']]></cbc:Note>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += ' <cbc:InvoiceTypeCode listAgencyID="195" listAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)" listSchemeURI="http://www.dian.gov.co/contratos/facturaelectronica/v1/InvoiceType">91</cbc:InvoiceTypeCode>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += ' <cbc:DocumentCurrencyCode>'+ Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF1->F1_MOEDA,2),"CTO_MOESAT") ) +'</cbc:DocumentCurrencyCode>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += ' <cbc:CustomizationID>'+ Alltrim(SF1->F1_TIPOPE) +'</cbc:CustomizationID>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += ' <cac:DiscrepancyResponse>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '     <cbc:ReferenceID/>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '     <cbc:ResponseCode>' + Alltrim(SF1->F1_TIPREF) + '</cbc:ResponseCode>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += ' </cac:DiscrepancyResponse>' + ( chr(13)+chr(10) )

    // BillingReference
    (PRE) _aTotal[001] += _aTotal[107]
    (PRE) _aTotal[001] := ENCODEUTF8(_aTotal[001])
    (PREREG) _aTotal[001]

    [XXX EMISOR]
    (PRE) _aTotal[001] := ' <fe:AccountingSupplierParty>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '     <cbc:AdditionalAccountID>'+ "1" +'</cbc:AdditionalAccountID>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '     <fe:Party>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         <cac:PartyIdentification>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '             <cbc:ID schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)" schemeID="31">'+ Alltrim(SM0->M0_CGC) +'</cbc:ID>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         </cac:PartyIdentification>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         <cac:PartyName>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '             <cbc:Name><![CDATA['+ _aTotal[075] +']]></cbc:Name>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         </cac:PartyName>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         <fe:PhysicalLocation>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '             <fe:Address>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                 <cbc:Department><![CDATA['+ AllTrim(SM0->M0_BAIRENT) +']]></cbc:Department>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                 <cbc:CitySubdivisionName><![CDATA['+ AllTrim(SM0->M0_CODMUN) +']]></cbc:CitySubdivisionName>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                 <cbc:CityName><![CDATA['+ Alltrim(SM0->M0_CIDENT) +']]></cbc:CityName>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                 <cac:AddressLine>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                     <cbc:Line><![CDATA['+ Alltrim(SM0->M0_ENDENT) + " " + Alltrim(SM0->M0_COMPENT) +']]></cbc:Line>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                 </cac:AddressLine>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                 <cac:Country>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                     <cbc:IdentificationCode>'+ "CO" +'</cbc:IdentificationCode>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                 </cac:Country>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '             </fe:Address>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         </fe:PhysicalLocation>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         <fe:PartyTaxScheme>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '             <cbc:TaxLevelCode>'+ AllTrim(SM0->M0_DSCCNA) +'</cbc:TaxLevelCode>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '             <cac:TaxScheme/>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         </fe:PartyTaxScheme>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         <fe:PartyLegalEntity>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '             <cbc:RegistrationName><![CDATA['+ _aTotal[075] + ']]></cbc:RegistrationName>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         </fe:PartyLegalEntity>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '     </fe:Party>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += ' </fe:AccountingSupplierParty>'
    (PRE) _aTotal[001] := ENCODEUTF8(_aTotal[001])
    (PREREG) _aTotal[001]

    [XXX RECEPTOR]
    (PRE) AllTrim(SF1->F1_ESPECIE) <> "NCC"
    (PRE) If(_aTotal[116], SA1->(MSSeek(xFilial("SA1")+SA2->A2_CLIENTE+SA2->A2_LOJCLI)) ,SA1->(MSSeek(xFilial("SA1")+SF1->F1_FORNECE+SF1->F1_LOJA)))
    (PRE) SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS))

    (PRE) _aTotal[001] := '<fe:AccountingCustomerParty>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '     <cbc:AdditionalAccountID>'+ IIF( AllTrim(SA1->A1_PESSOA) == "F" , "2" , "1" ) +'</cbc:AdditionalAccountID>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '     <fe:Party>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         <fe:PartyTaxScheme>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         <cbc:RegistrationName><![CDATA['+ Alltrim(SA1->A1_NOME) +']]></cbc:RegistrationName>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         <cbc:CompanyID schemeID="' + Right( Alltrim(SA1->A1_CGC), 1 ) + '" schemeName="' + AllTrim(SA1->A1_TIPDOC)+ '" schemeAgencyName="CO, DIAN (Dirección de Impuestos y Aduanas Nacionales)" schemeAgencyID="195">'+ IIF(AllTrim(SA1->A1_TIPDOC) == "31",Left(Alltrim(SA1->A1_CGC),Len(Alltrim(SA1->A1_CGC))-1),AllTrim(SA1->A1_PFISICA))+'</cbc:CompanyID>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         <cbc:TaxLevelCode listName="' + Alltrim(AI0->AI0_TPREG) + '">' + AllTrim(M486RESOBL(SA1->A1_COD,SA1->A1_LOJA,"R")) + '</cbc:TaxLevelCode>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         <cac:RegistrationAddress>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '             <cbc:ID>' + Alltrim(SA1->A1_COD_MUN) + '</cbc:ID>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '             <cbc:CityName><![CDATA[' + Alltrim(POSICIONE("CC2",3,xFilial("CC2") + SA1->A1_COD_MUN,"CC2_MUN")) + ']]></cbc:CityName>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '             <cbc:PostalZone>' + Alltrim(SA1->A1_CEP) + '</cbc:PostalZone>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '             <cbc:CountrySubentity><![CDATA[' + Alltrim(M486VALSX5('12' + SA1->A1_EST)) + ']]></cbc:CountrySubentity>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '             <cbc:CountrySubentityCode>' + Alltrim(SA1->A1_EST) + '</cbc:CountrySubentityCode>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '             <cac:AddressLine>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                 <cbc:Line><![CDATA[' + Alltrim(SA1->A1_END) + ']]></cbc:Line>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '             </cac:AddressLine>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '             <cac:Country>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                 <cbc:IdentificationCode>'+Posicione("SYA",1,xFilial("SYA")+SA1->A1_PAIS,"YA_CCEDIAN")+'</cbc:IdentificationCode>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '             </cac:Country>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         </cac:RegistrationAddress>'  + ( chr(13)+chr(10) )  
    (PRE) _aTotal[001] += '         </fe:PartyTaxScheme>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         <cac:PartyIdentification>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '             <cbc:CompanyID schemeID="' + Right( Alltrim(SA1->A1_CGC), 1 ) + '" schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)" schemeName="' + AllTrim(SA1->A1_TIPDOC)+ '">'+ IIF(AllTrim(SA1->A1_TIPDOC) == "31",Left(Alltrim(SA1->A1_CGC),Len(Alltrim(SA1->A1_CGC))-1),AllTrim(SA1->A1_PFISICA))+'</cbc:CompanyID>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         </cac:PartyIdentification>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , '          <cac:PartyName>' + ( chr(13)+chr(10) ) )
    (PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , '              <cbc:Name><![CDATA['+ Alltrim(SA1->A1_NOME) +']]></cbc:Name>' + ( chr(13)+chr(10) ) )
    (PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , '          </cac:PartyName>' + ( chr(13)+chr(10) ) )
    (PRE) _aTotal[001] += '         <fe:PhysicalLocation>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '             <fe:Address>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                 <cbc:Department><![CDATA['+ AllTrim(SA1->A1_BAIRRO) +']]></cbc:Department>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                 <cbc:CitySubdivisionName><![CDATA['+ AllTrim(SA1->A1_MUN) +']]></cbc:CitySubdivisionName>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                 <cbc:CityName><![CDATA['+ Alltrim(Posicione("SX5",1,xFilial("SX5")+"12"+SA1->A1_EST,"X5_DESCRI")) +']]></cbc:CityName>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                 <cac:AddressLine>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                     <cbc:Line><![CDATA['+ AllTrim(SA1->A1_END) +']]></cbc:Line>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                 </cac:AddressLine>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                 <cac:Country>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                     <cbc:IdentificationCode>'+Posicione("SYA",1,xFilial("SYA")+SA1->A1_PAIS,"YA_CCEDIAN")+'</cbc:IdentificationCode>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                 </cac:Country>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '             </fe:Address>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         </fe:PhysicalLocation>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         <cac:Contact>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '             <cbc:ElectronicMail>' + AllTrim(SA1->A1_EMAIL) + '</cbc:ElectronicMail>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '             <cbc:Telephone>' + AllTrim(SA1->A1_TEL) + '</cbc:Telephone>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         </cac:Contact>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , '          <fe:PartyLegalEntity>' + ( chr(13)+chr(10) ) )
    (PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , '              <cbc:RegistrationName><![CDATA['+ Alltrim(SA1->A1_NOME) +']]></cbc:RegistrationName>' + ( chr(13)+chr(10) ) )
    (PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , "" , '          </fe:PartyLegalEntity>' + ( chr(13)+chr(10) ) )
    (PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , '           <fe:Person>'  + ( chr(13)+chr(10) ) , "" )
    (PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , '               <cbc:FirstName><![CDATA[' + Alltrim(SA1->A1_NOMEPRI) +']]></cbc:FirstName>' + ( chr(13)+chr(10) ) , "" )
    (PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , '               <cbc:MiddleName><![CDATA[' + Alltrim(SA1->A1_NOMEPES) +']]></cbc:MiddleName>' + ( chr(13)+chr(10) ) , "" )
    (PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , '               <cbc:FamilyName><![CDATA[' + Alltrim(SA1->A1_NOMEPAT) + ' ' + Alltrim(SA1->A1_NOMEMAT) +']]></cbc:FamilyName>' + ( chr(13)+chr(10) ) , "" )
    (PRE) _aTotal[001] += IIF( AllTrim(SA1->A1_PESSOA) == "F" , '           </fe:Person>' + ( chr(13)+chr(10) ) , "" )
    (PRE) _aTotal[001] += '     </fe:Party>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += ' </fe:AccountingCustomerParty>' + ( chr(13)+chr(10) )

    (PRE) _aTotal[001] += ' <cac:PaymentTerms>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '     <cbc:Amount currencyID="' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF1->F1_MOEDA,2),"CTO_MOESAT") ) + '">' + Alltrim(Str(SF1->F1_VALBRUT,14,2)) + '</cbc:Amount>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '     <cac:SettlementPeriod>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         <cbc:StartDate>' + Transform( DtoS( Posicione("SE1",2,xFilial("SE1")+SF1->(F1_FORNECE+F1_LOJA+F1_SERIE+F1_DOC),"E1_EMISSAO") ) , "@R 9999-99-99") + '</cbc:StartDate>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '         <cbc:EndDate>' + Transform( DtoS( Posicione("SE1",2,xFilial("SE1")+SF1->(F1_FORNECE+F1_LOJA+F1_SERIE+F1_DOC),"E1_VENCTO") ) , "@R 9999-99-99") + '</cbc:EndDate>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '     </cac:SettlementPeriod>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += ' </cac:PaymentTerms>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , '    <cac:PaymentExchangeRate>'  + ( chr(13)+chr(10) ) , "" )
    (PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , '        <cbc:SourceCurrencyCode>' +  Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF1->F1_MOEDA,2),"CTO_MOESAT") ) + '</cbc:SourceCurrencyCode>' + ( chr(13)+chr(10) ) , "" )
    (PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , '        <cbc:SourceCurrencyBaseRate>1.00</cbc:SourceCurrencyBaseRate>' + ( chr(13)+chr(10) ) , "" )
    (PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , '        <cbc:TargetCurrencyCode>' + "COP" + '</cbc:TargetCurrencyCode>' + ( chr(13)+chr(10) ) , "" )
    (PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , '        <cbc:TargetCurrencyBaseRate>1.00</cbc:TargetCurrencyBaseRate>' + ( chr(13)+chr(10) ) , "" )
    (PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , '        <cbc:CalculationRate>' +  Alltrim(Str(SF1->F1_TXMOEDA,11,2)) + '</cbc:CalculationRate>' + ( chr(13)+chr(10) ) , "" )
    (PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , '        <cbc:Date>' + _aTotal[095] + '</cbc:Date>' + ( chr(13)+chr(10) ) , "" )
    (PRE) _aTotal[001] += IIf( _aTotal[109] <> "COP" , '    </cac:PaymentExchangeRate>'  + ( chr(13)+chr(10) ) , "" )
    (PRE) _aTotal[001] := ENCODEUTF8(_aTotal[001])
    (PREREG) _aTotal[001]

    [XXX IMPUESTOS]
    (PRE) _aTotal[001] := _aTotal[097][1]
    (PRE) _aTotal[001] := ENCODEUTF8(_aTotal[001])
    (PREREG) _aTotal[001]

    [XXX TOTALES]
    (PRE) _aTotal[001] := _aTotal[097][2]
    (PRE) _aTotal[001] := ENCODEUTF8(_aTotal[001])
    (PREREG) _aTotal[001]

    [SD1 INVOICE]
    (PRE) DbGoTop()
    (PREREG) (SB1->(DbSeek(xFilial("SB1") + SD1->D1_COD)),.T.)
    (PREREG) (SAH->(DbSeek(xFilial("SAH") + SB1->B1_UM)),.T.)

    (PREREG) _aTotal[108] := fGetTaxDet(SD1->D1_DOC,SD1->D1_SERIE,SD1->D1_FORNECE,SD1->D1_LOJA,SD1->D1_TES,If(_aTotal[116], "NCC",AllTrim(SF1->F1_ESPECIE)))
    (PREREG) (_aTotal[001] := IIF( _aTotal[116],'   <fe:InvoiceLine>'  + ( chr(13)+chr(10) ),'  <cac:CreditNoteLine>'  + ( chr(13)+chr(10) )),.T.)
    (PREREG) (_aTotal[001] += '     <cbc:ID>' + Alltrim(Str(Val(SD1->D1_ITEM))) + '</cbc:ID>'  + ( chr(13)+chr(10) ),.T.)
    (PREREG) (_aTotal[001] += IIF(_aTotal[116],'        <cbc:InvoicedQuantity unitCode="' + Alltrim(_aTotal[108][3]) + '">'+ Alltrim(Str(SD1->D1_QUANT, 14, 2)) +'</cbc:InvoicedQuantity>'  + ( chr(13)+chr(10) ),'     <cbc:CreditedQuantity unitCode="' + Alltrim(_aTotal[108][3]) + '">'+ Alltrim(Str(SD1->D1_QUANT)) +'</cbc:CreditedQuantity>'  + ( chr(13)+chr(10) )),.T.)
    (PREREG) (_aTotal[001] += '     <cbc:LineExtensionAmount currencyID=' + '"' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF1->F1_MOEDA,2),"CTO_MOESAT") ) + '"' + '>' + Alltrim(Str(SD1->D1_TOTAL,14,2)) +'</cbc:LineExtensionAmount>' + ( chr(13)+chr(10) ),.T.)
    (PREREG) (_aTotal[001] += _aTotal[108][1],.T.)
    (PREREG) (_aTotal[001] += IIF(SD1->D1_VALDESC > 0, '        <cac:AllowanceCharge>' + chr(13)+chr(10), ""),.T.)
    (PREREG) (_aTotal[001] += IIF(SD1->D1_VALDESC > 0, '            <cbc:ChargeIndicator>false</cbc:ChargeIndicator>' + chr(13)+chr(10), ""),.T.)
    (PREREG) (_aTotal[001] += IIF(SD1->D1_VALDESC > 0, '                <cbc:AllowanceChargeReason><![CDATA[Aplicación de descuento]]></cbc:AllowanceChargeReason>' + chr(13)+chr(10), ""),.T.)
    (PREREG) (_aTotal[001] += IIF(SD1->D1_VALDESC > 0, '                <cbc:MultiplierFactorNumeric>' + Alltrim(Str(SD1->D1_DESC,5,2)) + '</cbc:MultiplierFactorNumeric>' + chr(13)+chr(10), ""),.T.)
    (PREREG) (_aTotal[001] += IIF(SD1->D1_VALDESC > 0, '            <cbc:Amount currencyID="' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF1->F1_MOEDA,2),"CTO_MOESAT") ) + '">' + Alltrim(Str(SD1->D1_VALDESC,14,2)) + '</cbc:Amount>' + chr(13)+chr(10), ""),.T.)
    (PREREG) (_aTotal[001] += IIF(SD1->D1_VALDESC > 0, '        </cac:AllowanceCharge>' + chr(13)+chr(10), ""),.T.)
    (PREREG) (_aTotal[001] += _aTotal[108][2],.T.)
    (PREREG) (_aTotal[001] += IIF(_aTotal[116] ,'       <fe:Item>', '       <cac:Item>')  + ( chr(13)+chr(10) ),.T.)
    (PREREG) (_aTotal[001] += '         <cbc:Description><![CDATA[' + Alltrim(SB1->B1_DESC) +']]></cbc:Description>' + ( chr(13)+chr(10) ),.T.)
    (PREREG) (_aTotal[001] += '         <cbc:PackSizeNumeric>'+ IIf(!Empty(SB1->B1_CONV),Alltrim(STR(SB1->B1_CONV)),"1") +'</cbc:PackSizeNumeric>'  + ( chr(13)+chr(10) ),.T.)
    (PREREG) (_aTotal[001] += '         <cac:SellersItemIdentification>'  + ( chr(13)+chr(10) ),.T.)
    (PREREG) (_aTotal[001] += '             <cbc:ID>' + Alltrim(SD1->D1_COD) + '</cbc:ID>'  + ( chr(13)+chr(10) ),.T.)
    (PREREG) (_aTotal[001] += '         </cac:SellersItemIdentification>'  + ( chr(13)+chr(10) ),.T.)
    (PREREG) (_aTotal[001] += IIF( _aTotal[116],'       </fe:Item>', '      </cac:Item>')  + ( chr(13)+chr(10) ),.T.)
    (PREREG) (_aTotal[001] += IIF( _aTotal[116],'       <fe:Price>','       <cac:Price>')  + ( chr(13)+chr(10) ),.T.)
    (PREREG) (_aTotal[001] += '         <cbc:PriceAmount currencyID=' + '"' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF1->F1_MOEDA,2),"CTO_MOESAT") ) + '"' + '>' + Alltrim(Str(SD1->D1_VUNIT,14,2)) +'</cbc:PriceAmount>' + ( chr(13)+chr(10) ),.T.)
    (PREREG) (_aTotal[001] += '         <cbc:BaseQuantity unitCode="' + Alltrim(_aTotal[108][3]) + '">' + Alltrim(Str(SD1->D1_QUANT)) + '</cbc:BaseQuantity>'  + ( chr(13)+chr(10) ),.T.)
    (PREREG) (_aTotal[001] += IIF(_aTotal[116],'        </fe:Price>', '     </cac:Price>')  + ( chr(13)+chr(10) ),.T.)
    (PREREG) (_aTotal[001] += IIF( _aTotal[116],'   </fe:InvoiceLine>' ,'   </cac:CreditNoteLine>') ,.T.)
    (PREREG) ENCODEUTF8(_aTotal[001])

    [XXX INVOICE_FIN]
    (POS) FsQuery(_aTotal[101],2)

    [XXX FACTURA]
    (PRE) _aTotal[094] := &("Lower('face') + '_' + Lower(_aTotal[105]) + Lower(_aTotal[104]) + Lower(_aTotal[106]) + '.xml'")

    (ARQ) _aTotal[094]
    FACTURA    C 019 0 ENCODEUTF8( IIF( _aTotal[116], '</fe:Invoice>','</fe:CreditNote>'))




Totvs custom tabs box items
defaultno
referenciaPasospaso2


  1. Documento Soporte.

    • Ingresar al módulo de Compras (SIGACOM), ir al menú |Actualizaciones | Movimientos | Factura de Entrada (MATA101N)
    • En la pregunta ¿Tipo de Factura? seleccionar “Docto Soporte” Docto Soportey confirmar.
    • En la pantalla principal, en el encabezado confirmar que en título se informe que es un “DocDoc. Soporte”Soporte
      Dar clic en el botón “Incluir”Incluir.
    • Seleccionar al Proveedor que está relacionado al Cliente.
    • Seleccionar la serie Serie configurada para el Documento Soporte, automáticamente se cargará el número documento Número Documento y la serie Serie 2.
    • Agregar un producto Producto, cantidad Cantidad, valor unitario, valor total Valor Unitario, Valor Total y el TES.
    • En la pestaña “Títulos” agregar la condición de pagoTítulos” indicar la Condición de Pago.
    • Grabar la Factura.

  2. Transmisión de Documento Soporte.
     
    • Ingresar al módulo de Facturación (SIGAFAT), ir el menú |Actualizaciones | Facturación | Transmitir Factura Electrónica (MATA486)
    • Capturar los parámetros correspondientes para realizar el filtro de documentos.
      ¿Tipo de Documento? seleccionar “DoctoDocto. Soporte”Soporte.
      ¿Serie? seleccionar “DCS”DCS.
      ¿Estatus? seleccionar “0” 0para obtener todos los documentos.
      Asignar las Fechas Inicio/Fin.
    • Confirmar.
    • En la pantalla principal verificar que exista el Documento Soporte.
    • Dar clic en el botón “Transmitir”Transmitir.
    • Asignar la serie “DCS” DCSy el número Número de documento (Documento Inicial y Final).
    • Confirmar Transmisión.
    • Revisar el Log de transmisión.


  3. Archivo XML del Documento Soporte.

    Los archivos XML autorizados se crean en la carpeta configurada en el parámetro MV_CFDDOCS + "/autorizados/".

    • Revisar que el elemento "tipoDocumento" sea igual a "05" que indica que se transmitió un Documento Soporte. Ejemplo:
      <cbc:InvoiceTypeCode>05</cbc:InvoiceTypeCode>
    • Dentro del elemento FacturaDetalle (fe:Item) revisar que se haya creado un segundo subelemento de "descripcion" y que contenga el número "1" que indica que la forma de generación es "Por Operación" y la fecha de emisión del Docto Documento Soporte separados por punto y coma. Ejemplo:
       <cbc:Description>1;2022-03-24</cbc:Description>
    •  Revisar que el elemento "tipoOperacion" sea igual a "10" si el Proveedor es "Residente", si el Proveedor es "No Residente" se informará "11". Ejemplo:
      <cbc:CustomizationID>10</cbc:CustomizationID>
    • Dentro del elemento Proveedor (<cac:AccountingSupplierParty>) revisar que se haya informado el subelemento "detallesTributarios" y sus "Tributos". Ejemplo:
      <cac:TaxScheme><cbc:ID>01</cbc:ID><cbc:Name>IVA</cbc:Name></cac:TaxScheme>
    • Revisar que se informen correctamente los valores del Documento Soporte (datos del proveedorProveedor, empresa Empresa emisora, Productos, productosTotales, totales etc..)

  4. Monitor de Transmisión.

    • Ingresar al módulo de Facturación (SIGAFAT), ir el menú |Actualizaciones | Facturación | Transmitir Factura Electrónica (MATA486)
    • Capturar los parámetros correspondientes para realizar el filtro de documentos.
      ¿Tipo de Documento? seleccionar “DoctoDocto. Soporte”Soporte.
      ¿Serie? seleccionar “DCS”DCS.
      ¿Estatus? seleccionar “0” 0para obtener todos los documentos.
      Asignar las Fechas Inicio/Fin.
    • Confirmar.
    • Dar clic en el botón “Monitor”Monitor.
    • Asignar la serie “DCS” SerieDCSy el número Número de documento (Documento Inicial y Final).
    • Confirmar.
    • Revisar el estatus del Documento Soporte.

  5. Imprimir PDF.

    • Ingresar al módulo de Facturación (SIGAFAT), ir el menú |Actualizaciones | Facturación | Transmitir Factura Electrónica (MATA486)
    • Capturar los parámetros correspondientes para realizar el filtro de documentos.
      ¿Tipo de Documento? seleccionar “DoctoDocto. Soporte”Soporte.
      ¿Serie? seleccionar “DCS”DCS.
      ¿Estatus? seleccionar “0” 0para obtener todos los documentos.
      Asignar las Fechas Inicio/Fin.
    • Confirmar.
    • Dar clic en el botón “Otras Acciones”Otras Acciones.
    • Seleccionar la opción "Imprimir PDF".
    • Asignar la serie “DCS” SerieDCS, el número Número de documento (Documento Inicial y Final) y e indicar el formato Formato PDF.
    • Confirmar.
    • Revisar la información impresa en el archivo PDF del Documento Soporte.



  6. Recuperar XML.

    • Ingresar al módulo de Facturación (SIGAFAT), ir el menú |Actualizaciones | Facturación | Transmitir Factura Electrónica (MATA486)
    • Capturar los parámetros correspondientes para realizar el filtro de documentos.
      ¿Tipo de Documento? seleccionar “DoctoDocto. Soporte”Soporte.
      ¿Serie? seleccionar “DCS”DCS.
      ¿Estatus? seleccionar “0” 0para obtener todos los documentos.
      Asignar las Fechas Inicio/Fin.
    • Confirmar.
    • Dar clic en el botón “Otras Acciones”Otras Acciones.
    • Seleccionar la opción "Recuperar PDFXML"
    • Asignar la serie “DCS” SerieDCS, el número Número de documento (Documento Inicial y Final) , y la carpeta Carpeta dónde será guardado el archivo.
    • Confirmar.
    • Revisar que el archivo XML del Documento Soporte se haya almacenado en la carpeta indicada.

04. INFORMACIÓN ADICIONAL

...

Totvs custom tabs box items
defaultno
referenciapaso3

The Factory HKA Colombia SAS informa que desde el próximo 10 de noviembre de 2024 la DIAN generará rechazo al transmitir un documento soporte cuando el tipo de documento del vendedor no corresponda a un valor válido de la lista, de acuerdo con lo establecido en el anexo técnico vigente para el documento soporte en adquisiciones con sujetos no obligados a expedir factura electrónica.


Es requisito reportar la información relacionada con los documentos de no residentes de acuerdo con los códigos que se indican en la tabla 16.2.1 Documento de identificación (Tipo de identificador fiscal) del anexo técnico 1.0 de la resolución 00167 de 2021.

DSAJ25b. El contenido de este atributo no corresponde a uno de los valores posibles de la lista.

Cuando el campo <tipoOperacion> se reporte como 11 (No Residente), 

Image Added

Nota: Conforme a la Normativa vigente, debe tenerse en cuenta lo que se indica para el concepto de residente fiscal en Colombia y no residente fiscal en Colombia.

En el campo <tipoIdentificacion>, podrá indicarse alguno de los valores de la siguiente tabla.


Para cumplir con esa nueva regla deberá actualizar el catálogo TiposDocIdentidad con los siguientes datos:


Image Added



04. INFORMACIÓN ADICIONAL


Actualizaciones al diccionario.

Campos en el archivo SX3 - Campos:

Crear campo F1_SOPORT

CampoF1_SOPORT
OrdenZZ
TipoCaracter
Tamaño1
Decimal0
Formato@!
TítuloDoc. Soporte
DescripciónDocumento Soporte        
UtilizadoSi
ObligatorioNo
BrowseNo
Val. SistemaPertence("SN")                                                                                                                  
Inicializador"S"
OpcionesS=Si;N=No                  

...

Crear campo F1_SOPORT

Pertence("SN")
CampoF1_SOPORT
OrdenZZ
TipoCarácter
Tamaño1
Decimal0
Formato@!
TítuloDoc. Soporte
DescripciónDocumento Soporte        
UtilizadoSi
ObligatorioNo
BrowseNo
Val. Sistema                                                                                                     
Help

Si la factura que registra corresponde a un proveedor no obligado a facturar y éste comprobante será transmitido a la DIAN, indique Si, de lo contrario indique No.


Preguntas en el archivo SX1 – Archivo de Preguntas:

Modificar grupo MATA486

Orden

01

Pregunta

¿Tipo de Documento ?          

Tipo

N

Tamaño

1

Decimal0
Validación
Objeto

Combo

Consulta Estándar
Preselección0
Ítem 1

Factura        

Ítem 2

Nota de Debito 

Ítem 3

Nota de Credito

Ítem 4Docto Soporte  


Modificar grupo MT101N

Orden

01

Pregunta

¿Tipo de factura ?

     Inicializador"S"OpcionesS=Si;N=No          

                 

                                                                                          Help

Si la factura que registra corresponde a un proveedor no obligado a facturar y éste comprobante será transmitido a la DIAN, indique Si, de lo contrario indique No.

Preguntas en el archivo SX1 – Archivo de Preguntas:

Modificar grupo MATA486

...

Orden

...

01

...

Pregunta

...

¿Tipo de Documento ?          

...

Tipo

...

N

...

Tamaño

...

1

...

Combo

...

Factura        

...

Nota de Debito 

...

Nota de Crédito

...

Crear grupo MATA486I

...

Orden

...

01

...

Pregunta

...

¿Serie de Documento Soporte?         

...

Tipo

...

C

...

Tamaño

...

3

...

Edit

...

  

Tipo

N

Tamaño

1

Decimal0
Validación
Objeto

Combo

Consulta Estándar
Preselección0
Ítem 1

Normal         

Ítem 2

Benef.         

Ítem 3

Gastos Imp.    

Ítem 4Conoc. Transp. 
Ítem 5Doc. Soporte   


Crear grupo MATA486I

Orden

01

0203

Pregunta

¿Serie de Documento Soporte?         

¿Documento Soporte Inicial?¿Documento Soporte Final?

Tipo

C

CC

Tamaño

3

1313
Decimal000
Validación

NaoVazio() .and. MV_PAR02<=MV_PAR03
Objeto

Edit

EditEdit
Consulta EstándarSERNF

HelpSerie del documento soporte.Número inicial del documento soporte.Número final de documento soporte. 



Tablas Genéricas en el archivo SX5 – Tablas Genéricas:

Crear nuevos registros en la 00 - 01 Series de Facturas 

ClaveDescripción
DCS0000000000001


Ampliación de longitud del campo "Código" de tabla S014

Ampliar la longitud permitida en el campo "Código" de la tabla S014 - "Tipos de Obligaciones-Respon." de 4 a 7 posiciones para que al cargar el catálogo no se corten los códigos de responsabilidad existentes y permita transmitir Documentos de Soporte con dichos códigos.

Contar con la siguiente rutina actualizada, con fecha igual o posterior:

Rutina

Nombre técnico

Fecha

FISA812Definición de Catálogos.25/04/2023
FISA814

Carga de Catálogos.

25/04/2023
FISA827Registro Responsabilidades/Obligaciones DIAN y Tributos.26/04/2023


Modificación en la tabla SX3 - Campos (Pacote:012097)

Campo

AIT_CODRES

Tipo

C

Tamaño

7

Val. Sistema

Vazio() .Or. ValidF3I("S014", M->AIT_CODRES,1,7)

Para mayor información : 16671949 DMINA-19202 DT Error 109 en transmisión de Docto. de Soporte MATA486 COL

Tablas Genéricas en el archivo SX5 – Tablas Genéricas:

Crear nuevos registros en la 00 - 01 Series de Facturas 

...


Card documentos
InformacaoUtilice este box para resaltar información relevante y/o de destaque.
Titulo¡IMPORTANTE!

...