{ ------------------------------------------------------------------------------ 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" " Adiciona Registro Cancela Operacion" LET int_flag = false CALL lqprad07() COMMAND "Modificar" " Actualiza Registro 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" " Actualiza Registro 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