{ ---------------------------------------------------------------------------- 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 DEFINE fakeData RECORD LIKE cotb00001.* 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 = "", "
| CON EL DOCUMENTO ", datos1.num_doc USING "&&&&&&&&", "PERTENECIENTE AL MOVIMIENTO (", datos1.cod_mov USING "&&&", ")", datos1.descrip_mov CLIPPED, " | |||
|---|---|---|---|
| PRODUCTOS | ", "CANTIDAD TRANSACC | ", "CANTIDAD MINIMA | ", "EXISTENCIA |
| ", 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 "##,###.##", " | ", "" 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, "
| EXISTENCIA EN CERO | ", movi8[idx].descrip_esp CLIPPED, " | ", "", movi8[idx].cantidad_2 USING "##,###.##", " | ", "", existminima[idx] USING "##,###.##", " | ", "", existenciaact[idx] USING "##,###.##", " | ", "" 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, "