Árvore de páginas

01. DATOS GENERALES


Producto

TOTVS Backoffice

Línea de producto: 

Línea Protheus

Segmento:

Backoffice

Módulo:

SIGAFAT - Facturación.

Función:
RutinasNombre TécnicoFecha
M485XFUNPEFunciones Genéricas Transmisión Electrónica Perú (TSS-Signature)28/01/2022
FATSPERTSS.INIEstructura XML de Documentos Electrónicos de Salida para Perú (TSS-Signature)28/01/2022
Rutinas InvolucradasNombre TécnicoFecha (Igual o posterior)
LOCXNFNotas Fiscales07/09/2020
LOCXPERFunciones genéricas para Notas Fiscales de Perú.07/09/2020
FISA814Carga de Catálogos07/09/2020
MATA468NGeneración automática de Facturas de Venta.08/09/2020
País:Perú
Ticket:13222117
Requisito/Story/Issue (informe el requisito vinculado):DMINA-14701


02. SITUACIÓN/REQUISITO

Para la transmisión electrónica de documentos a la entidad Superintendencia Nacional de Aduanas y de Administración Tributaria (SUNAT) a través de TSS-Siganture, se solicita que al transmitir Facturas/Boletas de Venta (NF) y Notas de Débito de Cliente (NDC), se active la funcionalidad para el tipo de Operación Sujeta a Detracción.

03. SOLUCIÓN

Rutina de Funciones Genéricas Transmisión Electrónica Perú (TSS-Signature) - M485XFUNPE.

Se realizan ajusten en las funciones que Obtienen datos del encabezado del documento (M485TotEnc) y Obtienen el detalle de los impuestos de las Facturas de Venta, Notas de Débito de Cliente y Notas de Crédito de Cliente (NFAEDetImp), para acumular el valor del cálculo de las Detracciones retornando en la posición 6 valor lógico que indica si el documento tiene cálculo de detracciones (.T. si contiene detracciones en caso contrario .F.) y en la posición 7 el valor de detracciones para ser eliminado en el elemento <Monto> del nodo <Referencia> que es creado cuando en la Condición de Pago utilizada para el documento el campo Tipo Pago (E4_MPAGSAT) se encuentra configurado con valor 2 - Crédito.

En la función que Genera el nodo <Totales> (fGetSubTot) se realiza ajuste para que si el documento tiene cálculo de Detracciones en el nodo Encabezado/Totales:

Se agrega el atributo <MntRet> con el monto del documento incluyendo los impuestos menos el valor de las detracciones.

Se agrega un nuevo nodo <TotSubMonto> con los siguientes atributos:

  • <Tipo>: "2003"
  • <TipoTipoMonto>: Valor del campo F2_CODDOC con valores del catálogo 54-Códigos de bienes y servicios sujetos a detracciones
  • <TasaConcepto>: Valor de la alícuota de las detracciones.
  • <MontoConcepto>: Valor acumulado de las detracciones del documento.

En la función que Obtiene datos requeridos para las cuotas y el saldo acumulado de todas las cuotas del documento (M485CUOTA) se agrega un nuevo parámetro que recibe el valor de las detracciones a descontar en el elemento <Monto> para cada nodo <Referencia>

Archivo de la Estructura XML de Documentos Electrónicos de Salida para Perú (TSS-Signature).

Se realizaron los siguientes ajustes:

En el llamado a la función Obtiene datos requeridos para las cuotas y el saldo acumulado de todas las cuotas del documento (M485CUOTA) se agrega el valor de las detracciones a descontar en el elemento <Monto> para cada nodo <Referencia>

Se almacena el valor del parámetro MV_TKN_EMP el cual se asigna a la generación del atributo <FormaPago> en el nodo /Encabezado/IdDoc si el documento tiene cálculo de Detracciones.

Se agrega generación de atributo <MedioPago> el cual es llenado con el valor informado en el campo Medio Pago (F2_MODCONS) si el documento tiene cálculo de Detracciones.

Se mueve la generación del atributo <MntRet> para que se genere después del atributo <MntDcto> y que se le descuente el valor del cálculo de Detracciones.

