Versões comparadas

Chave

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

01. DATOS GENERALES


Línea de producto: Microsiga Protheus.
Segmento:Servicios - Mercado Internacional.
Módulo:SIGAFAT SIGAFIN - FacturaciónFinanciero.
Función:
RutinaNombre Técnico
LOCXGENFISA815Componentes de Ventas en Notas Fiscales.
LOCXNF2Cálculos de Notas Fiscales.
M486XFUNFunciones genéricas de documentos electrónicos.
FISA827Configuración responsabilidades-tributos del cliente.
Rutina(s) involucrada(s)Nombre Técnico
LOCXNFNotas FiscalesGeneración del XML de CFDI con complemento para recepción de pagos.
Ticket:72752997468740 .
Issue:DMINA-7857 | DMINA-77028126.
Versiones12.1.17 | 12.1.23 | 12.1.25


02. SITUACIÓN/REQUISITO

...

Actualmente la rutina de Generación

...

del XML de CFDI con complemento para recepción de pagos (FISA815) genera el atributo NumOperacion en el XML a partir de la concatenación del contenido de los campos Prefijo (EL_PREFIXO) y Numero (EL_NUMERO).

Por esta razón se solicitan agregar un punto de entrada que permita agregar más información en el atributo NumOperacion a partir del contenido del recibo (tabla SEL) en donde el cliente podrá definir la regla para llenar el atributo y no estar limitado al tamaño del campo EL_NUMERO. Cabe mencionar que este campo no puede cambiar su tamaño, debido a que se encuentra limitado al tamaño que tiene el grupo de campos para los números de documento (Por estándar 20).

03. SOLUCIÓN

Se realiza la activación del Punto de Entrada

...

F087ANUMOP, mediante el cual el usuario

...

podrá definir la información que retornará para el atributo NumOperacion, adicional se realiza modificación para que, si el tamaño del valor del atributo NumOperacion es mayor a 20 caracteres, se recorran en el formato de impresión los datos de Fecha y Forma de Pago.


Pre requisitos

  • Contar con una Factura de Venta generando su respectivo timbre fiscal.

Pasos para validar la solución (Cobro Diverso):

  1. Ingresar en el módulo Financiero (SIGAFIN) al menú "Actualizaciones | Cuentas por Cobrar| Cobros Diversos" (FINA087A).
  2. Informar los parámetros:
    • ¿Muestra Asientos? = No
    • ¿Agrupa Asientos? = No
    • ¿Asientos Online? = No
    • ¿Filtra Cliente? = Sin Filtro
    • ¿Para Generar Saldo? = RA
    • ¿Modifica Fecha? = No
    • ¿Emite comprobante? = No
    • ¿N° Ejemplare? = 1
    • ¿Considera sucursal? = Si
  3. Informar los campos del encabezado del Cobro Diverso.
  4. Capturar los datos del cobro, después avanzar a la siguiente ventana.
    • Se indicará el Valor correspondiente al saldo de la factura de venta.
  1. Seleccionar el cliente correspondiente a la Factura de Venta, avanzar a la siguiente ventana.
  2. Seleccionar la Factura de Venta e informar el importe a dar de baja, avanzar a la siguiente ventana.
  3. Validar el cuadre de Valores cobrados contra Títulos dados de baja en pantalla Recibo[Resumen], a continuación, dar clic en Confirmar.
  4. Se confirma la generación y timbrado del CFDI con complemento para la recepción de pagos.
  5. Validar que en el XML sea informado en el atributo NumOperacion la cadena generada conforme lo establecido en el punto de entrada.

...

Funciones genéricas de documentos electrónicos (M486XFUN): Se realiza corrección para que en el nodo TaxTotal del XML de documentos a transmitir desde la rutina Transmisión Electrónica (MATA486) el elemento cbc:Percent se muestre a 3 decimales para lo impuestos calculados al millar (cuando el código de impuesto se encuentra configurado en el parámetro MV_IMPMILL), en caso contrario se muestra a 2 decimales, ya que se está causando rechazo si todos los impuestos se envían con 3 decimales.

Configuración responsabilidades-tributos del cliente (FISA827): Se realiza ajuste para agregar disparador para visualizar la descripción de acuerdo a la información del código de responsabilidad DIAN o Tributos DIAN del Cliente.

IMPORTANTE: Se activa la funcionalidad del Punto de Entrada solamente para relacionar documentos a través de la acción Doc Ori desde la opción Factura y para la captura manual de los campos Doc. Original (D1_NFORI) y Serie Orig. (D1_SERIORI),  para Notas de Crédito de Cliente (NCC) y Notas de Débito de Cliente (NDC).

...

04. INFORMACIÓN ADICIONAL

El Punto de Entrada M465DORIFE recibe como parámetros Sucursal, Número de Documento, Serie del Documento, Código del Cliente y Código de la Tienda, y se deberá retornar una variable lógica con valor .F. para excluir la validación de que el documento a relacionar en la Nota de Crédito (NCC) haya sido transmitido previamente.

Ejemplo del Punto de Entrada M465DORIFE*:

User function M465DORIFE()

        Local lRet := .T.
        Local cCRLF := (chr(13) + chr(10) )
        Local cFilDoc := PARAMIXB[1]      // Sucursal
        Local cNumDoc := PARAMIXB[2] // Número de Documento
        Local cSerieDoc := PARAMIXB[3] // Serie
        Local cCodCli := PARAMIXB[4]    // Código de Cliente
        Local cCodLoj := PARAMIXB[5]   // Código de Tienda

If Alltrim(cSerieDoc) $ "A|B"
         lRet := .F.
