{ PROGRAMA: CGPRRP033 OBJETIVO: GENERAR INFORMACION NCF ANULADOS FECHA : AGOSTO 05, 2024 } IMPORT util DEFINE usuarios,clave,rncemisor VARCHAR(50), ruta_anulados STRING, numero_msg INT MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT to "marmotech" USER usuarios USING clave SELECT a.rnc INTO rncemisor FROM companias a # CALL generafile() CALL generadata() END MAIN FUNCTION generadata() DEFINE documento_anular RECORD nombrefile,rnc_emisor,cantidadEncf,fechaAnulacion,numeroLineas,tipoeCF, secuenciaeCFdesde,secuenciaeCFhasta, cantidadeCFanulados STRING END RECORD, mensaje, respuesta, codigo STRING DEFINE fecha1,fecha2 DATE, ano,mes,ncf_ini,ncf_fin INT, datos RECORD fecha DATE, factura INT, estado VARCHAR(1), ncf_f,ncf_d VARCHAR(13) END RECORD, idx INT, tiponcf VARCHAR(3) OPEN WINDOW w1 WITH FORM "cgfmrp033" INPUT BY NAME ano,mes BEFORE INPUT LET ruta_anulados= fgl_getenv("RUTA_XML_ANULADOS") AFTER INPUT IF int_flag THEN CALL msg(2) LET int_flag = FALSE RETURN END IF SELECT a.fecha_inicio,a.fecha_corte INTO fecha1,fecha2 FROM prdtable a WHERE a.ano = ano AND a.mes = mes DISPLAY BY NAME fecha1,fecha2 EXIT INPUT END INPUT DECLARE buscaencf CURSOR FOR SELECT a.fecha_factura,a.factura,a.status_t,a.ncf,b.Encf,B.Estado,c.codigo_dgii,b.tiponcf from vetb00002 a INNER JOIN vetb00072 c on c.documento = a.factura and c.tipo_doc = 'FT' and c.sucid=a.sucid and c.codigo_dgii='31' left outer join encf b on a.ncf = b.encf AND b.tiponcf = 'E31' where a.fecha_factura between fecha1 and fecha2 AND a.ncf not liKE 'B%' and a.estado_dgii not in ('Anulado','Aceptado','Rechazado') and b.encf is NULL order by a.ncf LET idx=1 FOREACH buscaencf INTO datos.* LET ncf_ini = datos.ncf_f[4,13] LET tiponcf = datos.ncf_f[2,3] 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=1 LET documento_anular.fechaAnulacion = util.Datetime.format(current, "%d-%m-%Y %H:%M:%S" ) LET documento_anular.numeroLineas=1 LET documento_anular.tipoeCF=tiponcf LET documento_anular.secuenciaeCFdesde=datos.ncf_f LET documento_anular.secuenciaeCFhasta=datos.ncf_f LET documento_anular.cantidadeCFanulados=1 CALL anularencf(documento_anular.*) RETURNING mensaje, respuesta, codigo DISPLAY "DATOS: ", datos.ncf_f[4,13] UPDATE vetb00002 SET estado_dgii = 'Anulado' WHERE ncf = datos.ncf_f LET idx=idx+1 END FOREACH CLOSE WINDOW w1 END FUNCTION FUNCTION generafile() DEFINE documento_anular RECORD nombrefile,rnc_emisor,cantidadEncf,fechaAnulacion,numeroLineas,tipoeCF, secuenciaeCFdesde,secuenciaeCFhasta, cantidadeCFanulados STRING END RECORD DEFINE fech_ini,fech_fin DATE, ncf_ini,ncf_fin, tiponcf INT, comprobante_ini, comprobante_fin STRING DEFINE sequence_space INT LET sequence_space = 10 INPUT BY NAME fech_ini, fech_fin,tiponcf,ncf_ini, ncf_fin ATTRIBUTES(UNBUFFERED) BEFORE INPUT LET ruta_anulados= fgl_getenv("RUTA_XML_ANULADOS") 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, sequence_space, tiponcf) LET comprobante_fin = build_whole_voucher(ncf_fin, sequence_space, tiponcf) SELECT * FROM vetb00002 WHERE ncf BETWEEN comprobante_ini AND comprobante_fin 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=1 LET documento_anular.fechaAnulacion = util.Datetime.format(current, "%d-%m-%Y %H:%M:%S" ) LET documento_anular.numeroLineas=1 LET documento_anular.tipoeCF=tiponcf LET documento_anular.secuenciaeCFdesde= comprobante_ini LET documento_anular.secuenciaeCFhasta= comprobante_fin LET documento_anular.cantidadeCFanulados=1 DISPLAY documento_anular.* # CALL anularencf(documento_anular.*) END INPUT END FUNCTION FUNCTION build_whole_voucher(sequence_number, sequence_zeros, voucher_type) DEFINE sequence_number INT, sequence_zeros INT, voucher_type INT DEFINE answer, container STRING, i INT LET answer= 'E', voucher_type LET container = sequence_number LET sequence_zeros = sequence_zeros - container.getLength() FOR i = 1 TO sequence_zeros LET answer = answer, '0' END FOR LET answer = answer, sequence_number RETURN answer END FUNCTION