Para la funcionalidad estándar se movió el uso de la función ENCODEUTF8() ya que al transmitir un documento con más de un ítem, el XML se generaba erróneamente y causaba rechazo por esquema.

IMPORTANTE

  • Para la visualización de los campos Bien/Ser Det (F2_CODDOC) y Medio Pago (F2_MODCONS), es necesario tener actualizadas las rutinas LOCXNF y LOCXPER con fecha mayor o igual a las mencionadas en la sección 01. DATOS GENERALES.
  • En caso de que se tengan personalizaciones en el archivo FATSPERTSS.INI en la sección 04. INFORMACIÓN ADICIONAL se muestran los ajustes necesario para poder realizar merge al archivo.
  • Para la carga de los catálogos S054 y S059 es necesario tener actualizada la rutina FISA814 con fecha mayor o igual a la mencionada en la sección 01. DATOS GENERALES. Colocar los archivos CatalogoNo54.csv y CatalogoNo59.csv en la ruta local que está configurada en el parámetro MV_PATH814 para que al entrar a las rutinas Definición de Catálogos (FISA812) o Mantenimiento de Catálogos (FISA813) se realice la carga en automático. 
  • Los catálogos S051, S054 y S059 deben contener los siguiente datos:

Catálogo 51 - Código de tipo de operación.

Catálogo 54 - Códigos de bienes y servicios sujetos a detracciones.

Catálogo 59 - Medios de Pago.

  1. Realizar un respaldo del repositorio del ambiente (archivo .rpo)
  2. Aplicar el parche generado para la issue DMINA-14701.
  3. Realizar un respaldo del archivo FATSPERTSS.INI que se encuentra en la ruta configurada en el parámetro MV_CFDFTS.
  4. Realizar las configuraciones a diccionario que se mencionan en la sección 04. INFORMACIÓN ADICIONAL.
  5. Validar que las rutinas actualizadas en el repositorio, coincidan con las descritas en la sección función del punto 01. DATOS GENERALES.
  6. Configurar el parámetro MV_TKN_EMP con la Cuenta Corriente para detracciones del Banco Nacional (Ejemplo: 0004-3342343243).
  7. En el módulo Facturación (SIGAFAT), ir al menú Actualizaciones | Archivos | Mantenimiento de Catálogos (FISA813).
    • Validar que se tengan cargados los catálogos S051, S054 y S059 de acuerdo a los definidos por la SUNAT.
    • Validar que que en catálogo S051 existan los códigos 1001, 1002, 1002 o 1003 de tipo de Operación Sujeta a Detracción.
  8. En el módulo Facturación (SIGAFAT), ir al menú Actualizaciones | Archivos | Impuestos Variable.
    • Configurar impuesto de IGV indicando en el campo Clase Imp. (FB_CLASSE) el valor I-Impuesto.
    • Configurar impuesto de Detracción indicando en el campo Clase Imp. (FB_CLASSE) el valor D-Detracción.
  9. En el módulo Facturación (SIGAFAT), ir al menú Actualizaciones | Archivos | Tipos de Entrada y Salida.
    • Configurar un Tipo de Salida que contenga el cálculo de los impuestos de IGV y Detracción configurados previamente.
  10. En el módulo Facturación (SIGAFAT), ir al menú Actualización | Archivos | Facturaciones (MATA467N).
    • Incluir una nueva Factura de Salida (NF).
    • Informar en el encabezado el campo Tipo NF (F2_TIPONF) con el código 1001, 1002, 1002 o 1003 de tipo de Operación Sujeta a Detracción.
    • Informar en el encabezado el campo Bien/Ser Det (F2_CODDOC) con un valor del Catálogo No. 54 de la SUNAT de Códigos de bienes y servicios sujetos a detracciones.
    • Informar en el encabezado el campo Medio Pago (F2_MODCONS) con un valor del Catálogo No. 59 de la SUNAT de Medios de Pago.
    • En el detalle informar la Cantidad, Valor Unit, Valor Total y el Tipo de Salida que contenga el cálculo del impuesto de Detracción.
  1. En el módulo Facturación (SIGAFAT), ir al menú Actualizaciones | Facturación Transmisión Electrónica (MATA485).
  2. Informar los parámetros:
    • ¿Tipo de Documento?: Factura
    • ¿Serie?: Serie de la Factura de Venta creada previamente. 
  3. Ejecutar la acción Transmitir.
  4. En la pantalla "Asistente de Transmisión Electrónica"
    • Presionar el botón Param.
    • En el parámetro ¿Serie de la Factura? informar la Serie de la Factura de Venta creada previamente. 
    • En el parámetro ¿Factura Inicial? informar el Folio de la Factura de Venta creada previamente.
    • En el parámetro ¿Factura Final? informar el Folio de la Factura de Venta creada previamente.
    • Presionar Ok, para confirmar los parámetros.
    • Presionar Ok, para confirmar el inicio del proceso de la transmisión.
  5. Validar que el proceso de transmisión haya sido exitoso.
  6. En el XML de la Factura de Salida validar:
    • En el nodo /Encabezado/IdDoc se visualicen los elementos <FormaPago> (con el valor del parámetro MV_TKN_EMP) y <MedioPago> (con el valor que fue informado en el campo F2_MODCONS)

    • En el nodo /Encabezado/Totales se visualiza el monto del documento el monto de las Detracciones, así como se genera el nodo <TotSubMonto> para el Tipo 2003 (Detracciones) donde se muestran los elementos <CodTipoMonto> (con el valor que fue informado en el campo F2_CODDOC), <TasaConcepto> (Con el valor de la tasa de las Detracciones) y <MontoConcepto> (Con el valor total de las Detracciones.)

    • Si en la Condición de Pago el campo Tipo Pago (E4_MPAGSAT) se encuentra configurado con valor 2 - Crédito y existe cálculo de Detracciones en los nodos <Referencia> de las cuotas no se toma en cuenta en el elemento <Monto> el valor de las Detracciones.


