{ ---------------------------------------------------------------------------- PROGRAMA : IRPRMT036 OBJETIVO : Programa Captura Documento Movimiento: OTROS MOVIMIENTOS DE REPUESTOS de Inventario de Repuesto. PROGRAMADOR : Ing. Juan Fco. Soto (Copiado del IHPRMT036) FECHA REALIZACION : Marzo 1, 1993. ---------------------------------------------------------------------------- } IMPORT util GLOBALS "irprgb000.4gl" DEFINE cerrada CHAR(1) DEFINE r_cantidad1, r_cantidad, total_cantidad, recibida, ordenada, xdepartamento INTEGER, xusername, xsmtphost, xsmtpport, xpassword STRING DEFINE porciento DECIMAL(8, 3) DEFINE v_producto_id VARCHAR(100) DEFINE costo_estandar DECIMAL(12, 2), codigo_mq LIKE irtb00008.cod_maq, xnombre VARCHAR(100), existminima DYNAMIC ARRAY OF FLOAT, existenciaact DYNAMIC ARRAY OF FLOAT, porcientoControl DYNAMIC ARRAY OF FLOAT, enviaCorreo VARCHAR(2), enviaEmailProd DYNAMIC ARRAY OF CHAR(2), answer STRING, APIexistencia DECIMAL(12,2) DEFINE CheckApi RECORD checkDept BOOLEAN, checkMaquina BOOLEAN, checkRep BOOLEAN END RECORD # fakeData se pasa POR POSICION (fakeData.*) al parametro Data de # ApiMaintainC en api_test.4gl, por lo que su estructura (orden y tipos) # debe ser IDENTICA a ese record. No usar RECORD LIKE cotb00001.* porque # el orden fisico de las columnas de cotb00001 no coincide con ese record # y provoca el error -1260 al convertir los tipos. DEFINE fakeData RECORD area_sp VARCHAR(10), ciu_sp VARCHAR(30), cod_pais VARCHAR(3), cod_sp SMALLINT, cod_sp_sec SMALLINT, cont_sp VARCHAR(30), contactID INTEGER, dir_sp VARCHAR(60), email VARCHAR(60), fax_sp VARCHAR(25), fech_crea DATETIME YEAR TO FRACTION, fech_mod DATETIME YEAR TO FRACTION, id_maintainx INTEGER, nom_sp VARCHAR(41), status_t VARCHAR(1), tel_sp VARCHAR(25), term_sp SMALLINT, us_crea VARCHAR(50), us_mod VARCHAR(50) END RECORD DEFINE data RECORD rnumeroDoc,rcodMov,rtipo_cliente,num_oc,tipo_cliente,sec_cliente,bodega,bodega_destino INT, nombre VARCHAR(100) END RECORD DEFINE answer_workorder INT DEFINE req_check BOOLEAN MAIN DEFER INTERRUPT CALL STARTLOG("irprmt36.log") 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 a.* INTO p_companias.* FROM companias a CALL irprmt036() END MAIN FUNCTION irprmt036() 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/yyyy" LET hora = TIME LET lj = (80 - LENGTH(p_companias.nombre CLIPPED)) / 2 DISPLAY p_companias.nombre CLIPPED AT 2, lj ATTRIBUTE(REVERSE, BLUE) OPEN FORM irfmmt036 FROM "irfmmt036" DISPLAY FORM irfmmt036 MENU ON ACTION nuevo LET req_check = FALSE INITIALIZE data.* TO NULL CALL irautorizadas(usuarios) RETURNING data.* DISPLAY data.* IF data.rcodMov IS NOT NULL AND data.rcodMov != 0 THEN LET req_check = TRUE END IF CALL irprad036() ON ACTION buscar LET pprograma = 'inprmt036' CALL irprmfad036() ON ACTION salir EXIT MENU END MENU END FUNCTION FUNCTION irprad036() DEFINE tipos1 CHAR(1) DEFINE i INT, query STRING LET tipos1 = NULL LET opc = NULL LET int_flag = FALSE INITIALIZE datos1.* TO NULL LET checkapi.checkDept = FALSE LET checkapi.checkMaquina = FALSE LET checkapi.checkRep = FALSE IF data.rcodMov IS NOT NULL AND data.rcodMov != 0 THEN LET datos1.cod_mov = data.rcodMov DISPLAY "entra a la condicion" SELECT MAX(num_oc) INTO datos1.orden_compra FROM irtb00057 WHERE numero_doc = data.rnumeroDoc SELECT tipo INTO datos1.tipo FROM cotb00014 WHERE num_oc = datos1.orden_compra DECLARE buscar CURSOR FOR SELECT cod_n, cod_grupo, cod_tipo, cod_sec, cantidad_2, descripcion, unidad_med FROM irtb00058 WHERE numero_doc = data.rnumeroDoc LET i = 1 FOREACH buscar INTO movi8[i].cod_n, movi8[i].cod_grupo, movi8[i].cod_tipo, movi8[i].cod_sec, movi8[i].cantidad_2, movi8[i].descrip_esp, movi8[i].unidad_med LET i = i + 1 DISPLAY "se agregan los items" END FOREACH IF datos1.cod_mov = 35 THEN CALL msg(40) END IF SELECT requisiciones INTO transacc.requisiciones FROM irtb00005 WHERE @cod_mov = datos1.cod_mov AND @status_t IS NULL SELECT a.descrip_mov, a.status_mov, a.control_departamento, a.control_maquina INTO datos1.descrip_mov, transacc.status_mov, transacc.control_departamento, transacc.control_maquina FROM irtb00005 a WHERE @cod_mov = datos1.cod_mov AND @status_t IS NULL DISPLAY transacc.control_departamento IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) END IF END IF #WHENEVER ERROR CONTINUE #ERROR "CTRL-W PARA ELIMINAR DOCUMENTOS" DIALOG ATTRIBUTE(UNBUFFERED) INPUT BY NAME datos1.* ATTRIBUTE(WITHOUT DEFAULTS) BEFORE INPUT DISPLAY "entra al before input" LET datos1.fecha = TODAY USING "dd/mm/yyyy" DISPLAY BY NAME datos1.fecha CALL busca_departamento() DISPLAY "busco el departamento" IF data.rcodMov IS NOT NULL AND data.rcodMov != 0 THEN NEXT FIELD orden_compra CALL dialog.setFieldActive('cod_mov', FALSE) DISPLAY "codmov false" ELSE CALL dialog.setFieldActive('cod_mov', TRUE) DISPLAY "cod_mov true" END IF DISPLAY "salio del codmov if" AFTER FIELD fecha IF datos1.fecha IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha END IF IF datos1.fecha > TODAY THEN LET numero_msg = 189 CALL msg(numero_msg) NEXT FIELD fecha END IF LET bandera = 0 LET p_fechas = datos1.fecha CALL prd(p_fechas, usuarios) RETURNING bandera IF bandera = 1 THEN LET bandera = 0 NEXT FIELD fecha END IF AFTER FIELD orden_compra IF datos1.orden_compra IS NOT NULL THEN IF datos1.tipo IS NULL THEN LET query = "SELECT cod_sp, cod_sp_sec, cierre FROM cotb00014 WHERE num_oc = ",datos1.orden_compra," AND status_t IS NULL" ELSE LET query = "SELECT cod_sp, cod_sp_sec, cierre FROM cotb00014 WHERE num_oc = ",datos1.orden_compra," AND tipo = ",datos1.tipo," AND status_t IS NULL" END IF DISPLAY query PREPARE busqueda FROM query EXECUTE busqueda INTO datos1.cod_sp, datos1.cod_sp_sec, cerrada IF status >= 0 THEN IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) DISPLAY "FILTRO 1" NEXT FIELD orden_compra END IF IF cerrada = "S" THEN LET numero_msg = 74 CALL msg(numero_msg) DISPLAY "FILTRO 2" NEXT FIELD orden_compra END IF END IF SELECT UNIQUE a.nom_sp INTO datos1.nom_sp FROM cotb00001 a WHERE a.cod_sp = datos1.cod_sp AND a.cod_sp_sec = datos1.cod_sp_sec AND a.status_t IS NULL IF status >= 0 THEN IF STATUS = NOTFOUND THEN SELECT a.nombre INTO datos1.nom_sp FROM vetb00004 a WHERE a.tipo_cliente = datos1.cod_sp AND a.sec_cliente = datos1.cod_sp_Sec AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_sp END IF END IF END IF DISPLAY BY NAME datos1.nom_sp END IF AFTER FIELD cod_sp_Sec IF datos1.cod_sp_Sec IS NOT NULL THEN SELECT UNIQUE a.nom_sp INTO datos1.nom_sp FROM cotb00001 a WHERE a.cod_sp = datos1.cod_sp AND a.cod_sp_sec = datos1.cod_sp_sec AND a.status_t IS NULL IF STATUS = NOTFOUND THEN SELECT a.nombre INTO datos1.nom_sp FROM vetb00004 a WHERE a.tipo_cliente = datos1.cod_sp AND a.sec_cliente = datos1.cod_sp_Sec AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_sp END IF END IF DISPLAY BY NAME datos1.nom_sp END IF AFTER FIELD cod_mov IF datos1.cod_mov IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_mov END IF # Controla que el movimiento que se digite pertenezca a este formulario SELECT UNIQUE a.usuario FROM irtb00018 a WHERE a.cod_mov = datos1.cod_mov AND a.usuario = usuarios IF status = NOTFOUND THEN LET numero_msg = 139 CALL msg(numero_msg) NEXT FIELD cod_mov END IF IF datos1.cod_mov = 35 THEN CALL msg(40) NEXT FIELD cod_mov END IF SELECT requisiciones INTO transacc.requisiciones FROM irtb00005 WHERE @cod_mov = datos1.cod_mov AND @status_t IS NULL IF transacc.requisiciones = 'SI' AND req_check = FALSE THEN CALL msg(1672) NEXT FIELD cod_mov END IF SELECT a.descrip_mov, a.status_mov, a.control_departamento, a.control_maquina INTO datos1.descrip_mov, transacc.status_mov, transacc.control_departamento, transacc.control_maquina FROM irtb00005 a WHERE @cod_mov = datos1.cod_mov AND @status_t IS NULL DISPLAY transacc.control_departamento IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) IF data.rcodMov IS NULL THEN NEXT FIELD cod_mov END IF END IF DISPLAY BY NAME datos1.descrip_mov NEXT FIELD tipo AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CALL movi8.clear() SLEEP 3 RETURN END IF IF datos1.cod_mov = 35 THEN CALL msg(40) NEXT FIELD cod_mov END IF IF datos1.departamento IS NULL AND transacc.control_departamento = "SI" THEN CALL msg(16) NEXT FIELD departamento END IF IF datos1.departamento IS NOT NULL AND transacc.control_departamento = "NO" THEN CALL msg(1665) NEXT FIELD cod_mov END IF # Busca los articulos de la orden si el usuario la digita IF datos1.orden_compra IS NOT NULL THEN IF datos1.tipo IS NOT NULL THEN LET query = "SELECT a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, a.cantidad FROM cotb00015 a, irtb00002 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.num_oc = ",datos1.orden_compra," AND a.tipo = ",datos1.tipo," AND a.status_t IS NULL AND b.status_t IS NULL" ELSE LET query = "SELECT a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, a.cantidad FROM cotb00015 a, irtb00002 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.num_oc = ",datos1.orden_compra," AND a.status_t IS NULL AND b.status_t IS NULL" END IF DECLARE busca CURSOR FROM query LET idx = 1 FOREACH busca INTO movi8[idx].* LET idx = idx + 1 END FOREACH # CAPTURA ARREGLO DE LOS CODIGOS DE MATERIA PRIMA CALL set_count(idx - 1) END IF INITIALIZE ant_art.* TO NULL IF datos1.orden_compra IS NOT NULL AND datos1.departamento IS NULL THEN NEXT FIELD departamento END IF END INPUT INPUT ARRAY movi8 FROM s_movi1.* ATTRIBUTE(WITHOUT DEFAULTS) BEFORE INPUT CALL maquinas(-1) CALL DIALOG.setFieldActive('orden_trabajo', FALSE) ON ACTION buscaProd CALL busca_prod1() LET movi8[p_act].cod_n = arr_prod[idx].cod_n LET movi8[p_act].cod_grupo = arr_prod[idx].cod_grupo LET movi8[p_act].cod_tipo = arr_prod[idx].cod_tipo LET movi8[p_act].cod_sec = arr_prod[idx].cod_sec LET movi8[p_act].descrip_esp = arr_prod[idx].descrip_esp DISPLAY movi8[p_act].cod_n TO s_movi1.cod_n DISPLAY movi8[p_act].cod_grupo TO s_movi1.cod_grupo DISPLAY movi8[p_act].cod_tipo TO s_movi1.cod_tipo DISPLAY movi8[p_act].cod_sec TO s_movi1.cod_sec DISPLAY movi8[p_act].descrip_esp TO s_movi1.descrip_esp BEFORE ROW LET p_act = arr_curr() LET scr_l = scr_line() AFTER ROW IF movi8[p_act].cod_n IS NOT NULL AND movi8[p_act].cod_grupo IS NOT NULL AND movi8[p_act].cod_tipo IS NOT NULL AND movi8[p_act].cod_sec IS NOT NULL THEN LET p_act = arr_curr() LET ant_art.cod_n = movi8[p_act].cod_n LET ant_art.cod_grupo = movi8[p_act].cod_grupo LET ant_art.cod_tipo = movi8[p_act].cod_tipo LET ant_art.cod_sec = movi8[p_act].cod_sec LET ant_art.maquina = movi8[p_act].codigo FOR idx = 1 TO arr_count() IF idx != p_act THEN IF movi8[idx].cod_n = ant_art.cod_n AND movi8[idx].cod_grupo = ant_art.cod_grupo AND movi8[idx].cod_tipo = ant_art.cod_tipo AND movi8[idx].cod_sec = ant_art.cod_sec AND movi8[idx].codigo = ant_art.maquina 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 IF movi8[p_act].cantidad_2 IS NULL AND movi8[p_act].cod_n IS NOT NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n END IF END IF LET ant_art.cod_n = movi8[p_act].cod_n LET ant_art.cod_grupo = movi8[p_act].cod_grupo LET ant_art.cod_tipo = movi8[p_act].cod_tipo LET ant_art.cod_sec = movi8[p_act].cod_sec LET ant_art.maquina = movi8[p_act].codigo AFTER FIELD cod_n LET p_act = arr_curr() IF movi8[p_act].cod_n IS NOT NULL THEN LET ant_art.cod_n = movi8[p_act].cod_n LET ant_art.cod_grupo = movi8[p_act].cod_grupo LET ant_art.cod_tipo = movi8[p_act].cod_tipo LET ant_art.cod_sec = movi8[p_act].cod_sec LET ant_art.maquina = movi8[p_act].codigo FOR idx = 1 TO arr_count() IF idx != p_act THEN IF movi8[idx].cod_n = ant_art.cod_n AND movi8[idx].cod_grupo = ant_art.cod_grupo AND movi8[idx].cod_tipo = ant_art.cod_tipo AND movi8[idx].cod_sec = ant_art.cod_sec AND movi8[idx].codigo = ant_art.maquina THEN LET p_act = p_act - 1 NEXT FIELD cod_grupo END IF END IF END FOR END IF AFTER FIELD cod_grupo IF movi8[p_act].cod_grupo IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n END IF LET p_act = arr_curr() LET ant_art.cod_n = movi8[p_act].cod_n LET ant_art.cod_grupo = movi8[p_act].cod_grupo LET ant_art.cod_tipo = movi8[p_act].cod_tipo LET ant_art.cod_sec = movi8[p_act].cod_sec LET ant_art.maquina = movi8[p_act].codigo FOR idx = 1 TO arr_count() IF idx != p_act THEN IF movi8[idx].cod_n = ant_art.cod_n AND movi8[idx].cod_grupo = ant_art.cod_grupo AND movi8[idx].cod_tipo = ant_art.cod_tipo AND movi8[idx].cod_sec = ant_art.cod_sec AND movi8[idx].codigo = ant_art.maquina THEN LET p_act = p_act - 1 NEXT FIELD cod_tipo END IF END IF END FOR AFTER FIELD cod_tipo IF movi8[p_act].cod_tipo IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n END IF LET p_act = arr_curr() LET ant_art.cod_n = movi8[p_act].cod_n LET ant_art.cod_grupo = movi8[p_act].cod_grupo LET ant_art.cod_tipo = movi8[p_act].cod_tipo LET ant_art.cod_sec = movi8[p_act].cod_sec LET ant_art.maquina = movi8[p_act].codigo FOR idx = 1 TO arr_count() IF idx != p_act THEN IF movi8[idx].cod_n = ant_art.cod_n AND movi8[idx].cod_grupo = ant_art.cod_grupo AND movi8[idx].cod_tipo = ant_art.cod_tipo AND movi8[idx].cod_sec = ant_art.cod_sec AND movi8[idx].codigo = ant_art.maquina THEN LET p_act = p_act - 1 NEXT FIELD cod_sec END IF END IF END FOR # Verifica que el numero del documento de entrada no este en el archivo de # movi8mientos. AFTER FIELD cod_sec LET p_act = arr_curr() IF movi8[p_act].cod_sec IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n END IF IF movi8[p_act].cod_n IS NULL AND movi8[p_act].cod_sec IS NOT NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n END IF IF movi8[p_act].cod_n IS NOT NULL AND movi8[p_act].cod_grupo IS NOT NULL AND movi8[p_act].cod_tipo IS NOT NULL AND movi8[p_act].cod_sec IS NOT NULL THEN SELECT a.descrip_esp, a.unidad_med, a.exist_min INTO descrip1, descrip2, existminima[p_act] FROM irtb00002 a WHERE a.cod_n = movi8[p_act].cod_n AND a.cod_grupo = movi8[p_act].cod_grupo AND a.cod_tipo = movi8[p_act].cod_tipo AND a.cod_sec = movi8[p_act].cod_sec AND a.status_t IS NULL AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_n END IF CALL existencia( movi8[p_act].cod_n, movi8[p_act].cod_grupo, movi8[p_act].cod_tipo, movi8[p_act].cod_sec) RETURNING existen IF existen IS NULL THEN LET existen = 0 END IF LET movi8[p_act].existencia = existen DISPLAY movi8[p_act].existencia TO s_movi1[scr_l].existencia # BUSCA LA MAQUINA PERTENECIENTE AL REPUESTO # se quito este control porque entonces alguien debe de adicionar todos los repuestos a las maquinas { SELECT a.cod_maq INTO codigo_mq FROM irtb00008 a WHERE a.cod_n = movi8[p_act].cod_n AND a.cod_grupo = movi8[p_act].cod_grupo AND a.cod_tipo = movi8[p_act].cod_tipo AND a.cod_sec = movi8[p_act].cod_sec AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 384 CALL msg(numero_msg) #NEXT FIELD cod_sec END IF IF STATUS < 0 THEN LET consulta = "N" CALL busca_maquina() LET movi8[p_act].codigo = busca_wd2[curr1].codigo DISPLAY movi8[p_act].codigo TO s_movi1[scr_l].codigo DISPLAY BY NAME maquinaria.nombre END IF } #CONTROL COSTO # LET bandera = 0 # CALL busca_costo() # IF bandera = 1 THEN # NEXT FIELD cod_sec # END IF END IF LET movi8[p_act].descrip_esp = descrip1 LET movi8[p_act].unidad_med = descrip2 CLIPPED DISPLAY movi8[p_act].descrip_esp TO s_movi1[scr_l].descrip_esp DISPLAY movi8[p_act].unidad_med TO s_movi1[scr_l].unidad_med LET ant_art.cod_n = movi8[p_act].cod_n LET ant_art.cod_grupo = movi8[p_act].cod_grupo LET ant_art.cod_tipo = movi8[p_act].cod_tipo LET ant_art.cod_sec = movi8[p_act].cod_sec LET ant_art.maquina = movi8[p_act].codigo FOR idx = 1 TO arr_count() IF idx != p_act THEN IF movi8[idx].cod_n = ant_art.cod_n AND movi8[idx].cod_grupo = ant_art.cod_grupo AND movi8[idx].cod_tipo = ant_art.cod_tipo AND movi8[idx].cod_sec = ant_art.cod_sec AND movi8[idx].codigo = ant_art.maquina THEN LET numero_msg = 21 CALL msg(numero_msg) NEXT FIELD cod_n END IF END IF END FOR AFTER FIELD codigo IF movi8[p_act].cod_n IS NOT NULL AND movi8[p_act].cod_grupo IS NOT NULL AND movi8[p_act].cod_tipo IS NOT NULL AND movi8[p_act].cod_sec IS NOT NULL THEN IF movi8[p_act].codigo IS NOT NULL THEN LET xdepartamento = NULL SELECT a.departamento INTO xdepartamento FROM irtb00009 a WHERE a.codigo = movi8[p_act].codigo IF xdepartamento IS NOT NULL THEN LET datos1.departamento = xdepartamento DISPLAY BY NAME datos1.departamento END IF END IF IF movi8[p_act].codigo IS NOT NULL THEN CALL DIALOG.setFieldActive('orden_trabajo',TRUE) END IF END IF AFTER FIELD cantidad_2 IF movi8[p_act].cod_n IS NOT NULL AND movi8[p_act].cod_grupo IS NOT NULL AND movi8[p_act].cod_tipo IS NOT NULL AND movi8[p_act].cod_sec IS NOT NULL THEN IF movi8[p_act].cantidad_2 IS NULL OR movi8[p_act].cantidad_2 <= 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n END IF IF transacc.status_mov = "2" THEN CALL existencia( movi8[p_act].cod_n, movi8[p_act].cod_grupo, movi8[p_act].cod_tipo, movi8[p_act].cod_sec) RETURNING existen IF existen IS NULL THEN LET existen = 0 END IF IF existen < 0 THEN LET numero_msg = 30 CALL msg(numero_msg) NEXT FIELD cod_n END IF IF movi8[p_act].cantidad_2 > existen THEN LET numero_msg = 30 CALL msg(numero_msg) NEXT FIELD cod_n END IF LET existenciaact[p_act] = existen END IF END IF AFTER FIELD orden_trabajo IF movi8[p_act].orden_trabajo IS NOT NULL THEN INITIALIZE fakedata.* TO NULL CALL ApiMaintainC('CHECK', movi8[p_act].orden_trabajo, fakeData.*, usuarios) RETURNING answer IF answer IS NULL OR answer = 0 THEN CALL fgl_winmessage( "ORDEN DE TRABAJO EN MAINTAINX", "El ID de la orden de trabajo colocada no se encuentra en MaintainX", "stop") NEXT FIELD orden_trabajo ELSE LET answer_workorder = answer END IF END IF AFTER FIELD num_emp IF movi8[p_act].num_emp IS NOT NULL THEN SELECT num_emp FROM adtb00003 WHERE num_emp = movi8[p_act].num_emp AND status_t IS NULL IF status = NOTFOUND THEN CALL msg(3) NEXT FIELD num_emp END IF END IF ON ACTION guardar ATTRIBUTE(TEXT = "Salvar", IMAGE = "save") IF datos1.departamento IS NULL AND transacc.control_departamento = "SI" THEN DISPLAY BY NAME datos1.departamento CALL msg(16) NEXT FIELD departamento END IF FOR idx = 1 TO movi8.getLength() IF movi8[idx].cod_n IS NOT NULL AND movi8[idx].cod_grupo IS NOT NULL AND movi8[idx].cod_tipo IS NOT NULL AND movi8[idx].cod_sec IS NOT NULL THEN IF movi8[idx].codigo IS NOT NULL THEN LET xdepartamento = NULL SELECT a.departamento INTO xdepartamento FROM irtb00009 a WHERE a.codigo = movi8[idx].codigo IF xdepartamento IS NOT NULL THEN LET datos1.departamento = xdepartamento DISPLAY BY NAME datos1.departamento END IF END IF END IF END FOR IF movi8[p_act].cod_n IS NULL THEN CALL limpia1() END IF IF movi8[p_act].cod_grupo IS NULL THEN CALL limpia1() END IF IF movi8[p_act].cod_tipo IS NULL THEN CALL limpia1() END IF IF movi8[p_act].cod_sec IS NULL THEN CALL limpia1() END IF IF datos1.orden_compra IS NOT NULL THEN # Busca la cantidad recibida de la orden especificada SELECT SUM(cantidad_2) INTO recibida FROM irtb00006 WHERE orden_compra = datos1.orden_compra AND tipo = datos1.tipo # Busca la cantidad ordenada de la orden especificada SELECT SUM(cantidad) INTO ordenada FROM cotb00015 WHERE num_oc = datos1.orden_compra AND tipo = datos1.tipo IF recibida IS NULL THEN LET recibida = 0 END IF IF ordenada IS NULL THEN LET ordenada = 0 END IF # Calculo de los porcentaje limites de las ordenes LET porciento = ordenada * 0.10 LET recibida = recibida + total_cantidad LET r_cantidad = ordenada - porciento LET r_cantidad1 = ordenada + porciento # Si la cantiad recibida producto de la sumatoria y subtracion del 10% # es mayor o igual a la cantidad recibida y menor o igual a la cantidad de # la orden cierra la orden IF recibida >= r_cantidad AND recibida <= r_cantidad1 THEN LET cerrada = "S" END IF END IF LET nombre_d = ui.ComboBox.forName('formonly.departamento') .getTextOf(datos1.departamento) 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 formu4 TO archivo # CONFIGURACION ENVIO EMAIL DECLARE buscaemail CURSOR FOR SELECT a.correo FROM seg0003 a WHERE a.aviso_existencia_minima_repuesto = "SI" LET pccemail = NULL LET toEmail = NULL FOREACH buscaemail INTO PCCEMAIL IF toEmail IS NULL THEN LET toEmail = pccemail CLIPPED ELSE LET toEmail = toEmail CLIPPED, ";", pccemail CLIPPED END IF END FOREACH LET subject = 'AVISO EXISTENCIA MINIMA ALMACEN REPUESTOS' LET cuerpo_correo = "", "", "", "", "", "", "", "", "" LET enviaCorreo = "NO" BEGIN WORK # Selecciona el registro del ultimo numero de documento para chequear si # existe para insertarlo en la tabla de secuencia SELECT num_salida INTO datos1.num_doc FROM irtb00014 WHERE cod_mov = datos1.cod_mov IF status = NOTFOUND THEN LET datos1.num_doc = 0 INSERT INTO irtb00014 VALUES(datos1.num_doc, datos1.cod_mov, NULL, SUSER_SNAME(), GETDATE(), NULL, NULL) END IF LET datos1.num_doc = datos1.num_doc + 1 DISPLAY BY NAME datos1.num_doc ATTRIBUTE(BOLD) UPDATE irtb00014 SET num_salida = datos1.num_doc, us_mod = usuarios, fech_mod = getdate() WHERE cod_mov = datos1.cod_mov #---------------------------------------------------------------------------- FOR idx = 1 TO arr_count() IF movi8[idx].cod_n IS NOT NULL AND movi8[idx].cod_grupo IS NOT NULL AND movi8[idx].cod_tipo IS NOT NULL AND movi8[idx].cod_sec IS NOT NULL AND (movi8[idx].cantidad_2 IS NOT NULL AND movi8[idx].cantidad_2 > 0) THEN IF transacc.status_mov = "2" THEN LET movi8[idx].cantidad_2 = movi8[idx].cantidad_2 * -1 END IF IF movi8[idx].codigo IS NULL AND transacc.control_maquina = "SI" THEN DISPLAY "AQUI 1" ROLLBACK WORK CALL msg(16) NEXT FIELD codigo END IF IF movi8[idx].codigo IS NOT NULL AND transacc.control_maquina = "NO" THEN DISPLAY "AQUI 2" ROLLBACK WORK CALL msg(1664) NEXT FIELD codigo END IF LET checkapi.checkDept = FALSE LET checkapi.checkMaquina = FALSE LET checkapi.checkRep = FALSE --Verificar si el departamento esta en maintainX INITIALIZE answer TO NULL SELECT id_maintainx INTO answer FROM adtb00001 WHERE departamento = datos1.departamento IF answer IS NULL THEN #CALL msg(16) DISPLAY "AQUI 3" ELSE LET checkApi.checkDept = TRUE END IF --Verificar si la maquina esta en maintainX INITIALIZE answer TO NULL SELECT b.id_maintainX INTO answer FROM irtb00009 a, actb00001 b WHERE a.id_codigo = b.codigo AND a.codigo = movi8[idx].codigo IF answer IS NULL THEN #CALL msg(16) DISPLAY "AQUI 4" ELSE LET checkApi.checkMaquina = TRUE END IF --Verificar si el repuesto esta en maintainX INITIALIZE answer TO NULL select id_maintainX INTO answer from irtb00002 WHERE cod_n = movi8[idx].cod_n AND cod_grupo = movi8[idx].cod_grupo AND cod_tipo = movi8[idx].cod_tipo AND cod_sec = movi8[idx].cod_sec IF answer IS NULL THEN #CALL msg(16) DISPLAY "AQUI 5" ELSE LET checkApi.checkRep = TRUE END IF INSERT INTO irtb00006( num_doc, fecha, conduce_no, tipo, orden_compra, cod_sp, cod_sp_sec, cod_mov, maquina, cod_n, cod_grupo, cod_tipo, cod_sec, cantidad_2, sec_a, status_mov, us_crea, fech_crea, bodega, orden_trabajo, num_req) VALUES(datos1.num_doc, datos1.fecha, datos1.conduce_no, datos1.tipo, datos1.orden_compra, datos1.cod_sp, datos1.cod_sp_sec, datos1.cod_mov, movi8[idx].codigo, movi8[idx].cod_n, movi8[idx].cod_grupo, movi8[idx].cod_tipo, movi8[idx].cod_sec, movi8[idx].cantidad_2, datos1.departamento, transacc.status_mov, usuarios, GETDATE(), '1', movi8[idx].orden_trabajo, data.rnumeroDoc) IF data.rcodMov IS NOT NULL AND data.rcodMov != 0 THEN UPDATE irtb00057 SET estado = 'CERRADA', us_mod = usuarios, fech_mod = getdate() WHERE numero_doc = data.rnumeroDoc AND cod_mov = data.rcodMov AND bodega = data.bodega END IF IF movi8[idx].num_emp IS NOT NULL THEN LET v_producto_id = movi8[idx].cod_n CLIPPED, "-" CLIPPED, movi8[idx].cod_grupo CLIPPED, "-" CLIPPED, movi8[idx].cod_tipo CLIPPED, "-" CLIPPED, movi8[idx].cod_sec CLIPPED INSERT INTO adtb00057(num_emp, fecha, codigo, documento, cantidad) VALUES(movi8[idx].num_emp, datos1.fecha, REPLACE(v_producto_id, ' ',''), datos1.num_doc, ABS(movi8[idx].cantidad_2)) END IF SELECT SUM(cantidad_2) INTO APIexistencia from irtb00006 WHERE cod_n = movi8[idx].cod_n and cod_grupo = movi8[idx].cod_grupo and cod_tipo = movi8[idx].cod_tipo and cod_sec = movi8[idx].cod_sec AND status_t IS NULL SELECT exist_min INTO m_articulos.exist_min FROM irtb00002 WHERE cod_n = movi8[idx].cod_n AND cod_grupo = movi8[idx].cod_grupo AND cod_tipo = movi8[idx].cod_tipo AND cod_sec = movi8[idx].cod_sec AND status_t IS NULL select costo_st INTO m_articulos.descrip_ing from irtb00013 where mes_fin = 12 and ano = YEAR(datos1.fecha) and cod_n = movi8[idx].cod_n AND cod_grupo = movi8[idx].cod_grupo AND cod_tipo = movi8[idx].cod_tipo AND cod_sec = movi8[idx].cod_sec AND status_t IS NULL # ESTE CONTROL ESTABA AL MOMENTO DE NOSOTROS DESARROLLAR EL API, # POR SUGERENCIA DE CESAR FRANCISCO EN FECHA 08/05/2026 SOLO SE ESTA CONTROLANDO # SI EL REPUESTO ESTA EN MAINTAINX # IF checkapi.checkDept AND checkapi.checkMaquina AND checkapi.checkRep THEN IF checkapi.checkRep THEN LET m_articulos.existencia = APIexistencia CALL ApiMaintainR('PATCH',answer, m_articulos.*, usuarios) RETURNING answer IF answer != 1 THEN DISPLAY "AQUI 6" ROLLBACK WORK END IF END IF # --------------------------------------------------------------- # MaintainX: adjunta el repuesto de la linea a SU orden de trabajo. # Cada linea del detalle se adjunta a su propia orden de trabajo. # --------------------------------------------------------------- IF movi8[idx].orden_trabajo IS NOT NULL THEN # El repuesto debe existir en MaintainX; de lo contrario se aborta. IF NOT checkapi.checkRep THEN CALL fgl_winmessage( "REPUESTO NO ESTA EN MAINTAINX", "El repuesto de una linea con orden de trabajo no se encuentra en MaintainX. No se puede guardar el documento.", "stop") ROLLBACK WORK NEXT FIELD cod_n END IF # Obtiene el ID real de la orden de trabajo en MaintainX para ESTA linea. INITIALIZE fakeData.* TO NULL CALL ApiMaintainC('CHECK', movi8[idx].orden_trabajo, fakeData.*, usuarios) RETURNING answer IF answer IS NULL OR answer = 0 THEN CALL fgl_winmessage( "ORDEN DE TRABAJO EN MAINTAINX", "El ID de la orden de trabajo colocada no se encuentra en MaintainX.", "stop") ROLLBACK WORK NEXT FIELD orden_trabajo END IF LET answer_workorder = answer # Datos del repuesto que se adjuntara a la orden de trabajo. SELECT UNIQUE id_maintainx INTO fakeData.id_maintainx FROM irtb00002 WHERE cod_n = movi8[idx].cod_n AND cod_grupo = movi8[idx].cod_grupo AND cod_tipo = movi8[idx].cod_tipo AND cod_sec = movi8[idx].cod_sec AND status_t IS NULL LET fakeData.contactID = movi8[idx].cantidad_2 LET fakeData.cod_sp_sec = datos1.departamento LET fakeData.term_sp = datos1.cod_mov CALL ApiMaintainC('PATCH_WORKORDER', answer_workorder, fakeData.*, usuarios) RETURNING answer IF answer != 1 THEN CALL fgl_winmessage( "ORDEN DE TRABAJO EN MAINTAINX", "No se pudo adjuntar el repuesto a la orden de trabajo en MaintainX.", "stop") ROLLBACK WORK NEXT FIELD orden_trabajo END IF END IF IF transacc.status_mov = "2" THEN CALL existencia( movi8[idx].cod_n, movi8[idx].cod_grupo, movi8[idx].cod_tipo, movi8[idx].cod_sec) RETURNING existen IF existen IS NULL THEN LET existen = 0 END IF IF existen < 0 THEN DISPLAY "AQUI 7" ROLLBACK WORK LET numero_msg = 30 CALL msg(numero_msg) NEXT FIELD cod_n END IF END IF OUTPUT TO REPORT formu4(datos1.*, movi8[idx].*) LET cuerpo_correo = cuerpo_correo CLIPPED, "" # PROCEDIMIENTO ENVIO CORREO PARA LA EXISTENCIA MINIMA LET existenciaact[idx] = (existenciaact[idx] - (movi8[idx].cantidad_2 * -1)) IF existminima[idx] > 0 THEN LET porcientocontrol[idx] = (existminima[idx] / existenciaact[idx]) * 100 END IF LET enviaEmailProd[idx] = "NO" IF porcientocontrol[idx] >= 90 AND transacc.status_mov = 2 AND existminIma[idx] > 0 THEN # INFORMACION PARA ENVIAR EL CORREO A LOS VENDEDORES LET enviaCorreo = "SI" LET CCEmail = "jsoto@marmotech.com.do" LET cuerpo_correo = cuerpo_correo CLIPPED, "", "", "", "", "" LET enviaEmailProd[idx] = "SI" END IF IF porcientocontrol[idx] <= 0 AND transacc.status_mov = 2 AND existminIma[idx] > 0 THEN # INFORMACION PARA ENVIAR EL CORREO A LOS VENDEDORES LET enviaCorreo = "SI" # LET TOEmail = "mantenimiento@marmotech.com.do" LET CCEmail = "jsoto@marmotech.com.do" LET cuerpo_correo = cuerpo_correo CLIPPED, "", "", "", "", "" LET enviaEmailProd[idx] = "SI" END IF IF transacc.status_mov = 2 AND existenciaact[idx] <= 0 AND enviaEmailProd[idx] = "NO" THEN # INFORMACION PARA ENVIAR EL CORREO A LOS VENDEDORES LET enviaCorreo = "SI" # LET TOEmail = "mantenimiento@marmotech.com.do" LET CCEmail = "jsoto@marmotech.com.do" LET cuerpo_correo = cuerpo_correo CLIPPED, "", "", "", "", "", "" END IF END IF # SE DESACTIVO EL ENVIO POR CADA TRANSACCION QUE ESTE POR DEBAJO DEL MINIMO LET enviaCorreo = "NO" END FOR IF enviaCorreo = "SI" THEN LET cuerpo_correo = cuerpo_correo CLIPPED, "
CON EL DOCUMENTO ", datos1.num_doc USING "&&&&&&&&", "PERTENECIENTE AL MOVIMIENTO (", datos1.cod_mov USING "&&&", ")", datos1.descrip_mov CLIPPED, "
PRODUCTOSCANTIDAD TRANSACCCANTIDAD MINIMAEXISTENCIA
", movi8[idx].descrip_esp CLIPPED, "", movi8[idx].cantidad_2 USING "##,###.##", "", existminima[idx] USING "##,###.##", "", existenciaact[idx] USING "##,###.##", "
", movi8[idx].descrip_esp CLIPPED, "", movi8[idx].cantidad_2 USING "##,###.##", "", existminima[idx] USING "##,###.##", "", existenciaact[idx] USING "##,###.##", "
EXISTENCIA EN CERO
", movi8[idx].descrip_esp CLIPPED, "", movi8[idx].cantidad_2 USING "##,###.##", "", existminima[idx] USING "##,###.##", "", existenciaact[idx] USING "##,###.##", "
" LET procedimiento = "{ call cc_avisadespacho(?,?,?,?) }" CLIPPED IF LENGTH(Toemail) > 2 THEN LET xusername = 'notificacion@marmotech.com.do' LET xsmtphost = 'smtp.office365.com' LET xsmtpport = '587' LET xpassword = 'Lmmjvsd2020' LET toemail = 'jsoto@marmotech.com.do' CALL enviaemail( Toemail, subject, cuerpo_correo, NULL, xusername, xsmtphost, xsmtpport, xpassword) END IF # CALL envia_correo( # TOemail, CCEmail, cuerpo_correo, subject, procedimiento) END IF COMMIT WORK FINISH REPORT formu4 RUN imprime LET numero_msg = 1 CALL msg(numero_msg) CALL movi8.clear() INITIALIZE datos1.* TO NULL INITIALIZE transacc.* TO NULL CLEAR FORM ON ACTION CANCEL ATTRIBUTE(TEXT = "Cancelar") LET opt = fgl_winquestion( "Salir", "Esta seguro de salir del programa?", "no", "YES|NO", "question", 0) IF opt = "YES" THEN EXIT PROGRAM ELSE NEXT FIELD orden_compra END IF END INPUT END DIALOG END FUNCTION FUNCTION limpia1() LET movi8[p_act].cod_n = NULL LET movi8[p_act].cod_grupo = NULL LET movi8[p_act].cod_tipo = NULL LET movi8[p_act].cod_sec = NULL LET movi8[p_act].cantidad_2 = NULL LET movi8[p_act].unidad_med = NULL LET movi8[p_act].descrip_esp = NULL DISPLAY movi8[p_act].cod_n TO s_movi1[scr_l].cod_n DISPLAY movi8[p_act].cod_grupo TO s_movi1[scr_l].cod_grupo DISPLAY movi8[p_act].cod_tipo TO s_movi1[scr_l].cod_tipo DISPLAY movi8[p_act].cod_sec TO s_movi1[scr_l].cod_sec DISPLAY movi8[p_act].cantidad_2 TO s_movi1[scr_l].cantidad_2 DISPLAY movi8[p_act].unidad_med TO s_movi1[scr_l].unidad_med DISPLAY movi8[p_act].descrip_esp TO s_movi1[scr_l].descrip_esp END FUNCTION REPORT formu4(x, z) DEFINE x RECORD cod_mov LIKE irtb00006.cod_mov, descrip_mov LIKE irtb00005.descrip_mov, num_doc LIKE irtb00006.num_doc, tipo LIKE irtb00006.tipo, orden_compra LIKE irtb00006.orden_compra, cod_sp LIKE irtb00006.cod_sp, cod_sp_sec LIKE irtb00006.cod_sp_sec, fecha LIKE irtb00006.fecha, conduce_no VARCHAR(50), secc_a LIKE irtb00006.sec_a, nom_sp CHAR(30) END RECORD DEFINE z RECORD cod_n LIKE intb00003.cod_n, cod_grupo LIKE intb00003.cod_grupo, cod_tipo LIKE intb00003.cod_tipo, cod_sec LIKE intb00003.cod_sec, cantidad_2 LIKE irtb00006.cantidad_2, unidad_med LIKE irtb00002.unidad_med, descrip_esp LIKE irtb00002.descrip_esp, codigo LIKE irtb00008.cod_maq, orden_trabajo INT, existencia FLOAT, num_emp SMALLINT END RECORD # DEFINE doce,normal,doble,doble_of,negras,negras_off CHAR(2) DEFINE l, cuenta SMALLINT OUTPUT TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 1 PAGE LENGTH 33 FORMAT PAGE HEADER LET doce = ASCII 27, ASCII 77 LET doble = ASCII 14 LET doble_of = ASCII 20 LET negras = ASCII 27, ASCII 69 LET negras_off = ASCII 27, ASCII 70 PRINT doce PRINT COLUMN 1, negras, doble, p_companias.nombre CLIPPED PRINT COLUMN 65, "No. ", doble, x.num_doc USING "<<<<<<" PRINT COLUMN 30, "MOVIMIENTOS DE ALMACEN", COLUMN 60, x.fecha #using "dd/mm/yyyy" SKIP 1 LINES LET l = (80 - LENGTH(x.descrip_mov)) / 2 PRINT COLUMN l, "(", x.cod_mov USING "&&", ")", x.descrip_mov, negras_off PRINT COLUMN 1, "Suplidor : ", x.cod_sp USING "&&", "-", x.cod_sp_sec USING "&&&&", " ", x.nom_sp PRINT COLUMN 1, "Condude : ", x.conduce_no PRINT COLUMN 1, "Departamento: ", x.secc_a USING "<<<<", " ", nombre_d SKIP 1 LINES PRINT COLUMN 1, "---------------------------------------------------------------------" PRINT COLUMN 58, "CANTIDAD" # 2 SPACES, "EXITENCIA" PRINT COLUMN 2, doble, "ARTICULOS", doble_of CLIPPED, COLUMN 51, "REQUERIDA " PRINT COLUMN 1, "-----------------------------------------------------------------------" SKIP 1 LINES ON EVERY ROW IF z.cod_n IS NOT NULL AND z.cod_grupo IS NOT NULL AND z.cod_tipo IS NOT NULL AND z.cod_sec IS NOT NULL THEN LET xnombre = NULL SELECT a.nombre INTO xnombre FROM irtb00009 a WHERE a.codigo = z.codigo AND a.status_t IS NULL PRINT COLUMN 2, z.cod_n USING "&", "-", COLUMN 4, z.cod_grupo USING "&&&", "-", COLUMN 6, z.cod_tipo USING "&&&", "-", COLUMN 9, z.cod_sec USING "&&&", COLUMN 17, z.descrip_esp CLIPPED, " ", z.unidad_med, COLUMN 58, z.cantidad_2 USING "##,###.##", COLUMN 68, z.codigo USING "<<<", " ", xnombre # 2 SPACES, z.existencia USING "<<,<<<.##" END IF PAGE TRAILER PRINT COLUMN 1, "------------------", COLUMN 27, "------------------", COLUMN 50, "------------------" PRINT COLUMN 5, "Entregado Por", COLUMN 29, "Recibido Por", COLUMN 53, "Aprobado Por" SKIP 2 LINE PRINT COLUMN 2, "Original: Contabilidad Copia: Almacen" SKIP 1 LINE #PRINT normal END REPORT FUNCTION anular() DISPLAY "ELIMINACION REGISTROS " AT 3, 2 ATTRIBUTE(BLUE, REVERSE) INPUT BY NAME datos1.cod_mov, datos1.num_doc AFTER FIELD num_doc IF datos1.num_doc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_doc END IF SELECT UNIQUE fecha, tipo, orden_compra, sec_de, cod_sp, cod_sp_sec INTO datos1.fecha, datos1.tipo, datos1.orden_compra, datos1.departamento FROM irtb00006 WHERE @num_doc = datos1.num_doc AND @cod_mov = datos1.cod_mov IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD num_doc END IF DISPLAY BY NAME datos1.* AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) EXIT INPUT END IF END INPUT IF int_flag THEN GOTO salir END IF PROMPT "Esta Seguro de Eliminar Este Documento (S/N)? " FOR ya LET ya = upshift(ya) IF ya = "S" THEN UPDATE irtb00006 SET status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE num_doc = datos1.num_doc AND cod_mov = datos1.cod_mov END IF LABEL salir: DISPLAY " Adiciona Registro" AT 3, 2 ATTRIBUTE(BLUE, REVERSE) END FUNCTION FUNCTION busca_prod1() OPEN WINDOW busca_2 AT 8, 4 WITH FORM "irfmwd001" ATTRIBUTE(BORDER, FORM LINE FIRST + 1, PROMPT LINE LAST) CONSTRUCT BY NAME criterio ON a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, a.descrip_esp LET selec_pt = "SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp, ", " a.unidad_med,isnull(sum(b.cantidad_2),0) FROM irtb00002 a,irtb00006 b ", "WHERE a.status_t IS NULL AND ", " (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 ", " b.status_t is null AND ", criterio CLIPPED, " GROUP BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,a.unidad_med ", " ORDER BY a.descrip_esp " PREPARE comando_p FROM selec_pt DECLARE busca_2 CURSOR FOR comando_p LET idx = 1 FOREACH busca_2 INTO arr_prod[idx].* LET idx = idx + 1 END FOREACH CALL SET_COUNT(idx - 1) DISPLAY ARRAY arr_prod TO s_prod.* LET idx = ARR_CURR() CLOSE WINDOW busca_2 END FUNCTION FUNCTION busca_costo() SELECT a.costo_st FROM irtb00013 a WHERE a.cod_n = movi8[p_act].cod_n AND a.cod_grupo = movi8[p_act].cod_grupo AND a.cod_tipo = movi8[p_act].cod_tipo AND a.cod_sec = movi8[p_act].cod_sec AND a.ano = YEAR(TODAY) AND a.mes_fin = 12 AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 351 CALL msg(numero_msg) LET bandera = 1 END IF END FUNCTION FUNCTION irprmfad036() DIALOG ATTRIBUTE(UNBUFFERED) CONSTRUCT BY NAME criterio ON a.cod_mov, a.num_Doc BEFORE CONSTRUCT CALL busca_departamento() ON ACTION busca_info ATTRIBUTE(TEXT = "Busca Informacion", IMAGE = "find") LET selec = " select a.cod_mov,b.descrip_mov,a.num_doc,a.tipo,a.orden_compra,a.cod_sp,a.cod_sp_sec,a.fecha,", " d.nombre,a.sec_a ,c.nom_sp FROM irtb00006 a LEFT OUTER JOIN cotb00001 c ON a.cod_sp=c.cod_sp and ", " a.cod_sp_sec = c.cod_sp_sec LEFT OUTER JOIN irtb00009 d ON a.maquina = d.codigo, ", "irtb00005 b ", " WHERE ", criterio CLIPPED, " AND a.cod_mov = b.cod_mov AND a.status_t IS NULL " PREPARE x1 FROM selec DECLARE busca_ir SCROLL CURSOR FOR x1 OPEN busca_ir FETCH FIRST busca_ir INTO datos1.* CALL desplega_doc() MENU "NAVEGACION" COMMAND "Siguiente" FETCH NEXT busca_ir INTO datos1.* IF STATUS = NOTFOUND THEN CALL msg(4) CONTINUE MENU END IF CALL desplega_doc() COMMAND "Anterior" FETCH PREVIOUS busca_ir INTO datos1.* IF STATUS = NOTFOUND THEN CALL msg(5) CONTINUE MENU END IF CALL desplega_doc() COMMAND "Ultimo" FETCH LAST busca_ir INTO datos1.* IF STATUS = NOTFOUND THEN CALL msg(4) CONTINUE MENU END IF CALL desplega_doc() COMMAND "Primero" FETCH FIRST busca_ir INTO datos1.* CALL desplega_doc() COMMAND "Retornar" EXIT MENU END MENU ON ACTION CANCEL EXIT DIALOG AFTER CONSTRUCT END CONSTRUCT END DIALOG END FUNCTION FUNCTION desplega_Doc() DISPLAY BY NAME datos1.* DECLARE busca_detalle CURSOR FOR SELECT a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, a.cantidad_2, b.unidad_med, b.descrip_esp, a.maquina, a.orden_trabajo FROM irtb00006 a, irtb00002 b WHERE (a.cod_mov = datos1.cod_mov AND a.num_Doc = datos1.num_doc) AND (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.status_t IS NULL CALL maquinas(-1) LET idx = 1 FOREACH busca_detalle INTO movi8[idx].* LET idx = idx + 1 END FOREACH DISPLAY ARRAY movi8 TO s_movi1.* ON ACTION imprime ATTRIBUTE(TEXT = "Re-imprimir", IMAGE = "fa-print") 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 formu4 TO archivo FOR idx = 1 TO movi8.getLength() OUTPUT TO REPORT formu4(datos1.*, movi8[idx].*) END FOR FINISH REPORT formu4 RUN imprime ON ACTION CANCEL EXIT DISPLAY AFTER DISPLAY END DISPLAY END FUNCTION FUNCTION busca_maquina() # LET formulario = fgl_getenv("FORMS") CLIPPED,"/codir/" # LET formulario = formulario CLIPPED, "cofmwd002" LET formulario = "irfmwd068" OPEN WINDOW busqueda AT 8, 8 WITH FORM "irfmwd068" ATTRIBUTE(BORDER, FORM LINE FIRST + 2, COMMENT LINE LAST) LET int_flag = FALSE IF consulta = "S" THEN CONSTRUCT criterio ON irtb00009.nombre FROM irtb00009.nombre LET selec = "SELECT codigo,nombre FROM irtb00009 ", " WHERE ", " status_t is null AND ", criterio CLIPPED, "ORDER BY 1 " ELSE { LET selec = "SELECT a.codigo,a.nombre FROM irtb00009 a,irtb00008 b ", " WHERE ", " b.cod_n =7 AND ", " b.cod_grupo = 0 AND ", " b.cod_tipo = 0 AND ", " b.cod_sec = 2 AND ", " a.codigo = b.cod_maq ", "ORDER BY 1 " } LET selec = "SELECT a.codigo,a.nombre FROM irtb00009 a,irtb00008 b ", " WHERE ", " b.cod_n = '", movi8[p_act].cod_n, "' AND ", " b.cod_grupo = '", movi8[p_act].cod_grupo, "' AND ", " b.cod_tipo = '", movi8[p_act].cod_tipo, "' AND ", " b.cod_sec = '", movi8[p_act].cod_sec, "' AND ", " a.codigo = b.cod_maq ", "ORDER BY 1 " END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) GO TO sale2 RETURN END IF PREPARE busca2 FROM selec IF status >= 0 THEN IF status = NOTFOUND THEN LET numero_msg = 12 CALL msg(numero_msg) END IF END IF DECLARE johnn2 CURSOR FOR busca2 LET idx = 1 FOREACH johnn2 INTO busca_wd2[idx].* IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) GO TO sale3 END IF IF status = NOTFOUND THEN EXIT FOREACH END IF LET idx = idx + 1 LABEL sale3: END FOREACH CALL set_count(idx - 1) DISPLAY ARRAY busca_wd2 TO s_desp1.* LET curr1 = arr_curr() LET dm_rep.maquina = busca_wd2[curr1].codigo LET maquinaria.codigo = busca_wd2[curr1].codigo LET maquinaria.nombre = busca_wd2[curr1].nombre LABEL sale2: CLOSE WINDOW busqueda END FUNCTION FUNCTION existencia(codn, codgrupo, codtipo, codsec) DEFINE codn, codgrupo, codtipo, codsec INT, pexistencia DEC(12, 5) # EXISTENCIA LET pexistencia = 0 SELECT ISNULL(SUM(a.cantidad_2), 0) INTO pexistencia FROM irtb00006 a WHERE a.cod_n = codn AND a.cod_grupo = codgrupo AND a.cod_tipo = codtipo AND a.cod_sec = codsec AND a.status_t IS NULL RETURN pexistencia END FUNCTION