886 lines
26 KiB
Plaintext
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
|