04. INFORMACIÓN ADICIONAL

DICCIONARIO DE DATOS:

IMPORTANTE

Los ajustes al Diccionario de Datos fueron realizados en el pacote: 007891- DMINA-9655 - FE CON DETRACCIONES PER 12.1.27. (Uso interno )


Mediante el Configurador (SIGACFG), realizar las siguientes configuraciones al Diccionarios de Datos, en modo exclusivo y en conjunto con el Administrador del Sistema:

Crear la consulta estándar PER059 para el catálogo Códigos de bienes y servicios sujetos a detracciones - (SXB - Consultas Estándar).


Alias

Tipo

SecuenciaColumnaDescripciónContenido

PER059

1

01REBien/Servicio DetracF3I

PER059

2

0101Bien/Servicio DetracF812SXB("S059","Codigo")

PER059

5

01

VAR_IXB

En la tabla Encabezado de Fact. de Salida (SF2), se deben configurar los siguientes campos - (SX3 - Campos):

Campo

F2_CODDOC

Tipo

C

Tamaño

3

Decimal

0

Formato

@!

Título

Bien/Ser Det

Descripción

Bien/Ser de Detracción

Nivel

1

Utilizado

Obligatorio

No

Browse

No

Consulta

PER054

Val. Sistema

Vazio() .OR. ValidF3I("S054", M->F2_CODDOC, 1, 3)

Help

Código de bienes y servicios sujetos a detracciones, de acuerdo al catálogo 54 de la SUNAT.

Campo

F2_MODCONS

Tipo

C

Tamaño

3

Decimal

0

Formato

@!

Título

Medio Pago

Descripción

Medio de Pago

Nivel

1

Utilizado

Obligatorio

No

Browse

No

Consulta

PER059

Val. Sistema

Vazio() .or. ValidF3I("S059", M->F2_MODCONS,1,3)

Help

Código del medio de pago, de acuerdo al catálogo 59 de la SUNAT.


Para la funcionalidad de Generación de Factura de Venta desde Pedidos de Venta:


En la tabla Pedidos de Venta (SC5), se deben configurar los siguientes campos - (SX3 - Campos):

