190 lines
5.8 KiB
Plaintext
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 |