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

369 lines
17 KiB
Plaintext

{
==============================================================================
PROGRAMA : PRPRRP116
SISTEMA : PRODUCCION
OBJETIVO : LISTAR ORDENES DE PRODUCCION
AUTOR : JUAN F. SOTO
FECHA : SEPTIEMBRE 9, 2010
==============================================================================
}
GLOBALS
"prprgb000.4gl"
DEFINE rango RECORD
fecha_inicial DATE,
fecha_final DATE
END RECORD,
porpantalla CHAR(1)
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CALL ARG_VAL(4) RETURNING copia
CONNECT to "smarmotech" USER usuarios USING clave
SELECT a.* INTO p_compania.* FROM companias a
CALL prprrp016()
END MAIN
FUNCTION prprrp016()
DEFINE opcion CHAR(1),
cantidad_f,cantidad_o DECIMAL(12,2),cant_orden INTEGER
DEFINE 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 busqueda RECORD
cotizacion_no INT,
fecha CHAR(10),
tipo_cliente SMALLINT,
sec_cliente INT,
nombre_proyecto CHAR(40),
direccion_proyecto CHAR(40),
telefono_r CHAR(15),
nombre CHAR(40),
num_oc INT,
fecha_oc CHAR(10),
fecha_entrega CHAR(10),
fecha_cierre CHAR(10),
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descrip_esp CHAR(40),
unidad_med CHAR(4),
cantidad DEC(12,3),
precio DEC(12,2),
cantidad_2 DEC(12,3),
cod_mov CHAR(60),
fecha_doc CHAR(10),
documento INT,
status_mov SMALLINT,
simbolo CHAR(6),
vendedor CHAR(50),
monto_cotizacion DEC(12,2),
condicion CHAR(30),
estado_orden CHAR(20),
avance CHAR(20),
monto_avance DEC(12,2),
fecha_avance CHAR(10),
codigo CHAR(25),
telefono VARCHAR(15),
celular VARCHAR(15),
email VARCHAR(80) ,
contacto LIKE vetb00050.contacto
END RECORD,
salida,visualiza CHAR(20)
OPTIONS
PROMPT LINE 23,
FORM LINE 8,
ERROR LINE 23
OPEN FORM prfmrp016 FROM "prfmrp116"
DISPLAY FORM prfmrp016
DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)
CONSTRUCT BY NAME criterio ON a.cotizacion_no,c.num_oc,c.cerrada,a.sec_vend,a.fecha,a.tipo_cliente,a.sec_cliente,
a.nombre_cliente,a.telefono_r,d.cod_n,d.cod_grupo,d.cod_tipo,d.cod_Sec
END CONSTRUCT
INPUT BY NAME salida,visualiza,historico
END INPUT
ON ACTION ejecutar
IF historico = 'N' THEN
LET selec =
"SELECT a.cotizacion_no,CONVERT(CHAR(10),a.fecha,103),a.tipo_cliente,a.sec_cliente,a.nombre_proyecto,",
"a.direccion_proyecto,a.telefono_r, ",
"b.nombre,c.num_oc,CONVERT(CHAR(10),c.fecha_oc,103),CONVERT(CHAR(10),c.fecha_entrega,103),CONVERT(CHAR(10),c.fecha_cierre,103),d.cod_n,d.cod_grupo,d.cod_tipo,d.cod_sec,",
"e.descrip_esp,e.unidad_med, d.cantidad,d.precio,f.cantidad_2,g.descrip_mov + '('+ cast(g.cod_mov as char(3))+')', ",
" CONVERT(CHAR(10),f.fecha,103),f.num_doc,g.status_mov,i.simbolo,'('+CAST(a.sec_vend as char(7))+')'+RTRIM(j.nom1_emp)+' '+RTRIM(j.nom2_emp)+' '+RTRIM(j.apell1_emp), ",
" a.total_neto, k.descrip,c.cerrada,a.telefono_o,a.celular,a.email,a.contacto ",
"FROM vetb00050 a inner join ",
" seg0007 l on l.usuario = SUSER_SNAME() AND a.sec_vend = l.sec_vend inner join ",
"vetb00012 k on a.cond_pago = k.cond_pago inner join ",
"vetb00004 b on a.tipo_cliente = b.tipo_cliente and a.sec_cliente = b.sec_cliente inner join ",
"vetb00051 d on a.cotizacion_no = d.cotizacion_no ",
" inner join vetb00061 i on a.ventas = i.ventas ",
"inner join adtb00003 j on a.sec_vend = j.num_emp ",
"left outer join ",
"prtb00012 c on a.cotizacion_no = c.cotizacion_no and b.tipo_cliente = c.tipo_cliente and b.sec_cliente = c.sec_cliente and ",
"a.cotizacion_no = c.cotizacion_no and c.status_t is null left outer join ",
"iptb00006 f on d.cod_n = f.cod_n and d.cod_grupo = f.cod_grupo and d.cod_tipo = f.cod_tipo and d.cod_Sec = f.cod_Sec and ",
"cast(c.num_oc as char(6)) = f.conduce_no and f.cod_mov in (30,31,55,12,13) inner join ",
"iptb00002 e on d.cod_n = e.cod_n and d.cod_grupo = e.cod_grupo and d.cod_tipo = e.cod_tipo and d.cod_Sec = e.cod_Sec ",
"left outer join ",
"iptb00005 g on f.cod_mov = g.cod_mov ",
"WHERE ",criterio clipped,
" and a.status_t is null and f.status_t is null ",
# "ORDER BY a.cotizacion_no,d.cod_n,d.cod_grupo,d.cod_tipo,d.cod_Sec,f.fecha,f.cod_mov,f.num_doc",
" UNION ",
"SELECT a.cotizacion_no,CONVERT(CHAR(10),a.fecha,103),a.tipo_cliente,a.sec_cliente,a.nombre_proyecto,",
"a.direccion_proyecto,a.telefono_r, ",
"b.nombre,c.num_oc,CONVERT(CHAR(10),c.fecha_oc,103),CONVERT(CHAR(10),c.fecha_entrega,103),CONVERT(CHAR(10),c.fecha_cierre,103),d.cod_n,d.cod_grupo,d.cod_tipo,d.cod_sec,",
"e.descrip_esp,e.unidad_med, d.cantidad,d.precio,f.cantidad,'FACTURA VENTA', ",
" CONVERT(CHAR(10),g.fecha_factura,103),f.factura,'3',i.simbolo,'('+CAST(a.sec_vend as char(7))+')'+RTRIM(j.nom1_emp)+' '+RTRIM(j.nom2_emp)+' '+RTRIM(j.apell1_emp), ",
" a.total_neto, k.descrip,c.cerrada,a.telefono_o,a.celular,a.email,a.contacto ",
"FROM vetb00050 a inner join ",
" seg0007 l on l.usuario = SUSER_SNAME() AND a.sec_vend = l.sec_vend inner join ",
"vetb00012 k on a.cond_pago = k.cond_pago inner join ",
"vetb00004 b on a.tipo_cliente = b.tipo_cliente and a.sec_cliente = b.sec_cliente inner join ",
"vetb00051 d on a.cotizacion_no = d.cotizacion_no ",
" inner join vetb00061 i on a.ventas = i.ventas ",
"inner join adtb00003 j on a.sec_vend = j.num_emp ",
"left outer join ",
"prtb00012 c on a.cotizacion_no = c.cotizacion_no and b.tipo_cliente = c.tipo_cliente and b.sec_cliente = c.sec_cliente and ",
"a.cotizacion_no = c.cotizacion_no left outer join ",
"vetb00002 g on ",
" g.orden = c.num_oc inner join ",
"vetb00003 f on d.cod_n = f.cod_n and d.cod_grupo = f.cod_grupo and d.cod_tipo = f.cod_tipo and d.cod_Sec = f.cod_Sec and ",
" f.factura = g.factura inner join ",
"iptb00002 e on d.cod_n = e.cod_n and d.cod_grupo = e.cod_grupo and d.cod_tipo = e.cod_tipo and d.cod_Sec = e.cod_Sec ",
"WHERE ",criterio clipped,
" and a.status_t is null and f.status_t is null "
# "ORDER BY a.cotizacion_no,d.cod_n,d.cod_grupo,d.cod_tipo,d.cod_Sec,f.fecha,f.cod_mov,f.num_doc"
ELSE
LET selec =
"SELECT a.cotizacion_no,CONVERT(CHAR(10),a.fecha,103),a.tipo_cliente,a.sec_cliente,a.nombre_proyecto,",
"a.direccion_proyecto,a.telefono_r, ",
"b.nombre,c.num_oc,CONVERT(CHAR(10),c.fecha_oc,103),CONVERT(CHAR(10),c.fecha_entrega,103),CONVERT(CHAR(10),c.fecha_cierre,103),d.cod_n,d.cod_grupo,d.cod_tipo,d.cod_sec,",
"e.descrip_esp,e.unidad_med, d.cantidad,d.precio,f.cantidad_2,g.descrip_mov + '('+ cast(g.cod_mov as char(3))+')', ",
" CONVERT(CHAR(10),f.fecha,103),f.num_doc,g.status_mov,i.simbolo,'('+CAST(a.sec_vend as char(7))+')'+RTRIM(j.nom1_emp)+' '+RTRIM(j.nom2_emp)+' '+RTRIM(j.apell1_emp), ",
" a.total_neto, k.descrip,c.cerrada,a.telefono_o,a.celular,a.email,a.contacto ",
"FROM historicoMTECH.dbo.vetb00050 a inner join ",
" historicoMTECH.dbo.vetb00012 k on a.cond_pago = k.cond_pago inner join ",
"historicoMTECH.dbo.vetb00004 b on a.tipo_cliente = b.tipo_cliente and a.sec_cliente = b.sec_cliente inner join ",
"historicoMTECH.dbo.vetb00051 d on a.cotizacion_no = d.cotizacion_no ",
" inner join historicoMTECH.dbo.vetb00061 i on a.ventas = i.ventas ",
"inner join historicoMTECH.dbo.adtb00003 j on a.sec_vend = j.num_emp ",
"left outer join ",
"historicoMTECH.dbo.prtb00012 c on a.cotizacion_no = c.cotizacion_no and b.tipo_cliente = c.tipo_cliente and b.sec_cliente = c.sec_cliente and ",
"a.cotizacion_no = c.cotizacion_no and c.status_t is null left outer join ",
"historicoMTECH.dbo.iptb00006 f on d.cod_n = f.cod_n and d.cod_grupo = f.cod_grupo and d.cod_tipo = f.cod_tipo and d.cod_Sec = f.cod_Sec and ",
"cast(c.num_oc as char(6)) = f.conduce_no and f.cod_mov in (30,31,55,12,13) inner join ",
"historicoMTECH.dbo.iptb00002 e on d.cod_n = e.cod_n and d.cod_grupo = e.cod_grupo and d.cod_tipo = e.cod_tipo and d.cod_Sec = e.cod_Sec ",
"left outer join ",
"historicoMTECH.dbo.iptb00005 g on f.cod_mov = g.cod_mov ",
"WHERE ",criterio clipped,
" and a.status_t is null and f.status_t is null ",
" UNION ",
"SELECT a.cotizacion_no,CONVERT(CHAR(10),a.fecha,103),a.tipo_cliente,a.sec_cliente,a.nombre_proyecto,",
"a.direccion_proyecto,a.telefono_r, ",
"b.nombre,c.num_oc,CONVERT(CHAR(10),c.fecha_oc,103),CONVERT(CHAR(10),c.fecha_entrega,103),CONVERT(CHAR(10),c.fecha_cierre,103),d.cod_n,d.cod_grupo,d.cod_tipo,d.cod_sec,",
"e.descrip_esp,e.unidad_med, d.cantidad,d.precio,f.cantidad,'FACTURA VENTA', ",
" CONVERT(CHAR(10),g.fecha_factura,103),f.factura,'3',i.simbolo,'('+CAST(a.sec_vend as char(7))+')'+RTRIM(j.nom1_emp)+' '+RTRIM(j.nom2_emp)+' '+RTRIM(j.apell1_emp), ",
" a.total_neto, k.descrip,c.cerrada,a.telefono_o,a.celular,a.email,a.contacto ",
"FROM historicoMTECH.dbo.vetb00050 a inner join ",
"historicoMTECH.dbo.vetb00012 k on a.cond_pago = k.cond_pago inner join ",
"historicoMTECH.dbo.vetb00004 b on a.tipo_cliente = b.tipo_cliente and a.sec_cliente = b.sec_cliente inner join ",
"historicoMTECH.dbo.vetb00051 d on a.cotizacion_no = d.cotizacion_no ",
" inner join historicoMTECH.dbo.vetb00061 i on a.ventas = i.ventas ",
"inner join historicoMTECH.dbo.adtb00003 j on a.sec_vend = j.num_emp ",
"left outer join ",
"historicoMTECH.dbo.prtb00012 c on a.cotizacion_no = c.cotizacion_no and b.tipo_cliente = c.tipo_cliente and b.sec_cliente = c.sec_cliente and ",
"a.cotizacion_no = c.cotizacion_no left outer join ",
"historicoMTECH.dbo.vetb00002 g on ",
" g.orden = c.num_oc inner join ",
"historicoMTECH.dbo.vetb00003 f on d.cod_n = f.cod_n and d.cod_grupo = f.cod_grupo and d.cod_tipo = f.cod_tipo and d.cod_Sec = f.cod_Sec and ",
" f.factura = g.factura inner join ",
"historicoMTECH.dbo.iptb00002 e on d.cod_n = e.cod_n and d.cod_grupo = e.cod_grupo and d.cod_tipo = e.cod_tipo and d.cod_Sec = e.cod_Sec ",
"WHERE ",criterio clipped,
" and a.status_t is null and f.status_t is null "
END IF
PREPARE comando FROM selec
DECLARE busca CURSOR FOR comando
LET r_filename = salida CLIPPED
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
LET r_output=visualiza CLIPPED
LET preview=1
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(preview) -- changing default
LET handler = fgl_report_commitCurrentSettings() -- commit changes
END IF
IF handler IS NOT NULL THEN -- report engine was configured ok
START REPORT reporte_16 TO XML HANDLER handler
FOREACH busca INTO busqueda.cotizacion_no,busqueda.fecha,busqueda.tipo_cliente,
busqueda.sec_cliente,busqueda.nombre_proyecto,busqueda.direccion_proyecto,
busqueda.telefono_r,busqueda.nombre,busqueda.num_oc,busqueda.fecha_oc,
busqueda.fecha_entrega,busqueda.fecha_cierre,busqueda.cod_n,
busqueda.cod_grupo,busqueda.cod_tipo,busqueda.cod_sec,
busqueda.descrip_esp,busqueda.unidad_med,busqueda.cantidad,
busqueda.precio,busqueda.cantidad_2,busqueda.cod_mov,
busqueda.fecha_doc,busqueda.documento,busqueda.status_mov,
busqueda.simbolo,busqueda.vendedor,busqueda.monto_cotizacion,
busqueda.condicion,busqueda.estado_orden,busqueda.telefono,
busqueda.celular,busqueda.email,busqueda.contacto
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage("WARNING","NO EXISTEN REGISTROS CON ESA CONDICION","SOP")
EXIT FOREACH
END IF
IF busqueda.cantidad_2 IS NULL THEN
LET busqueda.cantidad_2 = 0
END IF
LET busqueda.avance = null
LET busqueda.fecha_avance= NULL
LET busqueda.monto_avance = NULL
SELECT MAX(a.num_doc),MAX(a.fecha_orig)
INTO busqueda.avance,busqueda.fecha_avance,
busqueda.monto_avance
FROM cctb00001 a
WHERE a.num_cheque = busqueda.cotizacion_no and
a.tipo_Doc = 'AV' and a.tipo_cliente = busqueda.tipo_cliente and
a.sec_cliente = busqueda.sec_cliente and a.status_t is null and
a.fecha_orig > '08/01/2009'
LET busqueda.codigo = busqueda.cod_n using "&&&&","-",
busqueda.cod_grupo USING "&&&&","-",
busqueda.cod_tipo USING "&&&&","-",
busqueda.cod_Sec USING "&&&"
IF busqueda.estado_orden = "N" THEN
LET busqueda.estado_orden = "ABIERTA"
END IF
IF busqueda.estado_orden = "S" THEN
LET busqueda.estado_orden = "CERRADA"
END IF
OUTPUT TO REPORT reporte_16(busqueda.*)
END FOREACH
FINISH REPORT reporte_16
END IF
AFTER DIALOG
IF int_flag THEN
CALL msg(2)
LET int_flag = false
RETURN
END IF
IF salida IS NULL THEN
CALL msg(16)
NEXT FIELD salida
END IF
IF visualiza IS NULL THEN
CALL msg(16)
NEXT FIELD visualiza
END IF
ON ACTION CANCEL
LET INT_FLAG = FALSE
EXIT DIALOG
END DIALOG
END FUNCTION
REPORT reporte_16(x)
DEFINE x RECORD
cotizacion_no INT,
fecha CHAR(10),
tipo_cliente SMALLINT,
sec_cliente INT,
nombre_proyecto CHAR(40),
direccion_proyecto CHAR(40),
telefono_r CHAR(15),
nombre CHAR(40),
num_oc INT,
fecha_oc CHAR(10),
fecha_entrega CHAR(10),
fecha_cierre CHAR(10),
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descrip_esp CHAR(40),
unidad_med CHAR(4),
cantidad DEC(12,3),
precio DEC(12,2),
cantidad_2 DEC(12,3),
cod_mov CHAR(60),
fecha_doc CHAR(10),
documento INT,
status_mov SMALLINT,
simbolo CHAR(6),
vendedor CHAR(50),
monto_cotizacion DEC(12,2),
condicion CHAR(30),
estado_orden CHAR(20),
avance CHAR(20),
monto_avance DEC(12,2),
fecha_avance CHAR(10),
codigo CHAR(25),
telefono VARCHAR(15),
celular VARCHAR(15),
email VARCHAR(80),
contacto LIKE vetb00050.contacto
END RECORD,
balance DEC(12,3),
v CHAR(1)
ORDER BY x.cotizacion_no,x.num_oc,x.codigo
FORMAT
BEFORE GROUP OF x.cotizacion_no
PRINTX x.cotizacion_no,x.direccion_proyecto,x.nombre_proyecto,
x.tipo_cliente,x.sec_cliente,x.telefono_r,x.num_oc,x.fecha,x.fecha_cierre,
x.fecha_entrega,x.fecha_oc
BEFORE GROUP OF x.codigo
PRINTX x.codigo,x.descrip_esp,x.unidad_med
LET balance = x.cantidad
ON EVERY ROW
IF x.status_mov <> 3 THEN
LET balance = balance + x.cantidad_2
END IF
PRINTX x.nombre,x.cantidad,x.cantidad_2,x.cod_mov,x.fecha_Doc,p_compania.nombre,
x.documento,balance,x.precio,x.simbolo,v,x.avance,x.fecha_avance,
x.monto_avance,x.vendedor,x.monto_cotizacion,x.condicion,x.status_mov,
x.estado_orden,x.telefono,x.celular,x.email,x.contacto
LET x.cantidad = 0
END REPORT