{ ------------------------------------------------------------------------------- PROGRAMA : IPPRRP018 OBJETIVO : REPORTE EXISTENCIAS Con Entradas y Salidas. PROGRAMADOR : Ing. Juan F. Soto FECHA REALIZACION : Agosto 17, 1994. FECHA MODIFICACION : Agosto 30, 1994 DESCRIPCION : La Busqueda del costo de los articulos estaba errornea. MODIFICADO POR : Juan F. Soto ------------------------------------------------------------------------------- } GLOBALS "ipprgb000.4gl" DEFINE descrip_bodega VARCHAR(30) DEFINE cantidad,entradas,salidas DECIMAL (12,5), dfecha DATE MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CONNECT TO "smarmotech" USER usuarios USING clave SELECT * INTO p_companias.* FROM companias CALL ipprrp018() END MAIN FUNCTION ipprrp018() DEFINE mes CHAR(2) DEFINE idx_ant,idx_cos,idx_act SMALLINT DEFINE ano_act CHAR(4) DEFINE salir,primera CHAR(1) DEFINE balance_in DECIMAL(12,2) DEFINE existe RECORD cod_n LIKE iptb00002.cod_n, cod_grupo LIKE iptb00002.cod_grupo, cod_tipo LIKE iptb00002.cod_tipo, cod_sec LIKE iptb00002.cod_sec, descrip_esp CHAR(70), unidad_med LIKE iptb00002.unidad_med, fecha DATE, existe_act DECIMAL(12,5), bodega SMALLINT, descripcion VARCHAR(50), cantidad DECIMAL(12,5), codigo CHAR(25) END RECORD DEFINE select_cost STRING # WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 OPEN FORM ipfmrp018 FROM "ipfmrp018" DISPLAY FORM ipfmrp018 LET tipo_papel = 1 CALL msgrp000(tipo_papel) INPUT BY NAME datos_cons.fech_in,datos_cons.fech_fi,movimientos.bodega BEFORE INPUT CALL bodegas(1) AFTER FIELD bodega IF movimientos.bodega IS NULL THEN CALL msg(16) NEXT FIELD bodega END IF SELECT a.descripcion INTO descrip_bodega FROM intb00009 a WHERE a.cod_bodega = movimientos.bodega AFTER FIELD fech_in IF datos_cons.fech_in IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fech_ini END IF AFTER FIELD fech_fi IF datos_cons.fech_fi IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fech_fi END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF CONSTRUCT criterio ON a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec FROM cod_n,cod_grupo, cod_tipo,cod_sec IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET select_cost = "SELECT a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, a.descrip_esp, ", " a.unidad_med, c.fecha, c.cantidad_2,d.cod_bodega,d.descripcion ", "FROM iptb00002 AS a RIGHT OUTER JOIN ", " iptb00006 AS c ON a.cod_n = c.cod_n AND a.cod_grupo = c.cod_grupo AND ", " a.cod_tipo = c.cod_tipo AND a.cod_sec = c.cod_sec ", " AND (c.fecha BETWEEN ? AND ?) AND (c.status_t IS NULL) ", " AND c.bodega = '",movimientos.bodega USING "<<<","' ", " LEFT OUTER JOIN intb00009 d ON c.bodega = d.cod_bodega ", "WHERE (a.status_t IS NULL) AND ",criterio CLIPPED, "ORDER BY d.cod_bodega,a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, c.fecha" CALL seleccionarsalida() RETURNING r_output CALL configureoutput(r_output) RETURNING handler START REPORT prt_Exist TO XML HANDLER HANDLER PREPARE comando FROM select_cost DECLARE busca CURSOR FOR comando OPEN busca USING datos_cons.fech_in,datos_cons.fech_fi FOREACH busca INTO existe.* IF existe.existe_act IS NULL THEN LET existe.existe_act = 0 END IF IF existe.cantidad IS NULL THEN LET existe.cantidad = 1 END IF LET existe.codigo = existe.cod_n using "&&&&&&",existe.cod_grupo using "&&&&&&",existe.cod_tipo using "&&&&&&",existe.cod_sec using "&&&&&&","-",movimientos.bodega USING "<<<" LET dfecha = datos_cons.fech_in - 1 SELECT SUM(a.cantidad_2) INTO existe.existe_act FROM iptb00006 a WHERE a.cod_n = existe.cod_n AND a.cod_grupo = existe.cod_grupo AND a.cod_tipo = existe.cod_tipo AND a.cod_sec = existe.cod_sec AND a.bodega = movimientos.bodega AND a.fecha <= dfecha AND a.status_t IS NULL IF existe.existe_act IS NULL THEN LET existe.existe_act = 0 END IF LET entradas = 0 SELECT SUM(a.cantidad_2) INTO entradas FROM iptb00006 a,iptb00005 b WHERE (a.cod_n = existe.cod_n AND a.cod_grupo = existe.cod_grupo AND a.cod_tipo = existe.cod_tipo AND a.cod_sec = existe.cod_sec) AND a.cod_mov = b.cod_mov AND b.status_mov = 1 AND a.bodega = existe.bodega AND a.fecha BETWEEN datos_cons.fech_in AND datos_cons.fech_fi AND a.status_t IS NULL LET salidas = 0 SELECT SUM(a.cantidad_2) INTO salidas FROM iptb00006 a,iptb00005 b WHERE (a.cod_n = existe.cod_n AND a.cod_grupo = existe.cod_grupo AND a.cod_tipo = existe.cod_tipo AND a.cod_sec = existe.cod_sec) AND a.cod_mov = b.cod_mov AND b.status_mov = 2 AND a.bodega = existe.bodega AND a.fecha BETWEEN datos_cons.fech_in AND datos_cons.fech_fi AND a.status_t IS NULL IF salidas <> 0 AND entradas <> 0 AND existe.existe_act <> 0 AND existe.existe_act +entradas+salidas <> 0 THEN OUTPUT TO REPORT prt_exist(existe.*) END IF END FOREACH FINISH REPORT prt_exist END FUNCTION REPORT prt_exist(x) DEFINE x RECORD cod_n LIKE iptb00002.cod_n, cod_grupo LIKE iptb00002.cod_grupo, cod_tipo LIKE iptb00002.cod_tipo, cod_sec LIKE iptb00002.cod_sec, descrip_esp CHAR(70), unidad_med LIKE iptb00002.unidad_med, fecha DATE, existe_act DECIMAL(12,5), bodega SMALLINT, descripcion VARCHAR(50), cantidad DECIMAL(12,5), codigo CHAR(25) END RECORD, p_costo DECIMAL (8,4), tvalor DECIMAL(12,2) DEFINE tt INTEGER DEFINE l INTEGER DEFINE doble_on CHAR(2) DEFINE doble_off CHAR(2) DEFINE negrillas_on CHAR(6) DEFINE negrillas_off CHAR(6) DEFINE comp_on CHAR(3) DEFINE comp_off CHAR(3) DEFINE normal CHAR(3) DEFINE doce CHAR(3) DEFINE hora CHAR(5) OUTPUT TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 2 PAGE LENGTH 100 #ORDER BY x.cod_n,x.cod_grupo,x.cod_tipo,x.cod_sec,x.fecha FORMAT PAGE HEADER { LET doble_on = ASCII 14 LET doble_off = ASCII 20 LET negrillas_on = ASCII 27, ASCII 69 LET negrillas_off = ASCII 27, ASCII 70 LET comp_on = ASCII 15 LET comp_off = ASCII 18 LET doce = ASCII 27, ASCII 77 LET normal= ASCII 27,ASCII 80 } LET l = (128 - LENGTH(p_companias.nombre CLIPPED))/2 LET hora = time PRINT COLUMN 1,comp_on PRINT COLUMN 1, "ipprrp018", COLUMN l, p_companias.nombre CLIPPED, COLUMN 121, "Pag. ",pageno using "###" PRINT COLUMN 47, "Sistema de Inventario de Productos", COLUMN 121, today using "dd/mm/yyyy" PRINT COLUMN 48, "Existencia Con Entrada y Salida", COLUMN 124, hora PRINT COLUMN 48, movimientos.bodega USING "<<<",descrip_bodega PRINT COLUMN 1,"Movimientos Del: ", datos_cons.fech_in using "dd/mm/yyyy", " AL ", datos_cons.fech_fi using "dd/mm/yyyy" SKIP 1 LINE PRINT COLUMN 1, "--------------------------------------------------", "-------------------------------------------------" , "-------------------------------------------------", "-------------------------" PRINT COLUMN 113, "| MOVIMIENTOS |" PRINT COLUMN 98, "EXISTENCIA", 2 SPACES, " |---------------------------|", 2 SPACES, "EXISTENCIA" PRINT COLUMN 1, "CODIGO", COLUMN 12, "DESCRIPCION", COLUMN 98, "AL ",datos_cons.fech_in - 1 using "dd/mm/yyyy", 2 SPACES, "| ENTRADAS", 2 SPACES , " SALIDAS |", 2 SPACES, "AL ", datos_cons.fech_fi using "dd/mm/yyyy", 2 SPACES, "VALOR" PRINT COLUMN 1, "--------------------------------------------------", "-------------------------------------------------", "-------------------------------------------------", "-------------------------" SKIP 1 LINE BEFORE GROUP OF x.codigo LET entradas = 0 LET salidas = 0 AFTER GROUP OF x.codigo LET cantidad = 1 LET x.existe_act = 0 # BUSCA EL COSTO STANDARD DEL ITEM { SELECT MAX(d.material+d.labor+d.gastos) INTO p_costo FROM iptb00004 d WHERE d.mes_fin=12 AND d.status_t is null AND d.ano = year(datos_cons.fech_fi) and d.cod_n=x.cod_n AND d.cod_grupo=x.cod_grupo AND d.cod_tipo = x.cod_tipo AND d.cod_sec = x.cod_sec } IF p_costo IS NULL THEN LET p_costo = 0 END IF #LET entradas= GROUP SUM(x.existe_act) WHERE x.existe_act > 0 AND # x.bodega = movimientos.bodega #LET salidas =GROUP SUM(x.existe_act) WHERE x.existe_act < 0 AND x.bodega = movimientos.bodega IF salidas IS NULL THEN LET salidas = 0 END IF IF entradas IS NULL THEN LET entradas = 0 END IF IF x.existe_act != 0 THEN LET x.existe_act = x.existe_act END IF PRINT COLUMN 1, x.cod_n USING "&&&&","-",x.cod_grupo USING "&&&&","-", x.cod_tipo USING "&&&&","-",x.cod_sec USING "&&&&&&", " ",x.descrip_esp, COLUMN 73, x.unidad_med, 2 SPACES, x.existe_act USING "---,---,---.###", 2 SPACES, entradas using "###,###.###", 2 SPACES, salidas using "###,###.###", 2 SPACES, x.existe_act+salidas+entradas USING "--,---.###", 2 SPACES, (x.existe_act+salidas+entradas) * p_costo USING "((((,(((.##)" IF tt IS NULL THEN LET tt = 0 END IF LET tt = tt + 1 IF tvalor IS NULL THEN LET tvalor = 0 END IF LET tvalor = ((x.existe_act+salidas+entradas) * p_costo) + tvalor ON LAST ROW SKIP 1 LINES PRINT COLUMN 1, "==================================================", "==================================================", "========================================" PRINT COLUMN 125, tvalor USING "((,(((,(((.##)" PRINT COLUMN 4, "Total Registros Impresos = ", tt USING "<<<<" PRINT COLUMN 4, comp_off END REPORT