{ ------------------------------------------------------------------ PROGRAMA : COPRMT025 OBJETIVO : Capturar, Consultar y Eliminar registros de la Tabla de Requisiciones. PROGRAMADOR : Ing. Juan Soto FECHA REALIZACION : Marzo 19, 1997 FECHA MODIFICACION: Febrero 23, 2016. ------------------------------------------------------------------ } IMPORT os GLOBALS "coprgb000.4gl" DEFINE c_cuenta SMALLINT DEFINE cantidad_fur, multiplo DECIMAL(12,2), ult_req,p_res,pmultiplo,ult_orden INTEGER, nocalcula CHAR(1), actualiza CHAR(2), proveedor_sugerido VARCHAR(100), inserteDetalle,notifica VARCHAR(2), empty STRING DEFINE adicional RECORD detalle1, detalle2, detalle3 CHAR(70) END RECORD, ktipo_cliente,ksec_cliente INT, cliente,knombre VARCHAR(100) DEFINE d_tipos,mensaje,f_tipos,l_file,filepath,extension,extension_foto,tmp_dirfoto STRING, tmpdir_file,tipos_foto,dir_file,dir_foto CHAR(60) , fdocumento,ffoto BYTE, xnombreusuario VARCHAR(200) DEFINE xusername,xsmtphost,xsmtpport,xpassword STRING, subject,attachment VARCHAR(100), cuerpo_correo, toEmail, orden_trabajo, answer_workorder, descrip_depto STRING, depto INT -- Debe coincidir exactamente (mismos campos, mismo orden) con el RECORD -- "data" del parametro de ApiMaintainC() en otrodir/api_test.4gl: el -- enlazador exige la misma aridad en todos los llamadores. DEFINE data 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, cuenta_no VARCHAR(10), 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), rnc VARCHAR(11), status_t VARCHAR(1), tel_sp VARCHAR(25), term_sp SMALLINT, tipo_doc VARCHAR(10), us_crea VARCHAR(50), us_mod VARCHAR(50) END RECORD DEFINE p_reportfile STRING DEFINE container RECORD tipo_inv STRING, cod_n INT, cod_grupo INT, cod_tipo INT, cod_sec INT END RECORD MAIN DEFER INTERRUPT CALL STARTLOG("coprmt025.log") CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT TO "smarmotech" AS "MSSQL" USER usuarios USING clave CALL buscarToemail() CALL coprmt025() END MAIN FUNCTION coprmt025() CLEAR SCREEN OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21, PROMPT LINE 25 #CALL defecto(impresor) RETURNING imprime,letras.*, archivo OPEN FORM cofmmt025 FROM "cofmmt025" DISPLAY FORM cofmmt025 MENU "OPCIONES" COMMAND "Adicionar" " Adiciona Registro Cancela Operacion " CLEAR FORM LET actualiza = "NO" CALL copcad025() COMMAND "Consultar-Anular" " Realiza Busqueda Cancela Operacion" LET actualiza = "SI" CLEAR FORM CALL copcmf025() COMMAND "Salir" "Retorna Menu Anterior" DELETE FROM cotb00042 WHERE num_req = 0 AND us_crea = suser_sname() AND status_t IS NULL EXIT MENU END MENU END FUNCTION FUNCTION copcad025() DEFINE tiene_Dato CHAR(2), answer STRING DEFINE answer2 INTEGER INITIALIZE depto TO NULL # Captura los datos que va a contener el registro DIALOG ATTRIBUTE(UNBUFFERED) INPUT BY NAME requisi2.*,salida,notifica, orden_trabajo, depto ATTRIBUTE(WITHOUT DEFAULTS) BEFORE INPUT LET d_tipos="PDF" LET f_tipos="*.pdf *.jpg *.png *.doc *.xls" LET tipos_foto ="*.jpg *.png" LET mensaje=%"Elige Documento" IF actualiza = "NO" THEN LET dir_file = NULL LOCATE fdocumento IN MEMORY END IF LOCATE ffoto IN MEMORY IF requisi2.estado IS NULL THEN LET requisi2.estado = 'EN PROCESO' END IF DISPLAY BY NAME requisi2.estado CALL busca_departamento2() IF actualiza = "NO" THEN IF tiene_dato IS NULL THEN LET tiene_dato = "NO" END IF LET requisi2.num_req = 0 LET requisi2.departamento = NULL LET requisi2.cod_emp_sec = NULL LET requisi2.fech_req = TODAY LET requisi2.prioridad='NORMAL' LET requisi2.num_oc=NULL IF tiene_Dato = "NO" THEN CALL arr_requisi2.clear() END IF SELECT a.departamento,a.num_emp,b.nom_dpto,RTRIM(c.nom1_emp)||' '||ISNULL(c.apell1_emp,' ') INTO requisi2.departamento,requisi2.cod_emp_sec,descrip1 FROM seg0001 a,adtb00001 b,adtb00003 c WHERE a.usuario = usuarios AND a.departamento = b.departamento AND a.num_emp = c.num_emp LET depto = requisi2.departamento DISPLAY BY NAME requisi2.departamento,requisi2.cod_emp_sec,descrip1, depto END IF LET salida = "PDF" ON ACTION bdocumento LET dir_file = NULL CALL ui.Interface.frontCall("standard","openfile", [dir_file,d_tipos,f_tipos,mensaje], [filepath] ) IF filepath IS NOT NULL THEN LET dir_file = os.Path.basename(filepath) CALL fgl_getfile(filepath,dir_file) CALL fdocumento.readFile(dir_file) DISPLAY BY NAME dir_file LET extension = os.Path.extension(dir_file) END IF ON ACTION busca_depto CALL busca_dpto() RETURNING requisi2.departamento,descrip1 DISPLAY BY NAME descrip1,requisi2.departamento ON ACTION busca_emp CALL busca_emp() RETURNING requisi2.cod_emp_sec,descrip2 LET identifica = null IF existe = "S" THEN IF not int_flag THEN DISPLAY BY NAME descrip2,requisi2.cod_emp_sec NEXT FIELD uso END IF LET int_flag = false END IF IF int_flag THEN LET int_flag = FALSE END IF BEFORE FIELD fech_req LET requisi2.fech_req = today DISPLAY BY NAME requisi2.fech_req AFTER FIELD fech_req IF requisi2.fech_req < today THEN LET numero_msg = 369 CALL msg(numero_msg) NEXT FIELD fech_req END IF AFTER FIELD departamento IF requisi2.departamento IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fech_req ELSE SELECT b.nom_dpto INTO descrip1 FROM adtb00001 b WHERE b.departamento = requisi2.departamento IF status >= 0 THEN IF status = notfound THEN LET numero_msg = 371 CALL msg(numero_msg) NEXT FIELD departamento END IF ELSE CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF DISPLAY BY NAME descrip1 END IF AFTER FIELD cod_emp_sec IF requisi2.cod_emp_sec IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD departamento ELSE SELECT RTRIM(a.nom1_emp)||' '||ISNULL(a.apell1_emp,' ') INTO descrip2 FROM adtb00003 a,adtb00001 b WHERE a.num_emp = requisi2.cod_emp_sec and b.departamento = requisi2.departamento and a.departamento = b.departamento IF status >= 0 THEN IF status = notfound THEN LET numero_msg = 371 CALL msg(numero_msg) NEXT FIELD cod_emp_sec END IF ELSE CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF DISPLAY BY NAME descrip2 END IF AFTER FIELD prioridad IF requisi2.prioridad IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD prioridad END IF AFTER FIELD num_oc LET ktipo_cliente = NULL LET ksec_cliente=NULL LET knombre=NULL IF requisi2.num_oc IS NOT NULL AND requisi2.num_oc <> 0 THEN SELECT a.tipo_cliente,a.sec_cliente,b.nombre INTO ktipo_cliente,ksec_cliente,knombre FROM prtb00012 a,vetb00004 b WHERE a.num_oc = requisi2.num_oc AND a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL fgl_Winmessage("INFO","ORDEN NO EXISTE","INFO") NEXT FIELD num_oc END IF LET cliente = ktipo_cliente USING "&&","-",ksec_cliente USING "&&&&&&&&"," ",knombre CLIPPED DISPLAY BY NAME cliente IF actualiza <> "SI" THEN CALL busca_det_orden() END IF END IF AFTER FIELD uso IF requisi2.uso IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD uso END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF IF orden_trabajo IS NOT NULL THEN INITIALIZE data.* TO NULL CALL ApiMaintainC('CHECK', orden_trabajo, data.*, usuarios) RETURNING answer, answer2 IF answer = 0 OR answer IS NULL 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 IF requisi2.departamento IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD departamento END IF IF depto IS NULL OR depto = 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD depto END IF IF requisi2.cod_emp_sec IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_emp_sec END IF LET descrip2 = NULL LET descrip1 = NULL SELECT RTRIM(a.nom1_emp)||' '||ISNULL(a.apell1_emp,' ') INTO descrip2 FROM adtb00003 a,adtb00001 b WHERE a.num_emp = requisi2.cod_emp_sec and b.departamento = requisi2.departamento and a.departamento = b.departamento IF status >= 0 THEN IF status = notfound THEN LET numero_msg = 371 CALL msg(numero_msg) NEXT FIELD cod_emp_sec END IF ELSE CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF LET descrip2 = descrip2 clipped," ",descrip1 clipped DISPLAY BY NAME descrip2 IF requisi2.num_oc IS NOT NULL AND requisi2.num_oc <> 0 THEN IF actualiza = "SI" THEN LET opt = fgl_winquestion("ORDEN","SE ACTUALIZARAN LOS ITEMS DE ESTA REQUISICION CON LOS QUE TIENE LA ORDEN DE PEDIDOS, DESEAS REALIZAR ESTA OPERACION?","NO","NO|YES","QUESTION",0) IF opt = "YES" THEN CALL busca_det_orden() END IF ELSE CALL busca_det_orden() END IF ELSE IF actualiza = "SI" THEN CALL busca_det_req() END IF END IF END INPUT # Captura de los articulos requeridos INPUT ARRAY arr_requisi2 FROM s_requisi2.* #ATTRIBUTE (WITHOUT DEFAULTS) BEFORE INPUT IF actualiza = "NO" AND tiene_dato = "NO" THEN IF requisi2.num_oc IS NULL THEN CALL arr_requisi2.clear() END IF END IF LET tiene_dato = "SI" ON ACTION bdownload IF arr_requisi2[arr_curr()].foto IS NOT NULL THEN # LET dir_foto = usuarios CLIPPED,dir_Foto CLIPPED LET filepath = "foto.jpg" CALL ui.Interface.frontCall("standard","savefile", [dir_foto,d_tipos,tipos_foto,mensaje], [filepath] ) CALL arr_requisi2[arr_curr()].foto.writeFile(dir_foto) IF filepath IS NOT NULL THEN CALL fgl_putfile(dir_foto,filepath) CALL fgl_Winmessage("info","Download Terminado","info") END IF END IF ON ACTION bfoto LET curr = arr_curr() LET dir_foto = NULL LET ffoto = null CALL ui.Interface.frontCall("standard","openfile", [dir_foto,d_tipos,tipos_foto,mensaje], [filepath] ) IF actualiza = "SI" THEN IF filepath IS NOT NULL THEN LET dir_foto = os.Path.basename(filepath) LET extension_foto = os.Path.extension(filepath) LET dir_foto = usuarios CLIPPED,dir_foto CLIPPED LET tmp_dirfoto = "TMP\\",dir_foto CLIPPED DISPLAY BY NAME filepath CALL fgl_getfile(filepath,tmp_dirfoto) # CALL FGL_WINMESSAGE("INFO",filepath,"info") CALL ffoto.readfile(tmp_dirfoto) DISPLAY tmp_dirfoto TO s_requisi2[scr_line()].ruta_file LET arr_requisi2[curr].foto = ffoto LET arr_requisi2[curr].ruta_file=dir_foto CLIPPED END IF ELSE LOCATE arr_requisi2[curr].foto IN MEMORY LET dir_foto = os.Path.basename(filepath) LET extension_foto = os.Path.extension(filepath) LET dir_foto = usuarios CLIPPED,dir_foto CLIPPED LET tmp_dirfoto = "TMP\\",dir_foto CLIPPED DISPLAY BY NAME filepath CALL fgl_getfile(filepath,tmp_dirfoto) # CALL FGL_WINMESSAGE("INFO",filepath,"info") CALL arr_requisi2[curr].foto.readfile(tmp_dirfoto) DISPLAY tmp_dirfoto TO s_requisi2[scr_line()].ruta_file # LET arr_requisi2[curr].foto = ffoto LET arr_requisi2[curr].ruta_file=dir_foto CLIPPED END IF ON ACTION producto LET curr = arr_curr() IF arr_requisi2[curr].tipo_inv IS NULL THEN CALL msg(16) NEXT FIELD tipo_inv END IF CALL busca_mt(arr_requisi2[curr].tipo_inv) RETURNING arr_requisi2[curr].cod_n,arr_requisi2[curr].cod_grupo,arr_requisi2[curr].cod_tipo, arr_requisi2[curr].cod_sec,arr_requisi2[curr].descrip_esp,arr_requisi2[curr].unidad_med { se cerro la creacion de codigos miscelaneos via la requisicion de compras IF arr_requisi2[curr].tipo_inv = 'MISCELANEOS' AND arr_requisi2[curr].cod_n = 0 THEN CALL fgl_winmessage("INFO","NO EXISTEN PRODUCTOS CON ESA CONDICION, VAS A CREARLO","INFO") CALL crea_producto() RETURNING arr_requisi2[curr].cod_n,arr_requisi2[curr].cod_grupo,arr_requisi2[curr].cod_tipo, arr_requisi2[curr].cod_sec,arr_requisi2[curr].descrip_esp,arr_requisi2[curr].unidad_med END IF } DISPLAY arr_requisi2[curr].cod_n TO s_requisi2[scr_l].cod_n DISPLAY arr_requisi2[curr].cod_grupo TO s_requisi2[scr_l].cod_grupo DISPLAY arr_requisi2[curr].cod_tipo TO s_requisi2[scr_l].cod_tipo DISPLAY arr_requisi2[curr].cod_sec TO s_requisi2[scr_l].cod_sec DISPLAY arr_requisi2[curr].descrip_esp TO s_requisi2[scr_l].descrip_esp DISPLAY arr_requisi2[curr].unidad_med TO s_requisi2[scr_l].unidad_med LET c_cuenta = arr_requisi2.getLength() CALL repite2() IF verdad = "S" THEN NEXT FIELD cod_n END IF IF verdad = "N" OR verdad is null THEN NEXT FIELD cantidad END IF LET proveedor_sugerido = NULL IF arr_requisi2[curr].cod_sec IS NOT NULL THEN CALL busca_proveedor() END IF AFTER ROW IF actualiza ="NO" THEN IF arr_requisi2[curr].ruta_file IS NOT NULL THEN LET tmp_dirfoto = "tmp\\",arr_requisi2[arr_curr()].ruta_file CLIPPED CALL arr_requisi2[arr_curr()].foto.writeFile(tmp_dirfoto) DISPLAY tmp_dirfoto TO filepath ELSE IF arr_requisi2[arr_curr()].ruta_file IS NULL AND arr_requisi2[arr_curr()].cod_sec IS NOT NULL THEN LOCATE arr_requisi2[arr_curr()].foto IN MEMORY END IF END IF END IF BEFORE ROW LET nocalcula = "N" LET curr = arr_curr() LET scr_l = scr_line() # LOCATE arr_requisi2[curr].foto IN MEMORY IF actualiza = "SI" THEN # LOCATE arr_requisi2[curr].foto IN MEMORY IF arr_requisi2[curr].ruta_file IS NOT NULL THEN CALL ui.Interface.frontCall("standard","getenv", ["HOMEPATH"], [l_file] ) LET dir_foto =arr_requisi2[curr].ruta_file LET l_file = "c:",l_file CLIPPED,"\\",dir_foto CLIPPED # CALL fgl_Winmessage("info",dir_foto,"info") CALL arr_requisi2[curr].foto.writeFile(dir_foto) DISPLAY dir_foto TO filepath END IF ELSE IF arr_requisi2[curr].ruta_file IS NOT NULL THEN LET tmp_dirfoto = "tmp\\",arr_requisi2[curr].ruta_file CLIPPED CALL arr_requisi2[curr].foto.writeFile(tmp_dirfoto) DISPLAY tmp_dirfoto TO filepath ELSE LOCATE arr_requisi2[curr].foto IN MEMORY END IF END IF AFTER FIELD cod_sec IF orden_trabajo IS NOT NULL THEN IF arr_requisi2[curr].cod_n is not null AND arr_requisi2[curr].cod_grupo is not null AND arr_requisi2[curr].cod_tipo is not null AND arr_requisi2[curr].cod_sec is not null THEN INITIALIZE answer TO NULL SELECT enviarMX INTO answer FROM irtb00002 WHERE cod_n = arr_requisi2[curr].cod_n AND cod_grupo = arr_requisi2[curr].cod_grupo AND cod_tipo = arr_requisi2[curr].cod_tipo AND cod_sec = arr_requisi2[curr].cod_sec DISPLAY answer IF answer IS NULL THEN CALL fgl_winmessage( "PRODUCTO NO ENCONTRADO EN MAINTAINX", "El producto insertado no se encuentra en MaintainX", "stop") NEXT FIELD cod_n END IF END IF END IF INITIALIZE container TO NULL LET container.cod_n = arr_requisi2[curr].cod_n LET container.cod_grupo = arr_requisi2[curr].cod_grupo LET container.cod_tipo = arr_requisi2[curr].cod_tipo LET container.cod_sec = arr_requisi2[curr].cod_sec LET container.tipo_inv = arr_requisi2[curr].tipo_inv LET int_flag = TRUE CALL checkProducts() RETURNING int_flag IF int_flag = FALSE THEN LET numero_msg = 1676 CALL msg(numero_msg) NEXT FIELD cod_n END IF CALL producto(arr_requisi2[curr].tipo_inv,arr_requisi2[curr].cod_n,arr_requisi2[curr].cod_grupo, arr_requisi2[curr].cod_tipo,arr_requisi2[curr].cod_sec) RETURNING arr_requisi2[curr].descrip_esp,arr_requisi2[curr].unidad_med DISPLAY arr_requisi2[curr].descrip_esp TO s_requisi2[scr_l].descrip_esp DISPLAY arr_requisi2[curr].unidad_med TO s_requisi2[scr_l].unidad_med DISPLAY BY NAME arr_requisi2[curr].unidad_med DISPLAY BY NAME arr_requisi2[curr].descrip_esp LET arr_requisi[curr].cod_n = arr_requisi2[curr].cod_n LET arr_requisi[curr].cod_grupo = arr_requisi2[curr].cod_grupo LET arr_requisi[curr].cod_tipo = arr_requisi2[curr].cod_tipo LET arr_requisi[curr].cod_sec = arr_requisi2[curr].cod_sec LET verdad = "N" CALL repite2() IF verdad = "S" THEN LET verdad = "N" NEXT FIELD cod_n END IF AFTER FIELD cantidad IF arr_requisi2[curr].cantidad IS NULL THEN IF arr_requisi2[curr].cod_n IS NOT NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cantidad END IF END IF IF nocalcula = "N" THEN IF arr_requisi2[curr].cod_n = 1 THEN SELECT UNIQUE a.cantidad INTO cantidad_fur FROM cotb00004 a WHERE a.cod_n = arr_requisi2[curr].cod_n AND a.cod_grupo = arr_requisi2[curr].cod_grupo AND a.cod_tipo = arr_requisi2[curr].cod_tipo AND a.cod_sec = arr_requisi2[curr].cod_sec IF STATUS != NOTFOUND THEN IF arr_requisi2[curr].cantidad > cantidad_fur THEN LET multiplo = arr_requisi2[curr].cantidad / cantidad_fur LET pmultiplo = multiplo USING "#####" LET arr_requisi2[curr].cantidad = cantidad_fur * pmultiplo ELSE LET arr_requisi2[curr].cantidad = cantidad_fur END IF END IF DISPLAY arr_requisi2[curr].cantidad TO s_requisi2[scr_l].cantidad END IF END IF LET proveedor_sugerido = NULL IF arr_requisi2[curr].cod_sec IS NOT NULL THEN CALL busca_proveedor() END IF AFTER FIELD tipo_inv IF arr_requisi2[curr].tipo_inv IS NOT NULL THEN IF requisi2.num_oc IS NOT NULL THEN LET arr_requisi2[curr].tipo_inv = 'PRODUCTO TERMINADOS' END IF END IF IF arr_requisi2[curr].tipo_inv IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tipo_inv END IF ON ACTION guardar ATTRIBUTE(TEXT="Salvar", IMAGE="save") IF actualiza = "NO" THEN LET opt = fgl_winquestion("ADICIONA","ESTA SEGURO DE ADICIONAR ESTA REQUISICION?","NO","YES|NO","QUESTION",0) IF opt = "YES" THEN LET proveedor_sugerido = NULL BEGIN WORK FOR idx = 1 TO arr_requisi2.getLength() IF arr_requisi2[idx].cod_sec IS NOT NULL THEN CALL busca_proveedor() END IF END FOR SELECT a.num_req INTO ult_req FROM cotb00007 a IF STATUS = NOTFOUND THEN LET ult_req = 0 INSERT INTO cotb00007 (num_req,us_crea,fech_crea) VALUES (0,usuarios,getdate()) END IF LET ult_req = ult_req + 1 UPDATE cotb00007 SET num_req = ult_req,us_crea = usuarios,fech_crea = getdate() LET requisi2.num_req = ult_req DISPLAY BY NAME requisi2.num_req INSERT INTO cotb00006 (num_req,fech_req,departamento,cod_emp_sec,uso,prioridad,us_crea,fech_crea,num_oc,tipo_cliente,sec_cliente,nombre_cliente, observacion,nombre_file,documento,proveedor,estado, orden_trabajo, depto_destino) VALUES ( requisi2.num_req, requisi2.fech_req, requisi2.departamento, requisi2.cod_emp_sec, requisi2.uso, requisi2.prioridad, suser_sname(),getdate(),requisi2.num_oc,ktipo_cliente,ksec_cliente,knombre, requisi2.observacion,dir_file,fdocumento,proveedor_sugerido,requisi2.estado, orden_trabajo, depto) # Asigna el numero serial de la requisicion cabecera para luego asignarsela # a cada uno de los registros detalle de la requisicion. IF dir_file IS NOT NULL THEN LET dir_file = requisi2.num_req USING "&&&&&&&&",".",extension CLIPPED UPDATE cotb00006 SET nombre_file = dir_file WHERE num_req = requisi2.num_req END IF # LET requisi2.num_req = SQLCA.SQLERRD[2] IF requisi2.num_req =0 THEN ROLLBACK WORK CALL msg(16) NEXT FIELD cod_n END IF LET inserteDetalle='NO' FOR idx = 1 TO arr_requisi2.getLength() IF arr_requisi2[idx].cod_n IS NOT NULL AND arr_requisi2[idx].cod_grupo IS NOT NULL AND arr_requisi2[idx].cod_tipo IS NOT NULL AND arr_requisi2[idx].cod_sec IS NOT NULL THEN IF arr_requisi2[idx].cantidad IS NULL THEN ROLLBACK WORK CALL msg(16) NEXT FIELD cantidad END IF LET inserteDetalle = 'SI' IF orden_trabajo IS NOT NULL THEN LET data.contactID = arr_requisi2[idx].cantidad SELECT id_maintainx INTO data.id_maintainx FROM irtb00002 WHERE cod_n = arr_requisi2[idx].cod_n AND cod_grupo = arr_requisi2[idx].cod_grupo AND cod_tipo = arr_requisi2[idx].cod_tipo AND cod_sec = arr_requisi2[idx].cod_sec AND status_t IS NULL IF STATUS = NOTFOUND THEN CALL fgl_winmessage("REPUESTO NO ESTA EN MAINTAINX", "Por lo menos uno de los repuestos colocados en la requisicion no esta en MaintainX", "stop") ROLLBACK WORK ELSE CALL ApiMaintainC('PATCH_WORKORDER',answer_workorder, Data.*, usuarios) RETURNING answer, answer2 IF answer != 1 THEN DISPLAY "AQUI PATCH_WORKORDER" ROLLBACK WORK END IF END IF END IF INSERT INTO cotb00008 (num_req ,tipo_inv ,cod_n ,cod_grupo ,cod_tipo ,cod_sec ,cantidad ,us_crea ,fech_crea ,procesada ,documento ,ruta_file ) VALUES (requisi2.num_req,arr_requisi2[idx].tipo_inv, arr_requisi2[idx].cod_n, arr_requisi2[idx].cod_grupo, arr_requisi2[idx].cod_tipo, arr_requisi2[idx].cod_sec, arr_requisi2[idx].cantidad, suser_sname(),getdate(),'N',arr_requisi2[idx].foto, arr_requisi2[idx].ruta_file) END IF END FOR IF inserteDetalle='NO' THEN ROLLBACK WORK CALL msg(16) NEXT FIELD cod_n ELSE UPDATE seg0001 SET seg0001.notificacion = notifica WHERE usuario = usuarios COMMIT WORK CALL seleccionarsalida() RETURNING salida -- La API de configuracion de reportes (fgl_report_*) no esta -- disponible en este FGL; se escribe el XML directo a un archivo -- en FGLSPOOL en lugar de la vista previa/exportacion nativa. LET p_reportfile = FGL_GETENV("FGLSPOOL"), "/coprmt025_req1.xml" LET handler = om.XmlWriter.createFileWriter(p_reportfile) START REPORT print_req TO XML HANDLER HANDLER PREPARE query FROM "SELECT nom_dpto FROM adtb00001 WHERE departamento = " || requisi2.departamento EXECUTE query INTO descrip1 PREPARE query FROM "SELECT nom_dpto FROM adtb00001 WHERE departamento = ?" EXECUTE query USING depto INTO descrip_depto FOR idx = 1 TO arr_requisi2.getLength() OUTPUT TO REPORT print_req(requisi2.*, descrip1, descrip2, descrip3, arr_requisi2[idx].*, orden_trabajo,depto,descrip_depto) END FOR FINISH REPORT print_req call arr_requisi2.clear() LET numero_msg = 1 CALL msg(numero_msg) IF notifica = 'SI' THEN #LET toEmail = 'jsoto@marmotech.com.do,jsoto@movilsoluciones.com.do,' LET xusername ='notificacion@marmotech.com.do' LET xsmtphost ='smtp.office365.com' LET xsmtpport = '587' LET xpassword = 'Lmmjvsd2020' # LET vendedoremail = 'gespinal@marmotech.com.do;jsoto@marmotech.com.do' LET subject = "ADICION RQUISICION COMPRAS ",requisi2.num_req USING "&&&&&&&" LET cuerpo_correo="", "

