{ PROGRAMA : CGPRRP034 OBJETIVO : ANULAR RANGO DE NCF'S DESARROLLADOR : ING. ELVIS GARCÍA FECHA : AGOSTO 05, 2024 } IMPORT util DEFINE usuarios,clave,rncemisor VARCHAR(50), ruta_anulados STRING, numero_msg INT DEFINE codigodgii CHAR(14), descripcion CHAR(80), fecha_vencimiento DATE MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT to "marmotech" AS "IFMX" USER usuarios USING clave SELECT a.rnc INTO rncemisor FROM companias a CALL genera_anulacion() END MAIN FUNCTION genera_anulacion() DEFINE documento_anular RECORD nombrefile,rnc_emisor,cantidadEncf,fechaAnulacion,numeroLineas,tipoeCF, secuenciaeCFdesde,secuenciaeCFhasta, cantidadeCFanulados STRING END RECORD, mensaje, respuesta, codigo STRING DEFINE flag, ncf_ini,ncf_fin, comprobante_ini, comprobante_fin STRING, range INT, tiponcf VARCHAR(3) OPEN WINDOW w1 WITH FORM 'cgfmrp034' INPUT BY NAME tiponcf,ncf_ini, ncf_fin ATTRIBUTES(UNBUFFERED, WITHOUT DEFAULTS) BEFORE INPUT LET ruta_anulados= fgl_getenv("RUTA_XML_ANULADOS") ON ACTION f2 CALL btipo_fact(1,'FT') RETURNING codigodgii,descripcion,fecha_vencimiento LET tiponcf = codigodgii DISPLAY BY NAME tiponcf ON ACTION CANCEL EXIT INPUT AFTER INPUT LET numero_msg = 16 -- IF fech_ini IS NULL THEN -- CALL msg(numero_msg) -- NEXT FIELD fech_ini -- END IF -- -- IF fech_fin IS NULL THEN -- CALL msg(numero_msg) -- NEXT FIELD fech_fin -- END IF IF tiponcf IS NULL THEN CALL msg(numero_msg) NEXT FIELD tiponcf END IF IF ncf_ini IS NULL THEN CALL msg(numero_msg) NEXT FIELD ncf_ini END IF IF ncf_fin IS NULL THEN CALL msg(numero_msg) NEXT FIELD ncf_fin END IF LET comprobante_ini = build_whole_voucher(ncf_ini, tiponcf) LET comprobante_fin = build_whole_voucher(ncf_fin, tiponcf) LET range = (ncf_fin - ncf_ini) + 1 DISPLAY comprobante_ini DISPLAY comprobante_fin INITIALIZE flag TO NULL SELECT TOP (1) ncf INTO flag FROM vetb00002 WHERE ncf BETWEEN comprobante_ini AND comprobante_fin AND estado_dgii NOT IN ('Anulado', 'Rechazado') IF flag IS NULL THEN LET documento_anular.nombrefile = ruta_anulados CLIPPED,rncemisor CLIPPED,"AENCF",tiponcf CLIPPED,"_",ncf_ini USING "<<<<<<<",".xml" LET documento_anular.rnc_emisor=rncemisor CLIPPED LET documento_anular.cantidadEncf= range LET documento_anular.fechaAnulacion = util.Datetime.format(current, "%d-%m-%Y %H:%M:%S" ) LET documento_anular.numeroLineas=1 LET documento_anular.tipoeCF=tiponcf[2,3] LET documento_anular.secuenciaeCFdesde= comprobante_ini LET documento_anular.secuenciaeCFhasta= comprobante_fin LET documento_anular.cantidadeCFanulados=range CALL anularencf(documento_anular.*) RETURNING mensaje, respuesta, codigo DISPLAY mensaje, respuesta, codigo IF codigo = 200 THEN LET respuesta = "LAS SECUENCIAS FUERON ANULADAS CORRECTAMENTE" ELSE IF codigo = 400 THEN LET respuesta = "LAS SECUENCIAS QUE HAS INTENTADO ANULAR YA HAN SIDO UTILIZADAS" CALL fgl_winmessage('ANULACION ESTADO', respuesta,NULL) NEXT FIELD ncf_ini ELSE LET respuesta = "HA OCURRIDO UN ERROR CODIGO: ", codigo CALL fgl_winmessage('ANULACION ESTADO', respuesta,NULL) NEXT FIELD ncf_ini END IF END IF INSERT INTO vetb00046(ncf_desde, ncf_hasta, usuario, fecha_anulacion, respuesta_dgii) VALUES (comprobante_ini, comprobante_fin, usuarios, getdate(), respuesta) CALL fgl_winmessage('ANULACION ESTADO', respuesta,NULL) ELSE CALL fgl_winmessage('NCF ENCONTRADO', 'EXISTE UN NCF EN EL RANGO ESTABLECIDO YA FACTURADO',NULL) NEXT FIELD ncf_ini END IF END INPUT CLOSE WINDOW w1 END FUNCTION FUNCTION build_whole_voucher(sequence_number, voucher_type) DEFINE sequence_number INT, voucher_type STRING DEFINE answer STRING, i INT LET answer= voucher_type LET answer = answer, sequence_number USING "&&&&&&&&&&" RETURN answer END FUNCTION