Files
MBS/PROYECTO/cgdir/cgprrp033.4gl
T

190 lines
5.8 KiB
Plaintext

{
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