ADICION REQUISICION COMPRAS NO. ",requisi2.num_req USING "&&&&&&&&", "

", "FUE ADICIONADA POR EL USUARIO ",xnombreusuario CLIPPED,"

", "

",requisi2.uso CLIPPED,"

", "

",requisi2.observacion CLIPPED,"

" IF dir_file IS NOT NULL THEN LET cuerpo_correo = cuerpo_correo CLIPPED, "

ESTA REQUISICION INCLUYE DOCUMENTO

" END IF LET attachment = null CALL enviaemail(toEmail,subject,cuerpo_correo,attachment,xusername,xsmtphost,xsmtpport,xpassword) #RETURNING mensaje END IF # LET procedimiento = "{ call sp_enviacorreo(?,?,?,?) }" CLIPPED # CALL envia_correo('yherasme@marmotech.com.do',vendedorEmail,cuerpo_correo, # subject, procedimiento ) END IF END IF #-------------------------- ADICIONAR ------------------------------------ ELSE LET opt = fgl_winquestion("MODIFICACION","ESTA SEGURO DE ACTUALIZAR ESTA REQUISICION?","NO","YES|NO","QUESTION",0) IF opt = "YES" THEN BEGIN WORK UPDATE cotb00006 set (departamento,cod_emp_sec,uso,prioridad,us_mod,fech_mod,observacion, nombre_file,documento,num_oc,tipo_cliente,sec_cliente,proveedor,estado)= (requisi2.departamento,requisi2.cod_emp_sec,requisi2.uso,requisi2.prioridad,usuarios,getdate(), requisi2.observacion,dir_file,fdocumento,requisi2.num_oc,ktipo_cliente, ksec_cliente,proveedor_sugerido,requisi2.estado ) WHERE num_req = requisi2.num_req LET inserteDetalle='NO' DELETE FROM cotb00008 WHERE num_req = requisi2.num_req FOR idx = 1 TO arr_requisi2.getLength() IF arr_requisi2[idx].cod_n IS NOT NULL AND arr_requisi2[idx].cod_grupo IS NOT NULL AND arr_requisi2[idx].cod_tipo IS NOT NULL AND arr_requisi2[idx].cod_sec IS NOT NULL THEN IF arr_requisi2[idx].ruta_file IS NULL THEN LOCATE arr_requisi2[idx].foto IN MEMORY END IF IF arr_requisi2[idx].cantidad IS NULL THEN ROLLBACK WORK CALL msg(16) NEXT FIELD cantidad END IF LET inserteDetalle='SI' INSERT INTO cotb00008 (num_req ,tipo_inv ,cod_n ,cod_grupo ,cod_tipo ,cod_sec ,cantidad ,us_crea ,fech_crea ,procesada ,documento ,ruta_file ) VALUES (requisi2.num_req,arr_requisi2[idx].tipo_inv, arr_requisi2[idx].cod_n, arr_requisi2[idx].cod_grupo, arr_requisi2[idx].cod_tipo, arr_requisi2[idx].cod_sec, arr_requisi2[idx].cantidad, suser_sname(),getdate(),'N',arr_requisi2[idx].foto, arr_requisi2[idx].ruta_file) END IF END FOR IF inserteDetalle = 'NO' THEN ROLLBACK WORK CALL msg(16) NEXT FIELD cod_n ELSE UPDATE seg0001 SET seg0001.notificacion = notifica WHERE usuario = usuarios COMMIT WORK CALL seleccionarsalida() RETURNING salida -- Ver nota sobre fgl_report_* mas arriba en este archivo. LET p_reportfile = FGL_GETENV("FGLSPOOL"), "/coprmt025_req2.xml" LET handler = om.XmlWriter.createFileWriter(p_reportfile) START REPORT print_req TO XML HANDLER HANDLER PREPARE query FROM "SELECT nom_dpto FROM adtb00001 WHERE departamento = " || requisi2.departamento EXECUTE query INTO descrip1 PREPARE query FROM "SELECT nom_dpto FROM adtb00001 WHERE departamento = ?" EXECUTE query USING depto INTO descrip_depto FOR idx = 1 TO arr_requisi2.getLength() OUTPUT TO REPORT print_req(requisi2.*, descrip1, descrip2, descrip3, arr_requisi2[idx].*, orden_trabajo,depto, descrip_depto) END FOR FINISH REPORT print_req LET numero_msg = 13 CALL msg(numero_msg) IF notifica = "SI" THEN # LET toEmail = 'jsoto@marmotech.com.do' LET xusername ='notificacion@marmotech.com.do' LET xsmtphost ='smtp.office365.com' LET xsmtpport = '587' LET xpassword = 'Lmmjvsd2020' # LET vendedoremail = 'gespinal@marmotech.com.do;jsoto@marmotech.com.do' LET subject = "MODIFICAION RQUISICION COMPRAS ",requisi2.num_req USING "&&&&&&&" # LET cuerpo_correo = 'FUE ADICIONADA POR EL EMPLEADO',descrip1 CLIPPED LET cuerpo_correo="", "