Campo

C5_CODVGLP

Tipo

C

Tamaño

3

Decimal

0

Formato

@!

Título

Bien/Ser Det

Descripción

Bien/Ser de Detracción

Nivel

1

Utilizado

Obligatorio

No

Browse

No

Consulta

PER054

Val. Sistema

Vazio() .or. ValidF3I("S054", M->C5_CODVGLP,1,3)

Help

Código de bienes y servicios sujetos a detracciones, de acuerdo al catálogo 54 de la SUNAT.


Campo

C5_MODANP

Tipo

C

Tamaño

3

Decimal

0

Formato

@!

Título

Medio Pago

Descripción

Medio de Pago

Nivel

1

Utilizado

Obligatorio

No

Browse

No

Consulta

PER059

Val. Sistema

Vazio() .or. ValidF3I("S059", M->C5_MODANP,1,3)

Help

Código del medio de pago, de acuerdo al catálogo 59 de la SUNAT.


ARCHIVO FATSPERTSS.INI:

Se enmarcan en color azul los ajustes que deben realizarse en el archivo estándar para activar la funcionalidad de Detracciones.

[XXX INICIALIZACION]
(PRE) SD2->(DbSetOrder(1))
(PRE) SB1->(DbSetOrder(1))
(PRE) SYA->(DbSetOrder(1))
(PRE) SAH->(DbSetOrder(1))

