{ =========================================================================== PROGRAMA : COPRRP023 SISTEMA : Sistema de Compras OBJETIVO : Produccion Mensual de Pila AUTOR : Tadeo A. Ferreras FECHA : Mayo 13, 1993 =========================================================================== } GLOBALS "coprgb000.4gl" DEFINE cod_ant CHAR(10) DEFINE idx2 INTEGER ###### Variable para buscar la informacion a imprimir DEFINE prt_term1 RECORD cod_n LIKE iptb00006.cod_n, cod_grupo LIKE iptb00006.cod_grupo, cod_tipo LIKE iptb00006.cod_tipo, cod_sec LIKE iptb00006.cod_sec, descrip_esp LIKE intb00001.descrip_esp, codigo CHAR(10), cantidad_2 LIKE iptb00006.cantidad_2, fecha SMALLINT, acumulado INTEGER END RECORD DEFINE prt_term RECORD cod_n LIKE iptb00006.cod_n, cod_grupo LIKE iptb00006.cod_grupo, cod_tipo LIKE iptb00006.cod_tipo, cod_sec LIKE iptb00006.cod_sec, descrip_esp LIKE intb00001.descrip_esp, codigo CHAR(10), cantidad_2 LIKE iptb00006.cantidad_2, fecha SMALLINT, acumulado INTEGER END RECORD, datos_b RECORD ano INTEGER, mes_in INTEGER, mes_fi INTEGER END RECORD, fecha_dat RECORD fecha SMALLINT END RECORD, fecha_in,fecha_fi DATE, fecha1 SMALLINT, salir,salir1 CHAR(1) FUNCTION coprrp023() DEFINE i,j,k,cantidad INTEGER CLEAR SCREEN #WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8 OPEN FORM cofmrp023 FROM "cofmrp023" CALL pantalla() DISPLAY "coprrp023" AT 4,3 ATTRIBUTE(YELLOW) DISPLAY "Produccion Mensual de Pila" AT 6,27 ATTRIBUTE(YELLOW) DISPLAY FORM cofmrp023 LET int_flag = FALSE LET tipo_papel = 1 CALL msgrp000(tipo_papel) ###### Aceptando los valores para el rango de fecha del cual desea el reporte INPUT BY NAME datos_b.* AFTER FIELD mes_in IF datos_b.mes_in IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD mes_in END IF IF datos_b.mes_in > 12 THEN LET numero_msg = 154 CALL msg(numero_msg) NEXT FIELD mes_in END IF BEFORE FIELD mes_fi LET datos_b.mes_fi = MONTH(today) DISPLAY BY NAME datos_b.mes_fi ATTRIBUTE(YELLOW) AFTER FIELD mes_fi IF datos_b.mes_in > 12 THEN LET numero_msg = 154 CALL msg(numero_msg) NEXT FIELD mes_in END IF IF datos_b.mes_fi IS NULL THEN LET datos_b.mes_fi = MONTH(today) END IF DISPLAY BY NAME datos_b.mes_fi ATTRIBUTE(YELLOW) IF datos_b.mes_in > datos_b.mes_fi THEN LET numero_msg = 51 CALL msg(numero_msg) NEXT FIELD mes_fi END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF ##### Selecionando la informacion requerida DECLARE busca SCROLL CURSOR FOR SELECT UNIQUE a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec FROM iptb00006 a WHERE a.status_t IS NULL AND a.cod_n = 3 ORDER BY 1,2,3,4 DISPLAY "Buscando codigos de pilas... Espere por Favor " AT 19,14 ATTRIBUTE(YELLOW) OPEN busca DECLARE busca2 SCROLL CURSOR FOR SELECT UNIQUE MONTH(fecha) FROM iptb00006 WHERE MONTH(fecha) BETWEEN datos_b.mes_in AND datos_b.mes_fi AND YEAR(fecha) = datos_b.ano DISPLAY "Buscando meses de produccion...Espere por Favor" AT 19,14 ATTRIBUTE(YELLOW) OPEN busca2 START REPORT rep01 TO "C:\\archivo" DISPLAY "Impresion En Proceso ... Espere por Favor " AT 19,14 ATTRIBUTE(REVERSE,BOLD) LET j=MONTH(datos_b.mes_in) LET i=MONTH(datos_b.mes_fi) LET k = 1 LET idx = 1 LET salir = "N" ##### Loop para buscar codigo del material WHILE salir != "S" FETCH ABSOLUTE idx busca INTO prt_term.* IF STATUS = NOTFOUND THEN LET salir = "S" EXIT WHILE END IF LET prt_term1.acumulado = 0 LET prt_term1.cod_n = prt_term.cod_n LET prt_term1.cod_grupo = prt_term.cod_grupo LET prt_term1.cod_tipo = prt_term.cod_tipo LET prt_term1.cod_sec = prt_term.cod_sec LET prt_term.codigo = prt_term.cod_n using "&","-", prt_term.cod_grupo using "&","-", prt_term.cod_tipo using "&&","-", prt_term.cod_sec using "&&&" LET prt_term1.codigo = prt_term.codigo LET prt_term.descrip_esp = null LET prt_term1.descrip_esp = null ###### Selecionando la descripcion del material SELECT b.descrip_esp INTO prt_term.descrip_esp FROM intb00001 b WHERE b.cod_n = prt_term.cod_n AND b.cod_grupo = prt_term.cod_grupo AND b.cod_tipo = prt_term.cod_tipo AND b.cod_sec = prt_term.cod_sec AND b.status_t IS NULL LET prt_term1.descrip_esp = prt_term.descrip_esp IF cod_ant != prt_term1.codigo THEN LET prt_term1.acumulado = 0 LET cod_ant = prt_term1.codigo END IF LET prt_term.cantidad_2 = 0 LET prt_term.acumulado = 0 LET idx2 = 1 LET salir1 = "N" ##### Loop para buscar las ventas WHILE salir1 != "S" FETCH ABSOLUTE idx2 busca2 INTO fecha_dat.* IF STATUS = NOTFOUND THEN LET idx2 = 1 LET salir1 = "S" EXIT WHILE END IF SELECT a.fecha_inicio,a.fecha_corte INTO fecha_in,fecha_fi FROM prdtable a WHERE a.mes = fecha_dat.fecha AND a.ano = datos_b.ano LET idx2 = idx2 + 1 LET prt_term1.fecha = fecha_dat.fecha LET cantidad = 0 ##### Selecionando el movimiento numero 20 SELECT SUM(a.cantidad_2) INTO cantidad FROM iptb00006 a WHERE a.fecha BETWEEN fecha_in AND fecha_fi AND a.cod_n = prt_term.cod_n AND a.cod_grupo = prt_term.cod_grupo AND a.cod_tipo = prt_term.cod_tipo AND a.cod_sec = prt_term.cod_sec AND a.cod_mov = 20 AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET cantidad = 0 END IF IF cantidad is null THEN LET cantidad = 0 END IF IF prt_term.acumulado is null THEN LET prt_term.acumulado = 0 END IF LET prt_term.cantidad_2 = cantidad LET prt_term.acumulado = prt_term.acumulado + prt_term.cantidad_2 LET prt_term1.cantidad_2 = cantidad LET prt_term1.acumulado = prt_term.acumulado OUTPUT TO REPORT rep01(prt_term1.*,datos_b.mes_in,datos_b.mes_fi) END WHILE LET idx = idx + 1 END WHILE FINISH REPORT rep01 RUN "type C:\\archivo > %USPRINT%" END FUNCTION ##### Funcion que imprime la informacion REPORT rep01(x,mes1,mes2) DEFINE x RECORD cod_n LIKE iptb00006.cod_n, cod_grupo LIKE iptb00006.cod_grupo, cod_tipo LIKE iptb00006.cod_tipo, cod_sec LIKE iptb00006.cod_sec, descrip_esp LIKE intb00001.descrip_esp, codigo CHAR(10), cantidad_2 LIKE iptb00006.cantidad_2, fecha SMALLINT, acumulado INTEGER END RECORD DEFINE mes1,mes2 SMALLINT DEFINE b_fecha_in,b_fecha_fi DATE DEFINE descrip,descrip1 CHAR(30) DEFINE i,j,acumulado INTEGER DEFINE nomen,mcodigo CHAR(13) DEFINE acumulado1,acumulado2 DECIMAL(12,2) DEFINE comprimido_12_off CHAR(2), comprimido_12_on CHAR(2), comprimido_on CHAR(2), comprimido_off CHAR(2), doble_on CHAR(2), doble_off CHAR(2), negrillas_on CHAR(2), negrillas_off CHAR(2), hora CHAR(5) OUTPUT LEFT MARGIN 2 TOP MARGIN 1 ##### Sorteando la informacion por fecha y codigo ORDER BY x.fecha,x.cod_n,x.cod_grupo,x.codigo FORMAT PAGE HEADER LET negrillas_on = ASCII 27, ASCII 69 LET negrillas_off = ASCII 27, ASCII 70 LET doble_on = ASCII 14 LET doble_off = ASCII 20 LET comprimido_on = ASCII 15 LET comprimido_off = ASCII 18 LET comprimido_12_on = ASCII 27, ASCII 77 LET comprimido_12_off = ASCII 27, ASCII 80 LET hora = time SELECT a.fecha_inicio INTO b_fecha_in FROM prdtable a WHERE a.mes = mes1 AND a.ano = YEAR(today) SELECT a.fecha_corte INTO b_fecha_fi FROM prdtable a WHERE a.mes = mes2 AND a.ano = YEAR(today) LET l = (80 - LENGTH(p_companias.nombre CLIPPED))/2 PRINT COLUMN 1, negrillas_on,comprimido_off PRINT COLUMN 1, "coprrp023", COLUMN l, p_companias.nombre CLIPPED, COLUMN 73, "Pag. ", pageno using "###" PRINT COLUMN 17, " Sistema de Compras", COLUMN 73, today using "dd/mm/yy" PRINT COLUMN 17, " Produccion Mensual ", COLUMN 76, hora PRINT COLUMN 1,"FECHA: DEL ", b_fecha_in USING "dd/mm/yy", " AL ", b_fecha_fi USING "dd/mm/yy" PRINT COLUMN 1, "----------------------------------------", "----------------------------------------" PRINT COLUMN 49, "Cantidad", COLUMN 72, "Acumulado" PRINT COLUMN 1, "Producto", COLUMN 47, "En Unidades", COLUMN 70, "En Unidades" PRINT COLUMN 1, "----------------------------------------", "----------------------------------------" PRINT negrillas_off SKIP 1 LINE BEFORE GROUP OF x.fecha ##### Selecionando la descripcion del mes SELECT a.descrip INTO descrip1 FROM mestable a WHERE a.mes = x.fecha PRINT COLUMN 1, negrillas_on, COLUMN 2,descrip1,negrillas_off BEFORE GROUP OF x.cod_grupo LET acumulado1 = 0 LET acumulado2 = 0 ON EVERY ROW PRINT COLUMN 1, x.cod_n USING "&","-",x.cod_grupo USING "&","-", x.cod_tipo USING "&&","-",x.cod_sec USING "&&&"," ", x.descrip_esp clipped; IF x.cantidad_2 IS NULL THEN LET x.cantidad_2 = 0 END IF PRINT COLUMN 47,x.cantidad_2 USING "###,###,##&", COLUMN 70,x.acumulado USING "###,###,##&" LET acumulado1 = acumulado1 + x.cantidad_2 LET acumulado2 = acumulado2 + x.acumulado ###### Imprimiendo por total de pila AFTER GROUP OF x.cod_grupo PRINT COLUMN 1,negrillas_on, COLUMN 5,"Total Por Tipo Pila", COLUMN 49,acumulado1 USING "###,###,###", COLUMN 72,acumulado2 USING "###,###,###",negrillas_off SKIP 1 LINE END REPORT