{ ------------------------------------------------------------------------------- PROGRAMA : EDPRRP027 OBJETIVO : Listar las Entrada de Diario Mat. Prima Recibida PROGRAMADOR : Juan F. Soto FECHA REALIZACION : Mayo 20, 1994. ------------------------------------------------------------------------------- } GLOBALS "lqprgb000.4gl" DEFINE fecha1, fecha2 DATE DEFINE detalla CHAR(30) DEFINE entra CHAR(14), p_fecha CHAR(10) DEFINE afecta CHAR(1) DEFINE entra1 CHAR(5), idz,i INT, t_costst,t_variacion DEC(12,2) DEFINE diario1 RECORD cuenta_no LIKE cgtb00001.cuenta_no, debito DECIMAL(18,2) END RECORD FUNCTION entrada027_e() DEFINE longitud SMALLINT DEFINE handler om.SaxDocumentHandler, -- return value from fgl_report_commitCurrentSettings() r_filename2 STRING -- filename of Report Design Document including .4rp extension --r_output STRING, -- output format option -- preview INTEGER # WHENEVER ERROR CONTINUE ##### Abriendo y desplegando el formulario de captura de datos OPEN FORM entrada27 FROM "lqfmfu001" DISPLAY FORM entrada27 DISPLAY "entrada027" AT 4,3 DISPLAY "Entrada de Diario Mat. Importada Rec." AT 6,21 ###### Aceptando los valores para el rango de fecha INPUT BY NAME entra,fecha1,fecha2,afecta,detalla AFTER FIELD entra LET longitud = LENGTH(entra) IF longitud != 14 THEN LET numero_msg = 77 CALL msg(numero_msg) NEXT FIELD entra END IF SELECT unique a.ref FROM cgtb00004 a WHERE a.ref=entra AND a.status_t IS NULL IF STATUS != NOTFOUND THEN ERROR "(12) REGISTRO EXISTE" NEXT FIELD entra END IF LET entra1 = entra BEFORE FIELD fecha1 SELECT MAX(a.fecha) INTO p_fecha FROM cgtb00004 a WHERE a.ref[1,5] = entra1 AND a.status_t IS NULL LET fecha1 = p_fecha + 1 DISPLAY BY NAME fecha1 AFTER FIELD fecha1 IF fecha1 IS NULL THEN ERROR "(16) CAMPO EN BLANCO" NEXT FIELD fecha1 END IF IF fecha1 <= p_fecha THEN LET existe = "S" END IF AFTER FIELD fecha2 IF fecha2 is null THEN ERROR "(16) CAMPO EN BLANCO" NEXT FIELD fecha2 END IF IF fecha1 > fecha2 THEN ERROR "(149) FECHA NO PUEDE SER MAYOR QUE LA ANTERIOR" NEXT FIELD fecha1 END IF ###### Selecionando en rango de fecha de la tabla de periodo para el fecha2 LET p_fechas = fecha2 using "ddmmyy" CALL prd(p_fechas,usuarios) RETURNING bandera IF bandera = 1 THEN LET bandera = 0 NEXT FIELD fecha2 END IF AFTER INPUT IF int_flag THEN ERROR "(2) OPERACION CANCELADA" LET int_flag = false RETURN END IF SELECT * INTO p_companias.* FROM companias a END INPUT ##### Creando la facilidad para cancelar proceso con SUPR LET idx = idx - 1 LET idz = 1 LET r_filename2 ="lqprrp004e.4rp" # Busca la informacion requerida DISPLAY "<< Buscando Informacion ... Espere Por Favor. >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) # CALL configureoutput("SVG") RETURNING handler # START REPORT entrada64 TO XML HANDLER handler IF idx = 1 THEN IF fgl_report_loadCurrentSettings(r_filename2) THEN CALL seleccionarsalida() RETURNING r_output --LET preview=1 CALL fgl_report_selectDevice(r_output) -- changing default --CALL fgl_report_selectPreview(preview) -- changing default LET handler = fgl_report_commitCurrentSettings() -- commit changes END IF LET idx = 2 START REPORT entrada64_e TO XML HANDLER HANDLER END IF DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE (REVERSE) ##### Loop para enviar informacion al reporte DECLARE buscar CURSOR FOR SELECT '1151' as cuenta,SUM(c.cantidad_oc*b.costo_st) FROM intb00013 b,cgtb00018 c,cgtb00017 d WHERE b.status_t IS NULL and b.cod_n = b.cod_n and b.cod_grupo = b.cod_grupo and b.cod_tipo = b.cod_tipo and b.cod_sec = b.cod_sec and c.num_oc = d.num_oc and d.fecha BETWEEN fecha1 AND fecha2 AND d.status_t IS NULL AND c.status_t IS NULL OPEN buscar WHILE STATUS != NOTFOUND FETCH buscar INTO diario1.* IF status = NOTFOUND THEN EXIT WHILE END IF IF int_flag THEN ERROR "(2) OPERACION CANCELADA" LET int_flag = FALSE RETURN END IF LET diario1.debito = t_costst OUTPUT TO REPORT entrada64_e(diario1.*,fecha1,fecha2,detalla,entra) END WHILE FINISH REPORT entrada64 RUN imprime CLEAR SCREEN END FUNCTION #### Funcion para dar salida ordenada a la informacion requerida de #### una entrada de diario de nominas local REPORT entrada64_e(x,fecha1,fecha2,detalle1,entrada) DEFINE x RECORD cuenta_no LIKE cgtb00001.cuenta_no, debito DECIMAL(10,2) END RECORD ### Acumula los valores de las diferentes cuentas para entrada diario de nomina DEFINE debito,credito DECIMAL(12,2) DEFINE detalle1 CHAR(30) DEFINE fecha1,fecha2 DATE #### Almacena las fecha del rango de busqueda DEFINE hora CHAR(5) DEFINE cuenta CHAR(30) DEFINE entrada, hoy CHAR(14), nombre_cta LIKE cgtb00001.descripcion FORMAT PAGE HEADER LET hora = TIME LET hoy = today using "dd/mm/yy" IF debito is null THEN LET debito = 0 END IF ON EVERY ROW SELECT a.descripcion INTO nombre_cta FROM cgtb00001 a WHERE a.cuenta_no = x.cuenta_no PRINTX x.cuenta_no, nombre_cta, x.debito,p_companias.nombre LET debito = debito + x.debito IF afecta = "S" THEN INSERT INTO cgtb00004 VALUES(fecha2,1,entrada,x.cuenta_no,null,null,null,null, detalle1,null,null,x.debito,0,null,SUSER_SNAME(),GETDATE(), null,null) END IF ON LAST ROW SELECT a.descripcion INTO nombre_cta FROM cgtb00001 a WHERE a.cuenta_no = "1152" IF credito is null THEN LET credito = 0 END IF ###### Acumulando totales por columna LET cuenta = "1152 ",nombre_cta PRINTX cuenta, t_variacion IF t_variacion > 0 THEN --PRINTX t_variacion LET debito = debito + t_variacion IF afecta = "S" THEN INSERT INTO cgtb00004 VALUES (fecha2,1,entrada,"1152",null,null,null,null,detalle1, null,null,t_variacion,0,null,SUSER_SNAME(),GETDATE(),null,null) END IF ELSE --PRINTX t_variacion LET t_variacion = t_variacion * -1 LET credito = credito + t_variacion IF afecta = "S" THEN INSERT INTO cgtb00004 VALUES (fecha2,1,entrada,"1152",null,null,null,null,detalle1, null,null,0,t_variacion,null,SUSER_SNAME(),GETDATE(),null,null) END IF END IF # Impresion detalle de la entrada con ordenes de compras --LET entrada27[i].cuenta_no --LET entrada27[i].cod_aux --LET entrada27[i].cod_sec --LET entrada27[i].num_doc --LET entrada27[i].valor FOR i = 1 TO idx IF entrada27[i].cod_aux is not null THEN IF entrada27[i].valor < 0 THEN LET entrada27[i].valor = entrada27[i].valor * -1 END IF {PRINTX entrada27[i].cuenta_no, entrada27[i].cod_aux, entrada27[i].cod_sec, entrada27[i].num_doc, entrada27[i].valor} IF entrada27[i].valor is not null THEN LET credito = credito + entrada27[i].valor END IF END IF PRINTX entrada27[i].cuenta_no, entrada27[i].cod_aux, entrada27[i].cod_sec, entrada27[i].num_doc, entrada27[i].valor IF afecta = "S" THEN INSERT INTO cgtb00004 VALUES (fecha2,1,entrada,entrada27[i].cuenta_no,null, entrada27[i].num_doc,entrada27[i].cod_aux, entrada27[i].cod_sec,detalle1,null,null,0, entrada27[i].valor,null, SUSER_SNAME(),GETDATE(),null,null) END IF END FOR ###### Imprime total DEBITO y total CREDITO --PRINT COLUMN 35,"Totales-->", PRINTX debito, credito LET debito = 0 LET credito = 0 PRINTX detalle1 END REPORT