Files
MBS/PROYECTO/lqdir/lqprmt001.4gl
T

1289 lines
47 KiB
Plaintext

{
------------------------------------------------------------------------------
PROGRAMA : LQPRMT001
OBJETIVO : Darle mantenimiento a los datos de liquidacion de Materiales
PROGRAMADOR : Ing. Juan F. Soto
FECHA : Marzo 23, 1994.
-----------------------------------------------------------------------------
}
GLOBALS "lqprgb000.4gl"
DEFINE repuestos, opt_el, piezas_r, piezas_h, led_1, mat_prima, prod_term
CHAR(1)
DEFINE selec_it, select_1 CHAR(1000)
DEFINE
total_cantidad, total_fob, total_impuesto, total_gastos, total_flete
DECIMAL(12, 2),
factor_imp, factor_ga, factor_flete, monto_ret, monto_ad DEC(12, 4),
num_doc_ret INT
DEFINE pcodn, pcodg, pcodt, pcods SMALLINT
DEFINE p_liquida RECORD
tipo SMALLINT,
num_oc INTEGER,
fecha DATE,
rep_entrada INTEGER,
bodega SMALLINT,
cod_sp SMALLINT,
cod_sp_sec SMALLINT,
nombre_sp CHAR(30),
factura CHAR(12),
prima_us DECIMAL(8, 2),
s_liqui CHAR(12),
s_cerrada CHAR(12),
s_pagada CHAR(12),
usa_calculo CHAR(10),
timpuestos DEC(12, 2),
tgastos DEC(12, 2),
tflete DEC(12, 2)
END RECORD
DEFINE p_arr_liq DYNAMIC ARRAY OF RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descripcion CHAR(100),
cantidad_oc DECIMAL(12, 5),
fob DECIMAL(12, 4),
valor_fob DEC(12, 2),
costo_flete DECIMAL(12, 4),
impuesto DECIMAL(12, 2),
otros_g DECIMAL(12, 2),
bodega SMALLINT
END RECORD
DEFINE
arr_liq DYNAMIC ARRAY OF RECORD
codigo CHAR(80),
descripcion CHAR(100),
cantidad_oc DECIMAL(12, 5),
fob DECIMAL(12, 4),
costo_flete DECIMAL(12, 2),
valor_fob DEC(12, 2),
impuesto DECIMAL(12, 2),
otros_g DECIMAL(12, 2),
bodega SMALLINT
END RECORD,
unidad CHAR(3)
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT TO "smarmotech" AS "MSSQL" USER usuarios USING clave
CALL lqprmt001()
END MAIN
FUNCTION lqprmt001()
OPTIONS ERROR LINE 24, FORM LINE 9, COMMENT LINE 23, PROMPT LINE 22
OPEN FORM lqfmmt001 FROM "lqfmmt001"
DISPLAY FORM lqfmmt001
DISPLAY "lqprmt001" AT 4, 3
MENU
ON ACTION nuevo
LET int_flag = FALSE
CALL arr_liq.clear()
CALL lqprad07()
ON ACTION buscar
CALL arr_liq.clear()
LET int_flag = FALSE
CALL lqprmod07()
ON ACTION salir
EXIT MENU
END MENU
END FUNCTION
# Funcion para adicionar las ordenes con fletes y fob
FUNCTION lqprad07()
INITIALIZE p_liquida.* TO NULL
LABEL vuelve:
INPUT BY NAME p_liquida.*, num_doc_ret ATTRIBUTE(BOLD)
BEFORE INPUT
LET int_flag = FALSE
CALL busca_liquidacion()
RETURNING p_liquida.tipo,
p_liquida.num_oc,
p_liquida.rep_entrada,
p_liquida.cod_sp,
p_liquida.cod_sp_sec,
p_liquida.nombre_sp,
p_liquida.bodega,
p_liquida.fecha
DISPLAY BY NAME p_liquida.tipo,
p_liquida.num_oc,
p_liquida.cod_sp,
p_liquida.cod_sp_sec,
p_liquida.nombre_sp,
p_liquida.rep_entrada,
p_liquida.bodega,
p_liquida.fecha
ON ACTION buscar_entradas
ATTRIBUTES(TEXT = "Buscar Entradas", IMAGE = "find")
IF INFIELD(rep_entrada) THEN
CALL busca_entradas()
DISPLAY BY NAME p_liquida.rep_entrada, p_liquida.bodega
END IF
AFTER FIELD fecha
IF p_liquida.fecha IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha
END IF
LET p_fechas = p_liquida.fecha
CALL prd(p_fechas, usuarios) RETURNING bandera
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
AFTER FIELD num_oc
IF p_liquida.num_oc IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_oc
END IF
LET total_flete = 0
SELECT a.cod_sp, a.cod_sp_sec, b.nom_sp
INTO p_liquida.cod_sp, p_liquida.cod_sp_sec, p_liquida.nombre_sp
FROM cotb00001 b, cotb00014 a
WHERE a.tipo = p_liquida.tipo
AND a.num_oc = p_liquida.num_oc
AND a.cod_sp = b.cod_sp
AND a.cod_sp_sec = b.cod_sp_sec
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num_oc
END IF
DISPLAY BY NAME p_liquida.*
# Chequo del status de la orden:liquidada,cerrada,pagada
SELECT cierre
INTO led_1
FROM cotb00014
WHERE num_oc = p_liquida.num_oc AND tipo = p_liquida.tipo
IF led_1 = "S" THEN
LET p_liquida.s_cerrada = "CERRADA"
ELSE
LET p_liquida.s_cerrada = "NO CERRADA"
END IF
LET bandera = 0
LET prod_term = "N"
LET mat_prima = "N"
LET repuestos = "N"
CASE
WHEN p_liquida.tipo = "01"
LET prod_term = "N"
LET mat_prima = "S"
LET repuestos = "N"
SELECT MAX(a.num_doc), fecha,bodega
INTO p_liquida.rep_entrada, p_liquida.fecha,p_liquida.bodega
FROM intb00006 a
WHERE a.orden_compra = p_liquida.num_oc
AND status_t IS NULL
GROUP BY fecha,bodega
DISPLAY BY NAME p_liquida.rep_entrada, p_liquida.fecha, p_liquida.bodega
EXIT CASE
WHEN p_liquida.tipo = "02"
LET prod_term = "S"
LET mat_prima = "N"
LET repuestos = "N"
SELECT MAX(a.num_doc), fecha,bodega
INTO p_liquida.rep_entrada, p_liquida.fecha,p_liquida.bodega
FROM iptb00006 a
WHERE a.orden_compra = p_liquida.num_oc
AND status_t IS NULL
GROUP BY fecha,bodega
DISPLAY BY NAME p_liquida.rep_entrada, p_liquida.fecha, p_liquida.bodega
EXIT CASE
WHEN p_liquida.tipo = "03"
LET prod_term = "N"
LET mat_prima = "N"
LET repuestos = "S"
SELECT MAX(a.num_doc), fecha, bodega
INTO p_liquida.rep_entrada, p_liquida.fecha, p_liquida.bodega
FROM irtb00006 a
WHERE a.orden_compra = p_liquida.num_oc
AND status_t IS NULL
AND cod_mov IN (35,34)
GROUP BY fecha,bodega
DISPLAY BY NAME p_liquida.rep_entrada, p_liquida.fecha, p_liquida.bodega
EXIT CASE
END CASE
# Chequea que el reporte de entrada este en almacen
AFTER FIELD num_doc_ret
IF num_doc_ret IS NOT NULL THEN
SELECT UNIQUE SUM(a.valor)
INTO monto_ret
FROM cotb00045 a
WHERE a.num_doc_ret = num_doc_ret
SELECT SUM(a.valor)
INTO monto_ad
FROM cotb00045 a
WHERE a.num_doc_ret = num_doc_ret AND a.operacion = 9
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num_doc_ret
END IF
LET p_liquida.tgastos = monto_ret - monto_ad
LET p_liquida.timpuestos = monto_ad
END IF
AFTER FIELD rep_entrada
IF p_liquida.rep_entrada IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD rep_entrada
END IF
# Chequea Que la Orden Este Liquidada
SELECT UNIQUE a.num_oc
FROM cgtb00017 a
WHERE a.num_oc = p_liquida.num_oc
AND a.tipo = p_liquida.tipo
AND a.rep_entrada = p_liquida.rep_entrada
IF status != NOTFOUND THEN
LET numero_msg = 12
CALL msg(numero_msg)
NEXT FIELD num_oc
END IF
# Busqueda en la tabla de MATERIA PRIMA
IF mat_prima = "S" THEN
SELECT UNIQUE num_doc
FROM intb00006
WHERE (num_doc = p_liquida.rep_entrada)
AND (cod_mov IN (34, 35, 47))
AND (tipo = p_liquida.tipo
AND orden_compra = p_liquida.num_oc)
AND status_t IS NULL
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD rep_entrada
END IF
END IF
# Busqueda en la tabla de PRODUCTOS TERMINADOS
IF prod_term = "S" THEN
DISPLAY prod_term
SELECT UNIQUE a.num_doc
FROM iptb00006 a
WHERE a.num_doc = p_liquida.rep_entrada AND a.cod_mov = 10
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD rep_entrada
END IF
END IF
# Busqueda en la tabla de REPUESTOS
IF repuestos = "S" THEN
SELECT UNIQUE a.num_doc
FROM irtb00006 a
WHERE a.num_doc = p_liquida.rep_entrada
AND a.cod_mov IN (34, 35, 47)
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD rep_entrada
END IF
END IF
BEFORE FIELD prima_us
SELECT a.prima
INTO p_liquida.prima_us
FROM vetb00019 a
WHERE a.disponible = 'S'
DISPLAY BY NAME p_liquida.prima_us
AFTER FIELD prima_us
IF p_liquida.prima_us IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD prima_us
END IF
IF p_liquida.prima_us = 0 THEN
LET p_liquida.s_liqui = "L"
ELSE
LET p_liquida.s_liqui = "E"
END IF
AFTER FIELD factura
IF p_liquida.factura IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD factura
END IF
{
# Busca factura en el modulo de cuentas por pagar
SELECT unique num_doc FROM cptb00001
WHERE num_doc = p_liquida.factura and tipo_doc = "FT" AND
cod_sp = p_liquida.cod_sp and cod_sp_sec = p_liquida.cod_sp_sec
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD factura
END IF
# Chequea si la factura esta pagada
SELECT sum(valor) INTO p_valor FROM cptb00001
WHERE aplica_a = p_liquida.factura and cod_sp = p_liquida.cod_sp and
cod_sp_sec = p_liquida.cod_sp_sec
IF p_valor > 0 THEN
LET p_liquida.s_pagada = "NO PAGADA"
ELSE
LET p_liquida.s_pagada = "PAGADA"
END IF
IF p_valor is null or p_valor < 0 THEN
LET p_liquida.s_pagada = null
END IF}
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
# RETURN
END IF
SELECT a.cod_bodega
FROM intb00009 a
WHERE a.cod_bodega = p_liquida.bodega
IF STATUS = NOTFOUND THEN
CALL msg(3)
NEXT FIELD bodega
END IF
CALL integridad()
DISPLAY BY NAME p_liquida.* ATTRIBUTE(BOLD)
EXIT INPUT
END INPUT
CALL arr_liq.clear()
# Busqueda de los codigos de la orden
DISPLAY " " AT 24, 1
DISPLAY "Buscando ITEMS para liquidar... Espere" AT 24, 1 ATTRIBUTE(BOLD)
# Busqueda de los datos de la tabla de materia prima
LET totaL_cantidad = 0
LET total_fob = 0
LET factor_ga = 0
LET factor_imp = 0
LET factor_flete = 0
LET total_impuesto = 0
LET total_gastos = 0
LET total_flete = 0
IF p_liquida.tipo = "01" THEN
# BUSCA EL TOTAL de la recepcion de la mercancia
SELECT SUM(c.cantidad_2), SUM(c.cantidad_2 * a.precio)
INTO total_cantidad, total_fob
FROM cotb00015 a, intb00001 b, intb00006 c
WHERE a.tipo = p_liquida.tipo
AND a.num_oc = p_liquida.num_oc
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 = c.cod_sec
AND a.cod_n = c.cod_n
AND a.cod_grupo = c.cod_grupo
AND a.cod_tipo = c.cod_tipo
AND a.cod_sec = b.cod_sec
AND c.num_doc = p_liquida.rep_entrada
AND a.num_oc = c.orden_compra
AND c.cod_mov IN (34, 35, 47)
LET factor_ga = p_liquida.tgastos / total_fob
LET factor_imp = p_liquida.timpuestos / total_fob
LET factor_flete = p_liquida.tflete / total_fob
LET total_fob = 0
DECLARE busca CURSOR FOR
SELECT a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
b.descrip_esp,
c.cantidad_2,
a.precio,
c.cantidad_2 * a.precio,
'1'
FROM cotb00015 a, intb00001 b, intb00006 c
WHERE a.tipo = p_liquida.tipo
AND a.num_oc = p_liquida.num_oc
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 = c.cod_sec
AND a.cod_n = c.cod_n
AND a.cod_grupo = c.cod_grupo
AND a.cod_tipo = c.cod_tipo
AND a.cod_sec = b.cod_sec
AND c.num_doc = p_liquida.rep_entrada
AND a.num_oc = c.orden_compra
AND c.cod_mov IN (34, 35, 47)
ORDER BY a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec
LET idx = 1
FOREACH busca INTO p_arr_liq[idx].*
LET arr_liq[idx].codigo =
p_arr_liq[idx].cod_n USING "&&&&",
"-",
p_arr_liq[idx].cod_grupo USING "&&&&",
"-",
p_arr_liq[idx].cod_tipo USING "&&&&",
"-",
p_arr_liq[idx].cod_sec USING "&&&&&&&&"
LET arr_liq[idx].descripcion = p_arr_liq[idx].descripcion
LET arr_liq[idx].cantidad_oc = p_arr_liq[idx].cantidad_oc
LET arr_liq[idx].fob = p_arr_liq[idx].fob
LET arr_liq[idx].valor_fob =
arr_liq[idx].cantidad_oc * arr_liq[idx].fob
LET arr_liq[idx].impuesto = factor_imp * arr_liq[idx].valor_fob
LET arr_liq[idx].otros_g = factor_ga * arr_liq[idx].valor_fob
LET arr_liq[idx].costo_flete = factor_flete * arr_liq[idx].valor_fob
LET total_flete = arr_liq[idx].costo_flete + total_Flete
LET total_impuesto = arr_liq[idx].impuesto + total_impuesto
LET total_gastos = arr_liq[idx].otros_g + total_gastos
LET total_fob = arr_liq[idx].valor_fob + total_fob
LET idx = idx + 1
END FOREACH
END IF
# Busqueda de los datos de la tabla de productos terminados
IF p_liquida.tipo = "02" THEN
SELECT SUM(c.cantidad_2), SUM(c.cantidad_2 * a.precio)
INTO total_cantidad, total_fob
FROM cotb00015 a, iptb00002 b, iptb00006 c
WHERE a.tipo = p_liquida.tipo
AND a.num_oc = p_liquida.num_oc
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
AND b.cod_n = c.cod_n
AND b.cod_grupo = c.cod_grupo
AND b.cod_tipo = c.cod_tipo
AND b.cod_sec = c.cod_sec
AND c.num_doc = p_liquida.rep_entrada
AND a.num_oc = c.orden_compra
LET factor_ga = p_liquida.tgastos / total_fob
LET factor_imp = p_liquida.timpuestos / total_fob
LET factor_flete = p_liquida.tflete / total_fob
DECLARE busca1 CURSOR FOR
SELECT a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
b.descrip_esp,
c.cantidad_2,
a.precio,
c.cantidad_2 * a.precio,
c.bodega
FROM cotb00015 a, iptb00002 b, iptb00006 c
WHERE a.tipo = p_liquida.tipo
AND a.num_oc = p_liquida.num_oc
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
AND b.cod_n = c.cod_n
AND b.cod_grupo = c.cod_grupo
AND b.cod_tipo = c.cod_tipo
AND b.cod_sec = c.cod_sec
AND c.num_doc = p_liquida.rep_entrada
AND a.num_oc = c.orden_compra
#ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec
LET idx = 1
LET total_fob = 0
FOREACH busca1 INTO p_arr_liq[idx].*
LET arr_liq[idx].codigo =
p_arr_liq[idx].cod_n USING "&&&&",
"-",
p_arr_liq[idx].cod_grupo USING "&&&&",
"-",
p_arr_liq[idx].cod_tipo USING "&&&&",
"-",
p_arr_liq[idx].cod_sec USING "&&&&&&&&"
DISPLAY "codigo ", arr_liq[idx].codigo
LET arr_liq[idx].descripcion = p_arr_liq[idx].descripcion
LET arr_liq[idx].cantidad_oc = p_arr_liq[idx].cantidad_oc
LET arr_liq[idx].fob = p_arr_liq[idx].fob
LET arr_liq[idx].valor_fob =
arr_liq[idx].cantidad_oc * arr_liq[idx].fob
LET arr_liq[idx].impuesto = factor_imp * arr_liq[idx].valor_fob
LET arr_liq[idx].otros_g = factor_ga * arr_liq[idx].valor_fob
LET arr_liq[idx].costo_flete = factor_flete * arr_liq[idx].valor_fob
LET total_flete = arr_liq[idx].costo_flete + total_Flete
LET total_impuesto = arr_liq[idx].impuesto + total_impuesto
LET total_gastos = arr_liq[idx].otros_g + total_gastos
LET total_fob = arr_liq[idx].valor_fob + total_fob
LET idx = idx + 1
END FOREACH
END IF
# Busqueda de los datos de la tabla de REPUESTOS
IF p_liquida.tipo = "03" THEN
SELECT SUM(c.cantidad_2), SUM(c.cantidad_2 * a.precio)
INTO total_cantidad, total_fob
FROM cotb00015 a, irtb00002 b, irtb00006 c, cotb00014 d
WHERE a.tipo = p_liquida.tipo
AND a.num_oc = p_liquida.num_oc
AND a.tipo = d.tipo
AND a.num_oc = d.num_oc
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
AND b.cod_n = c.cod_n
AND b.cod_grupo = c.cod_grupo
AND b.cod_tipo = c.cod_tipo
AND b.cod_sec = c.cod_sec
AND c.num_doc = p_liquida.rep_entrada
AND a.num_oc = c.orden_compra
LET factor_ga = p_liquida.tgastos / total_fob
LET factor_imp = p_liquida.timpuestos / total_fob
LET factor_flete = p_liquida.tflete / total_fob
LET total_fob = 0
DECLARE busca3 CURSOR FOR
SELECT a.cod_n,
a.cod_grupo,
a.cod_tipo,
a.cod_sec,
b.descrip_esp,
c.cantidad_2,
a.precio,
c.cantidad_2 * a.precio,
'1'
FROM cotb00015 a, irtb00002 b, irtb00006 c
WHERE a.tipo = p_liquida.tipo
AND a.num_oc = p_liquida.num_oc
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
AND b.cod_n = c.cod_n
AND b.cod_grupo = c.cod_grupo
AND b.cod_tipo = c.cod_tipo
AND b.cod_sec = c.cod_sec
AND c.num_doc = p_liquida.rep_entrada
AND a.num_oc = c.orden_compra
# ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec
LET idx = 1
FOREACH busca3 INTO p_arr_liq[idx].*
LET arr_liq[idx].codigo =
p_arr_liq[idx].cod_n USING "&&&&",
"-",
p_arr_liq[idx].cod_grupo USING "&&&&",
"-",
p_arr_liq[idx].cod_tipo USING "&&&&",
"-",
p_arr_liq[idx].cod_sec USING "&&&&&&"
LET arr_liq[idx].descripcion = p_arr_liq[idx].descripcion
LET arr_liq[idx].cantidad_oc = p_arr_liq[idx].cantidad_oc
LET arr_liq[idx].fob = p_arr_liq[idx].fob
LET arr_liq[idx].valor_fob =
arr_liq[idx].cantidad_oc * arr_liq[idx].fob
LET arr_liq[idx].impuesto = factor_imp * arr_liq[idx].valor_fob
LET arr_liq[idx].otros_g = factor_ga * arr_liq[idx].valor_fob
LET arr_liq[idx].costo_flete = factor_flete * arr_liq[idx].valor_fob
LET total_flete = arr_liq[idx].costo_flete + total_Flete
LET total_fob = arr_liq[idx].valor_fob + total_fob
LET total_impuesto = arr_liq[idx].impuesto + total_impuesto
LET total_gastos = arr_liq[idx].otros_g + total_gastos
LET idx = idx + 1
END FOREACH
END IF
DISPLAY BY NAME total_impuesto, total_gastos, total_flete, total_fob
CALL set_count(idx - 1)
INPUT ARRAY arr_liq WITHOUT DEFAULTS FROM s_lq.*
BEFORE ROW
LET curr = arr_curr()
LET scr_l = scr_line()
LET pcodn = arr_liq[curr].codigo[1, 2]
LET pcodg = arr_liq[curr].codigo[4, 6]
LET pcodt = arr_liq[curr].codigo[8, 11]
LET pcods = arr_liq[curr].codigo[13, 16]
AFTER FIELD fob
IF arr_liq[curr].cantidad_oc IS NOT NULL THEN
LET arr_liq[curr].valor_fob =
arr_liq[curr].cantidad_oc * arr_liq[curr].fob
END IF
DISPLAY arr_liq[curr].valor_fob TO s_lq[scr_l].valor_fob
AFTER FIELD costo_flete
IF arr_liq[curr].codigo IS NOT NULL THEN
IF arr_liq[curr].costo_flete IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD costo_flete
END IF
END IF
AFTER ROW
LET total_impuesto = 0
LET total_gastos = 0
FOR idx = 1 TO arr_liq.getLength()
LET total_impuesto = arr_liq[idx].impuesto + total_impuesto
LET total_gastos = arr_liq[idx].otros_g + total_gastos
END FOR
DISPLAY BY NAME total_impuesto, total_gastos
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET total_impuesto = 0
LET total_gastos = 0
LET total_fob = 0
FOR idx = 1 TO arr_liq.getLength()
LET total_impuesto = arr_liq[idx].impuesto + total_impuesto
LET total_gastos = arr_liq[idx].otros_g + total_gastos
LET total_fob = total_fob + arr_liq[idx].valor_fob
END FOR
DISPLAY BY NAME total_impuesto, total_gastos, total_fob
EXIT INPUT
END INPUT
BEGIN WORK
# Inserta Registros en la tabla 17 de contabilidad
INSERT INTO cgtb00017(
tipo,
num_oc,
fecha,
liquidada,
cerrada,
pagada,
rep_entrada,
factura,
prima_us,
cod_sp,
cod_sp_sec,
timpuestos,
tgastos,
tflete,
usa_calculo,
us_crea,
fech_crea,
num_doc_ret,
bodega)
VALUES(p_liquida.tipo,
p_liquida.num_oc,
p_liquida.fecha,
p_liquida.s_liqui,
p_liquida.s_cerrada,
p_liquida.s_pagada,
p_liquida.rep_entrada,
p_liquida.factura,
p_liquida.prima_us,
p_liquida.cod_sp,
p_liquida.cod_sp_sec,
p_liquida.timpuestos,
p_liquida.tgastos,
p_liquida.tflete,
p_liquida.usa_calculo,
SUSER_SNAME(),
GETDATE(),
num_doc_ret,
p_liquida.bodega)
FOR idx = 1 TO arr_count()
IF arr_liq[idx].cantidad_oc IS NOT NULL THEN
INSERT INTO cgtb00018
VALUES(p_liquida.tipo,
p_liquida.num_oc,
p_liquida.rep_entrada,
p_arr_liq[idx].cod_n,
p_arr_liq[idx].cod_grupo,
p_arr_liq[idx].cod_tipo,
p_arr_liq[idx].cod_sec,
arr_liq[idx].cantidad_oc,
arr_liq[idx].fob,
arr_liq[idx].costo_flete,
arr_liq[idx].impuesto,
arr_liq[idx].otros_g,
NULL,
SUSER_SNAME(),
GETDATE(),
NULL,
NULL,
p_liquida.bodega)
END IF
END FOR
COMMIT WORK
LET numero_msg = 1
CALL msg(numero_msg)
GOTO vuelve
END FUNCTION
# Modificacion de la liquidacion
FUNCTION lqprmod07()
CLEAR FORM
CONSTRUCT BY NAME criterio
ON a.tipo, a.num_oc, a.cod_sp, a.cod_sp_sec, a.rep_entrada, num_doc_ret
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
# RETURN
END IF
LET select_1 =
"SELECT a.tipo,a.num_oc,a.fecha,a.rep_entrada,a.bodega,a.cod_sp,a.cod_sp_sec, ",
" b.nom_sp,a.factura,a.prima_us,a.liquidada,a.cerrada,a.pagada,",
" a.usa_calculo,a.timpuestos,a.tgastos, ",
" a.tflete ",
"FROM cgtb00017 a,cotb00001 b ",
"WHERE ",
criterio CLIPPED,
" and a.cod_sp = b.cod_sp ",
" and a.cod_sp_sec = b.cod_sp_sec and a.status_t is null ",
"ORDER BY a.fecha"
PREPARE comando FROM select_1
DECLARE busca10 SCROLL CURSOR FOR comando
OPEN busca10
FETCH FIRST busca10 INTO p_liquida.*
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
DISPLAY BY NAME p_liquida.* ATTRIBUTE(BOLD)
MENU "OPCION"
COMMAND "Siguiente" "Ver Siguiente Registro Cumple Condicion"
FETCH NEXT busca10 INTO p_liquida.*
IF status = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
DISPLAY BY NAME p_liquida.* ATTRIBUTE(BOLD)
COMMAND "Anterior" "Ver Registro Anterior Cumple Condicion"
FETCH PREVIOUS busca10 INTO p_liquida.*
IF status = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
DISPLAY BY NAME p_liquida.* ATTRIBUTE(BOLD)
COMMAND "Primero" "Ver Primer Registro Cumple Condicion"
FETCH FIRST busca10 INTO p_liquida.*
IF status = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
DISPLAY BY NAME p_liquida.* ATTRIBUTE(BOLD)
COMMAND "Ultimo" " Ver Ultimo Registro Cumple Condicion"
FETCH LAST busca10 INTO p_liquida.*
IF status = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
DISPLAY BY NAME p_liquida.* ATTRIBUTE(BOLD)
COMMAND "Escoger" "<Esc> Actualiza Registro <Ctrl-C> Cancela Operacion"
INPUT BY NAME p_liquida.* WITHOUT DEFAULTS
AFTER FIELD prima_us
IF p_liquida.prima_us IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD prima_us
END IF
IF p_liquida.prima_us = 0 THEN
LET p_liquida.s_liqui = "L"
ELSE
LET p_liquida.s_liqui = "E"
END IF
DISPLAY BY NAME p_liquida.s_liqui
AFTER FIELD fecha
IF p_liquida.fecha IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha
END IF
LET p_fechas = p_liquida.fecha
CALL prd(p_fechas, usuarios) RETURNING bandera
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
CALL integridad()
BEFORE FIELD tipo
NEXT FIELD fecha
AFTER FIELD num_oc
IF p_liquida.num_oc IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_oc
END IF
SELECT a.fech_oc, a.cod_sp, a.cod_sp_sec, b.nom_sp
INTO p_liquida.fecha,
p_liquida.cod_sp,
p_liquida.cod_sp_sec,
p_liquida.nombre_sp
FROM cotb00001 b, cotb00014 a
WHERE a.tipo = p_liquida.tipo
AND a.num_oc = p_liquida.num_oc
AND a.cod_sp = b.cod_sp
AND a.cod_sp_sec = b.cod_sp_sec
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num_oc
END IF
DISPLAY BY NAME p_liquida.* ATTRIBUTE(BOLD)
# Chequo del status de la orden:liquidada,cerrada,pagada
SELECT cierre
INTO led_1
FROM cotb00014
WHERE num_oc = p_liquida.num_oc
AND tipo = p_liquida.tipo
IF led_1 = "S" THEN
LET p_liquida.s_cerrada = "CERRADA"
ELSE
LET p_liquida.s_cerrada = "NO CERRADA"
END IF
BEFORE FIELD rep_entrada
NEXT FIELD factura
AFTER FIELD factura
IF p_liquida.factura IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD factura
END IF
{
# Busca factura en el modulo de cuentas por pagar
SELECT unique num_doc FROM cptb00001
WHERE num_doc = p_liquida.factura and tipo_doc = "FT" AND
cod_sp = p_liquida.cod_sp and cod_sp_sec = p_liquida.cod_sp_sec
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD factura
END IF
# Chequea si la factura esta pagada
SELECT sum(valor) INTO p_valor FROM cptb00001
WHERE aplica_a = p_liquida.factura and cod_sp=p_liquida.cod_sp and
cod_sp_sec = p_liquida.cod_sp_sec
IF p_valor > 0 THEN
LET p_liquida.s_pagada = "NO PAGADA"
ELSE
LET p_liquida.s_pagada = "PAGADA"
END IF
IF p_valor is null or p_valor < 0 THEN
LET p_liquida.s_pagada = null
END IF}
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
# RETURN
END IF
IF p_liquida.fecha > TODAY THEN
CALL msg(375)
NEXT FIELD fecha
END IF
DISPLAY BY NAME p_liquida.* ATTRIBUTE(BOLD)
EXIT INPUT
END INPUT
LET total_Flete = 0
LET total_gastos = 0
LET total_impuesto = 0
LET total_Fob = 0
# Busqueda de los codigos de la orden
DISPLAY " " AT 24, 1
DISPLAY "Buscando ITEMS para liquidar... Espere"
AT 24, 1
ATTRIBUTE(BOLD)
CALL arr_liq.clear()
IF p_liquida.tipo = "01" THEN
LET selec_it =
"SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp, ",
" a.cantidad_oc,a.fob,a.cantidad_oc*a.fob,a.costo_flete,a.impuesto,a.otros_g,a.bodega ",
"FROM cgtb00018 a,intb00001 b ",
"WHERE a.tipo = '",
p_liquida.tipo,
" '",
" and a.num_oc = '",
p_liquida.num_oc,
" '",
" 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 and ",
" a.rep_entrada = '",
p_liquida.rep_entrada,
" '",
" "
END IF
IF p_liquida.tipo = "02" THEN
LET selec_it =
"SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_Esp,",
" a.cantidad_oc,a.fob,a.cantidad_oc*a.fob,a.costo_flete,a.impuesto,a.otros_g,a.bodega ",
"FROM cgtb00018 a,iptb00002 b ",
"WHERE a.tipo = '",
p_liquida.tipo,
" '",
" and a.num_oc = '",
p_liquida.num_oc,
" '",
" 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 and ",
" a.rep_entrada = '",
p_liquida.rep_entrada,
" '",
" "
END IF
IF p_liquida.tipo = "03" THEN
LET selec_it =
"SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_Esp,",
" a.cantidad_oc,a.fob,a.cantidad_oc*a.fob,a.costo_flete,a.impuesto,a.otros_g,a.bodega ",
"FROM cgtb00018 a,irtb00002 b ",
"WHERE a.tipo = '",
p_liquida.tipo,
" '",
" and a.num_oc = '",
p_liquida.num_oc,
" '",
" 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 and ",
" a.rep_entrada = '",
p_liquida.rep_entrada,
" '",
" "
END IF
PREPARE comando1 FROM selec_it
DECLARE busca4 CURSOR FOR comando1
CALL p_arr_liq.clear()
CALL arr_liq.clear()
LET idx = 1
FOREACH busca4 INTO p_arr_liq[idx].*
LET arr_liq[idx].codigo =
p_arr_liq[idx].cod_n USING "&&&&",
"-",
p_arr_liq[idx].cod_grupo USING "&&&&",
"-",
p_arr_liq[idx].cod_tipo USING "&&&&",
"-",
p_arr_liq[idx].cod_sec USING "&&&&&&&&"
LET arr_liq[idx].descripcion = p_arr_liq[idx].descripcion
LET arr_liq[idx].cantidad_oc = p_arr_liq[idx].cantidad_oc
LET arr_liq[idx].impuesto = p_arr_liq[idx].impuesto
LET arr_liq[idx].otros_g = p_arr_liq[idx].otros_g
LET arr_liq[idx].fob = p_arr_liq[idx].fob
LET arr_liq[idx].valor_fob =
arr_liq[idx].cantidad_oc * arr_liq[idx].fob
LET arr_liq[idx].costo_flete = p_arr_liq[idx].costo_flete
LET arr_liq[idx].bodega = p_arr_liq[idx].bodega
LET total_flete = arr_liq[idx].costo_flete + total_Flete
LET total_impuesto = arr_liq[idx].impuesto + total_impuesto
LET total_gastos = arr_liq[idx].otros_g + total_gastos
LET total_fob = arr_liq[idx].valor_fob + total_fob
LET idx = idx + 1
END FOREACH
DISPLAY BY NAME total_flete, total_impuesto, total_gastos, total_fob
CALL set_count(idx - 1)
INPUT ARRAY arr_liq WITHOUT DEFAULTS FROM s_lq.*
BEFORE ROW
LET curr = arr_curr()
LET scr_l = scr_line()
{ AFTER FIELD costo_flete
IF arr_liq[curr].codigo is not null THEN
IF arr_liq[curr].costo_flete is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD costo_flete
END IF
END IF}
AFTER FIELD fob
IF arr_liq[curr].cantidad_oc IS NOT NULL THEN
LET arr_liq[curr].valor_fob =
arr_liq[curr].cantidad_oc * arr_liq[curr].fob
END IF
DISPLAY arr_liq[curr].valor_fob TO s_lq[scr_l].valor_fob
AFTER ROW
LET total_impuesto = 0
LET total_gastos = 0
LET total_fob = 0
FOR idx = 1 TO arr_liq.getLength()
LET total_impuesto =
arr_liq[idx].impuesto + total_impuesto
LET total_gastos = arr_liq[idx].otros_g + total_gastos
LET total_flete = arr_liq[idx].costo_flete + total_flete
LET total_fob = total_fob + arr_liq[idx].valor_fob
END FOR
DISPLAY BY NAME total_impuesto,
total_gastos,
total_flete,
total_fob
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
EXIT INPUT
END INPUT
BEGIN WORK
# Actualizacion de la tabla general de la liquidacion
UPDATE cgtb00017
SET fecha = p_liquida.fecha,
liquidada = p_liquida.s_liqui,
cerrada = p_liquida.s_cerrada,
pagada = p_liquida.s_pagada,
factura = p_liquida.factura,
prima_us = p_liquida.prima_us,
cod_sp = p_liquida.cod_sp,
cod_sp_sec = p_liquida.cod_sp_sec,
timpuestos = p_liquida.timpuestos,
tgastos = p_liquida.tgastos,
tflete = p_liquida.tflete,
usa_calculo = p_liquida.usa_calculo,
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE tipo = p_liquida.tipo
AND num_oc = p_liquida.num_oc
AND rep_entrada = p_liquida.rep_entrada
AND bodega = p_liquida.bodega
# Borrar datos para actualizar
DELETE FROM cgtb00018
WHERE tipo = p_liquida.tipo
AND num_oc = p_liquida.num_oc
AND rep_entrada = p_liquida.rep_entrada
AND bodega = p_liquida.bodega
# Actualizacion
FOR idx = 1 TO arr_liq.getLength()
# IF arr_liq[idx].costo_flete is not null OR
# arr_liq[idx].fob is not null THEN
INSERT INTO cgtb00018
VALUES(p_liquida.tipo,
p_liquida.num_oc,
p_liquida.rep_entrada,
p_arr_liq[idx].cod_n,
p_arr_liq[idx].cod_grupo,
p_arr_liq[idx].cod_tipo,
p_arr_liq[idx].cod_sec,
arr_liq[idx].cantidad_oc,
arr_liq[idx].fob,
arr_liq[idx].costo_flete,
arr_liq[idx].impuesto,
arr_liq[idx].otros_g,
NULL,
usuarios,
GETDATE(),
usuarios,
getdate(),
p_liquida.bodega)
# END IF
END FOR
COMMIT WORK
LET numero_msg = 13
CALL msg(numero_msg)
COMMAND KEY("L")
"eLiminar"
"Eliminacion de Reporte de Entrada Liquidado"
PROMPT "Esta Seguro de Eliminar Este Reporte De Entrada(S/N)?"
FOR opt_el
LET opt_el = upshift(opt_el)
IF opt_el = "S" THEN
BEGIN WORK
DELETE FROM cgtb00017
WHERE tipo = p_liquida.tipo
AND num_oc = p_liquida.num_oc
AND rep_entrada = p_liquida.rep_entrada
DELETE FROM cgtb00018
WHERE tipo = p_liquida.tipo
AND num_oc = p_liquida.num_oc
AND rep_entrada = p_liquida.rep_entrada
COMMIT WORK
LET numero_msg = 39
CALL msg(numero_msg)
END IF
COMMAND "Retornar"
CLEAR FORM
EXIT MENU
END MENU
END FUNCTION
FUNCTION busca_entradas()
DEFINE p_datos ARRAY[50] OF RECORD
rep_entrada INTEGER,
fecha DATE,
titulo_bodega VARCHAR(100),
bodega SMALLINT
END RECORD
OPEN WINDOW w1 WITH FORM "lqfmwd001"
IF mat_prima = "S" THEN
DECLARE busca_m CURSOR FOR
SELECT UNIQUE num_doc, fecha, 'BODEGA MAT PRIMA', '1'
FROM intb00006
WHERE orden_compra = p_liquida.num_oc
AND tipo = p_liquida.tipo
AND status_t IS NULL
LET idx = 1
FOREACH busca_m INTO p_datos[idx].*
LET idx = idx + 1
END FOREACH
CALL set_count(idx - 1)
DISPLAY ARRAY p_datos TO s_datos.*
LET scr_l = scr_line()
LET p_liquida.rep_entrada = p_datos[scr_l].rep_entrada
LET p_liquida.bodega = p_datos[scr_l].bodega
LET p_liquida.fecha = p_datos[scr_l].fecha
END IF
DISPLAY "etiqueta ", prod_term
IF prod_term = "S" THEN
DECLARE busca_p CURSOR FOR
SELECT UNIQUE a.num_doc, a.fecha, b.descripcion, a.bodega
FROM iptb00006 a, intb00009 b
WHERE a.orden_compra = p_liquida.num_oc
AND tipo = p_liquida.tipo
AND a.bodega = b.cod_bodega
AND a.status_t IS NULL
LET idx = 1
FOREACH busca_p INTO p_datos[idx].*
DISPLAY "bodega ", p_datos[idx].bodega
LET idx = idx + 1
END FOREACH
CALL set_count(idx - 1)
DISPLAY ARRAY p_datos TO s_datos.*
LET scr_l = scr_line()
LET p_liquida.rep_entrada = p_datos[scr_l].rep_entrada
LET p_liquida.bodega = p_datos[scr_l].bodega
LET p_liquida.fecha = p_datos[scr_l].fecha
END IF
IF piezas_r = "S" THEN
DECLARE busca_r CURSOR FOR
SELECT UNIQUE num_doc, fecha, 'REPUESTOS', '1'
FROM irtb00006
WHERE orden_compra = p_liquida.num_oc
AND tipo = p_liquida.tipo
AND status_t IS NULL
LET idx = 1
FOREACH busca_r INTO p_datos[idx].*
LET idx = idx + 1
END FOREACH
CALL set_count(idx - 1)
DISPLAY ARRAY p_datos TO s_datos.*
LET scr_l = scr_line()
LET p_liquida.rep_entrada = p_datos[scr_l].rep_entrada
LET p_liquida.bodega = p_datos[scr_l].bodega
LET p_liquida.fecha = p_datos[scr_l].fecha
END IF
IF piezas_h = "S" THEN
DECLARE busca_h CURSOR FOR
SELECT UNIQUE num_doc, fecha
FROM ihtb00006
WHERE orden_compra = p_liquida.num_oc
AND tipo = p_liquida.tipo
AND status_t IS NULL
LET idx = 1
FOREACH busca_h INTO p_datos[idx].*
LET idx = idx + 1
END FOREACH
CALL set_count(idx - 1)
DISPLAY ARRAY p_datos TO s_datos.*
LET scr_l = scr_line()
LET p_liquida.rep_entrada = p_datos[scr_l].rep_entrada
LET p_liquida.bodega = p_datos[scr_l].bodega
LET p_liquida.fecha = p_datos[scr_l].fecha
END IF
CLOSE WINDOW w1
END FUNCTION