1289 lines
47 KiB
Plaintext
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
|