Files
2026-09-22 20:38:51 -04:00

1013 lines
34 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 DEC(12,4)
DEFINE i SMALLINT
DEFINE pcodn,pcodg,pcodt,pcods SMALLINT
DEFINE p_liquida RECORD
tipo SMALLINT,
num_oc INTEGER,
fecha DATE,
rep_entrada INTEGER,
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)
END RECORD
DEFINE arr_liq DYNAMIC ARRAY OF RECORD
codigo CHAR(30),
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)
END RECORD,
unidad CHAR(3)
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT to "decomarmol" 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.* ATTRIBUTE (BOLD)
BEFORE INPUT
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
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
ON KEY (CONTROL-F)
IF INFIELD(rep_entrada) THEN
CALL busca_entradas()
DISPLAY BY NAME p_liquida.rep_entrada
END IF
# ON KEY(CONTROL-W)
# CALL busca_orden()
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.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.*
# 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) INTO p_liquida.rep_entrada
FROM intb00006 a
WHERE a.orden_compra = p_liquida.num_oc AND status_t IS NULL
DISPLAY BY NAME p_liquida.rep_entrada
EXIT CASE
WHEN p_liquida.tipo = "02"
LET prod_term = "S"
LET mat_prima = "N"
LET repuestos = "N"
SELECT MAX(a.num_doc) INTO p_liquida.rep_entrada
FROM iptb00006 a
WHERE a.orden_compra = p_liquida.num_oc AND status_t IS NULL
DISPLAY BY NAME p_liquida.rep_entrada
EXIT CASE
WHEN p_liquida.tipo = "03"
LET prod_term = "N"
LET mat_prima = "N"
LET repuestos = "S"
SELECT MAX(a.num_doc) INTO p_liquida.rep_entrada
FROM irtb00006 a
WHERE a.orden_compra = p_liquida.num_oc AND status_t IS NULL
DISPLAY BY NAME p_liquida.rep_entrada
EXIT CASE
END CASE
# Chequea que el reporte de entrada este en almacen
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
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
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
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
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 "&&&&"
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
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
# 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)
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())
FOR idx = 1 TO arr_count()
#IF arr_liq[idx].costo_flete 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)
# END IF
END FOR
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
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.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
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)
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 ",
"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 ",
"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 ",
"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
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 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
# 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
# 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
# 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())
# END IF
END FOR
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
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
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
END RECORD
OPEN WINDOW facturas AT 12,5 WITH FORM "lqfmwd001" ATTRIBUTE (BORDER,
COMMENT LINE LAST -1,FORM LINE FIRST + 1)
IF mat_prima = "S" THEN
DECLARE busca_m CURSOR FOR
SELECT unique num_doc,fecha 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
END IF
IF prod_term = "S" THEN
DECLARE busca_p CURSOR FOR
SELECT unique num_doc,fecha FROM iptb00006
WHERE orden_compra = p_liquida.num_oc and tipo = p_liquida.tipo and
status_t is null
LET idx = 1
FOREACH busca_p 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
END IF
IF piezas_r = "S" THEN
DECLARE busca_r CURSOR FOR
SELECT unique num_doc,fecha 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
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
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
END IF
CLOSE WINDOW facturas
END FUNCTION