{ ------------------------------------------------------------------ PROGRAMA : INPRMT008 OBJETIVO : Capturar Informacion del Conteo Fisico del Inventario Materia Prima. PROGRAMADOR : Ing. Juan Fco. Soto. FECHA REALIZACION : Septiembre 16, 1992. MODIFICACION : No acepta el codigo del movimiento, acepta que el usuario introduzca el documento, chequea que el documento no se repita en la tabla intb00006 (movimientos). Ver Puntos (*A1). FECHA MODIFICACION: Octubre 21, 1992. PROGRAMADOR : Tadeo A. Ferreras F. MODIFICACION : Impresion y Numeracion Automatica Documento FECHA MODIFICACION: Marzo 06, 1996 ------------------------------------------------------------------ } GLOBALS "inprgb000.4gl" DEFINE p_hoy DATE DEFINE documen INTEGER DEFINE documento CHAR(6) DEFINE opc2,otra,chimp CHAR(1) DEFINE diferencia,cant_ex,ex_mov LIKE intb00006.cantidad_2 MAIN DEFER INTERRUPT SELECT * INTO p_companias.* FROM companias CALL inprmt008() END MAIN FUNCTION inprmt008() DISPLAY "inprmt008" AT 4,3 DISPLAY "Conteo Fisico y Ajuste(s)" AT 6,27 OPEN WINDOW cuenta AT 8,7 WITH FORM "infmmt008" ATTRIBUTE (BORDER, FORM LINE FIRST + 1,COMMENT LINE LAST -1, PROMPT LINE LAST) WHENEVER ERROR CONTINUE ## Captura los datos que va a contener el registro LET p_conteo.fecha = today LABEL volver: CLEAR FORM LET cant_ex = 0 LET p_hoy = p_conteo.fecha INITIALIZE p_conteo.* to null LET p_conteo.fecha = p_hoy INPUT BY NAME p_conteo.* WITHOUT DEFAULTS ATTRIBUTE (YELLOW) BEFORE FIELD fecha IF otra != "S" THEN INITIALIZE p_conteo.* TO NULL LET documento = null END IF LET otra = null AFTER FIELD fecha LET p_fechas = p_conteo.fecha CALL prd(p_fechas) IF bandera = 1 THEN LET bandera = 0 NEXT FIELD fecha END IF IF p_conteo.fecha > TODAY THEN LET numero_msg = 162 CALL msg(numero_msg) NEXT FIELD fecha END IF AFTER FIELD bodega SELECT * FROM intb00009 WHERE cod_bodega = p_conteo.bodega IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD bodega END IF AFTER FIELD cod_sec ## Verifica que el codigo no exista en el catalogo de unidades. Si existe, ## entonces despliega los datos del registro existente. SELECT a.descrip_esp,a.unidad_med INTO articulos.descrip_esp, articulos.unidad_med FROM intb00001 a,intb00002 b WHERE a.cod_n = p_conteo.cod_n and a.cod_grupo = p_conteo.cod_grupo and a.cod_tipo = p_conteo.cod_tipo and a.cod_sec= p_conteo.cod_sec and b.cod_n = p_conteo.cod_n and b.cod_grupo = p_conteo.cod_grupo and b.cod_tipo = p_conteo.cod_tipo and b.cod_sec = p_conteo.cod_sec and b.bodega = p_conteo.bodega IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_n END IF LET ex_mov = 0 SELECT sum(cantidad_2) INTO ex_mov FROM intb00006 WHERE cod_n = p_conteo.cod_n and cod_grupo = p_conteo.cod_grupo and cod_tipo = p_conteo.cod_tipo and cod_sec = p_conteo.cod_sec and status_t is null and fecha <= p_conteo.fecha IF ex_mov IS NULL THEN LET ex_mov = 0 END IF LET ex_mov = ex_mov USING "---,---,---.##" DISPLAY BY NAME articulos.descrip_esp,articulos.unidad_med,ex_mov LET documen = documento AFTER FIELD cantidad IF p_conteo.cantidad IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cantidad END IF LET diferencia = (p_conteo.cantidad - ex_mov) IF diferencia < 0 THEN LET datos_gen.cod_mov = 25 ELSE LET datos_gen.cod_mov = 52 END IF DISPLAY BY NAME diferencia SELECT descrip_mov INTO datos_gen.descrip_mov FROM intb00005 WHERE cod_mov = datos_gen.cod_mov DISPLAY BY NAME datos_gen.descrip_mov,datos_gen.cod_mov SELECT UNIQUE a.num_doc INTO datos_gen.num_doc FROM intb00023 a WHERE a.cod_mov = datos_gen.cod_mov IF datos_gen.num_doc IS NULL THEN LET datos_gen.num_doc = 0 END IF LET datos_gen.num_doc = datos_gen.num_doc + 1 SELECT UNIQUE a.num_doc FROM intb00006 a WHERE a.cod_mov = datos_gen.cod_mov AND a.num_doc = datos_gen.num_doc IF STATUS != NOTFOUND THEN SELECT MAX(a.num_doc) FROM intb00006 a WHERE a.cod_mov = datos_gen.cod_mov AND a.num_doc = datos_gen.num_doc IF datos_gen.num_doc IS NULL THEN LET datos_gen.num_doc = 0 END IF LET datos_gen.num_doc = datos_gen.num_doc + 1 END IF DISPLAY BY NAME datos_gen.num_doc SLEEP 2 END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE GOTO sale1 END IF LABEL pregu2: PROMPT "Toda La Informnacion Es Correcta (S/N)" FOR opc2 LET opc2 = upshift (opc2) IF (opc2 IS NULL) OR (opc2 != "S" AND opc2 != "N") THEN GOTO pregu2 END IF IF opc2 = "S" THEN INSERT INTO intb00011 VALUES(p_conteo.*,ex_mov,user,current,null,null) UPDATE intb00023 SET num_doc = datos_gen.num_doc WHERE cod_mov = datos_gen.cod_mov IF diferencia = 0 THEN ERROR "No tiene Diferencia, Por lo Tanto No Se Creara Movimiento de Ajuste" ELSE LABEL pregu: PROMPT "Tiene Diferencia el Conteo, Desea Hacer Ajuste (S/N)" FOR opc LET opc = upshift (opc) IF (opc IS NULL) OR (opc != "S" AND opc != "N") THEN GOTO pregu END IF IF opc = "S" THEN # Ejecuta los movimientos dependiendo si es de entrada o salida LET documento = datos_gen.num_doc INSERT INTO intb00006(num_doc,cod_mov,fecha,cod_n,cod_grupo,cod_tipo, cod_sec,cantidad_2,bodega,us_crea,fech_crea) VALUES (datos_gen.num_doc,datos_gen.cod_mov,p_conteo.fecha, p_conteo.cod_n,p_conteo.cod_grupo,p_conteo.cod_tipo, p_conteo.cod_sec,diferencia,p_conteo.bodega,user,current) PROMPT "Desea Imprimir este docuemtno? " FOR chimp LET chimp = UPSHIFT(chimp) IF chimp = "S" THEN START REPORT ajuste TO "C:\\archivo" ERROR "Imprsion en Proceso... Espere Por Favor" OUTPUT TO REPORT ajuste() FINISH REPORT ajuste RUN "TYPE C:\\archivo > %USPRINT%" END IF END IF END IF END IF CLEAR FORM GOTO volver LABEL sale1: CLOSE WINDOW cuenta END FUNCTION FUNCTION introduce(documento,mueve,diferencia,de,cant_ex,ex_mov) # Funcion actualizadora de las tablas del ajuste y conteo fisico DEFINE documento CHAR(6) DEFINE documen INTEGER DEFINE mueve,de CHAR(1) DEFINE ex_mov,cant_ex, diferencia DECIMAL(10,2) LET documen = documento SELECT unique cantidad FROM intb00011 WHERE fecha = p_conteo.fecha and cod_n = p_conteo.cod_n and cod_grupo = p_conteo.cod_grupo and cod_tipo = p_conteo.cod_tipo and cod_sec = p_conteo.cod_sec and bodega = p_conteo.bodega IF STATUS = NOTFOUND THEN INSERT INTO intb00011 values (p_conteo.*,ex_mov,user,current,null,null) ELSE # Si el conteo existe busca la cantidad que se le digito anterior a este # conteo SELECT unique cantidad_2 INTO cant_ex FROM intb00006 WHERE num_doc = documen and cod_mov = datos_gen.cod_mov and cod_n = p_conteo.cod_n and cod_grupo = p_conteo.cod_grupo and cod_tipo = p_conteo.cod_tipo and cod_sec = p_conteo.cod_sec and bodega = p_conteo.bodega UPDATE intb00011 set cantidad = p_conteo.cantidad, us_mod = user, fech_mod = current WHERE fecha = p_conteo.fecha and cod_n = p_conteo.cod_n and cod_grupo = p_conteo.cod_grupo and cod_tipo = p_conteo.cod_tipo and cod_sec = p_conteo.cod_sec and bodega = p_conteo.bodega IF datos_gen.cod_mov = 52 THEN LET p_conteo.cantidad = (ex_mov - cant_ex) + diferencia ELSE LET p_conteo.cantidad = (ex_mov+ cant_ex) + diferencia END IF END IF IF de = "S" THEN LET numero_msg = 13 CALL msg(numero_msg) ELSE LET numero_msg = 1 CALL msg(numero_msg) END IF LET de = null END FUNCTION REPORT ajuste( ) DEFINE x RECORD fecha DATE, bodega LIKE intb00006.bodega, cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, cantidad DECIMAL(12,2) END RECORD DEFINE doce,normal,negras_of,negras_on,doble_on CHAR(2) DEFINE l,unidades INTEGER OUTPUT TOP MARGIN 0 BOTTOM MARGIN 0 LEFT MARGIN 0 PAGE LENGTH 33 FORMAT #BEFORE GROUP OF doc PAGE HEADER LET negras_on = ASCII 27, ASCII 69 LET negras_of = ASCII 27, ASCII 70 LET doble_on = ASCII 14 LET normal = ASCII 27,ASCII 80 LET doce = ASCII 27,ASCII 77 PRINT COLUMN 1,normal,negras_on,doble_on, COLUMN 1,p_companias.nombre CLIPPED," " , p_companias.rnc CLIPPED SKIP 1 LINE PRINT COLUMN 31, "AJUSTE DE MATERIAL" LET l = (80 - LENGTH(datos_gen.descrip_mov))/2 SKIP 1 LINE PRINT COLUMN l, negras_on,datos_gen.descrip_mov,negras_of PRINT negras_on PRINT COLUMN 1, "Docto. No.",doble_on,datos_gen.num_doc USING "&&&&&&" SKIP 1 LINE PRINT COLUMN 1, "Fecha : ",p_conteo.fecha USING "dd/mm/yy" SKIP 1 LINE PRINT COLUMN 1, "MATERIAL : ", p_conteo.cod_n USING "&","-", p_conteo.cod_grupo USING "&","-", p_conteo.cod_tipo USING "&","-", p_conteo.cod_sec USING "&&&"," ", articulos.descrip_esp CLIPPED," ", articulos.unidad_med SKIP 1 LINE PRINT COLUMN 1, "=====================================================", "===========================" PRINT COLUMN 5, "EXISTENCIA", COLUMN 42, "INVENTARIO", COLUMN 68, "CANTIDAD" PRINT COLUMN 5, "S/LIBRO ", COLUMN 42, "FISICO", COLUMN 68, "AJUSTADA" PRINT COLUMN 1, "=====================================================", "===========================" PRINT negras_of PRINT COLUMN 1, ex_mov USING "(((,(((,(((.##)", COLUMN 37, p_conteo.cantidad USING "(((,(((,(((.##)", COLUMN 61, diferencia USING "(((,(((,(((.##)" SKIP 4 LINE PRINT normal PRINT COLUMN 1,"OBSERVACION :" PRINT PRINT COLUMN 1, "--------------------------------------------------------------------------" PRINT PRINT COLUMN 1, "--------------------------------------------------------------------------" PRINT PRINT COLUMN 1, "--------------------------------------------------------------------------" END REPORT