Á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:SIGACOM - Compras
Función:
Rutina
(s)
Nombre TécnicoFecha
MATA486.PRWDocumentos Electrónicos26/09/2022
M486XFUNCO.PRWFunciones genéricas para transmisión de Documentos Electrónicos26/09/2022
M486PDFCOL.PRWGeneración de Factura Electrónica en PDF
.
26/09/2022
LOCXNF.PRWNotas Fiscales
.
26/09/2022
LOCXNF2.PRW

Funciones genéricas de Documentos Fiscales

.

26/09/2022
LOCXCOL.PRWFunciones Genéricas de Notas Fiscales Colombia
.
26/09/2022
LOCXGEN.PRWComponentes de Ventanas en Notas Fiscales
.
26/09/2022
SIGACUS.PRWFunciones Genéricas para Documentos Fiscales
.
23/09/2022
LOCXFUNA.PRXFunciones Genéricas para Notas Fiscales
.
26/09/2022
M486XFUN.PRWFunciones genéricas de Facturación Electrónica
.
 26/09/2022


Archivos de Configuración

ArchivoNombre TécnicoFecha
FATECOL.INIGeneración de XML para Documentos de Entrada
FATSCOLINI
26/09/2022
FATSCOL.INIGeneración de XML para Documentos de Salida26/09/2022
País:Colombia
Ticket:
14779608
14655123
Pacote Atusx:011023
Requisito/Story/Issue (informe el requisito vinculado):DMINA-16565


02. SITUACIÓN/REQUISITO

Las notas de ajuste son documentos electrónicos o físicos según el caso, que constituyen el medio por el cual se realizan ajustes o se anula el documento soporte, por errores aritméticos o de contenido, cumpliendo las condiciones, términos, mecanismos técnicos y tecnológicos que para el efecto señale la DIAN conforme al contenido del anexo técnico previsto en el artículo 17 de la Resolución 000167 de 2021. https://www.dian.gov.co/normatividad/Normatividad/Resoluci%C3%B3n%20000167%20de%2030-12-2021.pdf   

Realizar las modificaciones necesarias para generar Notas de Ajuste de tipo Débito o Crédito referenciadas únicamente a Documentos Soporte e implementar la Transmisión Electrónica para estos documentos.


03. SOLUCIÓN

Se realizan modificaciones a los siguientes Fuentes:

LOCXNF

    • En la función Mata466n() se asigna la función LxObTpCol() para obtener el tipo de documento. Si es Nota de Crédito de Ajuste se asigna el identificador  22, si es Nota de Débito de Ajuste se asigna el identificador 23.
    • En la función LocxDlgNF() se asignan los tipos de documento 22 y 23  (NCP y NDP de Ajuste) para el llenado de los Array’s internos.
      1. El tipo de documento NCP de Ajuste = 22 se asigna dónde se encuentra informado el tipo de documento  NCP Normal = 7.
      2. El tipo de documento NDP de Ajuste = 23 se asigna dónde se encuentra informado el tipo de documento NDP Normal = 9.
      3. Con la función lxVlTitulo() se obtienen los “Títulos” de Documento Soporte, Nota de Ajuste de Crédito o  Débito para que éstos sean mostrado en el encabezado de los Documentos.
    • En la función GravaNfGeral() se actualiza la numeración de las Notas de Ajuste en el archivo de tablas SX5.
    • Dentro de la función GravaCabNF() se asigna la función lxModDocSp() para marcar con ‘S’ Slos campos F1_SOPORT (Docto Soporte) , F1_MARK (NDP de Ajuste) y F2_MARK (NCP de Ajuste) cuando se crean los documentos.
    • En la función MontaCfgNf() se asigna la función lxEstrCol() para cargar la configuración de los documentos 22 y 23  23 (NCP y NDP de Ajuste) en el array aCfg.
    • En la función CarregaBotoes() se indican los botones que serán mostrados en los documentos 22 y 23 (NCP y NDP de Ajuste).
    • En la función CarregaTeclas() se asignan los identificadores que serán utilizados en los menús de los documentos 22 y 23 (NCP y NDP de Ajuste).
    • En Función la función MontaPE() se cargan los puntos de entrada para los documentos 22 y 23 (NCP y NDP de Ajuste).
    • En la función LocxVal() se asigna el control de folios y la cargar automáticamente el automática del número de documento (dependiendo la serie seleccionada) para los documentos NCP y NDP de Ajuste para 
    • En la función LocxDelNF() se asigna la función LxVldFact() para validar el borrado de las Notas de Ajuste (NCP y NDP). No se podrán borrar los documentos previamente trasmitidos, se notificará con un mensaje.
    • En la función PcoCarregaLancto() se cargan los  los asientos para el control presupuestario (PCO) para los documentos 22 y 23 (NCP y NDP de Ajuste).


LOCXNF2

    • Dentro de la función LxN466ForF6() se asigna la función lxObtnFltr() para filtrar los "Documentos Soporte" cuando se consultan desde la NCP o NDP de Ajuste mediante la opción "Factura".
    • En la función CarregaLanc() se cargan los  asientos estándar para la NCP y NDP de Ajuste.
    • Dentro de la función fValSerDoc() se agrega la NDP de Ajuste a la validación de los Folios.

...

    • Se realizan las siguientes modificaciones a la función LxCpoCol().
      1. Para las Notas de Crédito de Ajuste se agrega el campo Tipo Ajuste (F2_TIPNOTA), al campo Serie campo Serie (F2_SERIE) se le agrega la consulta estándar “01” 01(muestra la serie y numeración relacionada a las Notas de Ajuste) y al campo Proveedor campo Proveedor (F2_CLIENTE) se le agrega la función LxVlCabCol() para validar el Proveedor vs Cliente.
      2. Para las Notas de Débito de Ajuste se agrega el campo Tipo Ajuste (F1_TIPNOTA), al campo Serie campo Serie (F1_SERIE) se le agrega la consulta estándar “01” 01(muestra la serie y numeración relacionada a las Notas de Ajuste) y al campo Proveedor campo Proveedor (F1_FORNECE) se le agrega la función LxVlCabCol() para validar el Proveedor vs Cliente.
    • Se modifica la función LxVldFact(), se asigna retorno lógico y se agrega el parámetro por referencia lNotAjus, éste valor se utiliza para indicar si el documento es una Nota de Ajuste (NCP o NDP) y validar el borrado para indicar si el documento fue previamente transmitido.
    • Se modifica la función LxVlCabCol(), se asigna la validación de Proveedor vs Cliente para las Notas de Ajuste.
    • Se modifica la función fSerDocCol() se asigna la Nota de Ajuste de tipo NDC a la validación del control del Folios.
    • Se modifica la función ColExSer2(), se asigna la función LxSer2DsNa() para obtener la serie 2 del Documento Soporte y las Notas de Ajuste (NCP y NDP).
    • Se crean las siguientes Funciones:
      1. lxChckLock(): En las Notas de Ajuste NCP y NDP, cuando es seleccionado el Documento Soporte desde la opción "Factura", se valida que el  el documento se encuentre transmitido.
      2. lxObtnFltr(): En las Notas de Ajuste NCP y NDP, cuando es seleccionada  la opción "Factura" filtra solo los Documentos Soporte.
      3. lxVlTitulo(): Obtienen Obtiene los “Títulos” de Documento Soporte, Nota de Ajuste de Crédito o Débito para que éstos sean mostrado en el encabezado de los Documentos.
      4. lxVlDcTrns(): En las Notas de Ajuste NCP. cuando se selecciona la opción "Doc Orig" Valida , valida que el Documento Soporte seleccionado se encuentre transmitido. 
      5. lxModDocSp(): Asigna el identificador 'S' para Documento Soporte y Notas de Ajuste NCP y NDP cuando se guarda el Documento.
      6. lxEstrcCol: Cargar la configuración de las Notas de Ajuste NCP y NDP en el array aCfg.
      7. LxSer2DsNa(): Asigna la serie 2 para Documento Soporte y Notas de Ajuste NCP y NDP.
      8. LxObtTpCol(): Asigna el tipo de documento para las Notas de Ajuste (NCP = 22, NDP = 23).


