Files
MBS/PROYECTO/vedir/veprrp048.4gl
T

542 lines
20 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : VEPRRP048
OBJETIVO : Relacion de Cotizaciones
PROGRAMADOR : Ing. Juan Soto (Johnny)
FECHA REALIZACION : Mayo 17, 2011
-------------------------------------------------------------------------------
}
SCHEMA 'smarmotech'
GLOBALS "veprgb000.4gl"
DEFINE act,mes_ini INTEGER ,
fecha_inicial,fecha_final DATE,
conordenes CHAR(1),
tiposoporte,descripcion_rep STRING,
usuarios, usuario VARCHAR(20),
clave VARCHAR(20),
selec STRING,
idx INT,
pcompanias RECORD LIKE companias.*
DEFINE kequipo SMALLINT, dequipo CHAR(30),
pequipo ui.ComboBox
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
--CALL ARG_VAL(3) RETURNING impresor
--LET usuario = 'jsoto'
CONNECT TO "smarmotech" USER usuarios USING clave
SELECT * INTO pcompanias.* FROM companias
CALL veprrp048()
END MAIN
FUNCTION veprrp048()
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
criterio STRING
### Definicion del registro a exportar al reporte
DEFINE ventas RECORD
fecha CHAR(10),
cotizacion_no INT,
tipo_cliente SMALLINT,
sec_cliente INT,
nombre CHAR(60),
nombre_proyecto CHAR(60),
fecha_entrega CHAR(10),
vendedor CHAR(80),
valor_bruto DEC(12,2),
valor_Desc DEC(12,2),
sub_total DEC(12,2),
valor_itbis DEC(12,2),
valor_neto DEC(12,2),
tipo_ventas CHAR(30),
orden INT,
equipo_venta CHAR(30),
orden_cliente CHAR(20),
conduce INT,
fechaConduce DATE
END RECORD,
salida CHAR(50),
ptasa DEC(12,4)
#WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM vefmrp015 FROM "vefmrp048"
DISPLAY FORM vefmrp015
#### Pide los parametros para busqueda de informacion
SELECT a.fecha_inicio INTO fecha_inicial FROM prdtable a
WHERE a.ano =YEAR(today) AND a.mes = MONTH(today)
#LET fecha_inicial = today-29
LET fecha_final = today
INPUT BY NAME fecha_inicial,fecha_final,tiposoporte,conordenes,salida WITHOUT DEFAULTS
AFTER INPUT
IF int_flag THEN
CALL msg(2)
EXIT INPUT
END IF
IF salida IS NULL THEN
CALL FGL_WINMESSAGE("ERROR","CAMPO EN BLANCO","STOP")
NEXT FIELD salida
END IF
IF conordenes IS NULL THEN
NEXT FIELD conordenes
END IF
END INPUT
IF int_flag THEN
LET int_flag = false
RETURN
END IF
#### Permite Cancelar reporte mediante el uso de CONTROL-C
IF int_flag THEN
--LET numero_msg = 2
--CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
CALL cequipos()
CONSTRUCT criterio ON a.ventas,A.sec_vend,x.cod_n,x.cod_grupo,x.cod_tipo,
x.cod_Sec,h.depto
FROM pventas,kvendedor,cod_n,cod_grupo,cod_tipo,cod_Sec,
equipos
BEFORE CONSTRUCT
--CALL cventas1()
IF tiposoporte = 'VE' THEN
CALL cvendedor1()
ELSE
CALL csoporte()
END IF
AFTER CONSTRUCT
IF int_flag THEN
--LET numero_msg = 2
--CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
EXIT CONSTRUCT
END CONSTRUCT
LET descripcion_rep = NULL
IF conordenes = 'T' THEN
IF tiposoporte = "VE" THEN
LET descripcion_rep = "TODAS LAS COTIZACIONES ORDENADAS POR VENDEDOR"
LET selec =
"SELECT DISTINCT CONVERT(CHAR(10),a.fecha,103),a.cotizacion_no,a.tipo_cliente, a.sec_cliente,a.nombre_cliente,ISNULL(a.nombre_proyecto,'NO ESPECIFICADO'),
CONVERT(CHAR(10),a.fecha_entrega,103), '('+CAST(a.sec_vend AS CHAR(4)) +')'+RTRIM(c.nom1_emp) + ' '+ ISNULL(RTRIM(c.apell1_emp),' '),
a.total_bruto,a.monto_desc,a.sub_total,a.monto_itbi, a.total_neto,d.descripcion,e.num_oc, h.nombre,e.nombre_file
FROM vetb00050 a
INNER JOIN adtb00003 c ON c.num_emp = a.sec_vend
INNER JOIN vetb00061 d ON d.ventas = a.ventas
INNER JOIN seg0007 f ON f.sec_vend = a.sec_vend
inner join seg0000 g ON a.sec_vend = g.sec_vend
inner join seg0008 h on g.depto = h.depto
LEFT OUTER JOIN prtb00012 e ON e.cotizacion_no = a.cotizacion_no AND e.status_t IS NULL and e.sec_vend = f.sec_vend
INNER JOIN vetb00051 x ON x.cotizacion_no = a.cotizacion_no ",
" WHERE a.fecha between ? and ? and ",
" a.tipo_cliente IS NOT NULL AND ",
" a.status_t IS NULL and ",
" g.status_t is null and ",
" a.sec_vend = f.sec_vend and f.usuario = '",usuarios,"' ",
" and a.ventas = d.ventas and ",criterio CLIPPED
ELSE
LET descripcion_rep = "TODAS LAS COTIZACIONES ORDENADAS POR SOPORTE A VENTAS"
LET selec =
"SELECT DISTINCT CONVERT(CHAR(10),a.fecha,103),a.cotizacion_no,a.tipo_cliente, a.sec_cliente,
a.nombre_cliente,ISNULL(a.nombre_proyecto,'NO ESPECIFICADO'),CONVERT(CHAR(10),a.fecha_entrega,103),
isnull('('+CAST(a.sec_vend AS CHAR(4)) +')'+RTRIM(c.nom1_emp) + ' '+ISNULL(RTRIM(c.apell1_emp),' '), 'VENDEDOR NO ESPECIFICADO'),
a.total_bruto,a.monto_desc,a.sub_total,a.monto_itbi, a.total_neto,d.descripcion,e.num_oc, h.nombre,e.nombre_file
FROM vetb00050 a
INNER JOIN vetb00061 d ON d.ventas =a.ventas
INNER JOIN vetb00093 f ON f.cotizacion_no = a.cotizacion_no
INNER JOIN adtb00003 c ON c.num_emp = f.sec_vend
LEFT OUTER JOIN prtb00012 e ON a.cotizacion_no = e.cotizacion_no AND e.status_t IS NULL AND e.tipo_cliente = a.tipo_cliente AND e.sec_cliente = a.sec_cliente
INNER JOIN vetb00051 x ON x.cotizacion_no = a.cotizacion_no
inner join seg0000 g on a.sec_vend = g.sec_vend
inner join seg0008 h on g.depto = h.depto ",
" WHERE a.fecha between ? and ? and ",
" f.sec_vend = c.num_emp and ",
" a.cotizacion_no = x.cotizacion_no and ",
" a.status_t IS NULL and ",
" g.status_t is null and ",
" a.ventas = d.ventas and ",criterio CLIPPED
# " ORDER BY d.descripcion,CONVERT(CHAR(10),a.fecha,103),a.cotizacion_no "
END IF
END IF
IF conordenes = 'O' THEN
IF tiposoporte = 'VE' THEN
LET descripcion_rep = "COTIZACIONES CON ORDENES ORDENADAS POR VENDEDOR"
LET selec =
" SELECT DISTINCT CONVERT(CHAR(10),a.fecha,103),a.cotizacion_no,a.tipo_cliente, ",
" a.sec_cliente,b.nombre,ISNULL(a.nombre_proyecto,'NO ESPECIFICADO'),CONVERT(CHAR(10),a.fecha_entrega,103), ",
" isnull('('+CAST(a.sec_vend AS CHAR(4)) +')'+RTRIM(c.nom1_emp) + ' '+ISNULL(RTRIM(c.apell1_emp),' '), 'VENDEDOR NO ESPECIFICADO'),
a.total_bruto,a.monto_desc,a.sub_total,a.monto_itbi,",
" a.total_neto,d.descripcion,e.num_oc, h.nombre,e.nombre_file ",
" FROM vetb00050 a,vetb00004 b,adtb00003 c,vetb00061 d,prtb00012 e,seg0007 f,seg0000 g,seg0008 h,vetb00051 x ",
" WHERE a.fecha between ? and ? and a.cotizacion_no = e.cotizacion_no AND ",
" a.tipo_cliente = b.tipo_cliente and ",
" a.sec_cliente = b.sec_cliente and ",
" a.sec_vend = c.num_emp and ",
" a.tipo_cliente IS NOT NULL AND ",
" a.ventas = d.ventas and ",criterio CLIPPED,
" and g.sec_vend = a.sec_vend and ",
" g.depto = h.depto ",
" and a.sec_vend = f.sec_vend and f.usuario = '",usuarios,"' ",
" and a.cotizacion_no = x.cotizacion_no ",
" and e.status_t is null "
#" ORDER BY d.descripcion,CONVERT(CHAR(10),a.fecha,103),a.cotizacion_no "
ELSE
LET descripcion_rep = "COTIZACIONES CON ORDENES ORDENADAS POR SOPORTE A VENTAS"
LET selec =
"SELECT DISTINCT CONVERT(CHAR(10),a.fecha,103),a.cotizacion_no,a.tipo_cliente,
a.sec_cliente,b.nombre,ISNULL(a.nombre_proyecto,'NO ESPECIFICADO'),CONVERT(CHAR(10),a.fecha_entrega,103),
isnull('('+CAST(a.sec_vend AS CHAR(4)) +')'+RTRIM(c.nom1_emp) + ' '+ISNULL(RTRIM(c.apell1_emp),' '), 'VENDEDOR NO ESPECIFICADO')
,a.total_bruto,a.monto_desc,a.sub_total,a.monto_itbi,
a.total_neto,d.descripcion,e.num_oc, h.nombre,e.nombre_file ",
" FROM vetb00050 a,vetb00004 b,adtb00003 c,vetb00061 d,prtb00012 e,vetb00093 f, seg0000 g,seg0008 h, vetb00051 x ",
" WHERE a.fecha between ? and ? and a.cotizacion_no = e.cotizacion_no AND ",
" a.tipo_cliente = b.tipo_cliente and ",
" a.sec_cliente = b.sec_cliente and ",
" f.sec_vend = c.num_emp and ",
" a.tipo_cliente IS NOT NULL AND ",
" a.ventas = d.ventas and ",criterio CLIPPED,
" and g.sec_vend = a.sec_vend and ",
" g.depto = h.depto ",
" and a.cotizacion_no = x.cotizacion_no ",
" and a.cotizacion_no = f.cotizacion_no ",
" and e.status_t is null "
#" ORDER BY d.descripcion,CONVERT(CHAR(10),a.fecha,103),a.cotizacion_no "
END IF
END IF
IF conordenes = 'S' THEN
IF tiposoporte = "VE" THEN
LET descripcion_rep = "COTIZACIONES SIN ORDEN ORDENADAS POR VENDEDOR"
LET selec =
"SELECT DISTINCT CONVERT(CHAR(10),a.fecha,103),a.cotizacion_no,a.tipo_cliente, a.sec_cliente,a.nombre_cliente,ISNULL(a.nombre_proyecto,'NO ESPECIFICADO'),
CONVERT(CHAR(10),a.fecha_entrega,103), '('+CAST(a.sec_vend AS CHAR(4)) +')'+RTRIM(c.nom1_emp) + ' '+ISNULL(RTRIM(c.apell1_emp),' '),
a.total_bruto,a.monto_desc,a.sub_total,a.monto_itbi, a.total_neto,d.descripcion,e.num_oc, h.nombre,e.nombre_file,
e.cotizacion_no
FROM vetb00050 a
INNER JOIN adtb00003 c ON c.num_emp = a.sec_vend
INNER JOIN vetb00061 d ON d.ventas = a.ventas
INNER JOIN seg0007 f ON f.sec_vend = a.sec_vend
inner join seg0000 g ON a.sec_vend = g.sec_vend
inner join seg0008 h on g.depto = h.depto
LEFT OUTER JOIN prtb00012 e ON e.cotizacion_no = a.cotizacion_no AND e.status_t IS NULL and e.sec_vend = f.sec_vend
INNER JOIN vetb00051 x ON x.cotizacion_no = a.cotizacion_no ",
" WHERE a.fecha between ? and ? and ",
" a.tipo_cliente IS NOT NULL AND ",
" e.cotizacion_no IS NULL AND ",
" a.status_t IS NULL and ",
" g.status_t is null and ",
" a.sec_vend = f.sec_vend and f.usuario = '",usuarios,"' ",
" and a.ventas = d.ventas and ",criterio CLIPPED
ELSE
LET descripcion_rep = "COTIZACIONES SIN ORDEN ORDENADAS POR SOPORTE A VENTAS"
LET selec =
"SELECT DISTINCT CONVERT(CHAR(10),a.fecha,103),a.cotizacion_no,a.tipo_cliente, a.sec_cliente,
a.nombre_cliente,ISNULL(a.nombre_proyecto,'NO ESPECIFICADO'),CONVERT(CHAR(10),a.fecha_entrega,103),
isnull('('+CAST(a.sec_vend AS CHAR(4)) +')'+RTRIM(c.nom1_emp) + ' '+ISNULL(RTRIM(c.apell1_emp),' '), 'VENDEDOR NO ESPECIFICADO'),
a.total_bruto,a.monto_desc,a.sub_total,a.monto_itbi, a.total_neto,d.descripcion,e.num_oc, h.nombre,e.nombre_file
FROM vetb00050 a
INNER JOIN vetb00061 d ON d.ventas =a.ventas
INNER JOIN vetb00093 f ON f.cotizacion_no = a.cotizacion_no
INNER JOIN adtb00003 c ON c.num_emp = f.sec_vend
LEFT OUTER JOIN prtb00012 e ON a.cotizacion_no = e.cotizacion_no AND e.status_t IS NULL AND e.tipo_cliente = a.tipo_cliente AND e.sec_cliente = a.sec_cliente
INNER JOIN vetb00051 x ON x.cotizacion_no = a.cotizacion_no
inner join seg0000 g on a.sec_vend = g.sec_vend
inner join seg0008 h on g.depto = h.depto ",
" WHERE a.fecha between ? and ? and ",
" f.sec_vend = c.num_emp and ",
" a.cotizacion_no = x.cotizacion_no and ",
" e.cotizacion_no IS NULL AND ",
" a.status_t IS NULL and ",
" g.status_t is null and ",
" a.ventas = d.ventas and ",criterio CLIPPED
# " ORDER BY d.descripcion,CONVERT(CHAR(10),a.fecha,103),a.cotizacion_no "
END IF
END IF
PREPARE busca_act FROM selec
DECLARE act2 CURSOR FOR busca_act
OPEN act2 USING fecha_inicial,fecha_final
### Loop para igualar tipo de venta a la variable ventas.ventas
LET idx = 1
FOREACH act2 INTO ventas.*
IF STATUS <> NOTFOUND THEN
-- configure report engine; the functions prefixed fgl that are called here are part of the GRW API
IF idx = 1 THEN
LET r_filename = salida CLIPPED
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
CALL seleccionarsalida() RETURNING r_output
LET preview=1
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(preview) -- changing default
CALL fgl_report_configurexlsxdevice(null,null,null,null,null,null,1)
LET handler = fgl_report_commitCurrentSettings() -- commit changes
END IF
START REPORT plan TO XML HANDLER handler
END IF
END IF
LET idx = idx + 1
{ # BUSCA LA ORDEN DE PEDIDOS
LET ventas.orden = null
SELECT MAX(a.num_oc) INTO ventas.orden FROM prtb00012 a
WHERE a.cotizacion_no = ventas.cotizacion_no AND
a.status_t is NULL
# BUSCA ORDEN COMPRA CLIENTE
LET ventas.orden_cliente =NULL
SELECT a.nombre_file INTO ventas.orden_cliente
FROM prtb00012 a
WHERE a.num_oc = ventas.orden
# BUSCA CONDUCE SALIDA
LET ventas.conduce = NULL
LET ventas.fechaConduce = NULL
SELECT MAX(a.num_doc) INTO ventas.conduce
FROM iptb00006 a
WHERE a.cod_sp = ventas.tipo_cliente AND
a.cod_sp_Sec = ventas.sec_cliente AND
a.num_oc = ventas.orden AND
a.cod_mov IN (30,31,55) AND
a.status_t IS NULL
IF ventas.conduce IS NOT NULL THEN
SELECT MAX(a.fecha) INTO ventas.fechaConduce
FROM iptb00006 a
WHERE a.cod_sp = ventas.tipo_cliente AND
a.cod_sp_Sec = ventas.sec_cliente AND
a.num_doc = ventas.orden AND
a.cod_mov IN (30,31,55) AND
a.status_t IS NULL
END IF }
# TASA
LET ptasa =0
SELECT a.tasa INTO ptasa
FROM cgtb00084 a
WHERE a.ano = YEAR(fecha_final) AND
a.mes = MONTH(fecha_final) AND
a.tipo_cliente = ventas.tipo_cliente
IF ptasa IS NULL THEN
LET ptasa = 1
END IF
LET ventas.valor_bruto = ventas.valor_bruto * ptasa
LET ventas.valor_Desc = ventas.valor_Desc * ptasa
LET ventas.valor_itbis = ventas.valor_itbis * ptasa
LET ventas.valor_neto = ventas.valor_neto * ptasa
LET ventas.sub_total = ventas.sub_total * ptasa
IF ventas.vendedor IS NULL THEN
LET ventas.vendedor = 'NO TIENE'
END IF
OUTPUT TO REPORT plan(ventas.*)
END FOREACH
IF idx = 1 THEN
CALL fgl_winmessage("ERROR","NO EXISTEN REGISTROS CON ESA CONDICION","INFO")
ELSE
FINISH REPORT plan
END IF
END FUNCTION
REPORT plan(x)
DEFINE x RECORD
fecha CHAR(10),
cotizacion_no INT,
tipo_cliente SMALLINT,
sec_cliente INT,
nombre CHAR(60),
nombre_proyecto CHAR(60),
fecha_entrega CHAR(10),
vendedor CHAR(80),
valor_bruto DEC(12,2),
valor_Desc DEC(12,2),
sub_total DEC(12,2),
valor_itbis DEC(12,2),
valor_neto DEC(12,2),
tipo_ventas CHAR(30),
orden INT,
equipo_venta CHAR(30),
orden_cliente CHAR(20),
conduce INT,
fechaConduce DATE
END RECORD,
vvendedor,total_general,tvbruto,tvdesc,tvitbis,ttbruto,ttdesc,ttitbis,sub_total,ttsub_total,
ev_tvbruto,ev_tvdesc,ev_sub_total,ev_tvitbis,ev_vvendedor,
c_tvbruto,c_tvdesc,c_sub_total,c_tvitbis,c_vvendedor
DEC(12,2)
DEFINE hora CHAR(5),
ch_vendedor STRING
ORDER BY x.equipo_venta, x.vendedor
FORMAT
FIRST PAGE HEADER
LET total_general = 0
LET ttbruto = 0
LET ttdesc = 0
LET ttitbis = 0
LET ttsub_total = 0
BEFORE GROUP OF x.equipo_venta
LET ev_tvbruto = 0
LET ev_tvdesc = 0
LET ev_sub_total = 0
LET ev_tvitbis = 0
LET ev_vvendedor = 0
PRINTX x.equipo_venta
BEFORE GROUP OF x.vendedor
LET vvendedor = 0
LET tvbruto =0
LET tvdesc = 0
LET tvitbis = 0
LET sub_total = 0
PRINTX x.vendedor
LET ch_vendedor = x.vendedor
{ BEFORE GROUP OF x.cotizacion_no
LET c_tvbruto = 0
LET c_tvdesc = 0
LET c_sub_total = 0
LET c_tvitbis = 0
LET c_vvendedor = 0}
PRINTX x.cotizacion_no
ON EVERY ROW
--LET tvbruto = tvbruto + x.valor_bruto
--LET tvdesc = tvdesc + x.valor_desc
--LET tvitbis = tvitbis + x.valor_itbis
--LET ttbruto = x.valor_bruto + ttbruto
--LET ttdesc = x.valor_Desc + ttdesc
--LET ttitbis = ttitbis + x.valor_itbis
--LET sub_total = sub_total + x.sub_total
--LET ttsub_total = ttsub_total + X.sub_total
{LET vvendedor = vvendedor + x.valor_neto
LET total_general = total_general + x.valor_neto}
PRINTX x.*, pcompanias.nombre, hora, fecha_inicial,fecha_final,
descripcion_rep
{vvendedor,total_general,tvbruto,tvdesc,tvitbis,ttbruto,ttdesc,ttitbis,ttsub_total,sub_total}
AFTER GROUP OF x.equipo_venta
LET ev_tvbruto = GROUP SUM(x.valor_bruto)
LET ev_tvdesc = GROUP SUM(x.valor_desc)
LET ev_sub_total = GROUP SUM(x.sub_total)
LET ev_tvitbis = GROUP SUM(x.valor_itbis)
LET ev_vvendedor = GROUP SUM(x.valor_neto)
PRINTX ev_tvbruto,ev_tvdesc,ev_sub_total,ev_tvitbis,ev_vvendedor
AFTER GROUP OF x.vendedor
LET vvendedor = GROUP SUM(x.valor_bruto)
LET tvbruto = GROUP SUM(x.valor_desc)
LET tvdesc = GROUP SUM(x.sub_total)
LET tvitbis = GROUP SUM(x.valor_itbis)
LET sub_total = GROUP SUM(x.valor_neto)
PRINTX vvendedor,tvbruto,tvdesc,tvitbis,sub_total
{ AFTER GROUP OF x.cotizacion_no
LET c_tvbruto = GROUP SUM(x.valor_bruto)
LET c_tvdesc = GROUP SUM(x.valor_desc)
LET c_sub_total = GROUP SUM(x.sub_total)
LET c_tvitbis = GROUP SUM(x.valor_itbis)
LET c_vvendedor = GROUP SUM(x.valor_neto)
PRINTX c_tvbruto,c_tvdesc,c_sub_total,c_tvitbis,c_vvendedor}
ON LAST ROW
LET ttbruto = sum(x.valor_bruto)
LET ttdesc = sum(x.valor_Desc)
LET ttitbis = sum(x.valor_itbis)
LET sub_total = sum(x.sub_total)
LET ttsub_total = sum(x.sub_total)
PRINTX ch_Vendedor,ttbruto,ttdesc,ttitbis,sub_total,ttsub_total
END REPORT
{FUNCTION cventas1()
DEFINE kventas SMALLINT, dventas CHAR(30)
LET pventas = ui.combobox.forname("formonly.pventas")
DECLARE bventas CURSOR FOR
SELECT a.ventas,a.descripcion FROM vetb00061 a
CALL pventas.clear()
FOREACH bventas INTO kventas,dventas
CALL pventas.additem(kventas,dventas)
END FOREACH
END FUNCTION}
FUNCTION cequipos()
LET pequipo = ui.combobox.forname("formonly.equipos")
DECLARE bequipos CURSOR FOR
SELECT a.depto,a.nombre FROM seg0008 a
CALL pequipo.clear()
FOREACH bequipos INTO kequipo,dequipo
CALL pequipo.additem(kequipo,dequipo)
END FOREACH
END FUNCTION