{ ------------------------------------------------------------------ PROGRAMA : IPPRMT008 OBJETIVO : Capturar Informacion del Conteo Fisico del Inventario Producto Terminado. PROGRAMADOR : Ing. Juan Fco. Soto. FECHA REALIZACION : Febrero 9, 1993. OBJETIVO : Permitir Numeracion Automatica e Impresion del Documento PROGRAMADOR : Tadeo A. Ferreras F. FECHA REALIZACION : Marzo 07, 1996 ------------------------------------------------------------------ } GLOBALS "ipprgb000.4gl" DEFINE p_hoy DATE DEFINE documen INTEGER DEFINE documento CHAR(6) DEFINE ano CHAR (4),chimp CHAR(1) DEFINE opc2,salir,otra,de,mueve CHAR(1) DEFINE diferencia,cant_ex,ex_mov LIKE iptb00006.cantidad_2 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 ipprmt008() END MAIN FUNCTION ipprmt008() DISPLAY "ipprmt008" AT 4,3 DISPLAY "Conteo Fisico y Ajuste(s)" AT 6,27 OPEN WINDOW cuenta AT 8,7 WITH FORM "ipfmmt008" 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 (BLUE) 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 b.descrip_esp,b.descrip_ing,b.unidad_med INTO articulos.descrip_esp, articulos.descrip_ing, articulos.unidad_med FROM iptb00002 b WHERE 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 descripcion = articulos.descrip_esp CLIPPED LET ex_mov = 0 SELECT sum(cantidad_2) INTO ex_mov FROM iptb00006 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 descripcion,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 IS NULL THEN LET diferencia = p_conteo.cantidad END IF IF diferencia < 0 THEN LET datos_gen.cod_mov = 25 ELSE LET datos_gen.cod_mov = 11 END IF DISPLAY BY NAME diferencia SELECT descrip_mov INTO datos_gen.descrip_mov FROM iptb00005 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 iptb00007 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 iptb00006 a WHERE a.cod_mov = datos_gen.cod_mov AND a.num_doc = datos_gen.num_doc and a.fecha > "01012007" IF STATUS != NOTFOUND THEN SELECT MAX(a.num_doc) FROM iptb00006 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 Informacion 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 SELECT UNIQUE a.cod_n FROM iptb00011 a WHERE a.fecha = p_conteo.fecha AND a.cod_n = p_conteo.cod_n and a.cod_grupo = p_conteo.cod_grupo and a.cod_tipo = p_conteo.cod_sec IF STATUS = NOTFOUND THEN INSERT INTO iptb00011 VALUES(p_conteo.*,ex_mov,suser_sname(),GETDATE(),null,null) ELSE UPDATE iptb00011 set cantidad = p_conteo.cantidad WHERE a.fecha = p_conteo.fecha AND a.cod_n = p_conteo.cod_n and a.cod_grupo = p_conteo.cod_grupo and a.cod_tipo = p_conteo.cod_sec END IF UPDATE iptb00007 SET num_doc = datos_gen.num_doc WHERE cod_mov = datos_gen.cod_mov IF diferencia = 0 or diferencia IS NULL 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 iptb00006(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,SUSER_SNAME(),GETDATE()) PROMPT "Desea Imprimir este documento? " FOR chimp LET chimp = UPSHIFT(chimp) IF chimp = "S" THEN CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,copia START REPORT ajuste TO archivo ERROR "Imprsion en Proceso... Espere Por Favor" OUTPUT TO REPORT ajuste() FINISH REPORT ajuste RUN imprime 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 iptb00011 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 iptb00011 values (p_conteo.*,ex_mov,SUSER_SNAME(),GETDATE(),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 iptb00006 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 iptb00011 set cantidad = p_conteo.cantidad, us_mod = Suser_SNAME(), fech_mod = GETDATE() 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 = 11 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 iptb00006.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,doble_of 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 doble_of = ASCII 18 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 PRINT doble_of PRINT COLUMN 26, "AJUSTE DE PRODUCTO TERMINADO" 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 "&&&&&&" PRINT doble_of 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 "&&&"," ", descripcion 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 { FUNCTION ipprmt008() DEFINE p_hoy DATE DEFINE p_cantidad,documen INTEGER DEFINE documento CHAR(6) DEFINE ano CHAR (4), p_cia LIKE iptb00002.cod_cia, p_descrip LIKE iptb00005.descrip_mov DEFINE existe,salir,otra,de,mueve CHAR(1) DEFINE dife_ant,diferencia,cant_ex,cant_ant,balance_in,ex_mov DECIMAL(10,2) DISPLAY "ipprmt008" AT 4,3 DISPLAY "Conteo Fisico y Ajuste(s)" AT 6,27 OPEN WINDOW cuenta AT 8,7 WITH FORM "ipfmmt008" ATTRIBUTE (BORDER, MESSAGE LINE FIRST,FORM LINE FIRST + 1,COMMENT LINE LAST -1, PROMPT LINE LAST) # WHENEVER ERROR CONTINUE ## Captura los datos que va a contener el registro MESSAGE " Graba Registro Cancela Operacion" 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 (BLUE) BEFORE FIELD fecha INITIALIZE p_conteo.* TO NULL LET documento = null AFTER FIELD fecha LET p_fechas = p_conteo.fecha CALL prd() IF bandera = 1 THEN LET bandera = 0 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 b.descrip_esp,b.unidad_med,b.cod_cia INTO articulos.descrip_esp, articulos.unidad_med,p_cia FROM iptb00002 b WHERE 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 >= 0 THEN IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_n END IF ELSE CALL integridad() IF bandera = 1 THEN CLEAR SCREEN RETURN END IF END IF LET descripcion = articulos.descrip_esp CLIPPED DISPLAY BY NAME descripcion ATTRIBUTE(CYAN) DISPLAY BY NAME articulos.unidad_med ATTRIBUTE(CYAN) 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 AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE LET salir = "S" GOTO sale END IF SELECT sum(cantidad_2) INTO balance FROM iptb00006 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 LET ex_mov = balance LET ex_mov = ex_mov USING "---,---,---.##" DISPLAY BY NAME ex_mov LABEL sale: EXIT INPUT END INPUT IF salir = "S" THEN GOTO sale1 END IF LET diferencia = ex_mov - p_conteo.cantidad IF diferencia < 0 THEN LET datos_gen.cod_mov = 11 LET diferencia = diferencia * -1 ELSE LET datos_gen.cod_mov = 25 END IF DISPLAY BY NAME diferencia SELECT num_doc INTO documento FROM iptb00007 WHERE cod_mov = datos_gen.cod_mov IF documento is null THEN LET documento = 1 END IF LET documento = documento + 1 DISPLAY datos_gen.cod_mov," ",documento at 11,3 # Este control de que el documento existe fue puesto por orden del Ing. Paulino SELECT UNIQUE a.num_doc FROM iptb00006 a WHERE a.num_doc = documento and 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 a.cod_mov = datos_gen.cod_mov IF status != notfound THEN LET numero_msg = 12 CALL msg(numero_msg) GOTO volver END IF #A1 COMIENZA IF diferencia = 0 THEN PROMPT "No tiene Diferencia, Desea Proseguir (S/N)" FOR CHAR opc LET opc = upshift(opc) IF opc = "N" THEN GOTO volver LET OPC = NULL ELSE SELECT UNIQUE cod_n FROM iptb00011 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 iptb00011 VALUES (p_conteo.*,ex_mov,user,GETDATE(),null, null) ELSE UPDATE iptb00011 SET cantidad = p_conteo.cantidad, us_mod = user, fech_mod = GETDATE() 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 END IF GOTO dif LET OPC = NULL END IF END IF LABEL dif: #A1 TERMINA IF ex_mov != p_conteo.cantidad THEN LET opc = "N" PROMPT "Tiene Diferencia el Conteo, Desea Hacer Ajuste (S/N)" FOR OPC LET opc = upshift(opc) #A1 COMIENZA IF opc = "S" THEN START REPORT formu4 TO "C:\\archivo" DISPLAY "Codigo de Movimiento" AT 11,3 DISPLAY "Numero Documento " AT 12,3 SELECT descrip_mov,status_mov INTO datos_gen.descrip_mov,mueve FROM iptb00005 WHERE cod_mov = datos_gen.cod_mov DISPLAY BY NAME datos_gen.descrip_mov,datos_gen.cod_mov LABEL err1: LET datos_gen.num_doc = documento IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false GOTO sale1 END IF # Llama a la funcion que actializa las tablas que se afectara por el ajuste CALL introduce(documento,mueve,diferencia,de,cant_ex,ex_mov) SELECT a.descrip_mov INTO p_descrip FROM iptb00005 a WHERE a.cod_mov = datos_gen.cod_mov SELECT cantidad INTO p_cantidad FROM vetb00014 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 OUTPUT TO REPORT formu4(documento,p_cia,datos_gen.cod_mov,0,0, " ",null,null,p_conteo.fecha,p_descrip, p_conteo.bodega,null,null,null,null, p_conteo.cod_n,p_conteo.cod_grupo, p_conteo.cod_tipo,p_conteo.cod_sec, 0,diferencia,articulos.unidad_med, articulos.descrip_esp,p_cantidad) FINISH REPORT formu4 RUN "type c:\\archivo > %USPRINT%" END IF END IF IF opc = "N" THEN SELECT unique cod_n FROM iptb00011 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 iptb00011 VALUES (p_conteo.*,ex_mov,user,GETDATE(),null,null) ELSE UPDATE iptb00011 SET cantidad = p_conteo.cantidad, us_mod = user, fech_mod = GETDATE() 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 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 IF datos_gen.cod_mov = 25 THEN LET diferencia = diferencia * -1 END IF INSERT INTO iptb00006(num_doc,cod_mov,fecha,cod_n,cod_grupo,cod_tipo, cod_sec,cantidad_2,bodega,us_crea,fech_crea) VALUES (documento,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,GETDATE()) UPDATE iptb00007 SET num_doc = documento WHERE cod_mov = datos_gen.cod_mov SELECT UNIQUE cantidad FROM iptb00011 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 iptb00011 values (p_conteo.*,ex_mov,user,GETDATE(),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 iptb00006 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 iptb00011 SET cantidad = p_conteo.cantidad, us_mod = user, fech_mod = GETDATE() 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 = 11 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 }