Files
MBS/PROYECTO/PRDIR/prBuscaRequisicion.4gl
T

354 lines
14 KiB
Plaintext

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