SIGACUS

    • Se modifica la función F4NfOri(), se
      1. Se asigna la función lxObtnFltr() para filtrar los Documentos
      soporte
      1. Soporte desde las Notas de Crédito de Ajuste cuando se utiliza la opción “Doc. Orig.
      2. Se asigna la función lxVlDcTrns() para validar si el documento seleccionado ya fue transmitido.

...

    • Dentro de la función LockClick(), se asigna la función lxChckLock() para valida validar que el Documento Soporte seleccionado se encuentre transmitido.

...

    • En la función CFDGerXml() se asigna la especie NDP para inicializar la tabla SF1 y realizar la generación del XML de la Nota de Ajuste de Débito.

MATA486

    • Se modifica la función Mata486() 
      1. Obtiene el tipo de documento, si es Nota de Crédito de Ajuste se asigna el identificador 9, si es Nota de Débito de Ajuste se asigna el identificador 8.
      2. Se valida que la pregunta ¿Tipo Nota Ajuste? contenga las opciones “Débito” o “Crédito” Débito” o “Créditocuando la pregunta ¿Tipo de Documento? contenga la opción “Nota Nota de Ajuste”Ajuste
    • Se modifica la función M486VldDoc() 
      1. Asigna el filtro F1_MARK / F2_MARK = ‘S’ para obtener los documentos de tipo Nota de Ajuste NDP o NDC y estos sean mostrados en pantalla.
      2. Se obtiene el Cliente a partir del proveedor Proveedor para las Notas de Ajuste NCP y NDP.
    • En la función M486GetInf() se asigna el filtro F1_MARK / F2_MARK = ‘S’ Spara obtener información y preparar la trasmisión de los documentos de tipo Nota de Ajuste NDP y NDC.
    • En la función M486VisNFE() se asigna la visualización de las Notas de Ajuste NDP y NDC.
    • En la función M486BRWSFX() se asigna la configuración (Tipo Documento, Filtros, tablas, Preguntas etc..) de las Notas de Ajuste NDP y NDC para la configuración del Browse principal.
    • En la función M486SENDPT() se asigna el prefijo “n” ncuando el documento es una Nota de Ajuste NDP o NDC, este prefijo se incluye en el nombre del documento electrónico (archivo XML) y también sirve para asignar los elementos principales (FE_INVOICE, FE_ITEM etc..) que posteriormente serán integrados en el documento electrónico (archivo XML).

M486XFUN

    • En la función FGetTaxas() se integran las Notas de Ajuste NDP y NDC para obtener los impuestos.
    • Se modifica la función fGetRef()
      1. Se agrega el parámetro por referencia cTipNota, éste valor se informa desde los archivos FATSCOL.ini y FATECOL.ini y contiene el concepto de ajuste.
      2. Se integran las Notas de Ajuste (NCP y NDP) y se obtienen los datos del documento referenciado (Documento Soporte).


M486XFUNCO

    • Se modifica la función M486XMLHKA()
      1. Se asigna el prefijo “n” ncuando el documento es una Nota de Ajuste NDP o NDC, este prefijo se incluye en el nombre del documento electrónico (archivo XML) y también sirve para asignar los elementos principales (FE_INVOICE, FE_ITEM etc..) que posteriormente serán leídos y asignados al documento electrónico (archivo XML).
      2. Se obtiene el Cliente a partir del proveedor para las Notas de Ajuste NCP/NDP.
      3. Se asigna el parámetro lNotAjus a la función M486RefDoc().
      4. Se asigna el tipo documento 95 para las Notas de Ajuste.
    • En la función M486RefDoc() se agrega el parámetro por referencia lNotAjusque indicará si serán informados los elementos relacionados al documento referenciado (Documento Soporte).


M486PDFCOL

    • En la Función ImpXMlPDF() se asigna condición para obtener documentos de tipo “Notas de Ajuste”.


FATECOL

    • Se crea la variable lógica _aTotal[117] para indica si es una Nota de Ajuste y utilizar los datos del Cliente (SA1)  relacionado al Proveedor(SA2). También se utiliza la variable lógica _aTotal[117] para asignar los nodos relacionados a la Factura (ejemplo: fe:InvoiceLine, fe:Item, fe:Price etc..)
    • Se crea la variable _aTotal[089] que almacena el concepto de las Notas de Ajuste y se asigna a la función fGetRef () donde será informado en el XML.
    • En la variable  _aTotal[105] se almacena el identificador “n” cuando la variable _aTotal[117] es verdadera (Nota de Ajuste )
    • Para complementar la consulta realizada en la función FsQuery() en el filtro de la tabla SFP se indica la especie “9” Nota de Ajuste de tipo Débito.
    • Cuando se utiliza la función fGetTaxDet() se indica que es un documento “NCC” para obtener los valores de las tablas de Impuestos Variables (SFB), TES vs. Impuestos(SFC), Encabezado de Factura (SF1)  y de Detalle de Factura (SD1).

FATSCOL

    • Se crea la variable lógica _aTotal[116] para indica si es una Nota de Ajuste 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..).
    • Se crea la variable _aTotal[117] que almacena el concepto de las Notas de Ajuste y se asigna a la función fGetRef () donde será informado en el XML.
    • En la variable  _aTotal[105] se almacena el identificador “n” cuando la variable _aTotal[116] es verdadera (Nota de Ajuste )
    • Para complementar la consulta realizada en la función FsQuery() en el filtro de la tabla SFP se indica la especie “8” Nota de Ajuste de tipo Crédito.
    • Cuando se utiliza la función fGetTaxDet() se indica que es un documento “NDC” para obtener los valores de las tablas de Impuestos Variables (SFB), TES vs. Impuestos(SFC), Encabezado de Factura (SF2)  y de Detalle de Factura (SD2).



