{ -------------------------------------------------------------------------- PROGRAMA : INPRMT046 OBJETIVO : Programa Captura Documento Otros Movimientos de Inventario de Materia Prima. PROGRAMADOR : Betania Guerrero Perez FECHA REALIZACION : Agosto 07, 1992. MODIFICADO POR : Tadeo A. Ferreras F. FECHA : Octubre 27, 1995. DESCRIPCION : Eliminar Funcion de Anular Registros -------------------------------------------------------------------------- } GLOBALS "inprgb000.4gl" DEFINE descrip_mov, descripcion, nombre, apellido CHAR(30), unidad_med CHAR(4) DEFINE insertamedida, modifica CHAR(1), ultimo_numero, tmpnumero INTEGER, titulo_bodega STRING, nombre_transp VARCHAR(30) DEFINE arrmedida DYNAMIC ARRAY OF RECORD codigo_bloque CHAR(25), ancho1 DEC(12, 5), largo1 DEC(12, 5), espesor1 DEC(12, 5), medida1 DEC(12, 5), ancho2 DEC(12, 5), largo2 DEC(12, 5), espesor2 DEC(12, 5), medida2 DEC(12, 5), cantidad DEC(12, 5), cod_Cat INT, cod_n, cod_grupo, cod_tipo, cod_sec INT END RECORD, total_medida DEC(12, 5), i INT 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 inprmt046() END MAIN FUNCTION busca_material() LET int_flag = FALSE OPEN WINDOW material1 AT 10, 9 WITH FORM "infmwd004" ATTRIBUTE(BORDER, FORM LINE FIRST + 2) CONSTRUCT criterio ON a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, a.descrip_esp, a.unidad_med FROM cod_n, cod_grupo, cod_tipo, cod_sec, descrip_esp, unidad_med LET selec = "SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp, ", "a.unidad_med FROM intb00001 a ", "WHERE a.status_t IS NULL AND ", criterio CLIPPED, "ORDER BY 1,2,3,4" PREPARE comando4 FROM selec DECLARE comp4 CURSOR FOR comando4 LET idx = 1 FOREACH comp4 INTO datos_mt[idx].* LET idx = idx + 1 END FOREACH CALL SET_COUNT(idx - 1) IF idx = 1 THEN LET numero_msg = 3 CALL msg(numero_msg) GOTO salir END IF DISPLAY ARRAY datos_mt TO datos_mt1.* LET idx = ARR_CURR() LABEL salir: CLOSE WINDOW material1 END FUNCTION FUNCTION inprmt046() DEFINE fecha CHAR(8) DEFINE hora CHAR(5) CLEAR SCREEN OPTIONS ERROR LINE 24, FORM LINE 4, COMMENT LINE 22, PROMPT LINE 23 LET fecha = TODAY USING "dd/mm/yy" LET hora = TIME OPEN FORM infmmt046 FROM "infmmt046" DISPLAY FORM infmmt046 MENU ON ACTION nuevo CALL inprad046() ON ACTION buscar LET pprograma = 'inprmt046' CALL reimprime(pprograma) ON ACTION salir EXIT MENU END MENU END FUNCTION FUNCTION inprad046() DEFINE fecha_c DATE DEFINE dia SMALLINT # WHENEVER ERROR CONTINUE LET int_flag = FALSE INITIALIZE otros_mov.*, departamento, pnum_emp TO NULL IF (OPC = "S" OR OPC = "s") OR opc IS NULL THEN INITIALIZE otros_mov.* TO NULL END IF LET insertamedida = 'N' INPUT BY NAME otros_mov.*, departamento, pnum_emp ATTRIBUTES(UNBUFFERED, WITHOUT DEFAULTS) BEFORE INPUT LET nombre = NULL LET apellido = NULL CALL cincodmov() CALL busca_departamento() SELECT a.bodega INTO otros_mov.bodega FROM seg0001 a WHERE a.usuario = usuarios DISPLAY BY NAME otros_mov.bodega CALL bodegas('1') ON ACTION transporte CALL consultaTransportista() RETURNING otros_mov.cod_transp, otros_mov.sec_transp, nombre_transp DISPLAY BY NAME otros_mov.cod_transp, otros_mov.sec_transp, nombre_transp ON ACTION operador CALL buscaEmp() RETURNING pnum_emp, nombre, apellido DISPLAY BY NAME pnum_emp, nombre, apellido AFTER FIELD pnum_emp IF pnum_emp IS NOT NULL THEN SELECT a.nom1_emp, a.apell1_Emp INTO nombre, apellido FROM adtb00003 a WHERE a.num_Emp = pnum_emp IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD pnum_Emp END IF DISPLAY BY NAME nombre, apellido END IF AFTER FIELD departamento IF departamento IS NOT NULL THEN SELECT a.nom_dpto INTO nombre_d FROM adtb00001 a WHERE a.departamento = departamento END IF AFTER FIELD fecha IF otros_mov.fecha IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha END IF IF otros_mov.fecha > TODAY THEN LET numero_msg = 160 CALL msg(numero_msg) NEXT FIELD fecha END IF LET p_fechas = otros_mov.fecha CALL prd(p_fechas, usuarios) RETURNING bandera IF bandera = 1 THEN LET bandera = 0 NEXT FIELD fecha END IF BEFORE FIELD bodega LET otros_mov.bodega = 1 DISPLAY BY NAME otros_mov.bodega AFTER FIELD bodega SELECT * FROM intb00009 WHERE cod_bodega = otros_mov.bodega IF STATUS >= 0 THEN IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD bodega END IF ELSE CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF BEFORE FIELD num_doc LET otros_mov.fecha = TODAY DISPLAY BY NAME otros_mov.fecha AFTER FIELD cod_mov IF otros_mov.cod_mov IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_mov END IF IF otros_mov.cod_mov = 36 THEN LET numero_msg = 40 CALL msg(numero_msg) NEXT FIELD cod_mov END IF SELECT a.descrip_mov, a.status_mov INTO descrip_mov, status_m FROM intb00005 a WHERE a.cod_mov = otros_mov.cod_mov { SELECT a.num_doc INTO otros_mov.num_doc FROM intb00023 a WHERE a.cod_mov = otros_mov.cod_mov IF STATUS = NOTFOUND THEN LET otros_mov.num_doc = 0 END IF LET otros_mov.num_doc = otros_mov.num_doc + 1 DISPLAY BY NAME otros_mov.num_doc ATTRIBUTE(REVERSE,YELLOW) SELECT UNIQUE cod_mov INTO otros_mov.cod_mov FROM intb00006 WHERE num_doc = otros_mov.num_doc AND cod_mov = otros_mov.cod_mov AND status_t IS NULL IF STATUS != NOTFOUND THEN LET numero_msg = 12 CALL msg(numero_msg) DISPLAY BY NAME otros_mov.cod_mov,otros_mov.fecha NEXT FIELD num_doc END IF # Verifica que el numero del documento de otros movimientos no este en el # archivo de movimientos. IF otros_mov.num_doc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_doc END IF } AFTER INPUT IF int_flag THEN CALL msg(2) RETURN END IF IF otros_mov.cod_mov = 63 THEN IF departamento IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD departamento END IF END IF LET titulo_bodega = ui.ComboBox.forName('formonly.bodega') .getTextOf(otros_mov.bodega) CALL arrmedida.clear() EXIT INPUT END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF INPUT ARRAY movi2 FROM s_movi1.* ATTRIBUTES(UNBUFFERED, WITHOUT DEFAULTS) BEFORE INPUT INITIALIZE movi2 TO NULL CALL maquinaria() CALL clasf_bloque() ON KEY(F10) LET p_act = arr_curr() LET scr_l = scr_line() LET descripcion = movi2[p_act].descrip_esp LET unidad_med = movi2[p_act].unidad_med CALL arrmedida.clear() CALL medidas( movi2[p_act].cod_n, movi2[p_act].cod_grupo, movi2[p_act].cod_tipo, movi2[p_act].cod_sec, movi2[p_act].descrip_esp, movi2[p_act].unidad_med, titulo_bodega, tmpnumero, otros_mov.cod_mov, status_m) RETURNING arrmedida, movi2[p_act].cantidad_2 DISPLAY movi2[p_act].cantidad_2 TO s_movi1[scr_l].cantidad_2 NEXT FIELD descrip_esp ON ACTION buscar CALL busca_material() LET movi2[p_act].cod_n = datos_mt[idx].cod_n LET movi2[p_act].cod_grupo = datos_mt[idx].cod_grupo LET movi2[p_act].cod_tipo = datos_mt[idx].cod_tipo LET movi2[p_act].cod_sec = datos_mt[idx].cod_sec LET movi2[p_act].descrip_esp = datos_mt[idx].descrip_esp LET movi2[p_act].unidad_med = datos_mt[idx].unidad_med DISPLAY movi2[p_act].cod_n TO s_movi1.cod_n DISPLAY movi2[p_act].cod_grupo TO s_movi1.cod_grupo DISPLAY movi2[p_act].cod_tipo TO s_movi1.cod_tipo DISPLAY movi2[p_act].cod_sec TO s_movi1.cod_sec DISPLAY movi2[p_act].descrip_esp TO s_movi1.descrip_esp BEFORE ROW LET p_act = arr_curr() LET scr_l = scr_line() AFTER FIELD cod_sec IF movi2[p_act].cod_n IS NOT NULL AND movi2[p_act].cod_grupo IS NOT NULL AND movi2[p_act].cod_tipo IS NOT NULL AND movi2[p_act].cod_sec IS NOT NULL THEN FOR idx = 1 TO arr_count() IF idx != p_act THEN IF movi2[idx].cod_n = movi2[p_act].cod_n AND movi2[idx].cod_grupo = movi2[p_act].cod_grupo AND movi2[idx].cod_tipo = movi2[p_act].cod_tipo AND movi2[idx].cod_sec = movi2[p_act].cod_sec THEN LET numero_msg = 21 CALL msg(numero_msg) LET p_act = p_act - 1 NEXT FIELD cod_n END IF END IF END FOR SELECT a.descrip_esp, a.unidad_med INTO descrip1, descrip2 FROM intb00001 a, intb00002 b WHERE a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_sec AND a.cod_n = movi2[p_act].cod_n AND a.cod_grupo = movi2[p_act].cod_grupo AND a.cod_tipo = movi2[p_act].cod_tipo AND a.cod_sec = movi2[p_act].cod_sec AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_n END IF LET chequea.existe = 0 SELECT ISNULL(SUM(cantidad_2), 0) INTO chequea.existe FROM intb00006 WHERE cod_n = movi2[p_act].cod_n AND cod_grupo = movi2[p_act].cod_grupo AND cod_tipo = movi2[p_act].cod_tipo AND cod_sec = movi2[p_act].cod_sec AND status_t IS NULL LET movi2[p_act].existencia = chequea.existe LET movi2[p_act].descrip_esp = descrip1 LET movi2[p_act].unidad_med = descrip2 CLIPPED DISPLAY movi2[p_act].existencia TO s_movi1[scr_l].existencia DISPLAY movi2[p_act].descrip_esp TO s_movi1[scr_l].descrip_esp DISPLAY movi2[p_act].unidad_med TO s_movi1[scr_l].unidad_med END IF AFTER FIELD cantidad_2 IF movi2[p_act].cod_n IS NOT NULL AND movi2[p_act].cod_grupo IS NOT NULL AND movi2[p_act].cod_tipo IS NOT NULL AND movi2[p_act].cod_sec IS NOT NULL THEN IF movi2[p_act].cantidad_2 IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cantidad_2 END IF IF status_m = "2" THEN IF movi2[p_act].cantidad_2 > chequea.existe THEN LET numero_msg = 30 CALL msg(numero_msg) NEXT FIELD cod_n END IF END IF END IF ON ACTION ACCEPT IF otros_mov.cod_mov = 63 THEN FOR i = 1 TO movi2.getLength() IF movi2[i].cod_n IS NOT NULL AND movi2[i].cod_grupo IS NOT NULL AND movi2[i].cod_tipo IS NOT NULL AND movi2[i].cod_sec IS NOT NULL THEN IF movi2[i].maquina IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD codigo EXIT FOR END IF IF movi2[i].clasf_bloque IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD clasf_bloque END IF END IF END FOR END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE DELETE FROM intb00018 WHERE documento = tmpnumero AND cod_mov = otros_mov.cod_mov RETURN END IF PROMPT "Toda la Informacion Esta Correcta? (S/N)" FOR CHAR opc IF OPC = "S" OR OPC = "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 # CALL configureoutput('PDF') RETURNING handler # START REPORT formu46 TO XML HANDLER handler START REPORT formu46 TO archivo BEGIN WORK SELECT ISNULL(a.num_doc, 0) INTO ultimo_numero FROM intb00023 a WHERE a.cod_mov = otros_mov.cod_mov AND a.bodega = otros_mov.bodega IF ultimo_numero = 0 THEN INSERT INTO intb00023( num_doc, cod_mov, bodega, us_crea, fech_crea) VALUES(ultimo_numero, otros_mov.cod_mov, otros_mov.bodega, usuarios, getdate()) END IF LET otros_mov.num_doc = ultimo_numero + 1 UPDATE intb00023 SET num_doc = otros_mov.num_doc, us_mod = usuarios, fech_mod = getdate() WHERE cod_mov = otros_mov.cod_mov AND bodega = otros_mov.bodega DISPLAY BY NAME otros_mov.num_doc FOR idx = 1 TO arr_count() IF movi2[idx].cod_n IS NOT NULL AND movi2[idx].cod_grupo IS NOT NULL AND movi2[idx].cod_tipo IS NOT NULL AND movi2[idx].cod_sec IS NOT NULL AND movi2[idx].cantidad_2 IS NOT NULL THEN IF status_m = 2 THEN LET movi2[idx].cantidad_2 = movi2[idx].cantidad_2 * -1 END IF INSERT INTO intb00006( num_doc, fecha, cod_mov, cod_n, cod_grupo, cod_tipo, cod_Sec, cantidad_2, bodega, us_Crea, fech_crea, num_emp, depto_a, cod_transp, sec_transp, nombre_transp, ficha_vehiculo, placa, conduce_no, maquina, clasf_bloque) VALUES(otros_mov.num_doc, otros_mov.fecha, otros_mov.cod_mov, movi2[idx].cod_n, movi2[idx].cod_grupo, movi2[idx].cod_tipo, movi2[idx].cod_sec, movi2[idx].cantidad_2, otros_mov.bodega, SUSER_NAME(), GETDATE(), pnum_emp, departamento, otros_mov.cod_transp, otros_mov.sec_transp, nombre_transp, otros_mov.ficha_vehiculo, otros_mov.placa, otros_mov.conduce, movi2[idx].maquina, movi2[idx].clasf_bloque) IF STATUS < 0 THEN ROLLBACK WORK CALL fgl_winmessage( "Error", "ERROR INSERTANDO INFORMACION", "STOP") EXIT PROGRAM END IF OUTPUT TO REPORT formu46( otros_mov.num_doc, otros_mov.fecha, otros_mov.cod_mov, otros_mov.bodega, descrip_mov, nombre_d, movi2[idx].*) END IF END FOR # DESPIECE DE LOS ITEMS IF arrmedida.getLength() > 0 THEN LET total_medida = 0 FOR idx = 1 TO arrmedida.getLength() IF arrmedida[idx].codigo_bloque IS NOT NULL THEN IF status_m = "2" THEN IF arrmedida[idx].cantidad > 0 THEN LET arrmedida[idx].cantidad = arrmedida[idx].cantidad * -1 END IF IF arrmedida[idx].medida1 > 0 THEN LET arrmedida[idx].medida1 = arrmedida[idx].medida1 * -1 END IF END IF INSERT INTO intb00018( documento, cod_mov, bodega, fecha, codigo_bloque, cod_n, cod_grupo, cod_tipo, cod_sec, ancho1, largo1, espesor1, medida1, largo2, ancho2, espesor2, medida2, cantidad, us_crea, fech_crea) VALUES(otros_mov.num_doc, otros_mov.cod_mov, otros_mov.bodega, otros_mov.fecha, arrmedida[idx].codigo_bloque, arrmedida[idx].cod_n, arrmedida[idx].cod_grupo, arrmedida[idx].cod_tipo, arrmedida[idx].cod_sec, arrmedida[idx].ancho1, arrmedida[idx].largo1, arrmedida[idx].espesor1, arrmedida[idx].medida1, arrmedida[idx].largo2, arrmedida[idx].ancho2, arrmedida[idx].espesor2, arrmedida[idx].medida2, arrmedida[idx].cantidad, usuarios, getdate()) LET total_medida = arrmedida[idx].medida1 + total_medida LET insertamedida = 'S' END IF END FOR LET movi2[p_act].cantidad_2 = total_medida END IF COMMIT WORK FINISH REPORT formu46 RUN imprime { SELECT a.* FROM intb00023 a WHERE a.cod_mov = otros_mov.cod_mov IF STATUS = NOTFOUND THEN INSERT INTO intb00023(num_doc,cod_mov) VALUES (otros_mov.num_doc,otros_mov.cod_mov) END IF UPDATE intb00023 SET num_doc = otros_mov.num_doc WHERE @cod_mov = otros_mov.cod_mov } LET numero_msg = 1 CALL msg(numero_msg) CLEAR FORM CALL movi2.clear() END IF EXIT INPUT END INPUT END FUNCTION