EndIf

Return lRet

NOTA: En el Punto de Entrada de ejemplo se indica que, SI la serie es A o B, no se deberá de realizar validación de que el documento relacionado a la Nota de Crédito se haya sido transmitido previamente.

Pasos para validar la solución:

Notas de Crédito:

...

  1. ¿Formulario propio? = Si
  2. ¿Tipo de Factura? = Crédito

...

  • Utilizando opción "Facturas":
    1. Dar clic en opción "Doc Orig".
    2. En la ventana mostrada, seleccionar la opción "Facturas".
    3. Seleccionar los documentos a relacionar, dando doble clic:
      • Si se encuentra activa la funcionalidad de Facturación Electrónica (MV_PROVFE diferente de vacío) y se encuentra activo el Punto de Entrada M465DORIFE, solo se validará que el documento a relacionar haya sido transmitido si no se cumple la regla de negocios definida dentro de la función del usuario.
  • Forma manual:
    1. Informar datos del producto en la sección "Ítems".
    2. Informar los campos Doc. Original (D1_NFORI) y Serie Orig. (D1_SERIORI).
    3. Dar clic en el botón "Grabar", tras informar correctamente el Encabezado, Ítems y Pie del documento:
      • Si se encuentra activa la funcionalidad de Facturación Electrónica (MV_PROVFE diferente de vacío) y se encuentra activo el Punto de Entrada M465DORIFE, solo se validará que el documento a relacionar haya sido transmitido si no se cumple la regla de negocios definida dentro de la función del usuario.

...

F087ANUMOP  se reciben 2 parámetros, se recibe un arreglo aPagosRec que contiene todos los pagos que se efectuaron en el recibo de cobro y nNumPago que es el número de pago de 1 a n pagos que servirá como indice para buscar el pago correspondiente en el arreglo aPagosRec.

El array aPagosRec contiene la siguiente información:

aPagosRec [nNumPago][14][1][18] = Código del cliente.

aPagosRec [nNumPago][14][1][19] = Tienda.

aPagosRec [nNumPago][03] := Número del recibo de cobro

aPagosRec [nNumPago][25] := Serie del recibo.
aPagosRec [nNumPago][04] := Prefijo.
aPagosRec [nNumPago][05] := Parcialidad.

aPagosRec [nNumPago][06] := Tipo.
aPagosRec [nNumPago][11] := Moneda.
aPagosRec [nNumPago][_VALOR] := Monto del Pago.

aPagosRec[nNumPago][14] = Información del documento relacionado.
aPagosRec [nNumPago][17] := Banco.
aPagosRec[nNumPago][18] := Agencia.
aPagosRec[nNumPago][19] := Cuenta.
aPagosRec[nNumPago][20] := Banco Ch.
aPagosRec[nNumPago][21] := Agencia Ch.
aPagosRec[nNumPago][22] := Cuenta Ch.
aPagosRec[nNumPago][25] := Forma de Pago SAT = Compensación.
aPagosRec[nNumPago][27] := Cta Ord.
aPagosRec[nNumPago][28] := Tipo CEP.
aPagosRec[nNumPago][29] := Certificado CEP.
aPagosRec[nNumPago][30] := Cadena CEP.
aPagosRec[nNumPago][31] := Sello CEP.
aPagosRec[nNumPago][32] := Cta Ben.


Se deberá retornar una variable tipo carácter, valor que será visualizado en el atributo NumOperacion del XML de complemento de recepción de pago.

El siguiente ejemplo esta hecho utilizando la tabla SEL  en donde se agrego un nuevo campo.

#include 'protheus.ch'.

User function F087ANUMOP().
Local cNumOp := ""
Local aPagosRec := PARAMIXB[1] // Pagos del recibo de cobro.
Local nNumPago := PARAMIXB[2] // Numero de pago.

DbSelectArea("SEL") //Selección de la tabla de la cual se quiere buscar el campo de usuario.
SEL->(DBGoTop())
SEL->(DbSetOrder(8))//EL_FILIAL+EL_SERIE+EL_RECIBO+EL_TIPODOC+EL_PREFIXO+EL_NUMERO+EL_PARCELA+EL_TIPO
SEL->(DbSeek(xFilial("SEL") + aPagosRec[nNumPago][24] + aPagosRec[nNumPago][2]+ aPagosRec[nNumPago][7]+aPagosRec[nNumPago][4]+aPagosRec[nNumPago][3]+aPagosRec[nNumPago][5]+aPagosRec[nNumPago][6])) //Posicionamiento en el registro usando un indice único
cNumOp := AllTrim(SEL→EL_NUMOP)  //Se obtiene el valor del campo de usuario

Return cNumOp


NOTA: En el Punto de Entrada de ejemplo se indica que la cadena que se retornará será el campo de usuario Número Operación (EL_NUMOP) . Cabe mencionar que al momento de la ejecución del punto de entrada se puede posicionar en algunas tablas como de Clientes (SA1) y de Recibos de cobro (SEL), por lo que se podrán utilizar campos que ya existen de estas tablas  o campos nuevos que sean agregados y definir la regla para el armado del tributo NumOperacion. 


¡IMPORTANTE!

*En el Punto de Entrada

...

F087ANUMOP la variable de tipo carácter que se retorna debe cumplir con lo establecido en la Guía de Llenado del SAT pagina 23, referente al atributo NumOperacion donde se indica que el tamaño máximo deber ser 100 caracteres, tomando a consideración que dicha guía puede ser modificada en cualquier momento.

Referenciahttp://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/guiacomplepagos_07092017.pdf