MODIFIACION REQUISICION COMPRAS NO. ",requisi2.num_req USING "&&&&&&&&", "

", "FUE MODIFICADA POR EL USUARIO ",xnombreusuario CLIPPED,"

", "

",requisi2.uso CLIPPED,"

", "

",requisi2.observacion CLIPPED,"

" IF dir_file IS NOT NULL THEN LET cuerpo_correo = cuerpo_correo CLIPPED, "

ESTA REQUISICION INCLUYE DOCUMENTO

" END IF LET attachment = null CALL enviaemail(toEmail,subject,cuerpo_correo,attachment,xusername,xsmtphost,xsmtpport,xpassword) # RETURNING mensaje END IF END IF END IF END IF # LET commandprompt = "del ",dir_file CLIPPED # RUN commandprompt CALL arr_requisi2.clear() RETURN END INPUT ON ACTION CANCEL LET INT_FLAG = FALSE EXIT PROGRAM END DIALOG END FUNCTION FUNCTION copcmf025() DEFINE usuario RECORD usuario CHAR(50), fecha LIKE cotb00008.fech_crea END RECORD, bempleados string # Aqui se prepara para la captura del criterio de seleccion CONSTRUCT criterio ON cotb00006.num_req,cotb00006.fech_req, cotb00006.departamento,cotb00006.cod_emp_sec, cotb00006.uso FROM num_req,fech_req,departamento,cod_emp_sec,uso AFTER CONSTRUCT EXIT CONSTRUCT END CONSTRUCT CALL busca_departamento2() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET bempleados =" SELECT RTRIM(a.nom1_emp)+' '+a.apell1_emp FROM adtb00003 a,adtb00001 b WHERE a.num_emp =? and b.departamento =? and a.departamento = b.departamento" PREPARE buempleados FROM bempleados LET SELEC = " SELECT num_req,fech_req,departamento,", "cod_emp_sec,estado,uso,prioridad,num_oc,observacion,tipo_cliente,sec_cliente,nombre_cliente, ", " nombre_file,documento,proveedor, orden_trabajo, depto_destino ", " FROM cotb00006 ", " WHERE ", criterio clipped, # " AND us_crea = suser_sname() ", " and status_t is null ", " ORDER BY num_req" PREPARE busca8 FROM selec DECLARE datos SCROLL CURSOR FOR busca8 OPEN datos LOCATE fdocumento IN MEMORY INITIALIZE requisi2.* TO NULL FETCH FIRST datos INTO requisi2.*,ktipo_cliente,ksec_cliente,knombre,dir_file,fdocumento,proveedor_sugerido, orden_trabajo, depto IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF SELECT a.nom_dpto INTO descrip1 FROM adtb00001 a WHERE a.departamento = requisi2.departamento and a.status_t is NULL EXECUTE buempleados INTO descrip2 USING requisi2.cod_emp_sec,requisi2.departamento CALL busca_orden() DISPLAY BY NAME requisi2.*,descrip1,descrip2,dir_file,proveedor_sugerido, orden_trabajo, depto DIALOG ATTRIBUTE (UNBUFFERED) DISPLAY ARRAY arr_requisi2 TO s_requisi2.* BEFORE ROW LET curr = arr_curr() IF arr_requisi2[curr].ruta_file IS NOT NULL THEN CALL ui.Interface.frontCall("standard","getenv", ["HOMEPATH"], [l_file] ) LET dir_foto =arr_requisi2[curr].ruta_file LET l_file = "c:",l_file CLIPPED,"\\",dir_foto CLIPPED CALL arr_requisi2[curr].foto.writeFile(dir_foto) DISPLAY dir_foto TO filepath END IF BEFORE DISPLAY CALL arr_requisi2.clear() CALL busca_det_req() # MENU "OPCIONES " ON ACTION bdocumento LET dir_file = NULL CALL ui.Interface.frontCall("standard","openfile", [dir_file,d_tipos,f_tipos,mensaje], [filepath] ) IF filepath IS NOT NULL THEN LET dir_file = os.Path.basename(filepath) LET tmpdir_file = "tmp\\",dir_file CLIPPED CALL fgl_getfile(filepath,tmpdir_file) CALL fdocumento.readfile(tmpdir_file) LET extension = os.Path.extension(dir_file) LET dir_file = requisi2.num_req USING "&&&&&&&&",".",extension CLIPPED DISPLAY BY NAME dir_file END IF ON ACTION bborrar UPDATE cotb00006 SET nombre_file = NULL,documento = NULL WHERE num_req = requisi2.num_req LET dir_file = NULL DISPLAY BY NAME dir_file ON ACTION bopen IF dir_file IS NOT NULL THEN LET tmpdir_file = "tmp\\",usuarios CLIPPED,dir_file CLIPPED CALL fdocumento.writeFile(tmpdir_file) #CALL ui.Interface.frontCall("standard","getenv", ["HOMEPATH"], [l_file] ) CALL ui.Interface.frontCall("standard","getenv", ["TEMP"], [l_file] ) LET l_file = l_file CLIPPED,"\\",dir_file CLIPPED CALL fgl_putfile(tmpdir_file,l_file) CALL ui.Interface.frontCall("standard","shellexec", [l_file],[p_res]) # CALL fgl_winmessage("info",p_res,"info") END IF ON ACTION Siguiente FETCH NEXT datos INTO requisi2.*,ktipo_cliente,ksec_cliente,knombre,dir_file,fdocumento,proveedor_sugerido , orden_trabajo, depto IF status = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF SELECT a.nom_dpto INTO descrip1 FROM adtb00001 a WHERE a.departamento = requisi2.departamento and a.status_t is NULL EXECUTE buempleados INTO descrip2 USING requisi2.cod_emp_sec,requisi2.departamento CALL busca_orden() DISPLAY BY NAME requisi2.*,descrip1,descrip2,dir_file,proveedor_sugerido, orden_trabajo, depto CALL arr_requisi2.clear() CALL busca_det_req() ON ACTION Anterior FETCH PREVIOUS datos INTO requisi2.*,ktipo_cliente,ksec_cliente,knombre,dir_file,fdocumento,proveedor_sugerido, orden_trabajo, depto IF status = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF SELECT nom_dpto INTO descrip1 FROM adtb00001 WHERE @departamento = requisi2.departamento and status_t is null EXECUTE buempleados INTO descrip2 USING requisi2.cod_emp_sec,requisi2.departamento CALL busca_orden() DISPLAY BY NAME requisi2.*,descrip1,descrip2,dir_file,proveedor_sugerido, orden_trabajo, depto CALL arr_requisi2.clear() CALL busca_det_req() ON ACTION Primero FETCH FIRST datos INTO requisi2.*,ktipo_cliente,ksec_cliente,knombre,dir_file,fdocumento,proveedor_sugerido, orden_trabajo, depto IF status = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF SELECT nom_dpto INTO descrip1 FROM adtb00001 WHERE @departamento = requisi2.departamento and status_t is NULL EXECUTE buempleados INTO descrip2 USING requisi2.cod_emp_sec,requisi2.departamento CALL busca_orden() DISPLAY BY NAME requisi2.*,descrip1,descrip2,dir_file,proveedor_sugerido, orden_trabajo, depto CALL arr_requisi2.clear() CALL busca_det_req() LET numero_msg = 5 CALL msg(numero_msg) ON ACTION Ultimo FETCH LAST datos INTO requisi2.*,ktipo_cliente,ksec_cliente,knombre,dir_file,fdocumento,proveedor_sugerido, orden_trabajo, depto SELECT a.nom_dpto INTO descrip1 FROM adtb00001 a WHERE a.departamento = requisi2.departamento and a.status_t is null EXECUTE buempleados INTO descrip2 USING requisi2.cod_emp_sec,requisi2.departamento CALL busca_orden() DISPLAY BY NAME requisi2.*,descrip1,descrip2,dir_file,proveedor_sugerido, orden_trabajo, depto CALL arr_requisi2.clear() CALL busca_det_req() LET numero_msg = 4 CALL msg(numero_msg) ON ACTION acTualizar # Verifica si la requisicion tiene orden SELECT UNIQUE a.num_req FROM cotb00015 a WHERE a.num_req = requisi2.num_req AND a.status_t IS NULL IF STATUS <> NOTFOUND THEN CALL fgl_winmessage("INFO","REQUISICION TIENE ORDEN, NO PUEDES MODIFICARLA","INFO") CONTINUE DIALOG END IF CALL copcad025() ON ACTION impresor IF salida IS NULL THEN LET salida = 'PDF' END IF -- Ver nota sobre fgl_report_* mas arriba en este archivo. LET p_reportfile = FGL_GETENV("FGLSPOOL"), "/coprmt025_req3.xml" LET handler = om.XmlWriter.createFileWriter(p_reportfile) START REPORT print_req TO XML HANDLER HANDLER PREPARE query FROM "SELECT nom_dpto FROM adtb00001 WHERE departamento = ?" EXECUTE query USING requisi2.departamento INTO descrip1 PREPARE query FROM "SELECT nom_dpto FROM adtb00001 WHERE departamento = ?" EXECUTE query USING depto INTO descrip_depto FOR idx = 1 TO arr_requisi2.getLength() OUTPUT TO REPORT print_req(requisi2.*, descrip1, descrip2, descrip3, arr_requisi2[idx].*, orden_trabajo,depto, descrip_depto) END FOR FINISH REPORT print_req ON ACTION aNular SELECT DISTINCT a.num_req FROM cotb00015 a WHERE a.num_req = requisi2.num_req AND a.status_t IS NULL IF STATUS <> NOTFOUND THEN CALL msg(1004) CONTINUE DIALOG END IF LET opt = fgl_winquestion("ANULAR","ESTA SEGURO DE ANULAR REQUISICION?","NO","YES|NO","QUESTION",0) IF opt = "YES" THEN UPDATE cotb00006 set status_t = "N", us_mod = suser_sname(), fech_mod = getdate() WHERE num_req = requisi2.num_req UPDATE cotb00008 set status_t = "E", us_mod = suser_sname(), fech_mod = getdate() WHERE num_req = requisi2.num_req LET numero_msg = 39 CALL msg(numero_msg) LET procedimiento = "{ call cc_avisadespacho(?,?,?,?) }" CLIPPED LET vendedoremail = 'gespinal@marmotech.com.do;jsoto@marmotech.com.do' LET subject = "ANULACION RQUISICION COMPRAS ",requisi2.num_req USING "&&&&&&&" LET cuerpo_correo="","FUE ANULADA POR EL EMPLEADO ",descrip1 CLIPPED,"", "",requisi2.uso CLIPPED,"", "",requisi2.observacion CLIPPED,"" CALL envia_correo('yherasme@marmotech.com.do',vendedorEmail,cuerpo_correo, subject, procedimiento ) END IF { ON ACTION Retornar LET commandprompt = "del c:",l_file CLIPPED DISPLAY "commnad ",commandprompt CALL ui.Interface.frontCall( "standard", "execute", [commandprompt,p_res], [p_res] ) # LET commandprompt = "del ", dir_file CLIPPED # RUN commandprompt CLEAR FORM} ON ACTION CANCEL RETURN END DISPLAY END DIALOG END FUNCTION FUNCTION repite2() LET ant_art.cod_n = arr_requisi2[curr].cod_n LET ant_art.cod_grupo = arr_requisi2[curr].cod_grupo LET ant_art.cod_tipo = arr_requisi2[curr].cod_tipo LET ant_art.cod_sec = arr_requisi2[curr].cod_sec FOR idx = 1 TO c_cuenta IF idx < 10 THEN IF idx != curr THEN IF arr_requisi2[idx].cod_n IS NOT NULL AND arr_requisi2[idx].cod_grupo IS NOT NULL AND arr_requisi2[idx].cod_tipo IS NOT NULL AND arr_requisi2[idx].cod_sec IS NOT NULL THEN IF arr_requisi2[idx].cod_n = ant_art.cod_n AND arr_requisi2[idx].cod_grupo = ant_art.cod_grupo AND arr_requisi2[idx].cod_tipo = ant_art.cod_tipo AND arr_requisi2[idx].cod_sec = ant_art.cod_sec THEN LET numero_msg = 21 CALL msg(numero_msg) LET verdad = "S" ELSE IF verdad != "S" THEN LET verdad = "N" END IF END IF END IF END IF END IF END FOR END FUNCTION FUNCTION busca_det_req() # Antes buscar el detalle de la requisicion limpia la pantalla # Busca los registros detalle de la requisicion DECLARE datos2 CURSOR FOR SELECT a.tipo_inv,a.cod_n,a.cod_grupo,a.cod_tipo, a.cod_sec, a.cantidad,a.ruta_file,a.documento FROM cotb00008 a WHERE a.num_req = requisi2.num_req and a.status_t is null LET idx = 1 LOCATE arr_requisi2[idx].foto IN MEMORY FOREACH datos2 INTO arr_requisi2[idx].tipo_inv,arr_requisi2[idx].cod_n, arr_requisi2[idx].cod_grupo,arr_requisi2[idx].cod_tipo, arr_requisi2[idx].cod_sec, arr_requisi2[idx].cantidad, arr_requisi2[idx].ruta_file,arr_requisi2[idx].foto IF arr_requisi2[idx].tipo_inv="MATERIA PRIMA" THEN SELECT a.descrip_esp,a.unidad_med INTO arr_requisi2[idx].descrip_esp,arr_requisi2[idx].unidad_med FROM intb00001 a WHERE a.cod_n = arr_requisi2[idx].cod_n AND a.cod_grupo = arr_requisi2[idx].cod_grupo AND a.cod_tipo = arr_requisi2[idx].cod_tipo AND a.cod_sec = arr_requisi2[idx].cod_sec AND a.status_t IS null END IF IF arr_requisi2[idx].tipo_inv="PRODUCTO TERMINADOS" THEN SELECT a.descrip_esp,a.unidad_med INTO arr_requisi2[idx].descrip_esp,arr_requisi2[idx].unidad_med FROM iptb00002 a WHERE a.cod_n = arr_requisi2[idx].cod_n AND a.cod_grupo = arr_requisi2[idx].cod_grupo AND a.cod_tipo = arr_requisi2[idx].cod_tipo AND a.cod_sec = arr_requisi2[idx].cod_sec AND a.status_t IS null END IF IF arr_requisi2[idx].tipo_inv="REPUESTOS" THEN SELECT a.descrip_esp,a.unidad_med INTO arr_requisi2[idx].descrip_esp,arr_requisi2[idx].unidad_med FROM irtb00002 a WHERE a.cod_n = arr_requisi2[idx].cod_n AND a.cod_grupo = arr_requisi2[idx].cod_grupo AND a.cod_tipo = arr_requisi2[idx].cod_tipo AND a.cod_sec = arr_requisi2[idx].cod_sec AND a.status_t IS null END IF IF arr_requisi2[idx].tipo_inv="MISCELANEOS" THEN SELECT a.descrip_esp,a.unidad_med INTO arr_requisi2[idx].descrip_esp,arr_requisi2[idx].unidad_med FROM istb00002 a WHERE a.cod_n = arr_requisi2[idx].cod_n AND a.cod_grupo = arr_requisi2[idx].cod_grupo AND a.cod_tipo = arr_requisi2[idx].cod_tipo AND a.cod_sec = arr_requisi2[idx].cod_sec AND a.status_t IS null END IF LET idx = idx + 1 LOCATE arr_requisi2[idx].foto IN MEMORY END FOREACH END FUNCTION FUNCTION busca_det_orden() DECLARE busca_orden CURSOR FOR SELECT DISTINCT 'PRODUCTO TERMINADOS',a.cod_n,a.cod_grupo,a.cod_tipo, a.cod_sec,a.cantidad,b.descrip_esp,b.unidad_med FROM prtb00013 a,iptb00002 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 = requisi2.num_oc LET idx = 1 LOCATE arr_requisi2[idx].foto IN MEMORY FOREACH busca_orden INTO arr_requisi2[idx].tipo_inv,arr_requisi2[idx].cod_n, arr_requisi2[idx].cod_grupo,arr_requisi2[idx].cod_tipo, arr_requisi2[idx].cod_sec,arr_requisi2[idx].cantidad, arr_requisi2[idx].descrip_esp,arr_requisi2[idx].unidad_med LET idx = idx + 1 LOCATE arr_requisi2[idx].foto IN MEMORY END FOREACH END FUNCTION #------------------------------------------------------------------------- # Impresion de la Requisicion. #------------------------------------------------------------------------- REPORT print_req(x,descrip11,descrip22,descrip33,z, y, w, descrip44) DEFINE x RECORD num_req LIKE cotb00006.num_req, fech_req LIKE cotb00006.fech_req, departamento LIKE adtb00001.departamento, cod_emp_sec LIKE cotb00006.cod_emp_sec, estado LIKE cotb00006.estado, uso LIKE cotb00006.uso, prioridad LIKE cotb00006.prioridad, num_oc INT, observacion VARCHAR(100) END RECORD DEFINE descrip11, descrip22, descrip33, descrip44 CHAR(30) DEFINE y, w STRING DEFINE z RECORD tipo_inv VARCHAR(20), cod_n LIKE cotb00008.cod_n, cod_grupo LIKE cotb00008.cod_grupo, cod_tipo LIKE cotb00008.cod_tipo, cod_sec LIKE cotb00008.cod_sec, descrip_esp VARCHAR(180), unidad_med LIKE intb00001.unidad_med, cantidad LIKE cotb00008.cantidad, ruta_file VARCHAR(100), foto BYTE END RECORD, existencia,consumo DECIMAL(12,2), fecha1 DATE, doce CHAR(2) OUTPUT TOP MARGIN 10 PAGE LENGTH 100 #ORDER BY x.num_req,z.cod_sec FORMAT PAGE HEADER # LET negrillas_on = ASCII 27, ASCII 71 # LET negrillas_off = ASCII 27, ASCII 72 # LET doble_on = ASCII 14 # LET doble_off = ASCII 20 # LET comp_on = ASCII 15 # LET comp_off = ASCII 18 # LET comprimido_12_on = ASCII 27, ASCII 77 # LET comprimido_12_off = ASCII 27, ASCII 80 # LET doce = ASCII 27, ASCII 12 PRINT doce PRINT COLUMN 1,"MARMOTECH, S.A", COLUMN 49,"REQUISICION DE COMPRA No. ",x.num_req using "&&&&&&" PRINT PRINT COLUMN 1,"Solicitante :", COLUMN 15,"(",x.cod_emp_sec using '<<<<<<',") ", descrip22 clipped, COLUMN 53,"Fecha Requisicion : ",x.fech_req using "dd/mm/yyyy" PRINT COLUMN 1,"Departamento :", COLUMN 15,"(",x.departamento using '<<<<<<',") ", descrip11 clipped PRINT COLUMN 1,"Prioridad :",x.prioridad CLIPPED PRINT COLUMN 1, "Uso :",x.uso CLIPPED PRINT COLUMN 1, "ORDEN PEDIDO :",x.num_oc USING "&&&&&&"," ",cliente CLIPPED PRINT COLUMN 1, "ORDEN DE TRABAJO :",y.trim() PRINT COLUMN 1, "DEPTO. DESTINO :", "(", w.trim(),") ", descrip44 PRINT COLUMN 1, "OBSERVACIONES :", x.observacion[1,70] PRINT COLUMN 1, "PROVEEDOR SUGERIDO:",proveedor_sugerido CLIPPED PRINT COLUMN 1,"----------------------------------------", "----------------------------------------", "---------------------------" PRINT COLUMN 1, "INVENTARIO", COLUMN 21,"Codigo", COLUMN 42,"Descripcion", COLUMN 73, "Existencia", COLUMN 86, "Consumo", COLUMN 95,"Cantidad", COLUMN 104,"Und" PRINT COLUMN 1,"----------------------------------------", "----------------------------------------", "---------------------------" LET fecha1 = x.fech_req - 90 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 # BUSCA EXISTENCIA CASE WHEN z.cod_n = 1 SELECT SUM(a.cantidad_2) INTO existencia FROM intb00006 a WHERE a.cod_n = z.cod_n AND a.cod_grupo = z.cod_grupo AND a.cod_tipo = z.cod_tipo AND a.cod_sec = z.cod_sec AND a.status_t IS NULL EXIT CASE WHEN z.cod_n = 3 OR z.cod_n = 6 OR z.cod_n = 9 SELECT SUM(a.cantidad_2) INTO existencia FROM iptb00006 a WHERE a.cod_n = z.cod_n AND a.cod_grupo = z.cod_grupo AND a.cod_tipo = z.cod_tipo AND a.cod_sec = z.cod_sec AND a.status_t IS NULL EXIT CASE WHEN z.cod_n = 5 SELECT SUM(a.cantidad_2) INTO existencia FROM irtb00006 a WHERE a.cod_n = z.cod_n AND a.cod_grupo = z.cod_grupo AND a.cod_tipo = z.cod_tipo AND a.cod_sec = z.cod_sec AND a.status_t IS NULL EXIT CASE END CASE #----------------------------------------------------------------------- # BUSCA EL CONSUMO DEL ARTICULO CASE WHEN z.cod_n = 1 SELECT SUM(a.cantidad_2) INTO consumo FROM intb00006 a WHERE a.cod_n = z.cod_n AND a.cod_grupo = z.cod_grupo AND a.cod_tipo = z.cod_tipo AND a.cod_sec = z.cod_sec AND a.fecha BETWEEN fecha1 AND x.fech_req AND a.cod_mov = 36 AND a.status_t IS NULL EXIT CASE WHEN z.cod_n = 3 OR z.cod_n = 6 OR z.cod_n = 9 SELECT SUM(a.cantidad_2) INTO consumo FROM iptb00006 a WHERE a.cod_n = z.cod_n AND a.cod_grupo = z.cod_grupo AND a.cod_tipo = z.cod_tipo AND a.cod_sec = z.cod_sec AND a.fecha BETWEEN fecha1 AND x.fech_req AND a.cod_mov in (30,31) AND a.status_t IS NULL EXIT CASE WHEN z.cod_n = 5 SELECT SUM(a.cantidad_2) INTO consumo FROM irtb00006 a,irtb00030 b WHERE a.cod_n = z.cod_n AND a.cod_grupo = z.cod_grupo AND a.cod_tipo = z.cod_tipo AND a.cod_sec = z.cod_sec AND a.fecha BETWEEN fecha1 AND x.fech_req AND a.cod_mov = b.cod_grupo AND a.status_t IS NULL EXIT CASE END CASE #--------------------------------------------------------------------- PRINT COLUMN 1, z.tipo_inv, COLUMN 20, z.cod_n using "&&&&","-", z.cod_grupo using "&&&&","-", z.cod_tipo using "&&&&","-", z.cod_sec using "&&&&&&", COLUMN 44, z.descrip_esp WORDWRAP RIGHT MARGIN 77, COLUMN 74, existencia USING "<<<<,<<<.##", COLUMN 86, consumo USING "<<<<<,<<<.##", COLUMN 99, z.cantidad using "<<,<<<,<<<.##", " ",z.unidad_med INITIALIZE adicional.* TO NULL SELECT a.detalle1,a.detalle2,a.detalle3 INTO adicional.detalle1, adicional.detalle2, adicional.detalle3 FROM cotb00042 a WHERE a.status_t is null AND a.num_req = x.num_req AND a.cod_n = z.cod_n AND a.cod_grupo = z.cod_grupo AND a.cod_tipo = z.cod_tipo AND a.cod_sec = z.cod_sec IF adicional.detalle1 IS NOT NULL THEN PRINT COLUMN 13, adicional.detalle1 END IF IF adicional.detalle2 IS NOT NULL THEN PRINT COLUMN 13, adicional.detalle2 END IF IF adicional.detalle3 IS NOT NULL THEN PRINT COLUMN 13, adicional.detalle3 END IF END IF PAGE TRAILER PRINT COLUMN 1,"----------------------------------------", "----------------------------------------" PRINT COLUMN 1,"AUTORIZACION" SKIP 5 LINES PRINT COLUMN 3,"--------------------", COLUMN 31,"--------------------", COLUMN 58,"--------------------" PRINT COLUMN 3,"Gerente Departamento", COLUMN 31," Gerente General ", COLUMN 58," Gerente Materiales " END REPORT FUNCTION busca_orden() # SELECT a.tipo_cliente,a.sec_cliente,b.nombre INTO ktipo_cliente,ksec_cliente,knombre # FROM prtb00012 a,vetb00004 b # WHERE a.num_oc = requisi2.num_oc AND a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente AND # a.status_t IS NULL LET cliente = ktipo_cliente USING "&&","-",ksec_cliente USING "&&&&&&&&"," ",knombre CLIPPED DISPLAY BY NAME cliente END FUNCTION FUNCTION busca_proveedor() SELECT MAX(a.num_oc) INTO ult_orden FROM cotb00014 a,cotb00015 b WHERE (a.num_oc = b.num_oc) AND b.cod_n = arr_requisi2[curr].cod_n AND b.cod_grupo = arr_requisi2[curr].cod_grupo AND b.cod_tipo = arr_requisi2[curr].cod_tipo AND b.cod_sec = arr_requisi2[curr].cod_sec AND a.status_t IS NULL IF ult_orden IS NOT NULL THEN SELECT CAST(a.cod_sp AS VARCHAR(4)) +'-'+CAST(a.cod_sp_sec AS VARCHAR(8))+' '+ a.nom_sp INTO proveedor_sugerido FROM cotb00001 a,cotb00014 b WHERE (a.cod_sp = b.cod_sp AND a.cod_sp_sec = b.cod_sp_sec) AND (b.num_oc = ult_orden) AND b.status_t IS NULL DISPLAY BY NAME proveedor_sugerido END IF END FUNCTION FUNCTION buscarToemail() DEFINE xemail VARCHAR(255) SELECT a.email,a.nombreusuario,a.notificacion INTO toemail,xnombreusuario,notifica FROM seg0001 a WHERE a.usuario = usuarios DECLARE buscaremail CURSOR FOR SELECT a.correo FROM seg0003 a WHERE a.requisicionescompras='SI' FOREACH buscaremail INTO xemail LET toemail = toemail CLIPPED,",",xemail CLIPPED END FOREACH DISPLAY "EMAIL ",toemail," NOTIFICA ",notifica , " u ",usuarios END FUNCTION FUNCTION checkProducts() DEFINE cont, i INT LET cont = 0 FOR i = 1 TO arr_requisi2.getLength() IF arr_requisi2[i].cod_n = container.cod_n AND arr_requisi2[i].cod_grupo = container.cod_grupo AND arr_requisi2[i].cod_tipo = container.cod_tipo AND arr_requisi2[i].cod_sec = container.cod_sec AND arr_requisi2[i].tipo_inv = container.tipo_inv THEN LET cont = cont + 1 END IF END FOR IF cont >= 2 THEN RETURN FALSE ELSE RETURN TRUE END IF END FUNCTION