Totvs custom tabs box
tabsPre-condiciones,Procedimiento
idsPre-condiciones,Procedimiento
Totvs custom tabs box items
defaultyes
referenciaPre-condiciones
  1. Realizar un respaldo del repositorio (RPO).
  2. Aplicar el parche correspondiente al issue DMINA-16565.
  3. Validar que las rutinas actualizadas en el repositorio, coincidan con las descritas en el encabezado del presente Documento Técnico, así como las 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 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.
    2. Crear un Proveedor (MATA020) y relacionarlo al Cliente mediante los campos Cod. Cliente (A2_CLIENTE) y Tda. Cliente (A2_LOJCLI).
  7. Dentro del configurador Protheus (SIGACFG), en la opción "Diccionarios / tablas genéricas", en la tabla genérica "00 - 01 - Series de Facturas", agregar la serie "NAJ" y el número inicial para las Notas de Ajuste.
  8. Dentro de Control de Formularios (MATA992)

    1. Agregar Serie paraNotas de Ajuste de Crédito.

      1. Asignar la Serie "NAJ" con Especie "8=NCP" y en la Serie 2 agregar el prefijo MXAJ, también asignar el Número Inicial y Final y los campos que son obligatorios.

    2. Agregar Serie para Notas de Ajuste de Débito.
      1. Asignar la Serie "NAJ" con Especie "9=NDP" y en la Serie 2 agregar el prefijo MXAJ, también asignar el Número Inicial y Final y los campos que son obligatorios.

  9. Informações

    El prefijo (Serie 2) debe estar conformado por 4 caracteres y éste debe estar configurado en los “Secuenciales” del portal de Facturación Electrónica de Factory.

    Image Added

  10. Configurar los siguientes parámetros (SX6), considerando que la implementación se realiza en un ambiente de homologación/pruebas:

    Parámetro

    Contenido

    Descripción

    MV_CFDIAMB  2Indica el ambiente de trabajo de certificación 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 <Proporcionado por The Factory HKA>Token Empresa - The Factory HKA.
    MV_TKN_PAS <Proporcionado por The Factory HKA>Token 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.      
  11. Realizar las siguientes modificaciones al archivo de configuración FATECOL.INI. Las líneas en color azul se agregan, las líneas en color verde se reemplazan.

    Nota
    titleImportante

    //FATECOL.INI -- NFE Colombia v2 - Resolucion 0019 / FEB. 2016
    [XXX POSICIONAMENTOS]
    (PRE) SA2->(DbSetOrder(1))
    (PRE) _aTotal[116] := If(SF1->(ColumnPos("F1_SOPORT")) > 0 ,If(SF1->F1_SOPORT =='S'.AND. Alltrim(SF1->F1_TIPOPE) $'10|11', .T.,.F. ) , .F.)
    (PRE) _aTotal[117] := If(SF1->(ColumnPos("F1_MARK")) > 0 ,If(SF1->F1_MARK =='S'.AND. Alltrim(SF1->F1_TIPOPE) $'10|11', .T.,.F. ) , .F.)
    (PRE) _aTotal[089] := If(_aTotal[117] .AND. SF1->(ColumnPos("F1_TIPNOTA")) > 0, SF1->F1_TIPNOTA , "")
    (PRE) If

Totvs custom tabs box
tabsPre-condiciones,Procedimiento
idsPre-condiciones,Procedimiento
Realizar las siguientes modificaciones al archivo de configuración FATECOL.INI. Las líneas en color azul se agregan, las líneas en color verde se reemplazan.
Totvs custom tabs box items
defaultyes
referenciaPre-condiciones
  1. Realizar un respaldo del repositorio (RPO).
  2. Aplicar el parche correspondiente al issue DMINA-16565.
  3. Validar que las rutinas actualizadas en el repositorio, coincidan con las descritas en el encabezado del presente Documento Técnico, así como las 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 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.
    2. Crear un  Proveedor (MATA020) y relacionarlo al Cliente mediante los campos Cod. Cliente(A2_CLIENTE) y Tda. Cliente(A2_LOJCLI).
  7. Dentro del configurador en la opción "Diccionarios / tablas genéricas", en la tabla genérica "00 - 01 - Series de Facturas", agregar la serie "NAJ" y el número inicial para las Notas de Ajuste.
  8. Dentro de Control de Formularios (MATA992)

  9. Agregar Serie para Notas de Ajuste de Crédito.

    1. Asignar la serie "NAJ" con especie "8=NCP" y en la Serie 2 agregar el prefijo MXAJ, también asignar el número inicial y final y los campos que son obligatorios.

  10. Agregar Serie para Notas de Ajuste de Débito.Asignar la serie "NAJ" con especie "9=NDP" y en la Serie 2 agregar el prefijo MXAJ, también asignar el número inicial y final y los campos que son obligatorios.
    Informações

    El prefijo (Serie 2) debe estar conformado por 4 caracteres y éste debe estar configurado en los “Secuenciales” del portal de Facturación Electrónica de Factory.

    Configurar los siguientes parámetros (SX6):

Parámetro

Contenido

Descripción

MV_CFDIAMB  2Indica el ambiente de trabajo de certificación 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.      
Nota
titleImportante

