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

886 lines
26 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 opt_el,piezas_r,piezas_h,led_1,mat_prima,prod_term CHAR(1)
DEFINE select_1 CHAR(500)
DEFINE valor_rd,valor_us,p_valor DECIMAL(12,2)
DEFINE i SMALLINT
DEFINE codigo ARRAY[10] OF SMALLINT
DEFINE orden CHAR(11)
DEFINE p_liquida RECORD
tipo CHAR(2),
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)
END RECORD
DEFINE p_arr_liq ARRAY [20] OF RECORD
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descripcion CHAR(30),
unidad CHAR(3),
cantidad_oc DECIMAL(12,2),
fob DECIMAL(12,2),
costo_flete DECIMAL(12,2)
END RECORD
DEFINE arr_liq ARRAY [20] OF RECORD
codigo CHAR(10),
descripcion CHAR(30),
unidad CHAR(3),
cantidad_oc DECIMAL(12,2),
fob DECIMAL(12,2),
costo_flete DECIMAL(12,2)
END RECORD
FUNCTION lqprmt001()
OPTIONS
ERROR LINE 24,
FORM LINE 9,
COMMENT LINE 23,
PROMPT LINE 22
OPEN FORM lqfmmt001 FROM "lqfmmt001"
DISPLAY FORM lqfmmt001
CALL pantalla()
DISPLAY "lqprmt001" AT 4,3
MENU "OPCION"
COMMAND "Adicionar"
"<Esc> Adiciona Registro <Ctrl-C> Cancela Operacion"
LET int_flag = false
CALL lqprad07()
COMMAND "Modificar"
"<Esc> Actualiza Registro <Ctrl-C> Cancela Operacion"
LET int_flag = false
CALL lqprmod07()
COMMAND "Retornar"
EXIT MENU
END MENU
END FUNCTION
# Funcion para adicionar las ordenes con fletes y fob
FUNCTION lqprad07()
WHENEVER ERROR CONTINUE
INITIALIZE p_liquida.* TO NULL
LABEL vuelve:
INPUT BY NAME p_liquida.* ATTRIBUTE (BOLD)
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()
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
SELECT a.fecha,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,intb00006 a
WHERE 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)
CALL busca_nivel()
LET bandera = 0
LET prod_term = "N"
LET piezas_r = "N"
LET piezas_h = "N"
LET mat_prima = "N"
FOR i = 1 TO idx
IF codigo[i] is not null THEN
CASE
WHEN codigo[i] = 1
LET mat_prima = "S"
EXIT CASE
WHEN codigo[i] = 6
LET prod_term = "S"
EXIT CASE
WHEN codigo[i] = 3
LET prod_term = "S"
EXIT CASE
WHEN codigo[i] = 9
LET prod_term = "S"
EXIT CASE
WHEN codigo[i] = 5
LET piezas_r = "S"
EXIT CASE
WHEN codigo[i] = 4
LET piezas_h = "S"
EXIT CASE
END CASE
END IF
END FOR
display piezas_r at 12,1
# 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)) 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 REPUESTOS
IF piezas_r = "S" THEN
SELECT unique num_doc FROM irtb00006
WHERE (tipo = p_liquida.tipo and
orden_compra = p_liquida.num_oc) and
num_doc = p_liquida.rep_entrada and
cod_mov in (1,2)
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
{ SE PUSO EN COMENTARIO EN FECHA :29/12/97 AUTORIZADO POR EL
ING. PAULINO
# Busqueda en la tabla de HERRAMIENTAS
IF piezas_h = "S" THEN
SELECT unique a.num_doc FROM ihtb00006 a
WHERE a.num_doc = p_liquida.rep_entrada and
a.cod_mov in (1,2)
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD rep_entrada
END IF
END IF
}
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
FOR i = 1 TO 20
LET arr_liq[i].codigo = null
LET arr_liq[i].descripcion = null
LET arr_liq[i].cantidad_oc = null
LET arr_liq[i].fob = null
LET arr_liq[i].costo_flete = null
END FOR
# 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
IF mat_prima = "S" THEN
DECLARE busca CURSOR FOR
SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med,
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
c.cod_mov in (34,35)
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].unidad = p_arr_liq[idx].unidad
LET arr_liq[idx].cantidad_oc = p_arr_liq[idx].cantidad_oc
LET arr_liq[idx].fob = p_arr_liq[idx].fob
LET idx = idx + 1
END FOREACH
END IF
# Busqueda de los datos de la tabla de productos terminados
IF prod_term = "S" THEN
DECLARE busca1 CURSOR FOR
SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med,
c.cantidad_2,
a.precio
FROM cotb00015 a,intb00001 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
LET idx = 1
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].unidad = p_arr_liq[idx].unidad
LET arr_liq[idx].cantidad_oc = p_arr_liq[idx].cantidad_oc
LET arr_liq[idx].fob = p_arr_liq[idx].fob
LET idx = idx + 1
END FOREACH
END IF
# Busqueda de los datos de la tabla de Herramientas
IF piezas_h = "S" THEN
DECLARE busca20 CURSOR FOR
SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med,
c.cantidad_2,
a.precio
FROM cotb00015 a,intb00001 b,ihtb00006 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
c.cod_mov in (1,2)
LET idx = 1
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].unidad = p_arr_liq[idx].unidad
LET arr_liq[idx].cantidad_oc = p_arr_liq[idx].cantidad_oc
LET arr_liq[idx].fob = p_arr_liq[idx].fob
LET idx = idx + 1
END FOREACH
END IF
# Busqueda de los datos de la tabla de Repuestos
IF piezas_r = "S" THEN
DECLARE busca21 CURSOR FOR
SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,
b.unidad_med, c.cantidad_2, a.precio
FROM cotb00015 a,intb00001 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
a.cod_n = c.cod_n and
a.cod_grupo = c.cod_grupo and
a.cod_tipo = c.cod_tipo and
a.cod_sec = c.cod_sec and
c.num_doc = p_liquida.rep_entrada and
c.cod_mov in (1,2)
LET idx = 1
FOREACH busca21 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].unidad = p_arr_liq[idx].unidad
LET arr_liq[idx].cantidad_oc = p_arr_liq[idx].cantidad_oc
LET arr_liq[idx].fob = p_arr_liq[idx].fob
LET idx = idx + 1
END FOREACH
END IF
DISPLAY " " AT 24,1
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 INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
EXIT INPUT
END INPUT
# Inserta Registros en la tabla 17 de contabilidad
INSERT INTO cgtb00017 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,null,user,current,null,null)
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,null,user,current,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 ",
"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 3"
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()
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
# Busqueda de los codigos de la orden
DISPLAY " " AT 24,1
DISPLAY "Buscando ITEMS para liquidar... Espere" AT 24,1 ATTRIBUTE (BOLD)
DECLARE busca2 CURSOR FOR
SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,b.unidad_med,
a.cantidad_oc,
a.fob,a.costo_flete
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
LET idx = 1
FOREACH busca2 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].unidad = p_arr_liq[idx].unidad
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].costo_flete = p_arr_liq[idx].costo_flete
LET idx = idx + 1
END FOREACH
DISPLAY " " AT 24,1
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 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,
us_mod = user,
fech_mod = current
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_count()
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,null,user,current,null,null)
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
# Busca de que se trata la orden de compras
FUNCTION busca_nivel()
DECLARE busca_cod CURSOR FOR
SELECT unique a.cod_n FROM cotb00015 a
WHERE a.tipo = p_liquida.tipo and
a.num_oc = p_liquida.num_oc
LET idx = 1
FOREACH busca_cod INTO codigo[idx]
LET idx = idx + 1
END FOREACH
LET idx = idx - 1
END FUNCTION