| Línea de producto: | Microsiga Protheus. | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Segmento: | Servicios - Mercado Internacional. | ||||||||
| Módulo: | SIGAFIN - Financiero. | ||||||||
| Función: |
| ||||||||
| Ticket: | 7468740 . | ||||||||
| Issue: | DMINA-7857 | DMINA-8126. | ||||||||
| Versiones | 12.1.17 | 12.1.23 | 12.1.25 |
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
...
).
DIMOSA recibe por parte de sus clientes una clave de referencia para que sea colocada en el atributo NumOperación y de esta manera poder identificar la operación, sin embargo la clave no puede ser informada en el campo EL_NUMERO ya que la clave suele tener una longitud mayor a la del campo 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).
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.
...
IMPORTANTE: Se activa la funcionalidad del Punto de Entrada solamente para los recibos de cobro diversos.
El Punto de Entrada F087ANUMOP no recibe ningún parámetro , y se deberá retornar una variable tipo caracter , la cual tomara el valor de
Ejemplo del Punto de Entrada F087ANUMOP *:
User function F087ANUMOP()
Local cNumOp := "" //Numero de operación
cNumOp:= AllTrim(SEL->EL_NUMERO)+AllTrim(SEL->EL_RECIBO)
Return cNumOp
NOTA: En el Punto de Entrada de ejemplo se indica que la cadena que se retornara sera la concatenación del numero de titulo con el numero de recibo. Cabe mencionar que al momento de la ejecución del punto de entrada se tienen abiertas las tablas de clientes(SA1) y de recibos de cobro(SEL) , por lo que se pueden concatenar mas campos de estas tablas.
Pasos para validar la solución:
Pre requisitos
Recibos de CobroPasos para validar la solución (Cobro Diverso):
El Punto de Entrada 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.
Referencia: http://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/guiacomplepagos_07092017.pdf