{ ------------------------------------------------------------------------------ PROGRAMA : LQPRMT001 OBJETIVO : Darle mantenimiento a los datos de liquidacion de Materiales PROGRAMADOR : Ing. Juan F. Soto FECHA : Marzo 23, 1994. ----------------------------------------------------------------------------- } GLOBALS "lqprgb000.4gl" DEFINE repuestos, opt_el, piezas_r, piezas_h, led_1, mat_prima, prod_term CHAR(1) DEFINE selec_it, select_1 CHAR(1000) DEFINE total_cantidad, total_fob, total_impuesto, total_gastos, total_flete DECIMAL(12, 2), factor_imp, factor_ga, factor_flete, monto_ret, monto_ad DEC(12, 4), num_doc_ret INT DEFINE pcodn, pcodg, pcodt, pcods SMALLINT DEFINE p_liquida RECORD tipo SMALLINT, num_oc INTEGER, fecha DATE, rep_entrada INTEGER, bodega SMALLINT, cod_sp SMALLINT, cod_sp_sec SMALLINT, nombre_sp CHAR(30), factura CHAR(12), prima_us DECIMAL(8, 2), s_liqui CHAR(12), s_cerrada CHAR(12), s_pagada CHAR(12), usa_calculo CHAR(10), timpuestos DEC(12, 2), tgastos DEC(12, 2), tflete DEC(12, 2) END RECORD DEFINE p_arr_liq DYNAMIC ARRAY OF RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descripcion CHAR(100), cantidad_oc DECIMAL(12, 5), fob DECIMAL(12, 4), valor_fob DEC(12, 2), costo_flete DECIMAL(12, 4), impuesto DECIMAL(12, 2), otros_g DECIMAL(12, 2), bodega SMALLINT END RECORD DEFINE arr_liq DYNAMIC ARRAY OF RECORD codigo CHAR(80), descripcion CHAR(100), cantidad_oc DECIMAL(12, 5), fob DECIMAL(12, 4), costo_flete DECIMAL(12, 2), valor_fob DEC(12, 2), impuesto DECIMAL(12, 2), otros_g DECIMAL(12, 2), bodega SMALLINT END RECORD, unidad CHAR(3) MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT TO "smarmotech" AS "MSSQL" USER usuarios USING clave CALL lqprmt001() END MAIN FUNCTION lqprmt001() OPTIONS ERROR LINE 24, FORM LINE 9, COMMENT LINE 23, PROMPT LINE 22 OPEN FORM lqfmmt001 FROM "lqfmmt001" DISPLAY FORM lqfmmt001 DISPLAY "lqprmt001" AT 4, 3 MENU ON ACTION nuevo LET int_flag = FALSE CALL arr_liq.clear() CALL lqprad07() ON ACTION buscar CALL arr_liq.clear() LET int_flag = FALSE CALL lqprmod07() ON ACTION salir EXIT MENU END MENU END FUNCTION # Funcion para adicionar las ordenes con fletes y fob FUNCTION lqprad07() INITIALIZE p_liquida.* TO NULL LABEL vuelve: INPUT BY NAME p_liquida.*, num_doc_ret ATTRIBUTE(BOLD) BEFORE INPUT LET int_flag = FALSE CALL busca_liquidacion() RETURNING p_liquida.tipo, p_liquida.num_oc, p_liquida.rep_entrada, p_liquida.cod_sp, p_liquida.cod_sp_sec, p_liquida.nombre_sp, p_liquida.bodega, p_liquida.fecha DISPLAY BY NAME p_liquida.tipo, p_liquida.num_oc, p_liquida.cod_sp, p_liquida.cod_sp_sec, p_liquida.nombre_sp, p_liquida.rep_entrada, p_liquida.bodega, p_liquida.fecha ON ACTION buscar_entradas ATTRIBUTES(TEXT = "Buscar Entradas", IMAGE = "find") IF INFIELD(rep_entrada) THEN CALL busca_entradas() DISPLAY BY NAME p_liquida.rep_entrada, p_liquida.bodega END IF AFTER FIELD fecha IF p_liquida.fecha IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha END IF LET p_fechas = p_liquida.fecha CALL prd(p_fechas, usuarios) RETURNING bandera IF bandera = 1 THEN LET bandera = 0 RETURN END IF AFTER FIELD num_oc IF p_liquida.num_oc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_oc END IF LET total_flete = 0 SELECT a.cod_sp, a.cod_sp_sec, b.nom_sp INTO p_liquida.cod_sp, p_liquida.cod_sp_sec, p_liquida.nombre_sp FROM cotb00001 b, cotb00014 a WHERE a.tipo = p_liquida.tipo AND a.num_oc = p_liquida.num_oc AND a.cod_sp = b.cod_sp AND a.cod_sp_sec = b.cod_sp_sec IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD num_oc END IF DISPLAY BY NAME p_liquida.* # Chequo del status de la orden:liquidada,cerrada,pagada SELECT cierre INTO led_1 FROM cotb00014 WHERE num_oc = p_liquida.num_oc AND tipo = p_liquida.tipo IF led_1 = "S" THEN LET p_liquida.s_cerrada = "CERRADA" ELSE LET p_liquida.s_cerrada = "NO CERRADA" END IF LET bandera = 0 LET prod_term = "N" LET mat_prima = "N" LET repuestos = "N" CASE WHEN p_liquida.tipo = "01" LET prod_term = "N" LET mat_prima = "S" LET repuestos = "N" SELECT MAX(a.num_doc), fecha,bodega INTO p_liquida.rep_entrada, p_liquida.fecha,p_liquida.bodega FROM intb00006 a WHERE a.orden_compra = p_liquida.num_oc AND status_t IS NULL GROUP BY fecha,bodega DISPLAY BY NAME p_liquida.rep_entrada, p_liquida.fecha, p_liquida.bodega EXIT CASE WHEN p_liquida.tipo = "02" LET prod_term = "S" LET mat_prima = "N" LET repuestos = "N" SELECT MAX(a.num_doc), fecha,bodega INTO p_liquida.rep_entrada, p_liquida.fecha,p_liquida.bodega FROM iptb00006 a WHERE a.orden_compra = p_liquida.num_oc AND status_t IS NULL GROUP BY fecha,bodega DISPLAY BY NAME p_liquida.rep_entrada, p_liquida.fecha, p_liquida.bodega EXIT CASE WHEN p_liquida.tipo = "03" LET prod_term = "N" LET mat_prima = "N" LET repuestos = "S" SELECT MAX(a.num_doc), fecha, bodega INTO p_liquida.rep_entrada, p_liquida.fecha, p_liquida.bodega FROM irtb00006 a WHERE a.orden_compra = p_liquida.num_oc AND status_t IS NULL AND cod_mov IN (35,34) GROUP BY fecha,bodega DISPLAY BY NAME p_liquida.rep_entrada, p_liquida.fecha, p_liquida.bodega EXIT CASE END CASE # Chequea que el reporte de entrada este en almacen AFTER FIELD num_doc_ret IF num_doc_ret IS NOT NULL THEN SELECT UNIQUE SUM(a.valor) INTO monto_ret FROM cotb00045 a WHERE a.num_doc_ret = num_doc_ret SELECT SUM(a.valor) INTO monto_ad FROM cotb00045 a WHERE a.num_doc_ret = num_doc_ret AND a.operacion = 9 IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD num_doc_ret END IF LET p_liquida.tgastos = monto_ret - monto_ad LET p_liquida.timpuestos = monto_ad END IF AFTER FIELD rep_entrada IF p_liquida.rep_entrada IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD rep_entrada END IF # Chequea Que la Orden Este Liquidada SELECT UNIQUE a.num_oc FROM cgtb00017 a WHERE a.num_oc = p_liquida.num_oc AND a.tipo = p_liquida.tipo AND a.rep_entrada = p_liquida.rep_entrada IF status != NOTFOUND THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD num_oc END IF # Busqueda en la tabla de MATERIA PRIMA IF mat_prima = "S" THEN SELECT UNIQUE num_doc FROM intb00006 WHERE (num_doc = p_liquida.rep_entrada) AND (cod_mov IN (34, 35, 47)) AND (tipo = p_liquida.tipo AND orden_compra = p_liquida.num_oc) AND status_t IS NULL IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD rep_entrada END IF END IF # Busqueda en la tabla de PRODUCTOS TERMINADOS IF prod_term = "S" THEN DISPLAY prod_term SELECT UNIQUE a.num_doc FROM iptb00006 a WHERE a.num_doc = p_liquida.rep_entrada AND a.cod_mov = 10 IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD rep_entrada END IF END IF # Busqueda en la tabla de REPUESTOS IF repuestos = "S" THEN SELECT UNIQUE a.num_doc FROM irtb00006 a WHERE a.num_doc = p_liquida.rep_entrada AND a.cod_mov IN (34, 35, 47) IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD rep_entrada END IF END IF BEFORE FIELD prima_us SELECT a.prima INTO p_liquida.prima_us FROM vetb00019 a WHERE a.disponible = 'S' DISPLAY BY NAME p_liquida.prima_us AFTER FIELD prima_us IF p_liquida.prima_us IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD prima_us END IF IF p_liquida.prima_us = 0 THEN LET p_liquida.s_liqui = "L" ELSE LET p_liquida.s_liqui = "E" END IF AFTER FIELD factura IF p_liquida.factura IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD factura END IF { # Busca factura en el modulo de cuentas por pagar SELECT unique num_doc FROM cptb00001 WHERE num_doc = p_liquida.factura and tipo_doc = "FT" AND cod_sp = p_liquida.cod_sp and cod_sp_sec = p_liquida.cod_sp_sec IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD factura END IF # Chequea si la factura esta pagada SELECT sum(valor) INTO p_valor FROM cptb00001 WHERE aplica_a = p_liquida.factura and cod_sp = p_liquida.cod_sp and cod_sp_sec = p_liquida.cod_sp_sec IF p_valor > 0 THEN LET p_liquida.s_pagada = "NO PAGADA" ELSE LET p_liquida.s_pagada = "PAGADA" END IF IF p_valor is null or p_valor < 0 THEN LET p_liquida.s_pagada = null END IF} AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE # RETURN END IF SELECT a.cod_bodega FROM intb00009 a WHERE a.cod_bodega = p_liquida.bodega IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD bodega END IF CALL integridad() DISPLAY BY NAME p_liquida.* ATTRIBUTE(BOLD) EXIT INPUT END INPUT CALL arr_liq.clear() # Busqueda de los codigos de la orden DISPLAY " " AT 24, 1 DISPLAY "Buscando ITEMS para liquidar... Espere" AT 24, 1 ATTRIBUTE(BOLD) # Busqueda de los datos de la tabla de materia prima LET totaL_cantidad = 0 LET total_fob = 0 LET factor_ga = 0 LET factor_imp = 0 LET factor_flete = 0 LET total_impuesto = 0 LET total_gastos = 0 LET total_flete = 0 IF p_liquida.tipo = "01" THEN # BUSCA EL TOTAL de la recepcion de la mercancia SELECT SUM(c.cantidad_2), SUM(c.cantidad_2 * a.precio) INTO total_cantidad, total_fob FROM cotb00015 a, intb00001 b, intb00006 c WHERE a.tipo = p_liquida.tipo AND a.num_oc = p_liquida.num_oc AND a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND a.cod_sec = c.cod_sec AND a.cod_n = c.cod_n AND a.cod_grupo = c.cod_grupo AND a.cod_tipo = c.cod_tipo AND a.cod_sec = b.cod_sec AND c.num_doc = p_liquida.rep_entrada AND a.num_oc = c.orden_compra AND c.cod_mov IN (34, 35, 47) LET factor_ga = p_liquida.tgastos / total_fob LET factor_imp = p_liquida.timpuestos / total_fob LET factor_flete = p_liquida.tflete / total_fob LET total_fob = 0 DECLARE busca CURSOR FOR SELECT a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, b.descrip_esp, c.cantidad_2, a.precio, c.cantidad_2 * a.precio, '1' FROM cotb00015 a, intb00001 b, intb00006 c WHERE a.tipo = p_liquida.tipo AND a.num_oc = p_liquida.num_oc AND a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND a.cod_sec = c.cod_sec AND a.cod_n = c.cod_n AND a.cod_grupo = c.cod_grupo AND a.cod_tipo = c.cod_tipo AND a.cod_sec = b.cod_sec AND c.num_doc = p_liquida.rep_entrada AND a.num_oc = c.orden_compra AND c.cod_mov IN (34, 35, 47) ORDER BY a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec LET idx = 1 FOREACH busca INTO p_arr_liq[idx].* LET arr_liq[idx].codigo = p_arr_liq[idx].cod_n USING "&&&&", "-", p_arr_liq[idx].cod_grupo USING "&&&&", "-", p_arr_liq[idx].cod_tipo USING "&&&&", "-", p_arr_liq[idx].cod_sec USING "&&&&&&&&" LET arr_liq[idx].descripcion = p_arr_liq[idx].descripcion LET arr_liq[idx].cantidad_oc = p_arr_liq[idx].cantidad_oc LET arr_liq[idx].fob = p_arr_liq[idx].fob LET arr_liq[idx].valor_fob = arr_liq[idx].cantidad_oc * arr_liq[idx].fob LET arr_liq[idx].impuesto = factor_imp * arr_liq[idx].valor_fob LET arr_liq[idx].otros_g = factor_ga * arr_liq[idx].valor_fob LET arr_liq[idx].costo_flete = factor_flete * arr_liq[idx].valor_fob LET total_flete = arr_liq[idx].costo_flete + total_Flete LET total_impuesto = arr_liq[idx].impuesto + total_impuesto LET total_gastos = arr_liq[idx].otros_g + total_gastos LET total_fob = arr_liq[idx].valor_fob + total_fob LET idx = idx + 1 END FOREACH END IF # Busqueda de los datos de la tabla de productos terminados IF p_liquida.tipo = "02" THEN SELECT SUM(c.cantidad_2), SUM(c.cantidad_2 * a.precio) INTO total_cantidad, total_fob FROM cotb00015 a, iptb00002 b, iptb00006 c WHERE a.tipo = p_liquida.tipo AND a.num_oc = p_liquida.num_oc AND a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_sec AND b.cod_n = c.cod_n AND b.cod_grupo = c.cod_grupo AND b.cod_tipo = c.cod_tipo AND b.cod_sec = c.cod_sec AND c.num_doc = p_liquida.rep_entrada AND a.num_oc = c.orden_compra LET factor_ga = p_liquida.tgastos / total_fob LET factor_imp = p_liquida.timpuestos / total_fob LET factor_flete = p_liquida.tflete / total_fob DECLARE busca1 CURSOR FOR SELECT a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, b.descrip_esp, c.cantidad_2, a.precio, c.cantidad_2 * a.precio, c.bodega FROM cotb00015 a, iptb00002 b, iptb00006 c WHERE a.tipo = p_liquida.tipo AND a.num_oc = p_liquida.num_oc AND a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_sec AND b.cod_n = c.cod_n AND b.cod_grupo = c.cod_grupo AND b.cod_tipo = c.cod_tipo AND b.cod_sec = c.cod_sec AND c.num_doc = p_liquida.rep_entrada AND a.num_oc = c.orden_compra #ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec LET idx = 1 LET total_fob = 0 FOREACH busca1 INTO p_arr_liq[idx].* LET arr_liq[idx].codigo = p_arr_liq[idx].cod_n USING "&&&&", "-", p_arr_liq[idx].cod_grupo USING "&&&&", "-", p_arr_liq[idx].cod_tipo USING "&&&&", "-", p_arr_liq[idx].cod_sec USING "&&&&&&&&" DISPLAY "codigo ", arr_liq[idx].codigo LET arr_liq[idx].descripcion = p_arr_liq[idx].descripcion LET arr_liq[idx].cantidad_oc = p_arr_liq[idx].cantidad_oc LET arr_liq[idx].fob = p_arr_liq[idx].fob LET arr_liq[idx].valor_fob = arr_liq[idx].cantidad_oc * arr_liq[idx].fob LET arr_liq[idx].impuesto = factor_imp * arr_liq[idx].valor_fob LET arr_liq[idx].otros_g = factor_ga * arr_liq[idx].valor_fob LET arr_liq[idx].costo_flete = factor_flete * arr_liq[idx].valor_fob LET total_flete = arr_liq[idx].costo_flete + total_Flete LET total_impuesto = arr_liq[idx].impuesto + total_impuesto LET total_gastos = arr_liq[idx].otros_g + total_gastos LET total_fob = arr_liq[idx].valor_fob + total_fob LET idx = idx + 1 END FOREACH END IF # Busqueda de los datos de la tabla de REPUESTOS IF p_liquida.tipo = "03" THEN SELECT SUM(c.cantidad_2), SUM(c.cantidad_2 * a.precio) INTO total_cantidad, total_fob FROM cotb00015 a, irtb00002 b, irtb00006 c, cotb00014 d WHERE a.tipo = p_liquida.tipo AND a.num_oc = p_liquida.num_oc AND a.tipo = d.tipo AND a.num_oc = d.num_oc AND a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_sec AND b.cod_n = c.cod_n AND b.cod_grupo = c.cod_grupo AND b.cod_tipo = c.cod_tipo AND b.cod_sec = c.cod_sec AND c.num_doc = p_liquida.rep_entrada AND a.num_oc = c.orden_compra LET factor_ga = p_liquida.tgastos / total_fob LET factor_imp = p_liquida.timpuestos / total_fob LET factor_flete = p_liquida.tflete / total_fob LET total_fob = 0 DECLARE busca3 CURSOR FOR SELECT a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, b.descrip_esp, c.cantidad_2, a.precio, c.cantidad_2 * a.precio, '1' FROM cotb00015 a, irtb00002 b, irtb00006 c WHERE a.tipo = p_liquida.tipo AND a.num_oc = p_liquida.num_oc AND a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_sec AND b.cod_n = c.cod_n AND b.cod_grupo = c.cod_grupo AND b.cod_tipo = c.cod_tipo AND b.cod_sec = c.cod_sec AND c.num_doc = p_liquida.rep_entrada AND a.num_oc = c.orden_compra # ORDER BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec LET idx = 1 FOREACH busca3 INTO p_arr_liq[idx].* LET arr_liq[idx].codigo = p_arr_liq[idx].cod_n USING "&&&&", "-", p_arr_liq[idx].cod_grupo USING "&&&&", "-", p_arr_liq[idx].cod_tipo USING "&&&&", "-", p_arr_liq[idx].cod_sec USING "&&&&&&" LET arr_liq[idx].descripcion = p_arr_liq[idx].descripcion LET arr_liq[idx].cantidad_oc = p_arr_liq[idx].cantidad_oc LET arr_liq[idx].fob = p_arr_liq[idx].fob LET arr_liq[idx].valor_fob = arr_liq[idx].cantidad_oc * arr_liq[idx].fob LET arr_liq[idx].impuesto = factor_imp * arr_liq[idx].valor_fob LET arr_liq[idx].otros_g = factor_ga * arr_liq[idx].valor_fob LET arr_liq[idx].costo_flete = factor_flete * arr_liq[idx].valor_fob LET total_flete = arr_liq[idx].costo_flete + total_Flete LET total_fob = arr_liq[idx].valor_fob + total_fob LET total_impuesto = arr_liq[idx].impuesto + total_impuesto LET total_gastos = arr_liq[idx].otros_g + total_gastos LET idx = idx + 1 END FOREACH END IF DISPLAY BY NAME total_impuesto, total_gastos, total_flete, total_fob CALL set_count(idx - 1) INPUT ARRAY arr_liq WITHOUT DEFAULTS FROM s_lq.* BEFORE ROW LET curr = arr_curr() LET scr_l = scr_line() LET pcodn = arr_liq[curr].codigo[1, 2] LET pcodg = arr_liq[curr].codigo[4, 6] LET pcodt = arr_liq[curr].codigo[8, 11] LET pcods = arr_liq[curr].codigo[13, 16] AFTER FIELD fob IF arr_liq[curr].cantidad_oc IS NOT NULL THEN LET arr_liq[curr].valor_fob = arr_liq[curr].cantidad_oc * arr_liq[curr].fob END IF DISPLAY arr_liq[curr].valor_fob TO s_lq[scr_l].valor_fob AFTER FIELD costo_flete IF arr_liq[curr].codigo IS NOT NULL THEN IF arr_liq[curr].costo_flete IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD costo_flete END IF END IF AFTER ROW LET total_impuesto = 0 LET total_gastos = 0 FOR idx = 1 TO arr_liq.getLength() LET total_impuesto = arr_liq[idx].impuesto + total_impuesto LET total_gastos = arr_liq[idx].otros_g + total_gastos END FOR DISPLAY BY NAME total_impuesto, total_gastos AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET total_impuesto = 0 LET total_gastos = 0 LET total_fob = 0 FOR idx = 1 TO arr_liq.getLength() LET total_impuesto = arr_liq[idx].impuesto + total_impuesto LET total_gastos = arr_liq[idx].otros_g + total_gastos LET total_fob = total_fob + arr_liq[idx].valor_fob END FOR DISPLAY BY NAME total_impuesto, total_gastos, total_fob EXIT INPUT END INPUT BEGIN WORK # Inserta Registros en la tabla 17 de contabilidad INSERT INTO cgtb00017( tipo, num_oc, fecha, liquidada, cerrada, pagada, rep_entrada, factura, prima_us, cod_sp, cod_sp_sec, timpuestos, tgastos, tflete, usa_calculo, us_crea, fech_crea, num_doc_ret, bodega) VALUES(p_liquida.tipo, p_liquida.num_oc, p_liquida.fecha, p_liquida.s_liqui, p_liquida.s_cerrada, p_liquida.s_pagada, p_liquida.rep_entrada, p_liquida.factura, p_liquida.prima_us, p_liquida.cod_sp, p_liquida.cod_sp_sec, p_liquida.timpuestos, p_liquida.tgastos, p_liquida.tflete, p_liquida.usa_calculo, SUSER_SNAME(), GETDATE(), num_doc_ret, p_liquida.bodega) FOR idx = 1 TO arr_count() IF arr_liq[idx].cantidad_oc IS NOT NULL THEN INSERT INTO cgtb00018 VALUES(p_liquida.tipo, p_liquida.num_oc, p_liquida.rep_entrada, p_arr_liq[idx].cod_n, p_arr_liq[idx].cod_grupo, p_arr_liq[idx].cod_tipo, p_arr_liq[idx].cod_sec, arr_liq[idx].cantidad_oc, arr_liq[idx].fob, arr_liq[idx].costo_flete, arr_liq[idx].impuesto, arr_liq[idx].otros_g, NULL, SUSER_SNAME(), GETDATE(), NULL, NULL, p_liquida.bodega) END IF END FOR COMMIT WORK LET numero_msg = 1 CALL msg(numero_msg) GOTO vuelve END FUNCTION # Modificacion de la liquidacion FUNCTION lqprmod07() CLEAR FORM CONSTRUCT BY NAME criterio ON a.tipo, a.num_oc, a.cod_sp, a.cod_sp_sec, a.rep_entrada, num_doc_ret IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE # RETURN END IF LET select_1 = "SELECT a.tipo,a.num_oc,a.fecha,a.rep_entrada,a.bodega,a.cod_sp,a.cod_sp_sec, ", " b.nom_sp,a.factura,a.prima_us,a.liquidada,a.cerrada,a.pagada,", " a.usa_calculo,a.timpuestos,a.tgastos, ", " a.tflete ", "FROM cgtb00017 a,cotb00001 b ", "WHERE ", criterio CLIPPED, " and a.cod_sp = b.cod_sp ", " and a.cod_sp_sec = b.cod_sp_sec and a.status_t is null ", "ORDER BY a.fecha" PREPARE comando FROM select_1 DECLARE busca10 SCROLL CURSOR FOR comando OPEN busca10 FETCH FIRST busca10 INTO p_liquida.* IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF DISPLAY BY NAME p_liquida.* ATTRIBUTE(BOLD) MENU "OPCION" COMMAND "Siguiente" "Ver Siguiente Registro Cumple Condicion" FETCH NEXT busca10 INTO p_liquida.* IF status = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF DISPLAY BY NAME p_liquida.* ATTRIBUTE(BOLD) COMMAND "Anterior" "Ver Registro Anterior Cumple Condicion" FETCH PREVIOUS busca10 INTO p_liquida.* IF status = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF DISPLAY BY NAME p_liquida.* ATTRIBUTE(BOLD) COMMAND "Primero" "Ver Primer Registro Cumple Condicion" FETCH FIRST busca10 INTO p_liquida.* IF status = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF DISPLAY BY NAME p_liquida.* ATTRIBUTE(BOLD) COMMAND "Ultimo" " Ver Ultimo Registro Cumple Condicion" FETCH LAST busca10 INTO p_liquida.* IF status = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF DISPLAY BY NAME p_liquida.* ATTRIBUTE(BOLD) COMMAND "Escoger" " 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(p_fechas, usuarios) RETURNING bandera IF bandera = 1 THEN LET bandera = 0 RETURN END IF CALL integridad() BEFORE FIELD tipo NEXT FIELD fecha AFTER FIELD num_oc IF p_liquida.num_oc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_oc END IF SELECT a.fech_oc, a.cod_sp, a.cod_sp_sec, b.nom_sp INTO p_liquida.fecha, p_liquida.cod_sp, p_liquida.cod_sp_sec, p_liquida.nombre_sp FROM cotb00001 b, cotb00014 a WHERE a.tipo = p_liquida.tipo AND a.num_oc = p_liquida.num_oc AND a.cod_sp = b.cod_sp AND a.cod_sp_sec = b.cod_sp_sec IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD num_oc END IF DISPLAY BY NAME p_liquida.* ATTRIBUTE(BOLD) # Chequo del status de la orden:liquidada,cerrada,pagada SELECT cierre INTO led_1 FROM cotb00014 WHERE num_oc = p_liquida.num_oc AND tipo = p_liquida.tipo IF led_1 = "S" THEN LET p_liquida.s_cerrada = "CERRADA" ELSE LET p_liquida.s_cerrada = "NO CERRADA" END IF BEFORE FIELD rep_entrada NEXT FIELD factura AFTER FIELD factura IF p_liquida.factura IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD factura END IF { # Busca factura en el modulo de cuentas por pagar SELECT unique num_doc FROM cptb00001 WHERE num_doc = p_liquida.factura and tipo_doc = "FT" AND cod_sp = p_liquida.cod_sp and cod_sp_sec = p_liquida.cod_sp_sec IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD factura END IF # Chequea si la factura esta pagada SELECT sum(valor) INTO p_valor FROM cptb00001 WHERE aplica_a = p_liquida.factura and cod_sp=p_liquida.cod_sp and cod_sp_sec = p_liquida.cod_sp_sec IF p_valor > 0 THEN LET p_liquida.s_pagada = "NO PAGADA" ELSE LET p_liquida.s_pagada = "PAGADA" END IF IF p_valor is null or p_valor < 0 THEN LET p_liquida.s_pagada = null END IF} AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE # RETURN END IF IF p_liquida.fecha > TODAY THEN CALL msg(375) NEXT FIELD fecha END IF DISPLAY BY NAME p_liquida.* ATTRIBUTE(BOLD) EXIT INPUT END INPUT LET total_Flete = 0 LET total_gastos = 0 LET total_impuesto = 0 LET total_Fob = 0 # Busqueda de los codigos de la orden DISPLAY " " AT 24, 1 DISPLAY "Buscando ITEMS para liquidar... Espere" AT 24, 1 ATTRIBUTE(BOLD) CALL arr_liq.clear() IF p_liquida.tipo = "01" THEN LET selec_it = "SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp, ", " a.cantidad_oc,a.fob,a.cantidad_oc*a.fob,a.costo_flete,a.impuesto,a.otros_g,a.bodega ", "FROM cgtb00018 a,intb00001 b ", "WHERE a.tipo = '", p_liquida.tipo, " '", " and a.num_oc = '", p_liquida.num_oc, " '", " and a.cod_n = b.cod_n and a.cod_grupo = b.cod_grupo and ", " a.cod_tipo = b.cod_tipo and a.cod_sec = b.cod_sec and ", " a.rep_entrada = '", p_liquida.rep_entrada, " '", " " END IF IF p_liquida.tipo = "02" THEN LET selec_it = "SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_Esp,", " a.cantidad_oc,a.fob,a.cantidad_oc*a.fob,a.costo_flete,a.impuesto,a.otros_g,a.bodega ", "FROM cgtb00018 a,iptb00002 b ", "WHERE a.tipo = '", p_liquida.tipo, " '", " and a.num_oc = '", p_liquida.num_oc, " '", " and a.cod_n = b.cod_n and a.cod_grupo = b.cod_grupo and ", " a.cod_tipo = b.cod_tipo and a.cod_sec = b.cod_sec and ", " a.rep_entrada = '", p_liquida.rep_entrada, " '", " " END IF IF p_liquida.tipo = "03" THEN LET selec_it = "SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_Esp,", " a.cantidad_oc,a.fob,a.cantidad_oc*a.fob,a.costo_flete,a.impuesto,a.otros_g,a.bodega ", "FROM cgtb00018 a,irtb00002 b ", "WHERE a.tipo = '", p_liquida.tipo, " '", " and a.num_oc = '", p_liquida.num_oc, " '", " and a.cod_n = b.cod_n and a.cod_grupo = b.cod_grupo and ", " a.cod_tipo = b.cod_tipo and a.cod_sec = b.cod_sec and ", " a.rep_entrada = '", p_liquida.rep_entrada, " '", " " END IF PREPARE comando1 FROM selec_it DECLARE busca4 CURSOR FOR comando1 CALL p_arr_liq.clear() CALL arr_liq.clear() LET idx = 1 FOREACH busca4 INTO p_arr_liq[idx].* LET arr_liq[idx].codigo = p_arr_liq[idx].cod_n USING "&&&&", "-", p_arr_liq[idx].cod_grupo USING "&&&&", "-", p_arr_liq[idx].cod_tipo USING "&&&&", "-", p_arr_liq[idx].cod_sec USING "&&&&&&&&" LET arr_liq[idx].descripcion = p_arr_liq[idx].descripcion LET arr_liq[idx].cantidad_oc = p_arr_liq[idx].cantidad_oc LET arr_liq[idx].impuesto = p_arr_liq[idx].impuesto LET arr_liq[idx].otros_g = p_arr_liq[idx].otros_g LET arr_liq[idx].fob = p_arr_liq[idx].fob LET arr_liq[idx].valor_fob = arr_liq[idx].cantidad_oc * arr_liq[idx].fob LET arr_liq[idx].costo_flete = p_arr_liq[idx].costo_flete LET arr_liq[idx].bodega = p_arr_liq[idx].bodega LET total_flete = arr_liq[idx].costo_flete + total_Flete LET total_impuesto = arr_liq[idx].impuesto + total_impuesto LET total_gastos = arr_liq[idx].otros_g + total_gastos LET total_fob = arr_liq[idx].valor_fob + total_fob LET idx = idx + 1 END FOREACH DISPLAY BY NAME total_flete, total_impuesto, total_gastos, total_fob CALL set_count(idx - 1) INPUT ARRAY arr_liq WITHOUT DEFAULTS FROM s_lq.* BEFORE ROW LET curr = arr_curr() LET scr_l = scr_line() { AFTER FIELD costo_flete IF arr_liq[curr].codigo is not null THEN IF arr_liq[curr].costo_flete is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD costo_flete END IF END IF} AFTER FIELD fob IF arr_liq[curr].cantidad_oc IS NOT NULL THEN LET arr_liq[curr].valor_fob = arr_liq[curr].cantidad_oc * arr_liq[curr].fob END IF DISPLAY arr_liq[curr].valor_fob TO s_lq[scr_l].valor_fob AFTER ROW LET total_impuesto = 0 LET total_gastos = 0 LET total_fob = 0 FOR idx = 1 TO arr_liq.getLength() LET total_impuesto = arr_liq[idx].impuesto + total_impuesto LET total_gastos = arr_liq[idx].otros_g + total_gastos LET total_flete = arr_liq[idx].costo_flete + total_flete LET total_fob = total_fob + arr_liq[idx].valor_fob END FOR DISPLAY BY NAME total_impuesto, total_gastos, total_flete, total_fob AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF EXIT INPUT END INPUT BEGIN WORK # Actualizacion de la tabla general de la liquidacion UPDATE cgtb00017 SET fecha = p_liquida.fecha, liquidada = p_liquida.s_liqui, cerrada = p_liquida.s_cerrada, pagada = p_liquida.s_pagada, factura = p_liquida.factura, prima_us = p_liquida.prima_us, cod_sp = p_liquida.cod_sp, cod_sp_sec = p_liquida.cod_sp_sec, timpuestos = p_liquida.timpuestos, tgastos = p_liquida.tgastos, tflete = p_liquida.tflete, usa_calculo = p_liquida.usa_calculo, us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE tipo = p_liquida.tipo AND num_oc = p_liquida.num_oc AND rep_entrada = p_liquida.rep_entrada AND bodega = p_liquida.bodega # Borrar datos para actualizar DELETE FROM cgtb00018 WHERE tipo = p_liquida.tipo AND num_oc = p_liquida.num_oc AND rep_entrada = p_liquida.rep_entrada AND bodega = p_liquida.bodega # Actualizacion FOR idx = 1 TO arr_liq.getLength() # IF arr_liq[idx].costo_flete is not null OR # arr_liq[idx].fob is not null THEN INSERT INTO cgtb00018 VALUES(p_liquida.tipo, p_liquida.num_oc, p_liquida.rep_entrada, p_arr_liq[idx].cod_n, p_arr_liq[idx].cod_grupo, p_arr_liq[idx].cod_tipo, p_arr_liq[idx].cod_sec, arr_liq[idx].cantidad_oc, arr_liq[idx].fob, arr_liq[idx].costo_flete, arr_liq[idx].impuesto, arr_liq[idx].otros_g, NULL, usuarios, GETDATE(), usuarios, getdate(), p_liquida.bodega) # END IF END FOR COMMIT WORK LET numero_msg = 13 CALL msg(numero_msg) COMMAND KEY("L") "eLiminar" "Eliminacion de Reporte de Entrada Liquidado" PROMPT "Esta Seguro de Eliminar Este Reporte De Entrada(S/N)?" FOR opt_el LET opt_el = upshift(opt_el) IF opt_el = "S" THEN BEGIN WORK DELETE FROM cgtb00017 WHERE tipo = p_liquida.tipo AND num_oc = p_liquida.num_oc AND rep_entrada = p_liquida.rep_entrada DELETE FROM cgtb00018 WHERE tipo = p_liquida.tipo AND num_oc = p_liquida.num_oc AND rep_entrada = p_liquida.rep_entrada COMMIT WORK LET numero_msg = 39 CALL msg(numero_msg) END IF COMMAND "Retornar" CLEAR FORM EXIT MENU END MENU END FUNCTION FUNCTION busca_entradas() DEFINE p_datos ARRAY[50] OF RECORD rep_entrada INTEGER, fecha DATE, titulo_bodega VARCHAR(100), bodega SMALLINT END RECORD OPEN WINDOW w1 WITH FORM "lqfmwd001" IF mat_prima = "S" THEN DECLARE busca_m CURSOR FOR SELECT UNIQUE num_doc, fecha, 'BODEGA MAT PRIMA', '1' FROM intb00006 WHERE orden_compra = p_liquida.num_oc AND tipo = p_liquida.tipo AND status_t IS NULL LET idx = 1 FOREACH busca_m INTO p_datos[idx].* LET idx = idx + 1 END FOREACH CALL set_count(idx - 1) DISPLAY ARRAY p_datos TO s_datos.* LET scr_l = scr_line() LET p_liquida.rep_entrada = p_datos[scr_l].rep_entrada LET p_liquida.bodega = p_datos[scr_l].bodega LET p_liquida.fecha = p_datos[scr_l].fecha END IF DISPLAY "etiqueta ", prod_term IF prod_term = "S" THEN DECLARE busca_p CURSOR FOR SELECT UNIQUE a.num_doc, a.fecha, b.descripcion, a.bodega FROM iptb00006 a, intb00009 b WHERE a.orden_compra = p_liquida.num_oc AND tipo = p_liquida.tipo AND a.bodega = b.cod_bodega AND a.status_t IS NULL LET idx = 1 FOREACH busca_p INTO p_datos[idx].* DISPLAY "bodega ", p_datos[idx].bodega LET idx = idx + 1 END FOREACH CALL set_count(idx - 1) DISPLAY ARRAY p_datos TO s_datos.* LET scr_l = scr_line() LET p_liquida.rep_entrada = p_datos[scr_l].rep_entrada LET p_liquida.bodega = p_datos[scr_l].bodega LET p_liquida.fecha = p_datos[scr_l].fecha END IF IF piezas_r = "S" THEN DECLARE busca_r CURSOR FOR SELECT UNIQUE num_doc, fecha, 'REPUESTOS', '1' FROM irtb00006 WHERE orden_compra = p_liquida.num_oc AND tipo = p_liquida.tipo AND status_t IS NULL LET idx = 1 FOREACH busca_r INTO p_datos[idx].* LET idx = idx + 1 END FOREACH CALL set_count(idx - 1) DISPLAY ARRAY p_datos TO s_datos.* LET scr_l = scr_line() LET p_liquida.rep_entrada = p_datos[scr_l].rep_entrada LET p_liquida.bodega = p_datos[scr_l].bodega LET p_liquida.fecha = p_datos[scr_l].fecha END IF IF piezas_h = "S" THEN DECLARE busca_h CURSOR FOR SELECT UNIQUE num_doc, fecha FROM ihtb00006 WHERE orden_compra = p_liquida.num_oc AND tipo = p_liquida.tipo AND status_t IS NULL LET idx = 1 FOREACH busca_h INTO p_datos[idx].* LET idx = idx + 1 END FOREACH CALL set_count(idx - 1) DISPLAY ARRAY p_datos TO s_datos.* LET scr_l = scr_line() LET p_liquida.rep_entrada = p_datos[scr_l].rep_entrada LET p_liquida.bodega = p_datos[scr_l].bodega LET p_liquida.fecha = p_datos[scr_l].fecha END IF CLOSE WINDOW w1 END FUNCTION