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

381 lines
14 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : VEPRRP048
OBJETIVO : Relacion de Cotizaciones
PROGRAMADOR : Ing. Juan Soto (Johnny)
FECHA REALIZACION : Mayo 17, 2011
-------------------------------------------------------------------------------
}
GLOBALS "veprgb000.4gl"
DEFINE act,mes_ini INTEGER ,
fecha_inicial,fecha_final DATE,
conordenes CHAR(1),
tiposoporte,descripcion_rep STRING
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CONNECT TO "smarmotech" USER usuarios USING clave
SELECT * INTO p_companias.* 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
### 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,
conduce INT,
fechaConduce DATE,
orden_cliente CHAR(20)
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
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
CONSTRUCT criterio ON a.ventas,A.sec_vend,
x.cod_n,x.cod_grupo,x.cod_tipo,x.cod_Sec
FROM pventas,kvendedor,
cod_n,cod_grupo,cod_tipo,cod_Sec
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 = 'N' 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,a.nombre_proyecto,CONVERT(CHAR(10),a.fecha_entrega,103),",
"'('+CAST(a.sec_vend AS CHAR(4)) +')'+RTRIM(c.nom1_emp) + ' '+ ",
"RTRIM(c.apell1_emp),a.total_bruto,a.monto_desc,a.sub_total,a.monto_itbi,",
"a.total_neto,d.descripcion,e.num_oc ",
"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 ",
" 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 ",
" a.sec_vend = f.sec_vend and f.usuario = '",usuarios,"' ",
" and a.ventas = d.ventas and ",criterio CLIPPED,
" ORDER BY d.descripcion,CONVERT(CHAR(10),a.fecha,103),a.cotizacion_no "
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,a.nombre_proyecto,CONVERT(CHAR(10),a.fecha_entrega,103),",
"'('+CAST(f.sec_vend AS CHAR(4)) +')'+RTRIM(c.nom1_emp) + ' '+ ",
"RTRIM(c.apell1_emp),a.total_bruto,a.monto_desc,a.sub_total,a.monto_itbi,",
"a.total_neto,d.descripcion,e.num_oc ",
"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 ",
"WHERE a.fecha between ? and ? and ",
"f.sec_vend = c.num_emp and ",
" a.tipo_cliente IS NOT NULL AND ",
" a.cotizacion_no = x.cotizacion_no and ",
" a.status_t IS NULL and ",
" a.cotizacion_no = f.cotizacion_no and ",
" a.ventas = d.ventas and ",criterio CLIPPED,
" ORDER BY d.descripcion,CONVERT(CHAR(10),a.fecha,103),a.cotizacion_no "
END IF
ELSE
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,a.nombre_proyecto,CONVERT(CHAR(10),a.fecha_entrega,103),",
"'('+CAST(a.sec_vend AS CHAR(4)) +')'+RTRIM(c.nom1_emp) + ' '+ ",
"RTRIM(c.apell1_emp),a.total_bruto,a.monto_desc,a.sub_total,a.monto_itbi,",
"a.total_neto,d.descripcion,e.num_oc ",
"FROM vetb00050 a,vetb00004 b,adtb00003 c,vetb00061 d,prtb00012 e,seg0007 f,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 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,a.nombre_proyecto,CONVERT(CHAR(10),a.fecha_entrega,103),",
"'('+CAST(f.sec_vend AS CHAR(4)) +')'+RTRIM(c.nom1_emp) + ' '+ ",
"RTRIM(c.apell1_emp),a.total_bruto,a.monto_desc,a.sub_total,a.monto_itbi,",
"a.total_neto,d.descripcion,e.num_oc ",
"FROM vetb00050 a,vetb00004 b,adtb00003 c,vetb00061 d,prtb00012 e,vetb00093 f,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 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
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
LET r_output='SVG'
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
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
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,
conduce INT,
fechaConduce DATE,
orden_cliente CHAR(20)
END RECORD,
vvendedor,total_general,tvbruto,tvdesc,tvitbis,ttbruto,ttdesc,ttitbis,sub_total,ttsub_total
DEC(12,2)
DEFINE hora CHAR(5)
ORDER BY x.vendedor,x.tipo_ventas
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.vendedor
LET vvendedor = 0
LET tvbruto =0
LET tvdesc = 0
LET tvitbis = 0
LET sub_total = 0
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.*, p_companias.nombre, hora,
fecha_inicial,fecha_final,vvendedor,total_general,
tvbruto,tvdesc,tvitbis,ttbruto,ttdesc,ttitbis,ttsub_total,sub_total,descripcion_rep
# AFTER GROUP OF x.vendedor
# LET vvendedor = GROUP SUM(x.valor_bruto)
# PRINTX vvendedor
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