Files
MBS/PROYECTOS/ipdir - 21102021/ipprrp058.4gl
T

468 lines
19 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : ipprrp058(Mensual)
OBJETIVO : PROCESO PARA LLENAR TABLA Y POSTERIORMENTE HACER PIVOT TABLE,
ESTE PROCESO SE EJECUTARA AUTOMATICAMENTE DE ACUERDO AL SCHEDULE QUE SE ESPECIFIQUE
PROGRAMADOR : Ing. Juan Francisco Soto
FECHA REALIZACION : Julio 4, 2005
MODIFICACDO POR : Ing. Juan Francisco Soto
FECHA : Julio 18, 2005
-------------------------------------------------------------------------------
}
GLOBALS "ipprgb000.4gl"
DEFINE pcosto_tp,pprima,ptasa_tp,precio,tasa_tp DECIMAL(8,4),
pidentifica,pnum_oc,tipo_valor,pmes,mesant INTEGER,
archivo,filename,sysos CHAR(120),
cels CHAR(20),
cnt,n,pano,dep_ant,n_row,ppresenta integer,
fecha_tp,fecha_lq1,fecha1,fecha2 DATE,
desc_pagos,tasa DEC(12,4),
pparametro,tipo_rp1 CHAR(1),
total_tp DEC(12,2),
ano_ant CHAR(1)
MAIN
DEFER INTERRUPT
#CALL pantalla()
CALL ipprrp058()
END MAIN
FUNCTION ipprrp058()
DEFINE producto RECORD LIKE analisis.*
{
factura INTEGER,
orden INTEGER,
fecha DATE,
sec_vend CHAR(40),
tipo_cliente SMALLINT,
sec_cliente INTEGER,
nombre CHAR(60),
cod_n LIKE iptb00002.cod_n,
cod_grupo LIKE iptb00002.cod_grupo,
cod_tipo LIKE iptb00002.cod_tipo,
cod_sec LIKE iptb00002.cod_sec,
codigo CHAR(25),
descrip_t LIKE iptb00021.descripcion,
grupo_local CHAR(30),
ptipo LIKE iptb00021.descripcion,
descrip_esp CHAR(60),
unidad_med LIKE intb00001.unidad_med,
ventas CHAR(1),
Zona_geografica CHAR(30),
pais CHAR(30),
tipo_negocio SMALLINT,
descripcion LIKE cctb00013.descripcion,
unidad_b INTEGER,
valor_b DEC(12,2),
cantidad_dev INTEGER,
precio_dev DEC(12,2),
unidad_boni INTEGER,
valor_boni DEC(12,2),
costo_real DEC(12,4),
costo_unid_b DEC(12,4),
costo_unid_n DEC(12,4),
costo_unid_n_us DEC(12,4),
costo_std DEC(12,4),
costo_std_b DEC(12,4),
costo_std_n DEC(12,4),
costo_tp DEC(12,4),
descuento DEC(12,2),
costo_tp1 DEC(12,4),
costo_tp2 DEC(12,4),
unidad_pres LIKE iptb00010.conversion,
unidad_n INTEGER,
ano SMALLINT,
mes SMALLINT,
tasa_tp DEC(10,3),
ventas_netas DEC(12,2),
valor_rd DEC(12,2),
valor_us DEC(12,2),
gastos_m_ind DEC(12,2),
gastos_d DEC(12,2),
gastos_directos DEC(12,2),
margen_b_rd DEC(12,2),
margen_b_US DEC(12,2),
margen_stp_rd DEC(12,2),
margen_stp_US DEC(12,2),
identifica INTEGER,
tipo_producto LIKE iptb00028.descripcion,
cantidad_boni INTEGER,
costo_boni DEC(12,2),
costo_s_tp DEC(12,4),
valor_tp DEC(12,2),
pcosto DEC(12,4),
descuento_p DEC(12,3),
kano SMALLINT,
kmes SMALLINT,
ptasa DEC(8,3),
costo DEC(12,4)
END RECORD},
codigo CHAR(10),
codigo_n integer,
nombre CHAR(50),
seleccion CHAR(200)
# WHENEVER ERROR CONTINUE
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
CLEAR SCREEN
{
OPEN FORM ipfmrp057 FROM "ipfmrp057"
DISPLAY FORM ipfmrp057
CALL pantalla()
DISPLAY "ipprrp057" AT 4,3
DISPLAY "DETERMINAR TP PRODUCTOS" AT 6,20
SELECT MAX(a.ano) INTO pano
FROM prdtable a
SELECT MAX(a.mes) INTO pmes FROM prdtable a
WHERE a.ano = pano AND
a.fecha_inicio <= TODAY
}
LET pano = 2007
DISPLAY "Actualizando campos en NULL... Espere Por Favor" AT 19,14
ATTRIBUTE (REVERSE,BOLD)
DISPLAY "Borrando data de ANALISIS ... Espere Por Favor" AT 19,14
DELETE FROM analisis WHERE fecha = today
DISPLAY "Insertando Ventas Locales... Espere Por Favor" AT 19,14
INSERT INTO analisis
SELECT b.cod_cia,' ', d.factura,d.orden,d.fecha_factura,m.nom1_emp,d.tipo_cliente,d.sec_cliente,j.nombre,b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,
B.nomenclatura,x1.producto,' ',' ',
b.descrip_esp,b.unidad_med, x3.descripcion,
x.descrip,y.nombre_provincia,'1','TIPO NEGOCIO',
f.cantidad,f.cantidad*f.precio,'0','0','0',
' ',
'0','0','0','0','0','0','0','0',(f.precio*f.cantidad_2)*(cantidad_2/100),'0','0','0','0',
p.ano,p.mes,'0','0','0','0','0','0','0','0','0','0','0'
FROM iptb00002 b,vetb00002 d,vetb00003 f,
vetb00004 j,prdtable p,adtb00003 m,vetb00008 x,OUTER vetb00020 y,OUTER vetb00009 z,vetb00059 x3,iptb00020 x1
WHERE
(b.cod_n = f.cod_n and b.cod_grupo = f.cod_grupo and b.cod_tipo = f.cod_tipo and
b.cod_sec = f.cod_sec) AND
p.ano = pano AND# p.mes = pmes AND
x1.cod_n = b.cod_n AND
j.cod_zona = x.cod_zona AND
j.cod_provincia = y.cod_provincia AND
j.cod_zona = z.cod_zona AND
j.cod_provincia = z.cod_provincia AND
d.sec_vend = m.num_emp AND
d.fecha_factura between p.fecha_inicio AND p.fecha_corte AND d.factura = f.factura AND
d.tipo_cliente = j.tipo_cliente and
d.sec_cliente = j.sec_cliente and
d.ventas = x3.ventas AND
f.status_t IS NULL AND
(b.cod_n = f.cod_n and b.cod_grupo = f.cod_grupo and b.cod_tipo = f.cod_tipo and
b.cod_sec = f.cod_sec) AND
d.status_t IS NULL
{VERSION RAYOVAC
SELECT d.factura,d.orden,d.fecha_factura,m.nom1_emp,d.tipo_cliente,d.sec_cliente,j.nombre,b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,
x2.nomenclatura,x1.descripcion,x4.descripcion,e.descripcion,
b.descrip_esp,b.unidad_med, x3.descripcion,
x.descrip,y.nombre_provincia,c.tipo_negocio,h.descripcion,
f.cantidad,f.cantidad*f.precio,'0','0',f.bonificacion*i.cantidad,
f.bonificacion*i.cantidad*f.precio,
'0','0','0','0','0','0','0','0',(f.cantidad-(i.cantidad*f.bonificacion))*f.precio*f.cantidad_2/100,'0','0','0','0',
p.ano,p.mes,'0','0','0','0','0','0','0','0','0','0','0'
FROM iptb00022 a,iptb00021 e,intb00001 b,vetb00002 d,vetb00003 f,
cctb00012 c,cctb00013 h ,vetb00014 i,vetb00004 j,prdtable p,adtb00003 m,vetb00008 x,vetb00020 y,vetb00009 z,
iptb00028 x1,iptb00002 x2,vetb00059 x3,cotb00051 x4
WHERE
(a.cod_n = f.cod_n and a.cod_grupo = f.cod_grupo and a.cod_tipo = f.cod_tipo and
a.cod_sec = f.cod_sec) AND
(a.cod_n = i.cod_n and a.cod_grupo = i.cod_grupo and a.cod_tipo = i.cod_tipo and
a.cod_sec = i.cod_sec) AND
(a.cod_n = x2.cod_n and a.cod_grupo = x2.cod_grupo and a.cod_tipo = x2.cod_tipo and
a.cod_sec = x2.cod_sec) AND
x2.codigo = x4.codigo AND
a.cod_tamano = e.cod_tamano AND
a.pcod_grupo = x1.cod_grupo AND
p.ano = pano AND d.fecha_factura = TODAY AND
j.cod_zona = x.cod_zona AND
j.cod_provincia = y.cod_provincia AND
j.cod_zona = z.cod_zona AND
j.cod_provincia = z.cod_provincia AND
d.sec_vend = m.num_emp AND
d.fecha_factura between p.fecha_inicio AND p.fecha_corte AND d.factura = f.factura AND
d.tipo_cliente = c.tipo_cliente and
d.sec_cliente = c.sec_cliente and
d.tipo_cliente = j.tipo_cliente and
d.sec_cliente = j.sec_cliente and
c.tipo_negocio = h.tipo_negocio and
d.ventas = x3.ventas AND
f.status_t IS NULL AND
h.status_t IS NULL AND
(b.cod_n = f.cod_n and b.cod_grupo = f.cod_grupo and b.cod_tipo = f.cod_tipo and
b.cod_sec = f.cod_sec) AND
d.status_t IS NULL AND d.us_crea = f.us_crea and
b.status_t is NULL AND f.fech_crea > datetime (2005-09-30 08:00) year to minute
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
DISPLAY "Insertando Devoluciones ... Espere Por Favor" AT 19,14
ATTRIBUTE (REVERSE,BOLD)
INSERT INTO analisis
SELECT k.factura,f.fecha,m.nom1_emp,f.tipo_cliente,f.sec_cliente,j.nombre,b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec,
x2.nomenclatura,x1.descripcion,x4.descripcion,e.descripcion,
b.descrip_esp,b.unidad_med, 'DOMINICANA',
x.descrip,y.nombre_provincia,c.tipo_negocio,h.descripcion, '0','0',
f.cantidad,f.cantidad*k.precio,'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0',
n.ano,n.mes,'0','0','0','0','0','0','0','0','0','0','0'
FROM iptb00022 a,iptb00021 e,intb00001 b,iptb00023 f,
cctb00012 c,cctb00013 h ,vetb00003 k,vetb00004 j,prdtable n,adtb00003 m,vetb00008 x,vetb00020 y,vetb00009 z,
iptb00028 x1,iptb00002 x2,cotb00051 x4
WHERE
(a.cod_n = f.cod_n and a.cod_grupo = f.cod_grupo and a.cod_tipo = f.cod_tipo and
a.cod_sec = f.cod_sec) AND
(a.cod_n = x2.cod_n and a.cod_grupo = x2.cod_grupo and a.cod_tipo = x2.cod_tipo and
a.cod_sec = x2.cod_sec) AND
a.cod_tamano = e.cod_tamano AND
a.pcod_grupo = x1.cod_grupo AND
x2.codigo = x4.codigo AND
f.fecha between n.fecha_inicio AND n.fecha_corte AND
n.ano = pano AND f.fecha = TODAY AND
f.tipo_cliente = c.tipo_cliente and
f.sec_cliente = c.sec_cliente and
f.tipo_cliente = j.tipo_cliente and
f.sec_cliente = j.sec_cliente and
c.tipo_negocio = h.tipo_negocio and
f.sec_vend = m.num_emp AND
x.cod_zona = j.cod_zona AND
y.cod_provincia = j.cod_provincia AND
x.cod_zona = z.cod_zona AND
y.cod_provincia = z.cod_provincia AND
f.status_t IS NULL AND
h.status_t IS NULL AND
(a.cod_n = k.cod_n and a.cod_grupo = k.cod_grupo and a.cod_tipo = k.cod_tipo and
a.cod_sec = k.cod_sec) AND
(f.factura = k.factura) and
(b.cod_n = f.cod_n and b.cod_grupo = f.cod_grupo and b.cod_tipo = f.cod_tipo and
b.cod_sec = f.cod_sec) AND
b.status_t is NULL
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
DISPLAY "Insertando Ventas EXTERIOR... Espere Por Favor" AT 19,14
ATTRIBUTE (REVERSE,BOLD)
# VENTAS EXTERIOR
INSERT INTO analisis
SELECT k.factura,k.fecha_factura,m.nom1_emp,k.tipo_cliente,k.sec_cliente,j.nombre,'0','0','0','0',
a.codigo,X1.descripcion,b.descripcion,g.descripcion,a.descripcion,d.unidad_med,'CARIBBEAN',x.descrip,
y.nombre_provincia,c.tipo_negocio,
h.descripcion,f.cant_emb,f.cant_emb*f.precio, '0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0',
n.ano,n.mes,'0','0','0','0','0','0','0','0','0','0','0'
FROM cotb00052 a,cotb00051 b,cotb00073 d,cotb00056 f,cotb00057 k,
cctb00012 c,cctb00013 h, iptb00002 p,vetb00004 j,prdtable n,adtb00003 m,vetb00008 x,vetb00020 y,vetb00009 z,
iptb00022 e, iptb00021 g,IPTB00028 X1
WHERE
a.codigo = f.codigo and f.factura = k.factura AND
a.tipo = b.codigo AND k.num_emp = m.num_emp AND
k.fecha_factura between n.fecha_inicio AND n.fecha_corte AND
n.ano = pano AND k.fecha_factura = TODAY AND
f.codigo = p.nomenclatura AND
a.codigo = p.nomenclatura AND
d.codigo = p.nomenclatura AND
p.cod_n = e.cod_n AND
p.cod_grupo = e.cod_grupo AND
p.cod_tipo = e.cod_tipo AND
p.cod_sec = e.cod_sec AND
e.cod_tamano = g.cod_tamano AND
e.pcod_grupo = x1.cod_grupo AND
x.cod_zona = j.cod_zona AND
y.cod_provincia = j.cod_provincia AND
x.cod_zona = z.cod_zona AND x.cod_zona !=100 AND
y.cod_provincia = z.cod_provincia AND
k.tipo_cliente = c.tipo_cliente and
k.sec_cliente = c.sec_cliente and
k.tipo_cliente = j.tipo_cliente and
k.sec_cliente = j.sec_cliente and
c.tipo_negocio = h.tipo_negocio and
f.status_t IS NULL AND
h.status_t IS NULL
# VENTAS HAITI
INSERT INTO analisis
SELECT k.factura,k.fecha_factura,m.nom1_emp,k.tipo_cliente,k.sec_cliente,j.nombre,'0','0','0','0',
a.codigo,X1.descripcion,b.descripcion,g.descripcion,a.descripcion,d.unidad_med,'HAITI',x.descrip,
y.nombre_provincia,c.tipo_negocio,
h.descripcion,f.cant_emb,f.cant_emb*f.precio, '0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0',
n.ano,n.mes,'0','0','0','0','0','0','0','0','0','0','0'
FROM cotb00052 a,cotb00051 b,cotb00073 d,cotb00056 f,cotb00057 k,
cctb00012 c,cctb00013 h, iptb00002 p,vetb00004 j,prdtable n,adtb00003 m,vetb00008 x,vetb00020 y,vetb00009 z,
iptb00022 e, iptb00021 g,IPTB00028 X1
WHERE
a.codigo = f.codigo and f.factura = k.factura AND
a.tipo = b.codigo AND k.num_emp = m.num_emp AND
k.fecha_factura between n.fecha_inicio AND n.fecha_corte AND
n.ano = pano AND k.fecha_factura = TODAY AND
f.codigo = p.nomenclatura AND
a.codigo = p.nomenclatura AND
d.codigo = p.nomenclatura AND
p.cod_n = e.cod_n AND
p.cod_grupo = e.cod_grupo AND
p.cod_tipo = e.cod_tipo AND
p.cod_sec = e.cod_sec AND
e.cod_tamano = g.cod_tamano AND
e.pcod_grupo = x1.cod_grupo AND
x.cod_zona = j.cod_zona AND
y.cod_provincia = j.cod_provincia AND
x.cod_zona = z.cod_zona AND x.cod_zona = 100 AND # PARA IDENTIFICAR HAITI
y.cod_provincia = z.cod_provincia AND
k.tipo_cliente = c.tipo_cliente and
k.sec_cliente = c.sec_cliente and
k.tipo_cliente = j.tipo_cliente and
k.sec_cliente = j.sec_cliente and
c.tipo_negocio = h.tipo_negocio and
f.status_t IS NULL AND
h.status_t IS NULL
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
}
# BUSCA EL MONTO DEL TP GLOBAL
DISPLAY "Buscando informacion para costo ... Espere Por Favor" AT 19,14
ATTRIBUTE (REVERSE,BOLD)
LET seleccion =
"SELECT a.*,a.rowid FROM analisis a WHERE a.ano = ? "
PREPARE comando FROM seleccion
DECLARE accion SCROLL CURSOR FOR comando
OPEN accion USING pano
LET cnt = 9
LET mesant = 0
FOREACH accion INTO producto.*,pidentifica
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET codigo = producto.cod_n USING "&","-",
producto.cod_grupo using "&","-",
producto.cod_tipo using "&&","-",
producto.cod_sec using "&&&"
# BUSCA COSTO REAL
LET producto.costo_real = 0
LET fecha_lq1 = NULL
SELECT MAX(fecha_lq) INTO fecha_lq1
FROM cttb00013 a,prdtable b
WHERE a.cod_n = producto.cod_n AND
a.cod_grupo = producto.cod_grupo AND
a.cod_tipo = producto.cod_tipo AND
a.cod_sec = producto.cod_sec AND
b.ano = pano AND
b.mes = producto.mes AND
a.tipo_lq != "T" AND
a.fecha_lq <= b.fecha_corte
SELECT AVG(a.costo_lq) INTO producto.costo_real
FROM cttb00013 a
WHERE a.cod_n = producto.cod_n AND
a.cod_grupo = producto.cod_grupo AND
a.cod_tipo = producto.cod_tipo AND
a.cod_sec = producto.cod_sec AND
a.tipo_lq != "T" AND
a.fecha_lq = fecha_lq1
#-------------------------------------------------------------------------------------------
# COSTO STANDARD
#-------------------------------------------------------------------------------------------
LET producto.costo_std = 0
SELECT AVG(a.material+a.labor+a.gastos) INTO producto.costo_std
FROM iptb00004 a
WHERE a.mes_fin = 12 AND
a.cod_n = producto.cod_n AND
a.cod_grupo = producto.cod_grupo AND
a.cod_tipo = producto.cod_tipo AND
a.cod_sec = producto.cod_sec AND
a.ano = pano AND a.status_t is null
IF producto.costo_std IS NULL THEN
LET producto.costo_std = 0
END IF
# BUSCA TRANSFER PRICE
IF producto.costo_real is null THEN
LET producto.costo_real = 0
END IF
LET producto.ventas_netas = producto.valor_bruto - producto.valor_devuelto - producto.valor_bonfica - producto.descuento
IF producto.cod_cia = 1 THEN
LET producto.origen_producto = "LOCAL"
ELSE
LET producto.origen_producto = "EXPORTACION"
END IF
display "COD CIA ",producto.cod_cia," ",producto.origen_producto
UPDATE analisis set analisis.costo_real = producto.costo_real,
analisis.origen_producto = producto.origen_producto,
analisis.costo_unid_b = producto.costo_real*producto.unidades_brutas,
analisis.costo_real = producto.costo_real,
analisis.costo_std = producto.costo_std,
analisis.costo_std_b = producto.costo_std*producto.unidades_brutas,
analisis.costo_std_n = producto.costo_std*producto.unidades_brutas,
analisis.ventas_netas = producto.ventas_netas - producto.descuento
WHERE rowid = pidentifica
END FOREACH
END FUNCTION