(PRE) _aTotal[002] := chr(13) + chr(10)
(PRE) _aTotal[003] := "99999999999999.99"
(PRE) _aTotal[004] := {"SD2",""}
(PRE) _aTotal[005] := IIf(Alltrim(SF2->F2_ESPECIE)=="NF","factura","notaDebito")
(PRE) _aTotal[006] := Alltrim(SF2->F2_SERIE) + Alltrim(SF2->F2_DOC) + Alltrim(SF2->F2_ESPECIE)
(PRE) _aTotal[007] := SuperGetMV("MV_CFDIAMB",.F.,"2")
(PRE) _aTotal[008] := M485TotEnc(1, SF2->F2_SERIE, SF2->F2_CLIENTE, SF2->F2_LOJA, SF2->F2_DOC, SF2->F2_ESPECIE, _aTotal[007],SF2->F2_SERIE2)
(PRE) _aTotal[009] := TamSX3("F2_DOC")[1]
(PRE) _aTotal[010] := ""
(PRE) _aTotal[011] := SUBSTR(DTOS(SF2->F2_EMISSAO),0,4) + "-" + SUBSTR(DTOS(SF2->F2_EMISSAO),5,2) + "-" + SUBSTR(DTOS(SF2->F2_EMISSAO),7,2) + "T" + SF2->F2_HORA+"Z"
(PRE) _aTotal[012] := ""
(PRE) _aTotal[013] := alltrim(SA1->A1_EST) == "EX"
(PRE) _aTotal[014] := alltrim(fGetSX5("XQ" + STR(SF2->F2_MOEDA,2)))
(PRE) _aTotal[015] := ""
(PRE) _aTotal[016] := ""
(PRE) _aTotal[017] := IIf(Alltrim(SF2->F2_ESPECIE)=="NF",IIf(Substr(SF2->F2_SERIE2,1,1)=="F","01","03"),"08")
(PRE) _aTotal[018] := M485TPPAG(xFilial("SE4"), SF2->F2_COND)
(PRE) _aTotal[019] := M485CUOTA(SF2->F2_FILIAL,SF2->F2_CLIENTE,SF2->F2_LOJA,SF2->F2_SERIE,SF2->F2_DOC,SF2->F2_ESPECIE,SF2->F2_HORA,_aTotal[008][7])
(PRE) _aTotal[020] := Alltrim(SuperGetMV("MV_TKN_EMP",.F.,""))
(PREREG) FsQuery(_aTotal[004],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.

[XXX ENCABEZADO]
(PRE) SA1->(MSSeek(xFilial("SA1") + SF2->F2_CLIENTE + SF2->F2_LOJA))
(PRE) SYA->(MsSeek(xFilial("SYA") + SA1->A1_PAIS))
(PREREG) (_aTotal[001] := '<?xml version="1.0" encoding="iso-8859-1"?>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += '<DTE version="1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="DTE_v1.0.xsd">' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += '<Documento ID="'+ ALLTRIM(SF2->F2_SERIE2) + ALLTRIM(SF2->F2_DOC) +'">' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += '<Encabezado>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <IdDoc>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <Ambiente>' + _aTotal[007] + '</Ambiente>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <TipoEmision>' + IIf(Alltrim(SF2->F2_ESPECIE)=="NF",SF2->F2_TIPONF,"NORMAL") + '</TipoEmision>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <ContenidoTC></ContenidoTC>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <Tipo>' + _aTotal[017] + '</Tipo>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <Serie>' + Alltrim(SF2->F2_SERIE2) + '</Serie>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <Numero>' + ALLTRIM(substr(SF2->F2_DOC,(_aTotal[009]-7),8)) + '</Numero>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <Estado>ORIGINAL</Estado>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <NumeroInterno>' + Alltrim(SF2->F2_DOC) + '</NumeroInterno>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <FechaEmis>' + _aTotal[011] + '</FechaEmis>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += IIf(Len(_aTotal[008])>= 6 .And. _aTotal[008][6],' <FormaPago>' + Alltrim(_aTotal[020]) + '</FormaPago>' + _aTotal[002],""),.T.)
(PREREG) (_aTotal[001] += IIf(SF2->(ColumnPos("F2_MODCONS")) > 0 .And. _aTotal[008][6],' <MedioPago>' + Alltrim(SF2->F2_MODCONS) + '</MedioPago>' + _aTotal[002],""),.T.)
(PREREG) (_aTotal[001] += IIF(Alltrim(SF2->F2_ESPECIE)=="NF" .And. Substr(SF2->F2_SERIE2,1,1)=="F",' <CondPago>' + IIf(_aTotal[018] == "1","Contado","Credito") + '</CondPago>' + _aTotal[002],""),.T.)
(PREREG) (_aTotal[001] += ' </IdDoc>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <Emisor>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <TipoContribuyente></TipoContribuyente>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <RegimenContable></RegimenContable>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <IDEmisor>' + Alltrim(SM0->M0_CGC) + '</IDEmisor>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <NmbEmisor>' + Alltrim(SM0->M0_NOME) + '</NmbEmisor>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <NombreEmisor>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <PrimerNombre>' + Alltrim(SM0->M0_NOMECOM) + '</PrimerNombre>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' </NombreEmisor>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <FechaInicioActividades>2016-01-01</FechaInicioActividades>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <DomFiscal>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <Calle>' + Alltrim(SM0->M0_ENDENT) + " " + Alltrim(SM0->M0_COMPENT) + '</Calle>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <Departamento>' + Alltrim(SM0->M0_CIDENT) + '</Departamento>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <Distrito>' + Alltrim(SM0->M0_CIDENT) + '</Distrito>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <Ciudad>' + Alltrim(SM0->M0_CIDENT) + '</Ciudad>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <Municipio>' + Alltrim(SM0->M0_CIDENT) + '</Municipio>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <Pais>PE</Pais>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <CodigoPostal>' + ALLTRIM(SM0->M0_CEPENT) + '</CodigoPostal>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <GLN>' + Alltrim(SM0->M0_DSCCNA)+ '</GLN>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' </DomFiscal>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <LugarExped>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <Calle>' + Alltrim(SM0->M0_ENDENT) + " " + Alltrim(SM0->M0_COMPENT) + '</Calle>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' </LugarExped>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' </Emisor>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <Receptor>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <DocRecep>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <TipoDocRecep>' + Alltrim(SA1->A1_TIPDOC) + '</TipoDocRecep>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <NroDocRecep>' + IIF(Alltrim(SA1->A1_TIPDOC) $ "06",ALLTRIM(SA1->A1_CGC),IIF(_aTotal[013],"-",ALLTRIM(SA1->A1_PFISICA))) + '</NroDocRecep>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' </DocRecep>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <NmbRecep>' + Alltrim(SA1->A1_NOME) + '</NmbRecep>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += IIF(!Empty(SA1->A1_EMAIL),' <Contacto>' + ALLTRIM(SA1->A1_EMAIL) + '</Contacto>' + _aTotal[002],""),.T.)
(PREREG) (_aTotal[001] += ' <DomFiscalRcp>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <Calle>'+ Alltrim(SA1->A1_END) +'</Calle>'+ _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <Departamento>'+ fGetSX5("12"+SA1->A1_EST) + '</Departamento>'+ _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <Distrito>' + alltrim(SA1->A1_BAIRRO) + '</Distrito>'+ _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <Ciudad>' + alltrim(SA1->A1_BAIRRO) + '</Ciudad>'+ _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <Municipio>' + alltrim(SA1->A1_MUN) + '</Municipio>'+ _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <Pais>' + Alltrim(Posicione("SYA",1,xFilial("SYA") + SA1->A1_PAIS,"SYA->YA_CODERP")) + '</Pais>'+ _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <CodigoPostal>' + Alltrim(SA1->A1_CEP) + '</CodigoPostal>'+ _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <GLN>' + Alltrim(SA1->A1_GLN) + '</GLN>'+ _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' </DomFiscalRcp>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' </Receptor>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <Transporte>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <MedioTransporte>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <MetodoTransp>MetodoTransp</MetodoTransp>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' </MedioTransporte>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' </Transporte>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <Totales>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <Moneda>' + _aTotal[014] + '</Moneda>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <SubTotal>' + Alltrim(TRANSFORM(_aTotal[008][2], _aTotal[003])) + '</SubTotal>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += IIF(SF2->F2_DESCONT > 0,' <MntDcto>' + Alltrim(TRANSFORM(SF2->F2_DESCONT, _aTotal[003])) + '</MntDcto>' + _aTotal[002],""),.T.)
(PREREG) (_aTotal[001] += IIf(Len(_aTotal[008])>= 6 .And. _aTotal[008][6] .And. _aTotal[018] == "2",' <MntRet>' + Alltrim(TRANSFORM(SF2->F2_VALBRUT-_aTotal[008][7],_aTotal[003])) + '</MntRet>' + _aTotal[002],""),.T.)
(PREREG) (_aTotal[001] += ' <VlrPagar>' + Alltrim(TRANSFORM( IIF(!_aTotal[008][3],SF2->F2_VALBRUT,0), _aTotal[003])) + '</VlrPagar>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <VlrPalabras>' + IIF(!_aTotal[008][3],EXTENSO(SF2->F2_VALBRUT,.f.,SF2->F2_MOEDA), fCero2Txt(SF2->F2_MOEDA))+ '</VlrPalabras>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <MontoPropina>0.00</MontoPropina>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += _aTotal[008][4],.T.)
(PREREG) (_aTotal[001] += ' </Totales>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += _aTotal[008][5],.T.)
(PREREG) (_aTotal[001] += '</Encabezado>' + _aTotal[002],.T.)

[SD2 INVOICE]
(PRE) DbGoTop()
(PREREG) (SB1->(DbSeek(xFilial("SB1") + SD2->D2_COD)),.T.)
(PREREG) (SAH->(DbSeek(xFilial("SAH") + SB1->B1_UM)),.T.)
(PREREG) _aTotal[010] := M485DETIMP(SD2->D2_SERIE,SD2->D2_CLIENTE,SD2->D2_LOJA,SD2->D2_DOC,SD2->D2_ITEM,SF2->F2_ESPECIE,SD2->D2_COD, 1)
(PREREG) _aTotal[016] := Posicione("SAH",1,xFilial("SAH")+ SB1->B1_UM,"AH_COD_CO")
(PREREG) (_aTotal[001] += '<Detalle>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <NroLinDet>' + Alltrim(SD2->D2_ITEM) + '</NroLinDet>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <CdgItem>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <TpoCodigo>' + Alltrim(SB1->B1_PRODSAT) + '</TpoCodigo>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <VlrCodigo>' + Alltrim(SB1->B1_COD) + '</VlrCodigo>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' </CdgItem>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <IndExe>1</IndExe>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <DscLang>ES</DscLang>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <DscItem>' + Alltrim(SB1->B1_DESC) + '</DscItem>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <QtyItem>' + Alltrim(TRANSFORM(SD2->D2_QUANT,_aTotal[003])) + '</QtyItem>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <UnmdItem>' + _aTotal[016] + '</UnmdItem>'+ _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <PrcBrutoItem>' + Alltrim(TRANSFORM(IIF(!_aTotal[010][7],_aTotal[010][1],0),_aTotal[003])) + '</PrcBrutoItem>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <PrcNetoItem>' + Alltrim(TRANSFORM(_aTotal[010][2],_aTotal[003])) + '</PrcNetoItem>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <DescuentoMonto>' + Alltrim(TRANSFORM(SD2->D2_DESCON,_aTotal[003])) + '</DescuentoMonto>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += _aTotal[010][3],.T.)
(PREREG) (_aTotal[001] += _aTotal[010][5],.T.)
(PREREG) (_aTotal[001] += ' <MontoBrutoItem>' + ALLTRIM(TRANSFORM(_aTotal[010][1] ,_aTotal[003])) +'</MontoBrutoItem>'+ _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <MontoNetoItem>' + ALLTRIM(TRANSFORM(_aTotal[010][1] ,_aTotal[003])) +'</MontoNetoItem>'+ _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <MontoTotalItem>' + ALLTRIM(TRANSFORM(_aTotal[010][4] ,_aTotal[003])) +'</MontoTotalItem>'+ _aTotal[002],.T.)
(PREREG) (_aTotal[001] += _aTotal[010][6],.T.)
(PREREG) (_aTotal[001] += '</Detalle>' + _aTotal[002],.T.)

[XXX INVOICE_FIN]
(PREREG) (_aTotal[001] := IIF(Alltrim(SF2->F2_ESPECIE)=="NF" .And. Substr(SF2->F2_SERIE2,1,1)=="F" .And. _aTotal[018] == "2",_aTotal[019][1],""),.T.)
(PREREG) _aTotal[015] += IIF(Alltrim(SF2->F2_ESPECIE)=="NF","",M485GETREF(SF2->F2_NFREF,SF2->F2_SERREF,SF2->F2_CLIENTE,SF2->F2_LOJA,SF2->F2_ESPECIE,.F.,SF2->F2_MOTIVO,SF2->F2_TIPREF))
(PREREG) (_aTotal[001] += _aTotal[015],.T.)
(PREREG) (_aTotal[001] += '<CAE>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <Tipo>String</Tipo>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <NumeroInicial>' + Alltrim(SF2->F2_DOC) + '</NumeroInicial>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <NumeroFinal>' + Alltrim(SF2->F2_DOC) + '</NumeroFinal>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <NroResolucion>' + Alltrim(SF2->F2_DOC) + '</NroResolucion>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += ' <FechaResolucion>' + Substr(_aTotal[011],1,10) + '</FechaResolucion>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += '</CAE>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += '<TimeStamp>' + _aTotal[011] + '</TimeStamp>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += '</Documento>' + _aTotal[002],.T.)
(PREREG) (_aTotal[001] += '</DTE>',.T.)
(PREREG) ENCODEUTF8(_aTotal[001])

(POS) FsQuery(_aTotal[004],2)

[XXX FACTURA]
(PRE) _aTotal[094] := _aTotal[006] + ".XML"
(ARQ) _aTotal[094]


¡IMPORTANTE!

Se debe contar con la funcionalidad de Facturación Electrónica para el país Perú con transmisión a la SUNAT a través de TSS-Signature desde la rutina de Transmisión Electrónica (MATA485); y la solución aplica para versión 12.1.17, 12.1.27 o superior.


05. ASUNTOS RELACIONADOS

  • Documento Técnico de Generación de documentos electrónicos con TSS para país Perú UBL 2.1
  • Documento Técnico para Nodo de Forma de Pago para Perú TSS-Signature