//FATECOL.INI -- NFE Colombia v2 - Resolucion 0019 / FEB. 2016
[XXX POSICIONAMENTOS]
(PRE) SA2->(DbSetOrder(1))
(PRE) _aTotal[116] := If(SF1->(ColumnPos("F1_SOPORT")) > 0 ,If(SF1->F1_SOPORT =='S'.AND. Alltrim(SF1->F1_TIPOPE) $'10|11', .T.,.F. ) , .F.)
(PRE) _aTotal[117] := If(SF1->(ColumnPos("F1_MARK")) > 0 ,If(SF1->F1_MARK =='S'.AND. Alltrim(SF1->F1_TIPOPE) $'10|11', .T.,.F. ) , .F.)
(PRE) _aTotal[089] := If(_aTotal[117] .AND. SF1->(ColumnPos("F1_TIPNOTA")) > 0, SF1->F1_TIPNOTA , "")
(PRE) If(_aTotal[116] .OR. _aTotal[117] ,SA2->(MSSeek(xFilial("SA2")+SF1->F1_FORNECE+SF1->F1_LOJA)) , .T.)
(PRE) If(_aTotal[116] .OR. _aTotal[117] ,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] .AND. !_aTotal[117] ,SA1->(MSSeek(xFilial("SA1")+SF1->F1_FORNECE+SF1->F1_LOJA)) , .T.)
(PRE) (SE4->(MSSeek(xFilial("SE4")+SF1->F1_COND)) , .T.)
(PRE) IF(_aTotal[116] .OR. _aTotal[117] , AI0SA2->(MSSeek(xFilial("AI0SA2")+SA2SF1->(A2>F1_CLIENTEFORNECE+A2SF1->F1_LOJCLILOJA)) , .T.)
(PRE) , AI0If(_aTotal[116] .OR. _aTotal[117] ,SA1->(MSSeek(xFilial("AI0SA1")+SF1SA2->(F1>A2_FORNECECLIENTE+F1SA2->A2_LOJALOJCLI)) ) )[XXX INICIALIZACION], .T.)
(PRE) SD1->If(DbSetOrder(1))
(PRE) SB1AllTrim(SF1->F1_ESPECIE)=="NCC",SA2->(DbSetOrder(1))
(PRE) SYA->(DbSetOrder(1)MSSeek(xFilial("SA2")+SF1->F1_FORNECE+SF1->F1_LOJA)) , .T.)
(PRE) SC6->If(DbSetOrder(1))
(PRE) SE4->(DbSetOrder(1))
(PRE) CTO->(DbSetOrder(1)AllTrim(SF1->F1_ESPECIE)<>"NCC" .AND. !_aTotal[116] .AND. !_aTotal[117] ,SA1->(MSSeek(xFilial("SA1")+SF1->F1_FORNECE+SF1->F1_LOJA)) , .T.)
(PRE) SAH->(DbSetOrder(1))
(PRE) SE1(SE4->(DbSetOrder(2))(PRE) _aTotal[033] := ALLTRIM (MSSeek(xFilial("SE4")+SF1->F1_ESPECIECOND)
(PRE) _aTotal[075] := Alltrim(SM0->M0_NOMECOM) , .T.)
(PRE) _aTotal[092] := IIFIF( _aTotal[116] .OR. _aTotal[117], Posicione("SA1",1,AI0->(MSSeek(xFilial("SA1AI0")+SA2->A2>(A2_CLIENTE+SA2->A2A2_LOJCLI,"A1_EST"))) , Posicione("SA1",1,AI0->(MSSeek(xFilial("SA1AI0")+SF1->F1>(F1_FORNECE+SF1->F1F1_LOJA,"A1_EST"))) )

[XXX INICIALIZACION]
(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)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[096033] := ALLTRIM (SF1->F1_HORAESPECIE)
(PRE) _aTotal[097075] := fGetTaxasAlltrim(SF1SM0->F1_DOC, SF1->F1_SERIE, SF1->F1_FORNECE, SF1->F1_LOJA, If>M0_NOMECOM)
(PRE) _aTotal[092] := IIF(_aTotal[116] .OR. _aTotal[117], Posicione("NCCSA1",SF1->F1_ESPECIE))
(PRE) _aTotal[098] := ALLTRIM( GETNEWPAR( "MV_ID_PROV" , ",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[099093] := ALLTRIM( GETNEWPAR( "MV_ID_SOFT" , "" ) )
(PRE) _aTotal[100094] := ALLTRIM( GETNEWPAR( "MV_CODESEC" , "" ) )
(PRE) _aTotal[101095] := {"SD1",""}DtoS(SF1->F1_EMISSAO)
(PRE) _aTotal[102095] := IIFLeft(_aTotal[033095] == "NF" , "1" , IIF,4) + "-" + Substr(_aTotal[033] == "NCC" , "2" , IIF095],5,2)+ "-" + Right(_aTotal[033095] == "NDC" , "3" , IIF( ,2)
(PRE) _aTotal[033096] := = "NDI" , "4" , IIF( _aTotal[033] == "NCI" , "5" , "" ) ) ) ) )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[103099] := ALLTRIM( GETNEWPAR( "MV_ID_SOFT" , "" ) )
(PRE) _aTotal[104100] := PADRALLTRIM( Alltrim(SM0->M0_CGC) , 10 , "0" )GETNEWPAR( "MV_CODESEC" , "" ) )
(PRE) _aTotal[101] := {"SD1",""}
(PRE) _aTotal[105102] := IIF( _aTotal[033] == "NF" , "f1" , IIF( _aTotal[033] == "NCC"  .or. " , "2" , IIF( _aTotal[033] == "NCINDC" , "c3" , IIF( _aTotal[033] == "NDC" .or. 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" , IIF( _aTotal[033] == "NDP" , "n" , "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,_aTotal[089])
(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'",IIf(_aTotal[117] ,"'9'","'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'",IIf(_aTotal[117] ,"'9'","'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] .OR. _aTotal[117], 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] .OR. _aTotal[117],'<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] .OR. _aTotal[117], 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] .OR. _aTotal[117], "NCC",AllTrim(SF1->F1_ESPECIE)))
(PREREG) (_aTotal[001] := IIF( _aTotal[116] .OR. _aTotal[117],'    <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] .OR. _aTotal[117],'        <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] .OR. _aTotal[117] ,'        <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] .OR. _aTotal[117],'        </fe:Item>', '        </cac:Item>')  + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += IIF( _aTotal[116] .OR. _aTotal[117],'        <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] .OR. _aTotal[117],'        </fe:Price>', '        </cac:Price>')  + ( chr(13)+chr(10) ),.T.)
(PREREG) (_aTotal[001] += IIF( _aTotal[116] .OR. _aTotal[117],'    </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] .OR. _aTotal[117], '</fe:Invoice>','</fe:CreditNote>'))



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

    Nota
    titleImportante

    //FATSCOL.INI -- NFE Colombia v2 - Resolucion 0019 / FEB. 2016
    [XXX POSICIONAMENTOS]
    (PRE) SA2->(DbSetOrder(1))
    (PRE) _aTotal[116] := If(SF2->(ColumnPos("F2_MARK")) > 0 ,If(SF2->F2_MARK=='S'.AND. Alltrim(SF2->F2_TIPOPE) $'10|11', .T.,.F. ) , .F.)
    (PRE) If(_aTotal[116] ,SA2->(MSSeek(xFilial("SA2")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
    (PRE) If(_aTotal[116] ,SA1->(MSSeek(xFilial("SA1")+SA2->A2_CLIENTE+SA2->A2_LOJCLI)) , .T.)
    (PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",SA2->(MSSeek(xFilial("SA2")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
    (PRE) If(AllTrim(SF2->F2_ESPECIE)<>"NDI" .AND. !_aTotal[116] ,SA1->(MSSeek(xFilial("SA1")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
    (PRE) (SE4->(MSSeek(xFilial("SE4")+SF2->F2_COND)) , .T.)
    (PRE) ( If(!_aTotal[116],AI0->(MSSeek(xFilial("AI0")+SF2->F2_CLIENTE+SF2->F2_LOJA)), AI0->(MSSeek(xFilial("AI0")+SA2->(A2_CLIENTE+A2_LOJCLI)))), .T.)

    [XXX INICIALIZACION]
    (PRE) SD2->(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[117] := IIF(_aTotal[116] .AND. SF2->(ColumnPos("F2_TIPNOTA")) > 0, SF2->F2_TIPNOTA , "")
    (PRE) _aTotal[033] := ALLTRIM (SF2->F2_ESPECIE)
    (PRE) _aTotal[075] := Alltrim(SM0->M0_NOMECOM)
    (PRE) _aTotal[093] := ""
    (PRE) _aTotal[094] := ""
    (PRE) _aTotal[095] := DtoS(SF2->F2_EMISSAO)
    (PRE) _aTotal[095] := Left(_aTotal[095],4) + "-" + Substr(_aTotal[095],5,2)+ "-" + Right(_aTotal[095],2)
    (PRE) _aTotal[096] := SF2->F2_HORA
    (PRE) _aTotal[097] := fGetTaxas(SF2->F2_DOC, SF2->F2_SERIE, SF2->F2_CLIENTE, SF2->F2_LOJA,SF2->F2_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] := {"SD2",""}
    (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" , IIF( _aTotal[116] , "n" , "f" ) ) ) )
    (PRE) _aTotal[106] := M486XHEX(PADR( ALLTRIM( substr( SF2->F2_DOC , 4 , Len(SF2->F2_DOC) - 3 ) ) , 10 , "0" ),10)
    (PRE) _aTotal[107] := IIF(AllTrim(SF2->F2_ESPECIE)=="NDC" .OR. _aTotal[116],fGetRef(SF2->F2_DOC, SF2->F2_SERIE, SF2->F2_CLIENTE, SF2->F2_LOJA,SF2->F2_ESPECIE,_aTotal[117]),"")
    (PRE) _aTotal[108] := ""
    (PRE) _aTotal[109] := Posicione("CTO",1,xFilial("CTO")+Strzero(SF2->F2_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='" + SF2->F2_SERIE + "' AND FP_ESPECIE= '" + IIf(_aTotal[033] == "NF","1",IIf(_aTotal[116] ,"8","3")) + "' AND FP_NUMINI <='" + SF2->F2_DOC + "' AND FP_NUMFIM >='" + SF2->F2_DOC + "' AND FP_ATIVO ='1'"
    (PRE) _aTotal[115] := "SFP->FP_FILUSO=cFilAnt .AND. SFP->FP_SERIE=SF2->F2_SERIE .AND. SFP->FP_ESPECIE='" + IIf(_aTotal[033] == "NF","1",IIf(_aTotal[116] ,"8","3")) + "' .AND. SFP->FP_NUMINI<=SF2->F2_DOC .AND. FP_NUMFIM >=SF2->F2_DOC .AND. SFP->FP_ATIVO = '1'","FP_ATIVO"

    (PREREG) FsQuery(_aTotal[101],1,"D2_DOC='" + SF2->F2_DOC + "' AND D2_SERIE='" + SF2->F2_SERIE + "' AND D2_CLIENTE='" + SF2->F2_CLIENTE + "' AND D2_LOJA='" + SF2->F2_LOJA + "'","SD2->D2_DOC=SF2->F2_DOC .AND. SD2->D2_SERIE=SF2->F2_SERIE .AND. SD2->D2_CLIENTE=SF2->F2_CLIENTE .AND. SD2->D2_LOJA=SF2->F2_LOJA","D2_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 )

    [SD2 GENERANDO_XML]
    (PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",SA2->(MSSeek(xFilial("SA2")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
    (PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",SYA->(MsSeek(xFilial("SYA")+SA2->A2_PAIS)) , .T.)
    (PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",CTO->(MsSeek(xFilial("CTO")+Strzero(SF2->F2_MOEDA,2))) , .T.)
    (PRE) If(AllTrim(SF2->F2_ESPECIE)<>"NDI",IIf(_aTotal[116], SA1->(MSSeek(xFilial("SA1")+SA2->A2_CLIENTE+SA2->A2_LOJCLI)), SA1->(MSSeek(xFilial("SA1")+SF2->F2_CLIENTE+SF2->F2_LOJA))) , .T.)
    (PRE) If(AllTrim(SF2->F2_ESPECIE)<>"NDI",SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS)) , .T.)
    (PRE) If(AllTrim(SF2->F2_ESPECIE)<>"NDI",CTO->(MsSeek(xFilial("CTO")+Strzero(SF2->F2_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(SF2->F2_ESPECIE)=="NDI",SYA->(MsSeek(xFilial("SYA")+SA2->A2_PAIS)) , .T.)
    (PRE) (SE4->(MSSeek(xFilial("SE4")+SF2->F2_COND)) , .T.)
    (PRE) _aTotal[001] := IIF(AllTrim(SF2->F2_ESPECIE)=="NF" .OR. _aTotal[116] ,'<fe:Invoice ','<fe:DebitNote ')
    (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>'+ SF2->F2_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)">'+ _aTotal[098] +'</sts:ProviderID>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '                        <sts:SoftwareID schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)">'+ _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)">'+ _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>'+ SF2->F2_SERIE2 + Alltrim( Str( Val( Substr( SF2->F2_DOC , 4 , 10) ) ) ) +'</cbc:ID>'  + ( chr(13)+chr(10) )
    // Manual sin serie
    (PRE) _aTotal[001] += '    <cbc:ID>'+ Alltrim( Str( Val( Substr( SF2->F2_DOC , 4 , 10) ) ) ) +'</cbc:ID>'  + ( chr(13)+chr(10) )
    (PRE) FsQuery(_aTotal[110],2)
    // CUFE Aplica solo para NF
    (PRE) _aTotal[093] := ""
    (PRE) _aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NF" .OR. _aTotal[016],'    <cbc:UUID schemeAgencyID="195" schemeAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)">'+  _aTotal[093] +'</cbc:UUID>'  + ( 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:InvoiceTypeCode listAgencyID="195" listAgencyName="CO, DIAN (Direccion de Impuestos y Aduanas Nacionales)" listSchemeURI="http://www.dian.gov.co/contratos/facturaelectronica/v1/InvoiceType">'+ IIF(AllTrim(SF2->F2_ESPECIE)=="NF","01","92") +'</cbc:InvoiceTypeCode>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '    <cbc:Note><![CDATA['+ IIF(AllTrim(SF2->F2_ESPECIE)=="NDC",SF2->F2_MOTIVO,"") + ']]></cbc:Note>'  + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '    <cbc:DocumentCurrencyCode>'+ Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF2->F2_MOEDA,2),"CTO_MOESAT") ) +'</cbc:DocumentCurrencyCode>' + ( chr(13)+chr(10) )
    (PRE) _aTotal[001] += '    <cbc:CustomizationID>'+ Alltrim(SF2->F2_TIPOPE) +'</cbc:CustomizationID>' + ( chr(13)+chr(10) )
    //Documentos referenciados (solo facturas)
    (PRE) _aTotal[001] += IIf(SF2->(ColumnPos("F2_UUIDREL")) > 0 .And. AllTrim(SF2->F2_ESPECIE)=="NF",M486DRCOL(SF2->F2_UUIDREL,1),"")
    // Orden de Compra 
    (PRE) _aTotal[001] += IIf(SF2->(ColumnPos("F2_UUIDREL")) > 0 .And. AllTrim(SF2->F2_ESPECIE)=="NF",M486DRCOL(SF2->F2_UUIDREL,2),"")
    //  DiscrepancyResponse Solo para la Nota de Débito
    (PRE) _aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NDC",'    <cac:DiscrepancyResponse>' +  chr(13)+chr(10),"")
    (PRE) _aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NDC",'        <cbc:ReferenceID/>' + chr(13)+chr(10),"")
    (PRE) _aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NDC",'        <cbc:ResponseCode listName="concepto de notas débito" listSchemeURI="http://www.dian.gov.co/micrositios/fac_electronica/documentos/Anexo_Tecnico_001_Formatos_de_los_Documentos_XML_de_Facturacion_Electron.pdf" name="1:= intereses">' + SF2->F2_TIPREF + "</cbc:ResponseCode>"+ chr(13)+chr(10),"")
    (PRE) _aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NDC",'    </cac:DiscrepancyResponse>' + chr(13)+chr(10),"")

    // BillingReference solo para la Nota de Débito
    (PRE) _aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NDC" .OR. _aTotal[116], _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(SF2->F2_ESPECIE) <> "NDI"
    (PRE) IIf(_aTotal[116], SA1->(MSSeek(xFilial("SA1")+SA2->A2_CLIENTE+SA2->A2_LOJCLI)),SA1->(MSSeek(xFilial("SA1")+SF2->F2_CLIENTE+SF2->F2_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] += 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] += '            <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: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(SF2->F2_MOEDA,2),"CTO_MOESAT") ) + '">' + Alltrim(Str(SF2->F2_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")+SF2->(F2_CLIENTE+F2_LOJA+F2_SERIE+F2_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")+SF2->(F2_CLIENTE+F2_LOJA+F2_SERIE+F2_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(SF2->F2_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(SF2->F2_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]

    [SD2 INVOICE]
    (PRE) DbGoTop()
    (PREREG) (SB1->(DbSeek(xFilial("SB1") + SD2->D2_COD)),.T.)
    (PREREG) (SAH->(DbSeek(xFilial("SAH") + SB1->B1_UM)),.T.)
    (PREREG) _aTotal[108] := fGetTaxDet(SD2->D2_DOC,SD2->D2_SERIE,SD2->D2_CLIENTE,SD2->D2_LOJA,SD2->D2_TES,IIF(!_aTotal[116],AllTrim(SF2->F2_ESPECIE),"NDC"))
    (PREREG) (_aTotal[001] := IIF(AllTrim(SF2->F2_ESPECIE)=="NF" .OR. _aTotal[116],'    <fe:InvoiceLine>'  + ( chr(13)+chr(10) ),'    <cac:DebitNoteLine>'  + ( chr(13)+chr(10) )),.T.)
    (PREREG) (_aTotal[001] += '        <cbc:ID>'+ Alltrim(Str(Val(SD2->D2_ITEM))) +'</cbc:ID>'  + ( chr(13)+chr(10) ),.T.)
    (PREREG) (_aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NF"  .OR. _aTotal[116],'        <cbc:InvoicedQuantity unitCode="' + Alltrim(_aTotal[108][3]) + '">'+ Alltrim(Str(SD2->D2_QUANT, 14, 2)) +'</cbc:InvoicedQuantity>'  + ( chr(13)+chr(10) ),'        <cbc:DebitedQuantity unitCode="' + Alltrim(_aTotal[108][3]) + '">'+ Alltrim(Str(SD2->D2_QUANT)) +'</cbc:DebitedQuantity>'  + ( chr(13)+chr(10) )),.T.)
    (PREREG) (_aTotal[001] += '        <cbc:LineExtensionAmount currencyID=' + '"' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF2->F2_MOEDA,2),"CTO_MOESAT") ) + '"' + '>' + Alltrim(Str(SD2->D2_TOTAL ,14,2)) +'</cbc:LineExtensionAmount>'  + ( chr(13)+chr(10) ),.T.)
    (PREREG) (_aTotal[001] += _aTotal[108][1],.T.)
    (PREREG) (_aTotal[001] += IIF(SD2->D2_DESCON > 0, '        <cac:AllowanceCharge>' + chr(13)+chr(10), ""),.T.)
    (PREREG) (_aTotal[001] += IIF(SD2->D2_DESCON > 0, '            <cbc:ChargeIndicator>false</cbc:ChargeIndicator>' + chr(13)+chr(10), ""),.T.)
    (PREREG) (_aTotal[001] += IIF(SD2->D2_DESCON > 0, '            <cbc:AllowanceChargeReason><![CDATA[Aplicación de descuento]]></cbc:AllowanceChargeReason>' + chr(13)+chr(10), ""),.T.)
    (PREREG) (_aTotal[001] += IIF(SD2->D2_DESCON > 0, '            <cbc:MultiplierFactorNumeric>' + Alltrim(Str(SD2->D2_DESC,5,2)) + '</cbc:MultiplierFactorNumeric>' + chr(13)+chr(10), ""),.T.)
    (PREREG) (_aTotal[001] += IIF(SD2->D2_DESCON > 0, '            <cbc:Amount currencyID="' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF2->F2_MOEDA,2),"CTO_MOESAT") ) + '">' + Alltrim(Str(SD2->D2_DESCON,14,2)) + '</cbc:Amount>' + chr(13)+chr(10), ""),.T.)
    (PREREG) (_aTotal[001] += IIF(SD2->D2_DESCON > 0, '        </cac:AllowanceCharge>' + chr(13)+chr(10), ""),.T.)
    (PREREG) (_aTotal[001] += _aTotal[108][2],.T.)
    (PREREG) (_aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NF" .OR. _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(SD2->D2_COD) + '</cbc:ID>'  + ( chr(13)+chr(10) ),.T.)
    (PREREG) (_aTotal[001] += '            </cac:SellersItemIdentification>'  + ( chr(13)+chr(10) ),.T.)
    (PREREG) (_aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NF" .OR. _aTotal[116],'        </fe:Item>', '        </cac:Item>')  + ( chr(13)+chr(10) ),.T.)
    (PREREG) (_aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NF" .OR. _aTotal[116],'        <fe:Price>','        <cac:Price>')  + ( chr(13)+chr(10) ),.T.)
    (PREREG) (_aTotal[001] += '            <cbc:PriceAmount currencyID=' + '"' + Alltrim( Posicione("CTO",1,xFilial("CTO")+Strzero(SF2->F2_MOEDA,2),"CTO_MOESAT") ) + '"' + '>' + Alltrim(Str(SD2->D2_PRCVEN,14,2)) +'</cbc:PriceAmount>'  + ( chr(13)+chr(10) ),.T.)
    (PREREG) (_aTotal[001] += '            <cbc:BaseQuantity unitCode="' + Alltrim(_aTotal[108][3]) + '">'+ Alltrim(Str(SD2->D2_QUANT)) +'</cbc:BaseQuantity>'  + ( chr(13)+chr(10) ),.T.)
    (PREREG) (_aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NF" .OR. _aTotal[116]    ,'        </fe:Price>', '        </cac:Price>')  + ( chr(13)+chr(10) ),.T.)
    (PREREG) (_aTotal[001] += IIF(AllTrim(SF2->F2_ESPECIE)=="NF" .OR. _aTotal[116],'    </fe:InvoiceLine>' ,'    </cac:DebitNoteLine>') ,.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(AllTrim(SF2->F2_ESPECIE)=="NF" .OR. _aTotal[116], '</fe:Invoice>','</fe:DebitNote>'))

  • Totvs custom tabs box items
    defaultno
    referenciaProcedimiento

    04. INFORMACIÓN ADICIONAL

    ...

    1. '")

      (ARQ) _aTotal[094]
      FACTURA    C 019 0 ENCODEUTF8( IIF(AllTrim(SF2->F2_ESPECIE)=="NF" .OR. _aTotal[116], '</fe:Invoice>','</fe:DebitNote>'))

    Totvs custom tabs box items
    defaultno
    referenciaProcedimiento
    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” y confirmar.
      • Incluir Documentos Soporte para el Proveedor que está relacionado al Cliente.
      • Transmitir los documentos.

    2. Nota Ajuste de Crédito.

      Por medio de las Notas de Ajuste de tipo Crédito (NCP) se puede realizar la “Anulación”, “Devolución” y “Descuento” del Documento Soporte.

      Informações

      Las Notas de Ajuste de tipo Crédito aplicadas a Documentos Soporte funcionan de la misma manera que las Notas de Crédito de Proveedor (NCP) aplicadas a las Facturas de Entrada.

      • Ingresar al módulo de Compras (SIGACOM), ir al menú | Actualizaciones | Movimientos | Nota Crédit/Débito (MATA466N).
      • En la pregunta ¿Formulario Propio? seleccionar “Si”.
      • En la pregunta ¿Tipo de Factura? seleccionar “Nota Ajuste Créd”.
      • Confirmar dando clic en el botón "OK".
      • En el encabezado de la pantalla principal confirmar que se muestre el título “Nota de Crédito – Nota de Ajuste”.
      • Dar clic en el botón “Incluir”.
      • En el encabezado del formulario de captura confirmar que se muestre el título “Nota de Crédito – Nota de Ajuste”.

      • Seleccionar al Proveedor que está relacionado al Cliente.
      • Seleccionar la Serie configurada para la Nota de Ajuste, automáticamente se cargará el Número Documento y la Serie 2.
      • Seleccionar el Tipo de Ajuste (Concepto de Corrección para Notas de Ajuste).
      • Referenciar un Documento Soporte por medio del menú "Otras Acciones" opciones "Factura" o "Doc. Orig"

        Nota

        Las opciones "Factura" o "Doc. Orig" mostrarán únicamente documentos de tipo “Documentos Soporte” (F1_SOPORT = ’S’). Los Documentos Soporte que no han sido transmitidos no se podrán seleccionar, el sistema lo notificará con un mensaje.

      • Verificar que los campos "Doc. Original" y "Serie Org." cuenten con información relacionada al Documento Soporte referenciado.
      • En la pestaña “Títulos” indicar la Condición de Pago.
      • Guardar la Nota de Ajuste.

        Nota

        Solo se podrán borrar las Notas de Ajuste que no han sido transmitidas, si el documento ya fue transmitido, éste no se podrá borrar y se notificará con un mensaje.

    3. Transmisión de Nota de Ajuste. 
      • 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 “Nota de Ajuste”.
        ¿Serie? seleccionar “NAJ”.
        ¿Estatus? seleccionar “0” para obtener todos los documentos.
        Asignar las Fechas Inicio/Fin.
        ¿Tipo Nota Ajuste? seleccionar “Crédito”.

        Nota

        Si la pregunta ¿Tipo de Documento? es “Nota de Ajuste” es necesario indicar la pregunta ¿Tipo Nota Ajuste? con alguna de las opciones “Débito” o “Crédito”.

      • Confirmar.
      • En el encabezado de la pantalla principal, confirmar que se muestre el título “Nota de Ajuste Crédito”.

      • En la pantalla principal verificar que exista la Nota de Ajuste Crédito.
      • Dar clic en el botón “Transmitir”.
      • Asignar la serie “NAJ” y el Número de Documento Inicial y Final.
      • Confirmar Transmisión.
      • Revisar el Log de transmisión.
        Image Added

    4. Nota Ajuste de Débito.

      Por medio de las Notas de Ajuste de tipo Débito (NDP) se puede realizar “Ajustes de Precio”, cobro de “Intereses” y “Comisiones” sobre el Documento Soporte. Los ajustes de precio aplican cuando se ha facturado un costo menor en el Documento Soporte y se debe ajustar para asignar un costo mayor.

      Informações

      Las Notas de Ajuste de tipo Débito aplicadas a Documentos Soporte  funcionan de la misma forma que las Notas de Débito de Proveedor (NDP) aplicadas a las Facturas de Entrada.

      • Ingresar al módulo de Compras (SIGACOM), ir al menú | Actualizaciones | Movimientos | Nota Crédit/Débito (MATA466N).
      • En la pregunta ¿Formulario Propio? seleccionar “Si” .
      • En la pregunta ¿Tipo de Factura? seleccionar “Nota Ajuste Débi”.
      • Confirmar dando clic en el botón "OK".
      • En el encabezado de la pantalla principal confirmar que se muestre el título “Nota de Débito – Nota de Ajuste”.
      • Dar clic en el botón “Incluir”.
      • En el encabezado del formulario de captura confirmar que se muestre el título “Nota de Débito – Nota de Ajuste”.

      • Seleccionar al Proveedor que está relacionado al Cliente.
      • Seleccionar la Serie configurada para la Nota de Ajuste, automáticamente se cargará el Número Documento y la Serie 2.
      • Seleccionar el Tipo de Ajuste (Concepto de Corrección para Notas de Ajuste).
      • Referenciar un Documento Soporte por medio del menú "Otras Acciones" opción "Factura". 

        Nota

        La opción "Factura" mostrará únicamente documentos de tipo “Documentos Soporte” (F1_SOPORT = ’S’). Los Documentos Soporte que no han sido transmitidos no se podrán seleccionar, el sistema lo notificará con un mensaje.

      • Verificar que los campos "Doc. Original" y "Serie Org." cuenten con información relacionada al Documento Soporte referenciado.
      • En la pestaña “Títulos” indicar la Condición de Pago.
      • Guardar la Nota de Ajuste.

        Nota

        Solo se podrán borrar las Notas de Ajuste que no han sido transmitidas, si el documento ya fue transmitido, éste no se podrá borrar y se notificará con un mensaje.


    5. Transmisión de Nota de Ajuste. 
      • 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 “Nota de Ajuste”.
        ¿Serie? seleccionar “NAJ”.
        ¿Estatus? seleccionar “0” para obtener todos los documentos.
        Asignar las Fechas Inicio/Fin.
        ¿Tipo Nota Ajuste? seleccionar “Débito”.

        Nota

        Si la pregunta ¿Tipo de Documento? es “Nota de Ajuste” es necesario indicar la pregunta ¿Tipo Nota Ajuste? con alguna de las opciones “Débito” o “Crédito”.

      • Confirmar.
      • En el encabezado de la pantalla principal, confirmar que se muestre el título “Nota de Ajuste Débito”.

      • En la pantalla principal verificar que exista la Nota de Ajuste Débito.
      • Dar clic en el botón “Transmitir”.
      • Asignar la serie “NAJ” y el Número de Documento Inicial y Final.
      • Confirmar Transmisión.
      • Revisar el Log de transmisión.
        Image Added


    6. Archivo XML de las Notas de Ajuste.
      Los archivos XML autorizados se crean en la carpeta configurada en el parámetro MV_CFDDOCS + "/autorizados/"
      Los documentos XML de las Notas de Ajuste utilizan el identificador "n" en el nombre del archivo.
      Ejemplo: face_n53485215000000000012.xml

      Abrir el archivo XML. Ejemplo de nodos del documento:

      Image Added


      • Revisar que el elemento "tipoDocumento" sea igual a "95" que indica que se transmitió una Nota de Ajuste. Ejemplo:
        <cbc:CreditNoteTypeCode>95</cbc: CreditNoteTypeCode>

      • Revisar que el elemento "numeroDocumento" sea similar a "MXAJ18" que indica el Prefijo+Consecutivo de la Nota de Ajuste
        Ejemplo:
        <cbc:ID> MXAJ18</cbc: ID>

      • Revisar que el elemento "cufeDocReferenciado" se informe correctamente con el UUID de la Nota de Ajuste.
        Ejemplo:
        <cbc:UUID schemeID="2" schemeName="CUDS-SHA384">f0fe261c357e71e5ccd2ed78e6f4cc0fdaec11a95d132d9aeb41122be5207edbd11f40ef77323f29e34cf84d3698011b</cbc:UUID>

      • Revisar que el elemento "numeroDocumento" del documento referenciado (DiscrepancyResponse) sea similar a "MXDS831" que indica el Prefijo+Consecutivo del Documento Soporte.
        Ejemplo:
        <cbc:ReferenceID> MXDS831</cbc: ReferenceID >

      • Revisar el elemento "descripción" del documento referenciado (DiscrepancyResponse) sea igual a "ANULACION DEL DOCUMENTO SOPORTE"
        Ejemplo:
        <cbc:Description> ANULACION DEL DOCUMENTO SOPORTE </cbc: Description >

      • Revisar que el elemento "numeroDocumento" del documento referenciado (BillingReference / InvoiceDocumentReference) sea similar a "MXDS831" que indica el Prefijo+Consecutivo del Documento Soporte.
        Ejemplo:
        <cbc: ID>MXDS831</cbc:ID >

      • Revisar que el elemento "cufeDocReferenciado" del documento referenciado (BillingReference / InvoiceDocumentReference) sea igual al UUID del Documento Soporte.
        Ejemplo:
        <cbc:UUID schemeName="CUDE-SHA384">97a0cb911509cfa267e871fec06647eff3b4b50c075bbe4155495aab28882ccb26714e25f966eecab6b7a160f9ab761f</cbc:UUID>

      • Revisar que el elemento "fecha" del documento referenciado (BillingReference / InvoiceDocumentReference) sea igual la fecha de emisión del Documento Soporte.
        Ejemplo:
        <cbc:IssueDate>2022-09-14</cbc:IssueDate>


    7. 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 “Nota de Ajuste”.
        ¿Serie? seleccionar “NAJ”.
        ¿Estatus? seleccionar “0” para obtener todos los documentos.
        Asignar las Fechas Inicio/Fin.
        ¿Tipo Nota Ajuste? seleccionar “Débito” o "Crédito".

      • Confirmar.
      • Dar clic en el botón “Monitor”.
      • Asignar la Serie NAJ” y el Número de Documento Inicial y Final.
      • Confirmar.
      • Revisar el estatus de la Nota de Ajuste.
        Image Added

    8. 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 “Nota de Ajuste”.
        ¿Serie? seleccionar “NAJ”.
        ¿Estatus? seleccionar “0” para obtener todos los documentos.
        Asignar las Fechas Inicio/Fin.
        ¿Tipo Nota Ajuste? seleccionar “Débito” o "Crédito".
      • Confirmar.
      • Dar clic en el botón “Otras Acciones”.
      • Seleccionar la opción "Imprimir PDF".
      • Asignar la Serie NAJ”, el Número de Documento Inicial y Final e indicar el Formato PDF.
      • Confirmar.
      • Revisar la información impresa en el archivo PDF de la Nota de Ajuste.
        Image Added

    9. 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 “Nota de Ajuste”.
        ¿Serie? seleccionar “NAJ”.
        ¿Estatus? seleccionar “0” para obtener todos los documentos.
        Asignar las Fechas Inicio/Fin.
        ¿Tipo Nota Ajuste? seleccionar “Débito” o "Crédito".
      • Confirmar.
      • Dar clic en el botón “Otras Acciones”.
      • Seleccionar la opción "Recuperar XML".
      • Asignar la Serie NAJ”, el Número de Documento Inicial y Final.
      • Asignar la Carpeta dónde será guardado el archivo.
      • Confirmar.
      • Revisar que el archivo XML de la Nota de Ajuste se haya almacenado en la carpeta indicada.
        Image Added


    04. INFORMACIÓN ADICIONAL

    Actualizaciones al diccionario.

    Campos en el archivo SX3 - Campos:

    Crear campo F2_MARK

    Campo

    F2_MARK

    Orden

    ZZ

    Tipo

    Caracter

    Tamaño

    1

    Decimal

    0

    Formato

    @!

    Título

    Nota Ajuste

    Descripción

    Nota de Ajuste

    Utilizado

    Si

    Obligatorio

    No

    Browse

    No

    Val. Sistema

    Pertence("SN")

    Inicializador

    "S"

    Opciones

    S=Si;N=No

    Help

    Si la Nota que registra corresponde a un ajuste o anulación del Documento Soporte en adquisiciones con sujetos no obligados a facturar electrónicamente y será transmitida a la DIAN, indique Si, de lo contrario indique No.


    Crear campo F2_TIPNOTA


    Campo

    F2_TIPNOTA

    Orden

    ZZ

    Tipo

    Caracter

    Tamaño

    1

    Decimal

    0

    Formato

    @!

    Título

    Tipo Ajuste

    Descripción

    Corrección Nota Ajuste  

    Utilizado

    Si

    Obligatorio

    No

    Browse

    No

    Consulta

    1D

    Val. Sistema

    Pertence("12345") .and. NaoVazio()

    Inicializador


    Help

    Concepto de Corrección para Notas de Ajuste. Seleccione las opciones disponibles en la consulta.


    Crear campo  F1_MARK


    Campo

    F1_MARK

    Orden

    ZZ

    Tipo

    Caracter

    Tamaño

    1

    Decimal

    0

    Formato

    @!

    Título

    Nota Ajuste

    Descripción

    Nota de Ajuste

    Utilizado

    Si

    Obligatorio

    No

    Browse

    No

    Val. Sistema

    Pertence("SN")

    Inicializador

    "S"

    Opciones

    S=Si;N=No

    Help

    Si la Nota que registra corresponde a un ajuste o anulación del Documento Soporte en adquisiciones con sujetos no obligados a facturar electrónicamente y será transmitida a la DIAN, indique Si, de lo contrario indique No.


    Crear campo F1_TIPNOTA


    Campo

    F1_TIPNOTA

    Orden

    ZZ

    Tipo

    Caracter

    Tamaño

    1

    Decimal

    0

    Formato

    @!

    Título

    Tipo Ajuste

    Descripción

    Corrección Nota Ajuste  

    Utilizado

    Si

    Obligatorio

    No

    Browse

    No

    Consulta

    1D

    Val. Sistema

    Pertence("12345") .and. NaoVazio()

    Inicializador


    Help

    Concepto de Corrección para Notas de Ajuste. Seleccione las opciones disponibles en la consulta.


    Modificar campo FP_ESPECIE

    Agregar la información presentada en color azul.


    Campo

    FP_ESPECIE

    Orden

    ZZ

    Tipo

    Carácter

    Tamaño

    1

    Decimal

    0

    Formato

    @!

    Título

    Especie    

    Descripción

    Especie de la Fact.     

    Val. Sistema

    Pertence("12345689")

    Opciones

    1=FCT;2=NCC;3=NDC;4=NDI;5=NCI;6=VOL;8=NCP;9=NDP


    Preguntas en el archivo SX1 – Archivo de Preguntas:

    Agregar la información presentada en colorazul.


    Modificar grupo MT466N


    Orden

    02

    Pregunta

    ¿Tipo De Factura ?           

    Tipo

    N

    Tamaño

    1

    Decimal

    0

    Objeto

    Combo

    Ítem 1

    Débito        

    Ítem 2

    Crédito       

    Ítem 3

    Nota Ajust Débi

    Ítem 4

    Nota Ajust Créd


    Modificar grupo MATA486


    Orden

    01

    Pregunta

    ¿Tipo de Documento ?         

    Tipo

    N

    Tamaño

    1

    Decimal

    0

    Objeto

    Combo

    Ítem 1

    Factura       

    Ítem 2

    Nota de Débito         

    Ítem 3

    Nota de Crédito

    Ítem 4

    Docto Suporte 

    Ítem 5

    Nota de Ajuste 


    Agregar pregunta a grupo MATA486


    Orden

    06

    Pregunta

    ¿Tipo Nota Ajuste ?         

    Tipo

    N

    Tamaño

    1

    Decimal

    0

    Objeto

    Combo

    Ítem 1

    Ninguno     

    Ítem 2

    Débito        

    Ítem 3

    Crédito


    Crear grupo MATA486J


    Orden

    01

    02

    03

    Pregunta

    ¿Serie de la Nota de Ajuste?         

    ¿ Nota de Ajuste Inicial?

    ¿ Nota de Ajuste Final?

    Tipo

    C

    C

    C

    Tamaño

    3

    13

    13

    Decimal

    0

    0

    0

    Validación



    NaoVazio() .and. MV_PAR02<=MV_PAR03

    Objeto

    Edit

    Edit

    Edit

    Consulta Estándar

    SERNF



    Grupo094018018

    Help

    Serie de la Nota de Ajuste.

    Número inicial de la Nota de Ajuste.

    Número final de la Nota de Ajuste. 


    Card documentos
    InformacaoLa presente solución aplica para versiones 12.1.33 o superiores.
    Titulo¡IMPORTANTE!


    05. ASUNTOS RELACIONADOS