SCHEMA smarmotech DEFINE p_companias RECORD LIKE companias.* DEFINE arr_detalle DYNAMIC ARRAY OF RECORD area,codn,codgrupo,codtipo,codsec INT, descripcion STRING, cantidad,pendiente,precio FLOAT END RECORD, gnumreq,idx,pcodn,pcodgrupo,pcodtipo,pcodsec,parea INT, gdespachada FLOAT FUNCTION buscareq(pnumoc) DEFINE pnumoc INT, arr_req DYNAMIC ARRAY OF RECORD num_req INT, fecha VARCHAR(10), nombre STRING, precio FLOAT, estado STRING END RECORD DEFINE encabezado STRING CALL ui.Interface.loadStyles("formularios") OPEN WINDOW w1 WITH FORM "prfmwd013" LET encabezado = "BUSQUEDA REQUISICIONES DE LA ORDEN ",pnumoc using "&&&&&&&&" DECLARE busca_req1 CURSOR FOR SELECT a.num_req,CONVERT(CHAR(10),a.fecha,103),b.nombre,SUM(c.valor),a.estado FROM cctb00025 a,vetb00004 b,cctb00026 c,prtb00012 d WHERE a.num_req = c.num_req AND c.num_oc = pnumoc AND c.num_oc = d.num_oc AND d.tipo_cliente = b.tipo_cliente AND d.sec_cliente = b.sec_cliente AND a.status_t IS NULL GROUP BY a.num_req,b.nombre,a.estado,a.fecha ORDER BY a.num_req LET idx = 1 FOREACH busca_req1 INTO arr_req[idx].* LET idx = idx +1 END FOREACH DIALOG ATTRIBUTE(UNBUFFERED) DISPLAY ARRAY arr_req TO sreq.* BEFORE DISPLAY CALL arr_detalle.clear() DISPLAY encabezado TO encabezado BEFORE FIELD num_req LET gnumreq = arr_req[arr_curr()].num_req CALL llenadetalle() AFTER DISPLAY LET gnumreq = arr_req[arr_curr()].num_req CALL llenadetalle() END DISPLAY DISPLAY ARRAY arr_detalle TO sreq_det.* ON ACTION imprimir ATTRIBUTE (TEXT="",IMAGE="printer") CALL imprime_Req(gnumreq) END DISPLAY ON ACTION CANCEL ATTRIBUTE(TEXT="Salir",IMAGE="quit") LET int_flag = FALSE RETURN CLOSE WINDOW w1 END DIALOG END FUNCTION FUNCTION llenadetalle() DECLARE busca_detalle CURSOR FOR SELECT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,b.descrip_esp,SUM(a.cantidad),'0',a.precio FROM cctb00026 a,iptb00002 b WHERE a.num_req = gnumreq 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 GROUP BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,b.descrip_esp,a.precio,a.area LET idx = 1 FOREACH busca_detalle INTO arr_Detalle[idx].* LET pcodn = arr_detalle[idx].codn LET pcodgrupo = arr_detalle[idx].codgrupo LET pcodtipo = arr_detalle[idx].codtipo LET pcodsec = arr_detalle[idx].codsec LET parea = arr_detalle[idx].area CALL pendienteReq() LET arr_detalle[idx].pendiente = arr_detalle[idx].cantidad - gdespachada LET idx = idx + 1 END FOREACH END FUNCTION FUNCTION pendientereq() LET gdespachada=0 SELECT ISNULL(SUM(a.cantidad_2),0) INTO gdespachada FROM iptb00006 a WHERE (a.num_req = gnumreq) AND (a.cod_n = pcodn AND a.cod_grupo = pcodgrupo AND a.cod_tipo = pcodtipo AND a.cod_sec = pcodsec) AND a.area = parea AND a.status_t IS NULL IF gdespachada <> 0 THEN LET gdespachada = gdespachada*-1 END IF END FUNCTION FUNCTION imprime_req(xnumreq) DEFINE xnumreq INT, handler om.SaxDocumentHandler, -- return value from fgl_report_commitCurrentSettings() r_filename STRING, -- filename of Report Design Document including .4rp extension r_output STRING, -- output format option preview INTEGER -- TRUE/FALSE, to set preview option DEFINE mrequisicion RECORD numreq INT, numoc INT, nombre VARCHAR(80), vendedor VARCHAR(80), fecha VARCHAR(10), estatus_req VARCHAR(50), direccion VARCHAR(100), telefono_r VARCHAR(20), telefono_o VARCHAR(20), celular VARCHAR(20), celular1 VARCHAR(20), contacto VARCHAR(60), usuario_autoriza VARCHAR(50), fecha_autorizacion CHAR(16), estado_despacho VARCHAR(50), area SMALLINT, cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descripcion VARCHAR(80), cantidad DEC(12,4), aarea SMALLINT, codn SMALLINT, codgrupo SMALLINT, codtipo SMALLINT, codsec SMALLINT, descripcion1 VARCHAR(60), kit INT, observacion VARCHAR(180), cantidad_1 FLOAT, cantidad_despachada_req DEC(12,4), cantidad_despachada_ord DEC(12,4), cantidad_pendiente_ord DEC(12,4), cantidad_pendiente_req DEC(12,4), cantidad_ord DEC(12,4), codigo CHAR(30) END RECORD DECLARE busca_req CURSOR FOR SELECT b.num_req,c.num_oc, CAST (a.tipo_cliente AS varchar(2))+'-'+CAST(a.sec_cliente AS varchar(6))+' '+ISNULL(a.nombre,' ') AS cliente, CAST(e.num_emp AS varchar(5))+' '+ISNULL(RTRIM(e.nom1_emp),' ')+' '+ISNULL(e.apell1_emp,' ') AS vendedor, CONVERT(CHAR(10),b.fecha,103) AS fecha,b.estado, RTRIM(d.direccion_proyecto)+ '-'+ISNULL(x2.mensaje,' ') AS direccion,d.telefono_r,d.telefono_o,d.celular, d.celular1,d.contacto, (SELECT isnull(adtb00003.nom1_emp,' ')+' '+isnull(adtb00003.apell1_Emp,' ') FROM adtb00003 WHERE adtb00003.num_emp = b.sec_vend_aprobado), CONVERT(CHAR(10),b.fecha_autorizacion,103), b.estado_despacho, c.area, c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec,f.descrip_esp, sum(c.cantidad), c.area, c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec,(SELECT k1.descrip_esp FROM iptb00002 k1 WHERE k1.cod_n = c.cod_n AND k1.cod_grupo = c.cod_grupo AND k1.cod_tipo = c.cod_tipo AND k1.cod_sec = c.cod_sec),c.id_kit,x3.observacion,SUM(c.cantidad_1) FROM vetb00004 a,cctb00025 b LEFT OUTER JOIN cctb00029 x2 ON b.num_req = x2.num_req, cctb00026 c, vetb00050 d,adtb00003 e,iptb00002 f,prtb00014 x3 WHERE a.tipo_cliente = d.tipo_cliente AND b.num_req = c.num_req AND a.sec_cliente = d.sec_cliente AND c.cotizacion_no = d.cotizacion_no AND c.cod_n = f.cod_n AND c.cod_grupo =f.cod_grupo AND c.cod_tipo=f.cod_tipo AND c.cod_sec = f.cod_Sec AND c.status_t IS NULL AND b.num_req = xnumreq AND d.sec_vend = e.num_emp AND c.num_oc = x3.num_oc GROUP BY b.num_req,a.tipo_cliente,a.sec_cliente,a.nombre, e.num_emp,e.nom1_emp,e.apell1_emp,c.num_oc, b.fecha,b.estado, c.area,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec,f.descrip_esp,b.sec_vend_aprobado, b.fecha_autorizacion,b.estado_despacho, d.direccion_proyecto,x2.mensaje, d.telefono_r,d.telefono_o,d.celular, c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec, c.id_kit,x3.observacion,d.celular1,d.contacto ORDER BY b.num_req, c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec LET r_output="SVG" LET r_filename = "ccprmt010.4rp" LET preview = 1 iF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file CALL fgl_report_selectDevice(r_output) -- changing default CALL fgl_report_selectPreview(preview) -- changing default LET handler = fgl_report_commitCurrentSettings() -- commit changes START REPORT CCRP10 TO XML HANDLER HANDLER LET idx = 1 FOREACH busca_req INTO mrequisicion.* LET mrequisicion.codigo =mrequisicion.kit USING "<<<<","/", mrequisicion.cod_n USING "&&&&","-", mrequisicion.cod_grupo USING "&&&&","-", mrequisicion.cod_tipo USING "&&&&","-", mrequisicion.cod_sec USING "&&&&&&" OUTPUT TO REPORT ccrp10(mrequisicion.*) LET idx = idx + 1 END FOREACH DISPLAY "idx ",idx FINISH REPORT ccrp10 END IF END FUNCTION REPORT ccrp10(x) DEFINE X RECORD numreq INT, numoc INT, nombre VARCHAR(80), vendedor VARCHAR(80), fecha VARCHAR(10), estatus_req VARCHAR(50), direccion VARCHAR(100), telefono_r VARCHAR(20), telefono_o VARCHAR(20), celular VARCHAR(20), celular1 VARCHAR(20), contacto VARCHAR(60), usuario_autoriza VARCHAR(50), fecha_autorizacion CHAR(16), estado_despacho VARCHAR(50), area SMALLINT, cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descripcion VARCHAR(80), cantidad DEC(12,4), aarea SMALLINT, codn SMALLINT, codgrupo SMALLINT, codtipo SMALLINT, codsec SMALLINT, descripcion1 VARCHAR(60), kit INT, observacion VARCHAR(180), cantidad_1 FLOAT, cantidad_despachada_req DEC(12,4), cantidad_despachada_ord DEC(12,4), cantidad_pendiente_ord DEC(12,4), cantidad_pendiente_req DEC(12,4), cantidad_ord DEC(12,4), codigo CHAR(30) END RECORD, fecha_imp CHAR(16), semaforo BOOLEAN, chkit CHAR(100), y RECORD etiqueta CHAR(30), cod_n,cod_grupo,cod_tipo,cod_sec INT, lado_1,lado_2,lado_3 FLOAT, cantidad_r,medida_r FLOAT END RECORD DEFINE darea VARCHAR(50) ORDER BY x.numreq FORMAT FIRST PAGE HEADER SELECT a.nombre INTO p_companias.nombre FROM companias a LET fecha_imp = TODAY USING "DD/MM/YYYY",":",TIME BEFORE GROUP OF x.numreq PRINTX x.numreq,x.estado_despacho,x.estatus_req,x.fecha,x.fecha_autorizacion,p_companias.nombre, x.nombre,x.usuario_autoriza,x.vendedor,fecha_imp,x.numoc,X.direccion,X.telefono_r,x.telefono_o, x.celular,x.celular1,x.contacto, x.observacion IF x.area IS NULL THEN LET x.area = 1 END IF BEFORE GROUP OF x.area SELECT LTRIM(RTRIM(a.nombre_area)) INTO darea FROM prtb00016 a WHERE a.area_num = x.area LET darea = "("CLIPPED,x.area CLIPPED,") ", darea CLIPPED PRINT darea BEFORE GROUP OF x.codigo # BUSCA LAS CANTIDADES PENDIENTES LET x.cantidad_despachada_req=0 SELECT SUM(a.cantidad_2) INTO x.cantidad_despachada_req FROM iptb00006 a WHERE a.num_req = x.numreq AND a.cod_n = x.cod_n AND a.cod_grupo = x.cod_grupo AND a.cod_tipo = x.cod_tipo AND a.cod_Sec = x.cod_Sec and a.area = x.area AND a.status_t IS NULL LET x.cantidad_despachada_ord=0 SELECT SUM(a.cantidad_2) INTO x.cantidad_despachada_ord FROM iptb00006 a WHERE a.num_oc = x.numoc AND a.cod_n = x.cod_n AND a.cod_grupo = x.cod_grupo AND a.cod_mov IN (30,31,55,56,12,13) AND a.cod_tipo = x.cod_tipo AND a.cod_Sec = x.cod_Sec AND a.area = x.area AND a.status_t IS NULL SELECT SUM(a.cantidad) INTO x.cantidad_ord FROM prtb00013 a WHERE a.num_oc = x.numoc AND a.cod_n = x.cod_n AND a.cod_grupo = x.cod_grupo AND a.cod_tipo = x.cod_tipo AND a.cod_Sec = x.cod_Sec AND a.area = x.area AND a.status_t IS NULL IF x.cantidad_despachada_req IS NULL THEN LET x.cantidad_despachada_req = 0 END IF IF x.cantidad_despachada_ord IS NULL THEN LET x.cantidad_despachada_ord = 0 END IF IF x.cantidad_ord IS NULL THEN LET x.cantidad_ord = 0 END IF # DISPLAY "datos ",x.cantidad_ord,x.cantidad_despachada_ord,x.cantidad, # x.cantidad_despachada_req LET x.cantidad_pendiente_ord=x.cantidad_ord+x.cantidad_despachada_ord LET x.cantidad_pendiente_req=x.cantidad + x.cantidad_despachada_req { #BUSCA DESPIECE DECLARE busca_desp CURSOR FOR SELECT b.descripcion,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.lado_1,a.lado_2,a.lado_3,a.cantidad,a.medida FROM vetb00026 b,cctb00027 a WHERE b.codid = a.etiqueta AND a.cod_n = x.cod_n AND a.cod_grupo = x.cod_grupo AND a.cod_tipo = x.cod_tipo AND a.cod_sec = x.cod_sec FOREACH busca_desp INTO y.* END FOREACH } PRINTX x.cod_n,x.cod_grupo,x.cod_tipo,x.cod_Sec,x.descripcion,x.cantidad, x.cantidad_pendiente_req,x.cantidad_pendiente_ord ON EVERY ROW # IF x.codn IS NOT NULL THEN # LET semaforo = TRUE # LET chkit = x.codn USING "&&&&","-",x.codgrupo USING "&&&&","-",x.codtipo USING "&&&&","-", # x.codsec USING "&&&&"," ",x.descripcion1 # ELSE LET semaforo = FALSE # END IF PRINTX y.etiqueta,y.lado_1,y.lado_2,y.lado_3,y.cantidad_r,y.medida_r, chkit,semaforo,x.cantidad_1,x.cantidad END REPORT