01. DATOS GENERALES
Producto | TOTVS Backoffice | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Línea de producto: | Línea Protheus | |||||||||||||||||||||
Segmento: | Backoffice | |||||||||||||||||||||
Módulo: | SIGAFAT - Facturación. | |||||||||||||||||||||
Función: |
| |||||||||||||||||||||
País: | Ecuador (EQU) Pacote: 011449 | |||||||||||||||||||||
Ticket: | 15425265 | |||||||||||||||||||||
Requisito/Story/Issue (informe el requisito vinculado): | DMINA-17603 |
02. SITUACIÓN/REQUISITO
El 27 de mayo de 2022 el Servicio de Rentas Internas emitió la Resolución No. NAC-DGERCGC22-00000024, a través de la cual establece disposiciones respecto a la emisión de los Comprobantes de Retención Electrónicos en la versión ATS.
A través de esta resolución, se dispone que los sujetos pasivos del Impuesto a la Renta obligados a facturar que, a la fecha de entrada en vigencia de la presente Resolución, todavía no se encuentren obligados a emitir comprobantes de venta, retención y documentos complementarios en la modalidad electrónica, deberán incorporar este tipo de esquema a su actividad hasta el 29 de noviembre de 2022.
03. SOLUCIÓN
En la rutina Funciones genéricas para Facturación - Mercado Internacional (FATXFUMI):
Se creó la función que Realiza búsqueda de datos en tabla F3I - Mantenimiento de Tablas (FATXVALF3I), para realizar búsquedas en la tabla Mantenimiento de Tablas (F3I) por nombre de campo, y evitar la búsqueda por posiciones.
En la rutina Carga de catálogos desde archivos .CSV (FISA814):
Se ajusta la función de Creación de tablas auxiliares estándar para el país Ecuador (f814CatEcu), para que al entrar a la rutina de Mantenimiento de Catálogos (FISA813), si existen los archivos 21TarifaRetIVASRI.csv o 22TipoPago.csv en la ruta local configurada en el parámetro MV_PATH814 sean creadas las estructuras y los datos de las tablas S021 - Catálogo de Tarida Ret. IVA y S022 - Catálogos de Tipos de Pago.
En la rutina Funciones Genéricas de Facturación Electrónica - Ecuador (M486XFUNEQ):
Se creó la función M486XIMTOS(), para la generación del nodo <impuestosDocSustento> con los atributos para informar los Impuestos que contiene la Factura de Entrada con la cual se generó el Certificado de Retención que se incluye en el Comprobante de Retención 2.0 versión ATS.
Se creó la función M486CODRET(), para obtener el código de Retención que aplica para el atributo <codigoRetencion>, donde para la Retención de IVA es obtenido de la tabla S021 - Catálogo de Tarifa Ret. IVA y para Retención de la Renta del campo Concepto (FE_CONCEPT).
Se generó el archivo FATCRECU20.INI con el esquema para la generación del XML para los Comprobantes de Retención 2.0 versión ATS.
Ajustes para el Anexo Transaccional Simplificado (ATS):
En la rutina Funciones Genéricas XML para ATS (GERXMLA1):
En la función LFeqXMLan1(), se realizaron ajustes para crear los siguientes campos en la tabla temporal TRA, para la generación del nodo <pagoExterior> de Compras..
Campo | Valor | Atributo |
---|---|---|
TIPOPROV | '01' Si Tipo(A2_TIPO) es igual a 1-Singular, en caso contrario '02' | tipoProv |
DENOPROV | A2_NOME | denoProv |
PGOLOCEXT | A2_CONTRBE | pagoLocExt |
TPOREGFIS | A2_RETENED | tipoRegi |
PAISPGGEN | A2_CODICA | paisEfecPagoGen |
PAISPFIS | A2_RETICA | paisEfecPagoParFis |
PAISEFEPG | A2_CODICA2 | paisEfecPago |
DOBTRIB | "SI" si el campo A2_ECDTEX es igual a S-Si, en caso contrario "NO" | aplicConvDobTrib |
RETNORLEG | "SI" si el campo A2_CBUCOM es igual a S-Si, en caso contrario "NO" | pagExtSujRetNorLeg |
- Realizar un respaldo del repositorio del ambiente (archivo .rpo)
- Aplicar el parche generado para la issue DMINA-17603.
- Validar que las rutinas se encuentren actualizada con fecha mayor o igual a la informada en la sección 01. DATOS GENERALES.
- Para la generación del Anexo Transaccional Simplificado (ATS), es necesario:
- Tener las configuración a diccionario que se mencionan en la sección 04. INFORMACIÓN ADICIONAL.
- Tener el archivo EQUATF.INI en la carpeta system del ambiente, así como realizar los ajustes mencionados en la sección 04. INFORMACIÓN ADICIONAL.
- En el parámetro MV_CFDFTCR configurar el nombre y la ruta del ambiente, para el archivo FATCRECU.INI (por ejemplo: GetSrvProfString('startpath','')+'\cfd\inicfd\fatcrecu20.ini')
Importante
En caso de realizar merge en el anterior archivo FATCRECU.INI en lugar de utilizar el nuevo estándar FATCRECU20.INI, es muy importante validar que no se tenga la siguiente línea, ya que al generarse está tabla temporal con el nombre "SD1", causa conflicto con la nueva función M486XIMTOS() que genera los impuestos del documento para el Comprobante de Retención 2.0 versión ATS.
(PREREG) FsQuery(_aTotal[004],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.
- En la ruta configurada en el parámetro MV_CFDTCR colocar el archivo FATCREQU.INI:
- Configurar el parámetro MV_PATH814, con la ruta local donde se colocarán los archivos en formato .csv para la carga de Catálogos.
- Colocar los siguientes archivos en formato .csv en la ruta definida en el parámetro MV_PATH814, conteniendo las siguientes estructuras:
- 16ImpuestosSRI.csv
- 17TarifaIVASRI.csv
- 20TipoImpARetenerSRI.csv
- 21TarifaRetIVASRI.csv
- 24FormasPagoSRI.csv
- 22TipoPago
- 27TiposRegimenFiscalExterior.csv
} - 28Paises.csv
- 29ParaisosFiscales.csv
- 16ImpuestosSRI.csv
- En el módulo Facturación (SIGAFAT), ir al menú Actualizaciones | Archivos | Mantenimiento de Catálogos (FISA813)
- Validar que se haya generado el catálogo S016 - Catálogo de impuestos, con la siguiente estructura:
- Validar que se haya generado el catálogo S017 - Catálogo de Tarifa del IVA, con la siguiente estructura:
- Validar que se haya generado el catálogo S020 - Catálogo Tipos Impuestos a Ret, con la siguiente estructura:
- Validar que se haya generado el catálogo S021 - Catálogo de Tarifa Ret. IVA, con la siguiente estructura:
- Validar que se haya generado el catálogo S022 - Catálogo de Tipos de Pago, con la siguiente estructura:
- Validar que se haya generado el catálogo S024 - Catálogo Formas de Pago, con la siguiente estructura:
- Validar que se haya generado el catálogo S027 - Catálogo de Régimen Fiscal del Exterior, con la siguiente estructura:
- Validar que se haya generado el catálogo S028 - Catálogo de Países, con la siguiente estructura:
- Validar que se haya generado el catálogo S029 - Catálogo de Paraísos Fiscales, con la siguiente estructura:
- En el Módulo Facturación (SIGAFAT), ir al menú Actualizaciones | Archivos | Impuestos Variable (MATA996)
- Para los impuestos que tienen configurado el campo Clase Imp. (FB_CLASSE) esa igual a I-Impuesto, es necesario informar el campo Cod.Impuesto (FB_CODIMP).
- En el Módulo Libros Fiscales (SIGAFIS), ir al menú Actualizaciones | Archivos | Conceptos.
- Para cada Concepto configurar el campo Cód. Ret SRI (CCR_RETSRI), el cual debe corresponder a las tablas 3.10 Conceptos de retención en la fuente de Impuesto a la renta del SRI (tablas del Catálogo de Anexo Transaccional Simplificado)
- En el módulo Compras (SIGACOM), ir al menú Actualizaciones | Archivos | Proveedores
Configurar un Proveedor, donde es importante configurar los campos Forma Pago (A2_MPAGO) y E-Mail (A1_EMAIL)
Importante
Adicional en el Proveedor deberán ser configurados los siguientes campo Pago Resid. (A2_CONTRBE), Tp. Reg. Fis (A2_RETENED), País/Estab. (A2_CODICA), País P. Fisc (A2_RETICA), País Efec Pg (A2_CODICA2), Doble Trib (A2_ECDTEX) y Pgo Ext Ret (A2_CBUCOM), los cuales son necesarios para la generación de los atributos del nodo <pagoExterior> del Anexo Transaccional Simplificado (ATS).
- En el módulo Compras (SIGACOM), ir al menú Actualizaciones | Archivos | Tipos de Entrada y Salida (MATA080)
- Configurar un Tipo de Entrada (TES) con el cálculo del Impuesto IVA, Retención de IVA y Retención de la Renta.
- En el módulo Compras (SIGACOM), ir al menú Actualizaciones | Archivos | Modalidades (FINA010)
- Configurar la Modalidad que aplica para la generación de la Factura de Entrada.
- En el módulo Compras (SIGACOM), ir al menú Actualizaciones | Archivos | Productos (MATA010)
- Configurar el o los Productos que aplica para la generación de la Factura de Entrada.
- En el módulo Compras (SIGACOM), ir al menú Actualizaciones | Movimientos | Facturas de Entrada (MATA101N)
- Incluir una Factura de Entrada (NF), la cual debe realizar el cálculo de IVA, Retención de IVA y Retención de la Renta.
- En el encabezado se deben informar los siguientes campos: No. Autoriz (F1_NUMAUT), Cod Estable (F1_ESTABL), Cód. Pto Emi (F1_PROEMIS), Tipo Comp (F1_TIPOPE) y Cód.Sustent (F1_CODCTR)
En los ítems se deben informar los siguientes campos: Producto (D1_COD), Cantidad (D1_QUANT), Valor Unit. (D1_VUNIR), Valor Total (D1_TOTAL), Tipo Entrada (D1_TES)
Importante
Para el calculo del Retención de la Renta (RIR), es es necesario informar en el ítem el campo Concepto (D1_CONCEPT).
Para visualizar datos en la consulta del campo Concepto (D1_CONCEPT), se debe configurar registros desde el módulo Libros Fiscales (SIGAFIS), en el menú Actualizaciones | Archivos | Conceptos.
- Presionar Guardar para confirmar el guardado de la Factura de Entrada.
- Validar que se visualice el Folio del Comprobante de Retención generado.
- En el módulo Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación | Comprobantes Retención (MATA486B)
- Ejecutar la acción Enviar.
- Informar los parámetros:
- ¿De Comprobante de Retención? = <Folio del Comprobante de Retención creado previamente>
- ¿A Comprobante de Retención? = <Folio del Comprobante de Retención creado previamente>
- Validar que el proceso de envío haya sido exitoso.
- Confirmar la consulta del Monitor.
- Validar que el retorno de respuesta sea un estatus Autorizado (Verde)
- Validar que el Certificado de Retención haya llegado al email configurado en el Proveedor, en el campo E-Mail (A1_EMAIL).
- En el módulo Libros Fiscales (SIGAFAT) ir al menú Miscelánea | Cálculos | Archivos Magnéticos" (MATA950)
- En el Wizard para la captura de información del encabezado, informar los parámetros requeridos hasta finalizar y realizar la generación del archivo indicado.
- Validar la correcta generación del Anexo Transaccional Simplificado (ATS), y realizar la validación desde el DIMM.
04. INFORMACIÓN ADICIONAL
Archivos .CSV de Catálogos de la SRI:
Archivos de ejemplo
Ajustes a Diccionario de Datos:
Creación de Consultas Estándar
- Consulta Específica ECU022 - Tipos de Pago.
Alias | Tipo | Secuencia | Columna | Descripción | Contiene |
---|---|---|---|---|---|
ECU022 | 1 | 01 | RE | Tipos de Pago | F3I |
ECU022 | 2 | 01 | 01 | F812SXB("S022","Codigo") | |
ECU022 | 5 | 01 | VAR_IXB |
- Consulta Específica ECU027 - Tip. Reg. Fis. Ext.
Alias | Tipo | Secuencia | Columna | Descripción | Contiene |
---|---|---|---|---|---|
ECU027 | 1 | 01 | RE | Tip. Reg. Fis. Ext. | F3I |
ECU027 | 2 | 01 | 01 | F812SXB("S027","Codigo") | |
ECU027 | 5 | 01 | VAR_IXB |
- Consulta Específica ECU028 - Países
Alias | Tipo | Secuencia | Columna | Descripción | Contiene |
---|---|---|---|---|---|
ECU028 | 1 | 01 | RE | Países | F3I |
ECU028 | 2 | 01 | 01 | F812SXB("S028","Codigo") | |
ECU028 | 5 | 01 | VAR_IXB |
- Consulta Específica ECU029 - Paraísos Fiscales
Alias | Tipo | Secuencia | Columna | Descripción | Contiene |
---|---|---|---|---|---|
ECU029 | 1 | 01 | RE | Paraísos Fiscales | F3I |
ECU029 | 2 | 01 | 01 | F812SXB("S029","Codigo") | |
ECU029 | 5 | 01 | VAR_IXB |
Creación de campos en SX3
Tabla SA2 - Proveedores
- Campo A2_CONTRBE
Campo | Contenido |
---|---|
Campo | A2_CONTRBE |
Tipo | 1 - Carácter |
Tamaño | 2 |
Decimal | 0 |
Formato | @! |
Propiedad | 1 - Modificar |
Tit. Español | Pago Resid. |
Des. Español | Pago Residente/No Resid. |
Modo Edición | |
Cons. | ECU022 |
Val. Sistema | Vazio() .Or. ValidF3I("S022",M->A2_CONTRBE,1,2) |
Obligatorio | No |
Usado | Si |
Browse | No |
Help | Se debe reportar si el pago realizado por la transacción ingresado se realizó a un residente o no residente. Corresponde a uno de los |
- Campo A2_RETENED
Campo | Contenido |
---|---|
Campo | A2_RETENED |
Tipo | 1 - Carácter |
Tamaño | 2 |
Decimal | 0 |
Formato | @! |
Propiedad | 1 - Modificar |
Tit. Español | Tp. Reg. Fis |
Des. Español | Tp. De Reg. Fis. Exterior |
Modo Edición | |
Cons. | ECU027 |
Val. Sistema | Vazio() .Or. ValidF3I("S027",M->A2_RETENED,1,2) |
Obligatorio | No |
Usado | Si |
Browse | No |
Help | Se debe reportar si el pago realizado fue a un no residente (A2_CONTRBE igual a 02). Corresponde a uno de los códigos de la tabla 19 de la Guía para Contribuyentes del Anexo Transaccional Simplificado (ATS). |
- Campo A2_CODICA
Campo | Contenido |
---|---|
Campo | A2_CODICA |
Tipo | 1 - Carácter |
Tamaño | 3 |
Decimal | 0 |
Formato | @! |
Propiedad | 1 - Modificar |
Tit. Español | País/Estab. |
Des. Español | País Pago Régimen General |
Modo Edición | |
Cons. | ECU028 |
Val. Sistema | Vazio() .Or. ValidF3I("S028",M->A2_CODICA,1,3) |
Obligatorio | No |
Usado | Si |
Browse | No |
Help | Se debe reportar si el pago realizado al no residente es a un Régimen General (Campo A2_RETENED igual a 01). Corresponde a uno de los códigos de la Tabla 16 de la Guía para Contribuyentes del Anexo Transaccional Simplificado (ATS). |
- Campo A2_RETICA
Campo | Contenido |
---|---|
Campo | A2_RETICA |
Tipo | 1 - Carácter |
Tamaño | 2 |
Decimal | 0 |
Formato | @! |
Propiedad | 1 - Modificar |
Tit. Español | País P. Fisc |
Des. Español | País Paraíso Fiscal |
Modo Edición | |
Cons. | ECU029 |
Val. Sistema | Vazio() .Or. ValidF3I("S029",M->A2_RETICA,1,2) |
Obligatorio | No |
Usado | Si |
Browse | No |
Help | Se debe reportar si el pago realizado al no residente ubicado en el paraíso fiscal. Corresponde a uno de los códigos de la Tabla 17 de la Guía para Contribuyentes del Anexo Transaccional Simplificado (ATS). |
- Campo A2_CODICA2
Campo | Contenido |
---|---|
Campo | A2_CODICA2 |
Tipo | 1 - Carácter |
Tamaño | 3 |
Decimal | 0 |
Formato | @! |
Propiedad | 1 - Modificar |
Tit. Español | País Efec Pg |
Des. Español | País a quién efectúa Pago |
Modo Edición | |
Cons. | ECU028 |
Val. Sistema | Vazio() .Or. ValidF3I("S028",M->A2_CODICA2,1,3) |
Obligatorio | No |
Usado | Si |
Browse | No |
Help | Se debe ingresar el país al que se efectúa al pago por el bien o servicio. Corresponde a uno de los códigos |
- Campo A2_ECDTEX
Campo | Contenido |
---|---|
Campo | A2_ECDTEX |
Tipo | 1 - Carácter |
Tamaño | 2 |
Decimal | 0 |
Formato | @! |
Propiedad | 1 - Modificar |
Tit. Español | Doble Trib |
Des. Español | Aplica Conv. Doble Tribut |
Modo Edición | |
Lista Español | S=Si;N=No |
Inic. Estándar | 'N' |
Obligatorio | No |
Usado | Si |
Browse | No |
Help | Se debe indicar si el pago efectuado está sujeto a algún convenio de doble tributación. Debe siempre seleccionarse una opción (S-Sí / N-No) |
- Campo A2_CBUCOM
Campo | Contenido |
---|---|
Campo | A2_CBUCOM |
Tipo | 1 - Carácter |
Tamaño | 2 |
Decimal | 0 |
Formato | @! |
Propiedad | 1 - Modificar |
Tit. Español | Pgo Ext Ret |
Des. Español | Pago Exterior Sujeto Ret |
Modo Edición | |
Lista Español | S=Si;N=No |
Inic. Estándar | 'N' |
Obligatorio | No |
Usado | Si |
Browse | No |
Help | Se debe indicar si el pago realizado al exterior aplica retención en aplicación a la norma legal. Debe siempre seleccionarse una opción (S-Sí / No) |
Ajustes al Archivo EQUATF.INI:
?{"Nombre del Archivo INI","EQUATF.INI"}
?{"Descripcion Completa del Archivo Magnetico","Declaracion de Retencion del Impuesto de Renta - IR."}
?{"Comentarios",""}
@XML
[XXX Inicializacao variaveis]
(PRE) _aTotal[001] := MV_PAR01
(PRE) _aTotal[002] := MV_PAR02
(PRE) _aTotal[003] := {}
(PRE) _aTotal[004] := {}
(PRE) _aTotal[005] := .F.
(PRE) _aTotal[006] := {}
(PRE) _atotal[020] := 0
(PRE) _aTotal[021] := IIf(SF2->(ColumnPos("F2_TPDOC"))==0 .OR. SF2->(ColumnPos("F2_TPVENT"))==0 .OR. SF2->(ColumnPos("F2_TIPOPE"))==0,.F.,.T.)
(PRE) _aTotal[022] := {}
(PRE) _aTotal[023] := {}
(PRE) _aTotal[024] := 0
(PRE) _aTotal[025] := ""
[XXX Montagem do CFP Utilizado pela rotina - PRINCIPAL]
(PRE) aAdd (_aTotal[003], "Formulario 103 - Declaracion de Retencion del Impuesto de Renta - IR")
(PRE) aAdd (_aTotal[003], "")
(PRE) aAdd (_aTotal[003], "Rellene correctamente la informacion solicitada.")
(PRE) aAdd (_aTotal[003], "Informacion necesarias para el rellenado automatico del Formulario 103: Declaracion de Retencion del Impuesto de Renta - IR.")
[XXX Montagem do CFP Utilizado pela rotina - COMPLEMENTAR]
(PRE) aAdd (_aTotal[004], {})
(PRE) aAdd (_aTotal[004][1], "Formulario 103 - Declaracion de Retencion del impuesto de Renta - IR")
(PRE) aAdd (_aTotal[004][1], "Rellene correctamente la informacion solicitada.")
(PRE) aAdd (_aTotal[004][1], {})
(PRE) aAdd (_aTotal[004][1][3], {1, "",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {0, "",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {0, "",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {0, "",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {1, "Tipo Declaracion",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {1, "Si fuera sustitutiva:",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {3,,,,,{"O=Original", "S=Sustitutiva"},,})
(PRE) aAdd (_aTotal[004][1][3], {0, "",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {1, "Version Formulario",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {1, "Nº Formulario",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {2,,"@E 9.9",2,1,,,3})
(PRE) aAdd (_aTotal[004][1][3], {2,,"9999999999999",2,0,,,13})
(PRE) aAdd (_aTotal[004][1][3], {1, "Cod. Version Form.",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {1, "Impuesto Pagado",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {2,,"9999999999",2,0,,,10})
(PRE) aAdd (_aTotal[004][1][3], {2,,"@E 999,999,999.99",2,2,,,14})
(PRE) aAdd (_aTotal[004][1][3], {1, "ID Representante legal",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {1, "Mora / Interesses",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {2,,"@E 9999999999999",2,0,,,13})
(PRE) aAdd (_aTotal[004][1][3], {2,,"@E 999,999,999.99",2,2,,,14})
(PRE) aAdd (_aTotal[004][1][3], {1, "RUC Contador",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {1, "Multa / Intereses",,,,,,})
(PRE) aAdd (_aTotal[004][1][3], {2,,"@E 9999999999999",2,0,,,13})
[XXX Chamada do Wizard]
(PRE) _atotal[005] := xMagWizard (_aTotal[003], _atotal[04], "EQUATF")
(PRE) Iif (_atotal[005], xMagLeWiz ("EQUATF", @_atotal[06], .T.), Nil)
(PRE) lAbtMT950 := !_atotal[005]
[XXX - monta o Nome do arquivo]
(PRE) mv_par04 := Alltrim(mv_par04) + "."
(PRE) mv_par04 := stuff(mv_par04,rat(".",mv_par04),rat(".",mv_par04),".XML")
(PRE) _aTotal[07] := mv_par04
(PRE) _aTotal[15] := .F.
//(PRE) _aTotal[16] := .F.
[XXX Header]
//(IMP) {.T.,1,1,"IVA"}
//(CMP) {{"NUMRUC","Contribuyente"},{"RAZSOC","Razon Social"},{"MES","Mes"},{"ANIO","Ano"}}
(PRE) _aTotal[010] := "version="+'"1.0"'+" encoding="+'"ISO-8859-1"'+" standalone="+'"yes"'+" ?"
(PRE) _atotal[30] := LFeqXMLanV(DTOS(MV_PAR01),DTOS(MV_PAR02))
Linha1 C 000 0 MontaXML("?xml" , ,,,,, ,.T.,.F.,.T.,_aTotal[010])
IVA C 003 0 MontaXML("iva" , ,,,,,1 ,.T.,.F.,.T.)
TIdInf C 015 0 MontaXML("TipoIDInformante" ,"R" ,,,,,4 ,.T.,.T.,.T.)
NUMRUC C 015 0 MontaXML("IdInformante" ,SM0->M0_CGC ,,,,,4 ,.T.,.T.,.T.)
RAZSOC C 100 0 MontaXML("razonSocial" ,GXMLCarEsp(SM0->M0_NOMECOM),,,,,4 ,.T.,.T.,.T.)
ANIO C 004 0 MontaXML("Anio" ,substr(dTOs(MV_PAR01),1,4) ,,,,,4 ,.T.,.T.,.T.)
MES C 002 0 MontaXML("Mes" ,substr(dTOs(MV_PAR01),5,2) ,,,,,4 ,.T.,.T.,.T.)
NUMESTRUC C 015 0 MontaXML("numEstabRuc" ,_atotal[30][2] ,,,,,4 ,.T.,.T.,.T.)
TVentas C 015 0 MontaXML("totalVentas" ,STRTRAN(TRANSFORM(0 ,"@E 9999999999.99"),',','.') ,,,,,4 ,.T.,.T.,.T.)
CodOpera C 015 0 MontaXML("codigoOperativo" ,"IVA" ,,,,,4 ,.T.,.T.,.T.)
Compras C 000 0 MontaXML("compras" , ,,,,,4 ,.T.,.F.,.T.)
(POS)
[XXX Extraindo Livro fiscal Compras]
(PRE) _atotal[31] := LFeqXMLan1(DTOS(MV_PAR01),DTOS(MV_PAR02))
[TRA Geração do XML]
//(IMP) {.T.,1,1,"Compras"}
//(CMP) {{"CODSUST","Sustento"},{"IDPROV","Ident."},{"TPCOMPROV","Tipo Compr."},{"ESTABL","Estab."},{"PONTOVEND","Punto Venta"},{"SEQUEN","Secu."}}
//,{"Autoriz","Autoriz"},{"BasNoGRiva","Base IVA 0%"},{"BasImponib","Base IVA Dif 0%"},{"BasImpGrav","Base obj IVA"},{"ValIVA","Monto IVA"}}
(PRE) TRA->(dbGoTop())
(PREREG) _aTotal[024] := IIF(_aTotal[021], IIF(Alltrim(TRA->TPDOC) =='01' .AND. Alltrim(TRA->TPVENT) =='1' .AND. Alltrim(TRA->TIPOPE) =='41', 1,0),0)
(PREREG) _aTotal[012] := RetIR(TRA->FILIAL, TRA->CLIEFOR, TRA->LOJA, TRA->NFISCAL, TRA->SERIE)
(PREREG) _aTotal[022] := IIF(_aTotal[024] > 0 , obtTotReem(TRA->NFISCAL,TRA->SERIE, TRA->CLIEFOR, TRA->LOJA),{})
(PREREG) _aTotal[023] := IIF(_aTotal[024] > 0 , ObtReem (TRA->FILIAL, TRA->NFISCAL, TRA->SERIE, TRA->CLIEFOR, TRA->LOJA),{})
(PREREG) _aTotal[025] := IIf(_aTotal[024] > 0 .AND. LEN(_aTotal[023])>0,_aTotal[023][1], "" )
DetCompr C 000 0 MontaXML("detalleCompras" , ,,,,,8 ,.T.,.F.,.T.)
CODSUST C 002 0 MontaXML("codSustento" ,TRA->CDSUSTEN ,,,,,12,.T.,.T.,.T.)
TpIdProv C 000 0 MontaXML("tpIdProv" ,TRA->TPLDPROV ,,,,,12,.T.,.T.,.T.)
IDPROV C 013 0 MontaXML("idProv" ,TRA->IDPROV ,,,,,12,.T.,.T.,.T.)
TPCOMPROV C 002 0 MontaXML("tipoComprobante" ,TRA->TPCOMPRO ,,,,,12,.T.,.T.,.T.)
TIPOPROV C 002 0 IIf(TRA->TPLDPROV == "03", MontaXML("tipoProv" ,TRA->TIPOPROV,,,,,12,.T.,.T.,.T.), "")
DENOPROV C 002 0 IIf(TRA->TPLDPROV == "03", MontaXML("denoProv" ,TRA->DENOPROV,,,,,12,.T.,.T.,.T.), "")
PARRELC C 002 0 MontaXML("parteRel" ,"NO" ,,,,,12,.T.,.T.,.T.)
dTReg C 000 0 MontaXML("fechaRegistro" ,DToC(TRA->DTFECH) ,,,,,12,.T.,.T.,.T.)
ESTABL C 003 0 MontaXML("establecimiento" ,TRA->ESTABEL ,,,,,12,.T.,.T.,.T.)
PONTOVEND C 003 0 MontaXML("puntoEmision" ,TRA->PTEMIS ,,,,,12,.T.,.T.,.T.)
SEQUEN C 009 0 MontaXML("secuencial" ,TRA->SEQUENC ,,,,,12,.T.,.T.,.T.)
DtEmis C 000 0 MontaXML("fechaEmision" ,TRA->DTEMISS ,,,,,12,.T.,.T.,.T.)
Autoriz C 000 0 MontaXML("autorizacion" ,TRA->AUTORIZ ,,,,,12,.T.,.T.,.T.)
BasNoGRiva C 000 0 MontaXML("baseNoGraIva" ,STRTRAN(TRANSFORM(TRA->BASNOGRV ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
BasImponib C 000 0 MontaXML("baseImponible" ,STRTRAN(TRANSFORM(TRA->BASIMPON ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
BasImpGrav C 000 0 MontaXML("baseImpGrav" ,STRTRAN(TRANSFORM(TRA->BASIMPGR ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
BasImpEx C 000 0 MontaXML("baseImpExe" ,STRTRAN(TRANSFORM(_aTotal[012][5] ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
ValICE C 000 0 MontaXML("montoIce" ,STRTRAN(TRANSFORM(TRA->TOTALICE ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
ValIVA C 000 0 MontaXML("montoIva" ,STRTRAN(TRANSFORM(TRA->TOTALIVA ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
ValRetB10 C 000 0 MontaXML("valRetBien10" ,STRTRAN(TRANSFORM(_aTotal[012][2] ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
ValRetS20 C 000 0 MontaXML("valRetServ20" ,STRTRAN(TRANSFORM(_aTotal[012][3] ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
ValIvaBens C 000 0 MontaXML("valorRetBienes" ,STRTRAN(TRANSFORM(_aTotal[012][6] ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
ValRetS20 C 000 0 MontaXML("valRetServ50" ,STRTRAN(TRANSFORM(_aTotal[012][4],"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
ValIvaServ C 000 0 MontaXML("valorRetServicios" ,STRTRAN(TRANSFORM(_aTotal[012][7] ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
ValRet100 C 000 0 MontaXML("valRetServ100" ,STRTRAN(TRANSFORM(_aTotal[012][8],"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
ValReemb C 000 0 MontaXML("totbasesImpReemb" ,STRTRAN(TRANSFORM(IIF(LEN(_aTotal[022])>0,_aTotal[022][1][2],0 ),"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
PagExt C 003 0 MontaXML("pagoExterior" , ,,,,,12 ,.T.,.F.,.T.)
PagoLocE C 002 0 MontaXML("pagoLocExt" ,TRA->PGOLOCEXT, ,,,,16,.T.,.T.,.T.)
TipoRegi C 002 0 IIf(TRA->PGOLOCEXT == "02", MontaXML("tipoRegi" ,TRA->TPOREGFIS,,,,,16,.T.,.T.,.T.), "")
paising C 002 0 IIf(TRA->PGOLOCEXT == "02" .And. TRA->TPOREGFIS == "01", MontaXML("paisEfecPagoGen" ,TRA->PAISPGGEN,,,,,16,.T.,.T.,.T.), "")
paisparfis C 002 0 IIf(TRA->PGOLOCEXT == "02" .And. TRA->TPOREGFIS == "02", MontaXML("paisEfecPagoParFis" ,TRA->PAISPFIS,,,,,16,.T.,.T.,.T.), "")
EPagoGen C 002 0 IIf(TRA->PGOLOCEXT == "02", MontaXML("paisEfecPago" ,TRA->PAISEFEPG ,,,,,16,.T.,.T.,.T.), "")
Convenio C 002 0 MontaXML("aplicConvDobTrib" ,IIf(TRA->PGOLOCEXT == "01","NA",TRA->DOBTRIB),,,,,16,.T.,.T.,.T.)
EPagoPar C 002 0 MontaXML("pagExtSujRetNorLeg",IIf(TRA->PGOLOCEXT == "01","NA",TRA->RETNORLEG),,,,,16,.T.,.T.,.T.)
PagExtF C 000 0 MontaXML("pagoExterior" , ,,,,,12 ,.F.,.T.,.T.)
ForPag C 000 0 MontaXML("formasDePago" , ,,,,,12 ,.T.,.F.,.T.)
PagoLocE C 000 0 MontaXML("formaPago" ,TRA->FORPAGO ,,,,,16,.T.,.T.,.T.)
ForPagF C 000 0 MontaXML("formasDePago" , ,,,,,12 ,.F.,.T.,.T.)
Air C 000 0 _aTotal[012][1]
Reembol C 000 0 _aTotal[025]
DetComprF C 000 0 MontaXML("detalleCompras" , ,,,,,8 ,.F.,.T.,.T.)
[XXX - livro Fiscal Vendas]
ComprasF C 000 0 MontaXML("compras" , ,,,,,4 ,.F.,.T.,.T.)
Vendas C 000 0 MontaXML("ventas" , ,,,,,4 ,.T.,.F.,.T.)
[TRB Geração do XML]
(PRE) TRB->(dbGoTop())
DtVendas C 000 0 MontaXML("detalleVentas" , ,,,,,8 ,.T.,.F.,.T.)
TpIdClie C 000 0 MontaXML("tpIdCliente" ,TRB->TIPDOC ,,,,,12,.T.,.T.,.T.)
IdClien C 000 0 MontaXML("idCliente" ,TRB->CDCGC ,,,,,12,.T.,.T.,.T.)
PARRELV C 000 0 IIF(TRB->TIPDOC $ "04|05|06", MontaXML("parteRelVtas","NO" ,,,,,12,.T.,.T.,.T.), "")
tipoCli C 000 0 IIF(TRB->TIPDOC $ "06" , MontaXML("tipoCliente" ,TRB->TIPCLIE ,,,,,12,.T.,.T.,.T.), "")
denoCli C 000 0 IIF(TRB->TIPDOC $ "06" , MontaXML("denoCli" ,GXMLCarEsp(TRB->DENOCLI) ,,,,,12,.T.,.T.,.T.), "")
Tpcomprova C 000 0 MontaXML("tipoComprobante" ,TRB->ESPECIE ,,,,,12,.T.,.T.,.T.)
TEmision C 000 0 MontaXML("tipoEmision" ,"E" ,,,,,12,.T.,.T.,.T.)
NumComprov C 000 0 MontaXML("numeroComprobantes",cvaltochar(TRB->QTDNF) ,,,,,12,.T.,.T.,.T.)
BS2NoGrIva C 000 0 MontaXML("baseNoGraIva" ,STRTRAN(TRANSFORM(TRB->EXENTAS ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
BS2Imponib C 000 0 MontaXML("baseImponible" ,STRTRAN(TRANSFORM(TRB->ALQZERO ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
BS2ImpGrav C 000 0 MontaXML("baseImpGrav" ,STRTRAN(TRANSFORM(TRB->ALQNOZER,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
Vl2IVA C 000 0 MontaXML("montoIva" ,STRTRAN(TRANSFORM(TRB->VALIMP ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
MontoICE C 000 0 MontaXML("montoIce" ,STRTRAN(TRANSFORM(TRB->VALICE ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
Vl2RetIVA C 000 0 MontaXML("valorRetIva" ,STRTRAN(TRANSFORM(TRB->IVARET ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
Vl2RetRent C 000 0 MontaXML("valorRetRenta" ,STRTRAN(TRANSFORM(TRB->VALIRR ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
ForPago C 000 0 MontaXML("formasDePago" , ,,,,,12 ,.T.,.F.,.T.)
TEmision C 000 0 MontaXML("formaPago" ,TRB->FORPAGO ,,,,,16,.T.,.T.,.T.)
ForPagoF C 000 0 MontaXML("formasDePago" , ,,,,,12 ,.F.,.T.,.T.)
DtVendasF C 000 0 MontaXML("detalleVentas" , ,,,,,8 ,.F.,.T.,.T.)
[XXX - livro Fiscal Ventas Establecimiento]
ComprasF C 000 0 MontaXML("ventas" , ,,,,,4 ,.F.,.T.,.T.)
Vendas C 000 0 MontaXML("ventasEstablecimiento" , ,,,,,4 ,.T.,.F.,.T.)
[TRV Geração do XML]
(PRE) TRV->(dbGoTop())
VenEstab C 000 0 MontaXML("ventaEst" , ,,,,,8 ,.T.,.F.,.T.)
CodEstab C 000 0 MontaXML("codEstab" ,TRV->CODEST ,,,,,12,.T.,.T.,.T.)
VenEstab C 000 0 MontaXML("ventasEstab" ,STRTRAN(TRANSFORM(0 ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
IvaComp C 000 0 MontaXML("ivaComp" ,STRTRAN(TRANSFORM(0 ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
VenEstabF C 000 0 MontaXML("ventaEst" , ,,,,,8 ,.F.,.T.,.T.)
[XXX Identificação do Exportaciones]
VendasF C 000 0 MontaXML("ventasEstablecimiento" , ,,,,,4 ,.F.,.T.,.T.)
Exporta C 000 0 MontaXML("exportaciones" , ,,,,,4 ,.T.,.F.,.T.)
[XXX Criacao do arquivo notas exportacion]
(PRE) _atotal[32] := LFeXMLaVEx(DTOS(MV_PAR01),DTOS(MV_PAR02))
[TEX Geração do XML]
(PRE) TEX->(dbGoTop())
(PREREG) _aTotal[33] := IIf(TEX->TIPCLIE == '01', TEX->FCHREGCONT, TEX->COMPFCHEMI)
dtexporta C 000 0 MontaXML("detalleExportaciones" , ,,,,,8 ,.T.,.F.,.T.)
tpidcliext C 000 0 MontaXML("tpIdClienteEx" ,TEX->TPIDCLIEXT,,,,,12,.T.,.T.,.T.)
idclienext C 000 0 MontaXML("idClienteEx" ,TEX->IDCLIEXT ,,,,,12,.T.,.T.,.T.)
ptrelac C 000 0 MontaXML("parteRelExp" ,TEX->PARTREL ,,,,,12,.T.,.T.,.T.)
tipoclient C 000 0 IIf(TEX->TPIDCLIEXT == "21", MontaXML("tipoCli" ,TEX->TIPCLIE ,,,,,12,.T.,.T.,.T.), "")
denomexpor C 000 0 IIf(TEX->TPIDCLIEXT == "21", MontaXML("denoExpCli" ,GXMLCarEsp(TEX->DENEXPCLI) ,,,,,12,.T.,.T.,.T.), "")
tpregfsext C 000 0 MontaXML("tipoRegi" ,TEX->TIPREGI ,,,,,12,.T.,.T.,.T.)
paising C 000 0 IIf(TEX->TIPREGI == "01", MontaXML("paisEfecPagoGen" ,TEX->PEFEPAGGEN,,,,,12,.T.,.T.,.T.), "")
paisparfis C 000 0 IIf(TEX->TIPREGI == "02", MontaXML("paisEfecPagoParFis" ,TEX->PPAGPARFIS,,,,,12,.T.,.T.,.T.), "")
denoregfis C 000 0 MontaXML("denopagoRegFis" ,TEX->DENREGFIS ,,,,,12,.T.,.T.,.T.)
paisexp C 000 0 MontaXML("paisEfecExp" ,TEX->PAISEFEEXP,,,,,12,.T.,.T.,.T.)
tipoexp C 000 0 MontaXML("exportacionDe" ,TEX->TPEXPING ,,,,,12,.T.,.T.,.T.)
tipoingres C 000 0 IIf(TEX->TPEXPING == "03", MontaXML("tipIngExt" ,TEX->TPINGEXT ,,,,,12,.T.,.T.,.T.), "")
ingextgrav C 000 0 IIf(TEX->TPEXPING == "03", MontaXML("ingExtGravOtroPais" ,TEX->INGEXTGAV ,,,,,12,.T.,.T.,.T.), "")
valimpext C 000 0 IIf(TEX->INGEXTGAV == 'SI', MontaXML("impuestoOtroPais" ,STRTRAN(TRANSFORM(TEX->IMPOTROPA ,"@E 999999999.99"),',','.'),,,,,12,.T.,.T.,.T.), "")
tipcompr C 000 0 MontaXML("tipoComprobante" ,TEX->TPCOMP ,,,,,12,.T.,.T.,.T.)
distaduan C 000 0 IIf(TEX->TPEXPING == '01', MontaXML("distAduanero" ,TEX->REFDISADUA,,,,,12,.T.,.T.,.T.), "")
refanio C 000 0 IIf(TEX->TPEXPING == '01', MontaXML("anio" ,STR(YEAR(_aTotal[33])),,,,,12,.T.,.T.,.T.), "")
refregim C 000 0 IIf(TEX->TPEXPING == '01', MontaXML("regimen" ,TEX->REFREGIME ,,,,,12,.T.,.T.,.T.), "")
refcorrel C 000 0 IIf(TEX->TPEXPING == '01', MontaXML("correlativo" ,TEX->REFCORREL1,,,,,12,.T.,.T.,.T.), "")
nodoctrans C 000 0 IIf(TEX->TPEXPING == '01', MontaXML("docTransp" ,TEX->DOCTRANSP ,,,,,12,.T.,.T.,.T.), "")
fchregcont C 000 0 MontaXML("fechaEmbarque" ,DToC(_aTotal[33]),,,,,12,.T.,.T.,.T.)
valfob C 000 0 MontaXML("valorFOB" ,STRTRAN(TRANSFORM(TEX->VALORFOB ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
valcompr C 000 0 MontaXML("valorFOBComprobante" ,STRTRAN(TRANSFORM(TEX->VLFOBCOMP ,"@E 9999999999.99"),',','.') ,,,,,12,.T.,.T.,.T.)
nsercomest C 000 0 MontaXML("establecimiento" ,TEX->NOSERCOMPR,,,,,12,.T.,.T.,.T.)
nsercomemi C 000 0 MontaXML("puntoEmision" ,TEX->PTOEMISION,,,,,12,.T.,.T.,.T.)
nseccompve C 000 0 MontaXML("secuencial" ,TEX->COMPRSECU ,,,,,12,.T.,.T.,.T.)
nautoriza C 000 0 MontaXML("autorizacion" ,TEX->COMPRAUTOR,,,,,12,.T.,.T.,.T.)
fchemision C 000 0 MontaXML("fechaEmision" ,DToC(TEX->COMPFCHEMI) ,,,,,12,.T.,.T.,.T.)
dtexportaF C 000 0 MontaXML("detalleExportaciones" , ,,,,,8 ,.F.,.T.,.T.)
[XXX Identificação do Contribuinte]
ExportaF C 000 0 MontaXML("exportaciones" , ,,,,,4 ,.F.,.T.,.T.)
Anulados C 000 0 MontaXML("anulados" , ,,,,,4 ,.T.,.F.,.T.)
[XXX Criacao do arquivo notas canceladas]
(PRE) _atotal[34] := LFeqXMLcan(DTOS(MV_PAR01),DTOS(MV_PAR02))
[TRC Geração do XML]
(PRE) TRC->(dbGoTop())
Dtanulado C 000 0 MontaXML("detalleAnulados" , ,,,,,8 ,.T.,.F.,.T.)
tpcompro C 000 0 MontaXML("tipoComprobante" ,TRC->TIPDOC ,,,,,12,.T.,.T.,.T.)
estabelec C 000 0 MontaXML("establecimiento" ,TRC->ESTAB ,,,,,12,.T.,.T.,.T.)
ptemissao C 000 0 MontaXML("puntoEmision" ,TRC->PTEMIS ,,,,,12,.T.,.T.,.T.)
sequenIni C 000 0 MontaXML("secuencialInicio" ,TRC->SEQINI ,,,,,12,.T.,.T.,.T.)
sequenfin C 000 0 MontaXML("secuencialFin" ,TRC->SEQFIM ,,,,,12,.T.,.T.,.T.)
autoriz C 000 0 MontaXML("autorizacion" ,TRC->AUTORIZ ,,,,,12,.T.,.T.,.T.)
Dtanuladof C 000 0 MontaXML("detalleAnulados" , ,,,,,8 ,.F.,.T.,.T.)
[XXX Finalização]
AnuladosF C 000 0 MontaXML("anulados" , ,,,,,4 ,.F.,.T.,.T.)
IVAF C 000 0 MontaXML("iva" , ,,,,,4 ,.F.,.T.,.T.)
[XXX - Nome do Arquivo]
(ARQ) &('_aTotal[7]')
La presente funcional aplica para versión 12.1.33 o superior, y es necesario tener activa la funcionalidad de transmisión electrónica para el país Ecuador con el Proveedor Tecnológico denominado Stupendo.¡IMPORTANTE!
05. ASUNTOS RELACIONADOS
- Documento Técnico de Facturación Electrónica - Ecuador - Stupendo
- Documento Técnico de Anexo Transaccional Simplificado (ATS) - Ecuador
- Documento Técnico para Nodo de Exportación en ATS - Ecuador