{ ----------------------------------------------------------------------------- PROGRAMA : CGPRMT013 OBJETIVO : Mantenimiento de Cheques de pago en US$ REALIZADO POR : Ing. Juan F. Soto FECHA : Febrero 17, 1995 ----------------------------------------------------------------------------- } GLOBALS "cgprgb000.4gl" DEFINE k_tipo CHAR(3) ###### Funcion que adiciona informacion referente a la aplicacion de un pago FUNCTION cgprmt013() OPTIONS FORM LINE 8, ERROR LINE 24, COMMENT LINE 22, PROMPT LINE 23 CALL pantalla() OPEN FORM cgfmmt013 FROM "cgfmmt013" DISPLAY FORM cgfmmt013 DISPLAY "cgprmt013" AT 4,3 ATTRIBUTE(blue) DISPLAY "Registro De Cheques En US$ " AT 6,26 ATTRIBUTE(blue) MENU "Mant." COMMAND "Adicionar" "Presione ESC Para Grabar Ctrl-C Cancela Ctrl-F Moverse Sobre Pantalla" LET int_flag = FALSE CALL cgprad013() COMMAND "Consultar/Modificar" "Presione ESC Para Buscar Ctrl-C Cancela Ctrl-F Moverse Sobre Pantalla" LET int_flag = FALSE CALL cgprmd013() COMMAND "Salir" LET int_flag = FALSE EXIT MENU END MENU END FUNCTION FUNCTION cgprad013() LET hoy = today LET k_tipo = "CK." LABEL volver1: INITIALIZE recibo.* TO NULL #ERROR "Para Anular Un Cheque Presione " CLEAR FORM LET recibo.cuenta_p = "1108" SELECT cheque_no INTO numero FROM cgtb00012 WHERE cuenta_no = recibo.cuenta_p IF status = notfound THEN LET numero_msg = 205 CALL msg(numero_msg) GOTO volver1 END IF LET numero = numero + 1 LABEL volver: IF opc = "S" or opc is null THEN LET recibo.nom_sup = null LET recibo.monto = null LET opc = null END IF #### Aceptando los valores a insertar referentes al pago INPUT BY NAME recibo.* WITHOUT DEFAULTS AFTER FIELD codigo IF recibo.codigo is not null THEN SELECT a.descripcion INTO p_descrip FROM tetb00003 a WHERE a.codigo = recibo.codigo IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD codigo END IF DISPLAY BY NAME p_descrip END IF AFTER FIELD monto IF recibo.monto is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD monto END IF AFTER FIELD cod_sp_sec ##### Selecionando datos referentes al suplidor IF recibo.cod_sp_sec is not null THEN IF recibo.cod_sp != 1 THEN SELECT a.nom_sp INTO recibo.nom_sup FROM cotb00001 a WHERE a.cod_sp = recibo.cod_sp AND a.cod_sp_sec = recibo.cod_sp_sec IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_sp END IF DISPLAY BY NAME recibo.cod_sp,recibo.cod_sp_sec,recibo.nom_sup NEXT FIELD nom_sup END IF END IF IF recibo.cod_sp = 1 THEN SELECT nom1_emp,apell1_emp,departamento,nomina INTO nombre_emp,apellido_emp,depto,tipo_d FROM adtb00003 WHERE num_emp = recibo.cod_sp_sec IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_sp_sec END IF LET recibo.nom_sup = nombre_emp clipped," ",apellido_emp clipped DISPLAY BY NAME recibo.nom_sup END IF BEFORE FIELD tipo_doc LET recibo.tipo_doc = "CK" AFTER FIELD tipo_doc IF recibo.tipo_doc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tipo_doc END IF ##### Igualando la descripcion de la operacion dependiendo de la clave ##### digitada en el proceso. LET tipo_doc1 = recibo.tipo_doc CASE WHEN recibo.tipo_doc = "CK" LET nom_tipo = "CHEQUE" EXIT CASE WHEN recibo.tipo_doc = "CP" LET nom_tipo = "PAGO ADELANTADO" EXIT CASE END CASE LET recibo.numero = numero DISPLAY BY NAME recibo.numero SELECT *INTO datos_ck.* FROM cgtb00012 WHERE cuenta_no = recibo.cuenta_p DISPLAY BY NAME nom_tipo ATTRIBUTE (BOLD) AFTER FIELD numero IF recibo.numero IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD numero ELSE ###### Chequeando que el numero de registro a procesar no exista en la ###### Maestra de pago. LET referencia = "CK.",recibo.numero using "&&&&&&" SELECT UNIQUE cheque_no FROM cgtb00005 WHERE cheque_no = recibo.numero and cuenta_no = recibo.cuenta_p IF status != NOTFOUND THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD numero END IF END IF IF recibo.tipo_doc[1] != "C" THEN NEXT FIELD cod_sp END IF BEFORE FIELD fecha LET recibo.fecha = hoy DISPLAY BY NAME recibo.fecha AFTER FIELD fecha LET hoy = recibo.fecha IF recibo.fecha is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha END IF LET p_fechas = recibo.fecha { CALL prd() IF bandera = 1 THEN LET bandera = 0 NEXT FIELD fecha END IF } AFTER INPUT ####### Creando la facilidad para cancelar proceso mediante DELETE o SUPR IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF IF recibo.monto is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD monto END IF EXIT INPUT END INPUT # Funcion que captura 5 lineas de detalles CALL detallado() IF opc = "S" or opc is null THEN FOR idx = 1 to 30 LET arr_recibo[idx].aplica_a = null LET arr_recibo[idx].valor_pen = null LET arr_recibo[idx].valor_pag = null END FOR END IF IF recibo.cod_sp = 1 THEN GOTO vuelve END IF IF recibo.cod_sp_sec is not null THEN # Entrada de documentos que se pagaran con este cheque si el usuario LABEL vuelta: PROMPT "Afecta Cuentas Por Pagar?(S/N) " FOR CHAR opcion LET opcion = upshift(opcion) IF opcion != "S" AND opcion != "N" THEN LET numero_msg = -1301 CALL msg(numero_msg) GOTO vuelta END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF IF opcion = "N" THEN FOR idx = 1 to 30 LET arr_recibo[idx].aplica_a = null LET arr_recibo[idx].valor_pen = null LET arr_recibo[idx].valor_pag = null END FOR END IF IF opcion = "S" THEN LET remanente = 0 LABEL arr2: LET sale_arr = "N" INPUT ARRAY arr_recibo WITHOUT DEFAULTS FROM s_recibo.* ON KEY (CONTROL-F) LET sale_arr = "S" EXIT INPUT ON KEY (CONTROL-W) LET curr = arr_curr() LET scr_l = scr_line() ###### Proceso para abrir window en caso de desconocer el numero de orden ###### perteneciente a la factura que se aplicara el pago. CASE WHEN INFIELD (aplica_a) CALL busca_aplicacion() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false NEXT FIELD aplica_a END IF IF existe = "N" THEN LET existe = "S" NEXT FIELD aplica_a END IF DISPLAY arr_recibo[curr].aplica_a to s_recibo[scr_l].aplica_a DISPLAY arr_recibo[curr].valor_pen to s_recibo[scr_l].valor_pen LET arr_recibo[curr].valor_pag = arr_recibo[curr].valor_pen DISPLAY arr_recibo[curr].valor_pag to s_recibo[scr_l].valor_pag NEXT FIELD valor_pag LET verdad = "N" CALL repetir1() IF verdad = "S" THEN NEXT FIELD aplica_a END IF END CASE BEFORE ROW LET curr = arr_curr() LET scr_l = scr_line() AFTER FIELD orden_no IF arr_recibo[curr].orden_no != 999999 THEN #IS NOT NULL THEN IF recibo.cod_sp IS NULL THEN ##### Chequeando que el numero de orden a digitar exista en la maestra de pago[ SELECT UNIQUE a.tipo,a.orden_no,a.cod_sp,a.cod_sp_sec INTO p_tipo,p_orden,recibo.cod_sp,recibo.cod_sp_sec FROM cptb00001 a WHERE a.tipo = arr_recibo[curr].tipo AND a.orden_no = arr_recibo[curr].orden_no IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD tipo END IF ELSE ###### Chequeando que el numero de orden exista en la maestra de orden SELECT b.num_oc FROM cotb00014 b WHERE b.tipo=arr_recibo[curr].tipo AND b.num_oc=arr_recibo[curr].orden_no AND b.cod_sp = recibo.cod_sp AND b.cod_sp_sec = recibo.cod_sp_sec IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD tipo END IF END IF ELSE IF recibo.tipo_doc = "CP" THEN LET arr_recibo[curr].tipo = "99" NEXT FIELD valor_pag END IF END IF AFTER FIELD aplica_a LET tipo_doc1 = recibo.tipo_doc IF arr_recibo[curr].orden_no is not null AND arr_recibo[curr].aplica_a IS NULL THEN LET tipo_doc1= "CP" # LET nom_tipo = "PAGO ADELANTADO" END IF IF arr_recibo[curr].orden_no is not null and arr_recibo[curr].aplica_a is not null THEN LET numero_msg = 212 CALL msg(numero_msg) NEXT FIELD aplica_a END IF IF arr_recibo[curr].aplica_a IS NOT NULL THEN IF recibo.cod_sp != 1 THEN IF recibo.tipo_doc = "CP" THEN IF arr_recibo[curr].orden_no IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD orden_no ELSE NEXT FIELD valor_pag END IF END IF IF arr_recibo[curr].aplica_a IS NOT NULL THEN # LET arr_recibo[curr].orden_no = null # LET arr_recibo[curr].tipo = null LET verdad = "N" CALL repetir1() IF verdad = "S" THEN NEXT FIELD aplica_a END IF IF arr_recibo[curr].aplica_a IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD aplica_a END IF # Controla que la factura pertenezca al suplidor SELECT a.tipo,a.orden_no,a.valor INTO arr_recibo[curr].tipo,arr_recibo[curr].orden_no,valor_fac FROM cptb00001 a WHERE a.num_doc = arr_recibo[curr].aplica_a AND a.cod_sp = recibo.cod_sp AND a.cod_sp_sec = recibo.cod_sp_sec AND a.tipo_doc = "FT" AND a.status_t is null IF status = notfound THEN LET numero_msg = 126 CALL msg(numero_msg) NEXT FIELD aplica_a END IF # Busca el valor pendiente de la factura SELECT sum(a.valor*-1) INTO valor_fac1 FROM cptb00001 a WHERE a.cod_sp = recibo.cod_sp AND a.cod_sp_sec = recibo.cod_sp_sec AND a.aplica_a = arr_recibo[curr].aplica_a AND a.tipo_doc not matches "*FT*" AND a.status_t IS NULL IF valor_fac1 IS NULL THEN LET valor_fac1 = 0 END IF IF valor_fac IS NULL THEN LET valor_fac = 0 END IF ####### Calculando el valor pendiente de la factura LET arr_recibo[curr].valor_pen = valor_fac - valor_fac1 LET arr_recibo[curr].valor_pag = arr_recibo[curr].valor_pen DISPLAY arr_recibo[curr].valor_pag to s_recibo[scr_l].valor_pag DISPLAY arr_recibo[curr].valor_pen to s_recibo[scr_l].valor_pen END IF END IF END IF AFTER FIELD valor_pag IF recibo.tipo_doc = "CP" THEN IF arr_recibo[curr].orden_no IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD orden_no END IF END IF IF arr_recibo[curr].aplica_a IS NOT NULL AND arr_recibo[curr].valor_pen IS NOT NULL THEN LET verdad = "N" CALL repetir1() IF verdad = "S" THEN NEXT FIELD aplica_a END IF END IF IF arr_recibo[curr].valor_pag IS NULL THEN LET arr_recibo[curr].valor_pag = 0 END IF IF arr_recibo[curr].aplica_a is not null or arr_recibo[curr].orden_no is not null THEN IF arr_recibo[curr].valor_pag = 0 THEN LET numero_msg = 207 CALL msg(numero_msg) NEXT FIELD valor_pag END IF END IF LET valor = 0 FOR idx = 1 TO arr_count() IF arr_recibo[idx].valor_pag is null THEN LET arr_recibo[idx].valor_pag = 0 END IF LET valor = arr_recibo[idx].valor_pag + valor LET remanente = recibo.monto - valor DISPLAY BY NAME remanente attribute (bold) END FOR AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF IF arr_recibo[curr].aplica_a is not null or arr_recibo[curr].orden_no is not null THEN IF arr_recibo[curr].valor_pag = 0 THEN LET numero_msg = 207 CALL msg(numero_msg) NEXT FIELD valor_pag END IF END IF END INPUT IF sale_arr = "S" THEN LET opc = "N" GOTO volver END IF # Sumariza el valor de las facturas para que sean iguales LET valor_f = 0 LET ins_cp = arr_count() FOR idx= 1 to arr_count() IF arr_recibo[idx].aplica_a is null and arr_recibo[idx].orden_no is null THEN LET arr_recibo[idx].valor_pag = 0 END IF IF arr_recibo[idx].valor_pag is null THEN LET arr_recibo[idx].valor_pag = 0 END IF LET valor_f = arr_recibo[idx].valor_pag + valor_f END FOR #------------------------------------------------------------------------ END IF END IF # Estas asignaciones estan en comentario por que los usuarios # de contabilidad desean meter los numeros de documentos en el arreglo de # arriba y el arreglo de las cuentas contables { FOR idx = 1 TO arr_count() IF arr_recibo[idx].orden_no is not null THEN LET arr_cuenta1[idx].num_doc = arr_recibo[idx].tipo,"-", arr_recibo[idx].orden_no using "&&&&&&" END IF IF arr_recibo[idx].aplica_a is not null THEN LET arr_cuenta1[idx].num_doc = arr_recibo[idx].aplica_a END IF END FOR } IF opc = "N" THEN GOTO vuelve END IF FOR idx = 1 TO 50 LET arr_cuenta1[idx].cuenta_no = null LET arr_cuenta1[idx].num_doc = null LET arr_cuenta1[idx].cod_aux = null LET arr_cuenta1[idx].cod_sec = null LET arr_cuenta1[idx].num_doc = null LET arr_cuenta1[idx].nom_cuenta = null LET arr_cuenta1[idx].departamento = null LET arr_cuenta1[idx].debito = null LET arr_cuenta1[idx].credito = null END FOR LET arr_cuenta1[1].cod_aux = recibo.cod_sp LET arr_cuenta1[1].cod_sec = recibo.cod_sp_sec LABEL vuelve: # Captura de la codificacion del cheque para contabilidad LABEL arr3: LET sale_arr = "N" INPUT ARRAY arr_cuenta1 WITHOUT DEFAULTS FROM s_cuenta.* ON KEY(CONTROL-F) LET opc = "N" LET sale_arr = "S" EXIT INPUT ON KEY(CONTROL-P) NEXT FIELD cuenta_no ON KEY(CONTROL-W) IF INFIELD(cuenta_no) THEN # CALL busca_cuenta() IF int_flag THEN LET int_flag = false NEXT FIELD cuenta_no END IF LET arr_cuenta1[curr].cuenta_no = cuentas[curr1].cuenta_no LET arr_cuenta1[curr].nom_cuenta = cuentas[curr1].descripcion DISPLAY arr_cuenta1[curr].cuenta_no TO s_cuenta[scr_l].cuenta_no DISPLAY arr_cuenta1[curr].nom_cuenta TO s_cuenta[scr_l].nom_cuenta IF cuentas[curr1].nivel != 3 THEN LET numero_msg = 175 CALL msg(numero_msg) NEXT FIELD cuenta_no END IF END IF BEFORE ROW LET curr = arr_curr() LET scr_l = scr_line() AFTER FIELD cuenta_no IF arr_cuenta1[curr].cuenta_no is not null THEN SELECT a.descripcion,a.origen,a.depto,a.nivel,a.ref,a.cata INTO p_descripcion,p_origen,acept_dpto,p_nivel,p_ref,p_cata FROM cgtb00001 a WHERE a.cuenta_no = arr_cuenta1[curr].cuenta_no and a.status_t is null IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cuenta_no END IF LET arr_cuenta1[curr].nom_cuenta = p_descripcion DISPLAY arr_cuenta1[curr].nom_cuenta TO s_cuenta[scr_l].nom_cuenta # Controla que la cuenta del banco no sea igual a una cuenta digitada # en el arreglo LET cuenta_a = arr_cuenta1[curr].cuenta_no clipped LET cuenta_b = recibo.cuenta_p clipped IF cuenta_a = cuenta_b THEN LET numero_msg = 192 CALL msg(numero_msg) NEXT FIELD cuenta_no END IF #----------------------------------------------------------------------------- IF p_nivel < 3 THEN LET numero_msg = 175 CALL msg(numero_msg) NEXT FIELD cuenta_no END IF IF acept_dpto = "S" THEN NEXT FIELD departamento ELSE LET arr_cuenta1[curr].departamento = null DISPLAY arr_cuenta1[curr].departamento TO s_cuenta[scr_l].departamento END IF IF p_cata = "S" THEN NEXT FIELD cod_aux ELSE LET arr_cuenta1[curr].cod_aux = null LET arr_cuenta1[curr].cod_sec = null DISPLAY arr_cuenta1[curr].cod_aux TO s_cuenta[scr_l].cod_aux DISPLAY arr_cuenta1[curr].cod_sec TO s_cuenta[scr_l].cod_sec IF p_ref = "S" THEN NEXT FIELD num_doc ELSE LET arr_cuenta1[curr].num_doc = null DISPLAY arr_cuenta1[curr].num_doc TO s_cuenta[scr_l].num_doc END IF NEXT FIELD debito END IF END IF AFTER FIELD departamento IF arr_cuenta1[curr].cuenta_no is not null THEN IF acept_dpto = "S" THEN IF arr_cuenta1[curr].departamento is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD departamento END IF SELECT a.nom_dpto INTO nombre_dpto FROM adtb00001 a WHERE a.departamento = arr_cuenta1[curr].departamento and a.status_t is null IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD departamento END IF DISPLAY BY NAME nombre_dpto ATTRIBUTE(blue) ELSE LET arr_cuenta1[curr].departamento = null DISPLAY arr_cuenta1[curr].departamento TO s_cuenta[scr_l].departamento IF p_cata = "S" THEN NEXT FIELD cod_aux ELSE IF p_ref = "S" THEN NEXT FIELD num_doc END IF END IF END IF END IF NEXT FIELD debito BEFORE FIELD cod_aux IF p_cata != "S" THEN LET arr_cuenta1[curr].cod_aux = null LET arr_cuenta1[curr].cod_sec = null DISPLAY arr_cuenta1[curr].cod_aux TO s_cuenta[scr_l].cod_aux DISPLAY arr_cuenta1[curr].cod_sec TO s_cuenta[scr_l].cod_sec NEXT FIELD num_doc END IF AFTER FIELD cod_aux IF arr_cuenta1[curr].cuenta_no is not null THEN IF p_cata = "S" THEN IF arr_cuenta1[curr].cod_aux is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_aux END IF ELSE LET arr_cuenta1[curr].cod_aux = null LET arr_cuenta1[curr].cod_sec = null DISPLAY arr_cuenta1[curr].cod_aux TO s_cuenta[scr_l].cod_aux DISPLAY arr_cuenta1[curr].cod_sec TO s_cuenta[scr_l].cod_sec NEXT FIELD num_doc END IF END IF AFTER FIELD cod_sec IF arr_cuenta1[curr].cuenta_no is not null THEN IF p_cata = "S" THEN IF arr_cuenta1[curr].cod_sec is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_aux END IF IF arr_cuenta1[curr].cod_aux != 1 THEN SELECT a.nom_sp INTO nombre_cata FROM cotb00001 a WHERE a.cod_sp = arr_cuenta1[curr].cod_aux AND a.cod_sp_sec = arr_cuenta1[curr].cod_sec IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_aux END IF DISPLAY BY NAME nombre_cata ATTRIBUTE(blue) END IF IF arr_cuenta1[curr].cod_aux = 1 THEN SELECT nom1_emp,apell1_emp,departamento,nomina INTO nombre_cata FROM adtb00003 WHERE num_emp = arr_cuenta1[curr].cod_sec IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_aux END IF DISPLAY BY NAME nombre_cata IF p_ref = "S" THEN NEXT FIELD num_doc ELSE LET arr_cuenta1[curr].num_doc = null DISPLAY arr_cuenta1[curr].num_doc TO s_cuenta[scr_l].num_doc NEXT FIELD debito END IF END IF END IF END IF BEFORE FIELD num_doc IF p_ref != "S" THEN NEXT FIELD debito END IF AFTER FIELD num_doc IF arr_cuenta1[curr].cuenta_no is not null THEN IF p_ref = "S" THEN IF arr_cuenta1[curr].num_doc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_doc END IF ELSE LET arr_cuenta1[curr].num_doc = null DISPLAY arr_cuenta1[curr].num_doc TO s_cuenta[scr_l].num_doc END IF END IF AFTER FIELD debito IF arr_cuenta1[curr].debito is not null or arr_cuenta1[curr].debito != 0 THEN IF arr_cuenta1[curr].debito != 0 THEN IF arr_cuenta1[curr].cuenta_no is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cuenta_no END IF END IF END IF AFTER ROW IF arr_cuenta1[curr].cuenta_no is not null THEN IF arr_cuenta1[curr].debito = 0 and arr_cuenta1[curr].credito = 0 THEN LET numero_msg = 207 CALL msg(numero_msg) NEXT FIELD cuenta_no END IF END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF IF valor_f is null THEN LET valor_f = 0 END IF IF arr_cuenta1[curr].debito is not null THEN IF arr_cuenta1[curr].cuenta_no is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cuenta_no END IF END IF IF arr_cuenta1[curr].credito is not null THEN IF arr_cuenta1[curr].cuenta_no is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cuenta_no END IF END IF LET tiene_cta = "N" FOR idx = 1 TO arr_count() IF arr_cuenta1[idx].cuenta_no is not null THEN LET tiene_cta = "S" END IF END FOR IF tiene_cta = "N" THEN LET numero_msg = 84 CALL msg(numero_msg) NEXT FIELD cuenta_no END IF END INPUT IF sale_arr = "S" THEN GOTO arr2 END IF LET monto = 0 LET valor = 0 FOR idx = 1 TO arr_count() IF arr_cuenta1[idx].debito is null THEN LET arr_cuenta1[idx].debito = 0 END IF IF arr_cuenta1[idx].credito is null THEN LET arr_cuenta1[idx].credito = 0 END IF LET valor = valor + arr_cuenta1[idx].debito LET monto = arr_cuenta1[idx].credito + monto END FOR LET monto = valor - monto IF monto != recibo.monto THEN LET numero_msg = 178 CALL msg(numero_msg) GOTO vuelve END IF PROMPT "Toda la Informacion Esta Correcta (S/N) ?" FOR char opc LET opc = upshift(opc) LET limpia = "N" IF opc = "S" THEN LET limpia = "S" # Actualizacion de las tablas de cuentas por pagar y contabilidad general IF recibo.cod_sp > 1 THEN IF opcion = "S" THEN LET opcion = null LET numero1 = recibo.numero DELETE FROM cptb00001 WHERE @tipo_doc = tipo_doc1 AND @num_doc = numero1 AND @cod_sp = recibo.cod_sp AND @cod_sp_sec = recibo.cod_sp_sec FOR idx = 1 to ins_cp IF arr_recibo[idx].valor_pag <> 0 and arr_recibo[idx].valor_pag is not null THEN ##### Proceso para insertar valores en cuentas por pagar IF arr_recibo[idx].valor_pag > 0 THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1 END IF IF arr_recibo[idx].orden_no IS NOT NULL OR arr_recibo[idx].aplica_a IS NOT NULL THEN INSERT INTO cptb00001 values (tipo_doc1,recibo.numero, recibo.cod_sp,recibo.cod_sp_sec,recibo.fecha,recibo.fecha, arr_recibo[idx].orden_no, arr_recibo[idx].tipo,arr_recibo[idx].aplica_a,recibo.cuenta_p, arr_recibo[idx].valor_pag,detalle_1,null,USER,CURRENT,null,null) END IF END IF IF arr_recibo[idx].aplica_a is not null THEN IF idx < 6 THEN LET factura1 = arr_recibo[idx].aplica_a CLIPPED LET facturas = facturas CLIPPED,",",factura1 CLIPPED END IF END IF IF arr_recibo[idx].orden_no is not null and arr_recibo[idx].orden_no != 999999 THEN IF idx < 10 THEN LET orden1 = arr_recibo[idx].orden_no USING "######" LET ordenes = ordenes CLIPPED,",",orden1 CLIPPED END IF END IF END FOR CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF ERROR "INSERTE EN CUENTAS POR PAGAR" END IF END IF DISPLAY " " # Actualizacion de la tabla datos generales del cheque INSERT INTO cgtb00005 values (recibo.cuenta_p,recibo.numero,null,recibo.fecha, recibo.nom_sup,recibo.tasa,recibo.monto,opc1, null,user,current,null,null) # Actualizacion de la tabla control de los cheques UPDATE cgtb00012 set cheque_no = recibo.numero WHERE cuenta_no = recibo.cuenta_p # Actualizacion de la tabla transacciones de contabildad general LET referencia = "CK.",recibo.numero using "&&&&&&" FOR idx = 1 TO arr_count() IF arr_cuenta1[idx].cuenta_no is not null THEN IF arr_recibo[idx].orden_no is not null THEN LET refe[idx] = arr_recibo[idx].orden_no END IF IF arr_recibo[idx].orden_no is not null THEN LET refe[idx] = arr_recibo[idx].tipo using "&&","-", arr_recibo[idx].aplica_a using "&&&&&&" END IF IF arr_recibo[idx].aplica_a is not null THEN LET refe[idx] = arr_recibo[idx].aplica_a END IF INSERT INTO cgtb00004 values (recibo.fecha,2,referencia, arr_cuenta1[idx].cuenta_no,arr_cuenta1[idx].departamento, arr_cuenta1[idx].num_doc,arr_cuenta1[idx].cod_aux, arr_cuenta1[idx].cod_sec,recibo.cuenta_p, detalle_1,detalle_2, arr_cuenta1[idx].debito, arr_cuenta1[idx].credito,null,user,current,null,null) CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF END FOR # Inserta los registros necesarios para la tabla de tesoreria INSERT INTO tetb00006 values (recibo.numero,recibo.cuenta_p, recibo.codigo,null,user,current,null,null) #---------------------------------------------------------------------------- INSERT INTO cgtb00004 values (recibo.fecha,2,referencia, recibo.cuenta_p,null, null,null,null,recibo.cuenta_p, detalle_1,detalle_2,0,recibo.monto, null,user,current,null,null) LET arr_cuenta1[1].cuenta_no = recibo.cuenta_p LET arr_cuenta1[1].nom_cuenta = p_descripcion LET arr_cuenta1[1].debito = 0 LET arr_cuenta1[1].num_doc = null LET arr_cuenta1[1].departamento = null LET arr_cuenta1[1].cod_aux = null LET arr_cuenta1[1].cod_sec = null LET arr_cuenta1[1].credito = recibo.monto LET numero_msg = 1 CALL msg(numero_msg) CLEAR FORM FOR idx = 1 TO 50 LET arr_cuenta1[idx].cuenta_no = null LET arr_cuenta1[idx].num_doc = null LET arr_cuenta1[idx].cod_aux = null LET arr_cuenta1[idx].cod_sec = null LET arr_cuenta1[idx].nom_cuenta = null LET arr_cuenta1[idx].departamento = null LET arr_cuenta1[idx].debito = null LET arr_cuenta1[idx].credito = null END FOR END IF IF opc = "N" THEN GOTO volver ELSE GOTO volver1 END IF END FUNCTION FUNCTION cgprmd013() CLEAR FORM CONSTRUCT criterio ON a.cheque_no,a.cuenta_no FROM numero,cuenta_p LET selec_p = "SELECT 'CK',a.cuenta_no,a.cheque_no,12,1,a.portador, ", " a.fecha,a.tasa,a.monto,c.codigo,a.us_crea,a.fech_crea ", "FROM cgtb00005 a ,OUTER tetb00006 c ", "WHERE a.status_t IS NULL AND ", criterio clipped, " AND c.cheque_no = a.cheque_no AND a.cuenta_no = '1108' ORDER BY 3 " PREPARE comando FROM selec_p DECLARE accion5 SCROLL CURSOR FOR comando OPEN accion5 FETCH FIRST accion5 INTO recibo.*,usuario,fecha_crea IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF CALL busca_cheque() LET referencia = "CK.",recibo.numero USING "&&&&&&" SELECT UNIQUE a.detalle_1,a.detalle_2 INTO detalle_1,detalle_2 FROM cgtb00004 a WHERE a.ref = referencia AND a.status_t IS NULL AND a.cuenta_no = recibo.cuenta_p CALL procede() DISPLAY BY NAME recibo.* MENU "Consulta" COMMAND "Primero" FETCH FIRST accion5 INTO recibo.*,usuario,fecha_crea CALL busca_cheque() LET referencia = "CK.",recibo.numero USING "&&&&&&" SELECT UNIQUE a.detalle_1,a.detalle_2 INTO detalle_1,detalle_2 FROM cgtb00004 a WHERE a.ref = referencia AND a.status_t IS NULL AND a.cuenta_no = recibo.cuenta_p CALL procede() DISPLAY BY NAME recibo.*,p_descrip LET numero_msg = 5 CALL msg(numero_msg) COMMAND "Siguiente" FETCH NEXT accion5 INTO recibo.*,usuario,fecha_crea IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF CALL busca_cheque() LET referencia = "CK.",recibo.numero USING "&&&&&&" SELECT UNIQUE a.detalle_1,a.detalle_2 INTO detalle_1,detalle_2 FROM cgtb00004 a WHERE a.ref = referencia AND a.status_t IS NULL AND a.cuenta_no = recibo.cuenta_p CALL procede() DISPLAY BY NAME recibo.*,p_descrip COMMAND "Anterior" FETCH PREVIOUS accion5 INTO recibo.*,usuario,fecha_crea IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF CALL busca_cheque() LET referencia = "CK.",recibo.numero USING "&&&&&&" SELECT UNIQUE a.detalle_1,a.detalle_2 INTO detalle_1,detalle_2 FROM cgtb00004 a WHERE a.ref = referencia AND a.status_t IS NULL AND a.cuenta_no = recibo.cuenta_p CALL procede() DISPLAY BY NAME recibo.*,p_descrip COMMAND "Ultimo" FETCH LAST accion5 INTO recibo.*,usuario,fecha_crea CALL busca_cheque() LET referencia = "CK.",recibo.numero USING "&&&&&&" SELECT UNIQUE a.detalle_1,a.detalle_2 INTO detalle_1,detalle_2 FROM cgtb00004 a WHERE a.ref = referencia AND a.status_t IS NULL AND a.cuenta_no = recibo.cuenta_p CALL procede() DISPLAY BY NAME recibo.*,p_descrip LET numero_msg = 4 CALL msg(numero_msg) COMMAND "Escoger" "Presione ESC Para Grabar Ctrl-C Cancela Ctrl-F Moverse Sobre Pantalla" LET p_fechas = recibo.fecha CALL prd() IF bandera = 1 THEN LET bandera = 0 RETURN END IF LABEL vuelve10: INPUT BY NAME recibo.* WITHOUT DEFAULTS AFTER FIELD codigo IF recibo.codigo is not null THEN SELECT a.descripcion INTO p_descrip FROM tetb00003 a WHERE a.codigo = recibo.codigo IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD codigo END IF DISPLAY BY NAME p_descrip END IF AFTER FIELD tipo_doc NEXT FIELD cod_sp AFTER FIELD cod_sp NEXT FIELD cod_sp_sec AFTER FIELD monto IF recibo.monto is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD monto END IF AFTER FIELD cuenta_p IF recibo.cuenta_p is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cuenta_p END IF SELECT cheque_no INTO numero FROM cgtb00012 WHERE cuenta_no = recibo.cuenta_p IF status = notfound THEN LET numero_msg = 205 CALL msg(numero_msg) NEXT FIELD cuenta_p END IF LET numero = numero + 1 # LET recibo.numero = numero DISPLAY BY NAME recibo.numero AFTER FIELD cod_sp_sec ##### Selecionando datos referentes al suplidor IF recibo.cod_sp_sec is not null THEN IF recibo.cod_sp != 1 THEN SELECT a.nom_sp INTO recibo.nom_sup FROM cotb00001 a WHERE a.cod_sp = recibo.cod_sp AND a.cod_sp_sec = recibo.cod_sp_sec IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_sp END IF DISPLAY BY NAME recibo.cod_sp,recibo.cod_sp_sec,recibo.nom_sup NEXT FIELD nom_sup END IF END IF IF recibo.cod_sp = 1 THEN SELECT nom1_emp,apell1_emp,departamento,nomina INTO nombre_emp,apellido_emp,depto,tipo_d FROM adtb00003 WHERE num_emp = recibo.cod_sp_sec IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_sp_sec END IF LET recibo.nom_sup = nombre_emp clipped," ",apellido_emp clipped DISPLAY BY NAME recibo.nom_sup END IF BEFORE FIELD tipo_doc LET recibo.tipo_doc = "CK" AFTER FIELD tipo_doc IF recibo.tipo_doc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tipo_doc END IF ##### Igualando la descripcion de la operacion dependiendo de la clave ##### digitada en el proceso. LET tipo_doc1 = recibo.tipo_doc CASE WHEN recibo.tipo_doc = "CK" LET nom_tipo = "CHEQUE" EXIT CASE WHEN recibo.tipo_doc = "CP" LET nom_tipo = "PAGO ADELANTADO" EXIT CASE END CASE DISPLAY BY NAME nom_tipo ATTRIBUTE (BOLD) NEXT FIELD cod_sp AFTER FIELD fecha IF recibo.fecha is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha END IF LET p_fechas = recibo.fecha CALL prd() IF bandera = 1 THEN LET bandera = 0 NEXT FIELD fecha 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 ####### Creando la facilidad para cancelar proceso mediante DELETE o SUPR IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET numero1 = recibo.numero USING "<<<<<<<" DECLARE buscara CURSOR FOR SELECT b.tipo,b.orden_no,b.aplica_a,b.valor*-1,b.valor*-1 FROM cptb00001 b WHERE b.status_t IS NULL AND b.num_doc = numero1 AND b.tipo_doc = recibo.tipo_doc # b.cta_ctble = recibo.cuenta_p LET idx = 1 LET i = 0 FOREACH buscara INTO arr_recibo[idx].* LET arr_recibo[idx].valor_pen = 0 LET idx = idx + 1 LET i = i + 1 END FOREACH CALL SET_COUNT(idx -1) IF i = 0 THEN LET existe = "N" END IF IF recibo.cod_sp_sec is not null THEN LABEL vuelta1: PROMPT "Afecta Cuentas Por Pagar?(S/N) " FOR CHAR opcion LET opcion = upshift(opcion) IF opcion != "S" AND opcion != "N" THEN LET numero_msg = -1301 CALL msg(numero_msg) GOTO vuelta1 END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF IF opcion = "N" THEN FOR idx = 1 to 30 LET arr_recibo[idx].tipo = null LET arr_recibo[idx].orden_no = null LET arr_recibo[idx].aplica_a = null LET arr_recibo[idx].valor_pen = null LET arr_recibo[idx].valor_pag = null END FOR LET valor_f = 0 FOR idx = 1 TO 2 DISPLAY arr_recibo[idx].aplica_a TO s_recibo[idx].aplica_a DISPLAY arr_recibo[idx].valor_pen TO s_recibo[idx].valor_pen DISPLAY arr_recibo[idx].valor_pag TO s_recibo[idx].valor_pag DISPLAY arr_recibo[idx].tipo TO s_recibo[idx].tipo DISPLAY arr_recibo[idx].orden_no TO s_recibo[idx].orden_no END FOR END IF LABEL arr10: IF opcion = "N" THEN GOTO arr2 END IF IF opcion = "S" THEN #LET sale_arr = "N" INPUT ARRAY arr_recibo WITHOUT DEFAULTS FROM s_recibo.* ON KEY (CONTROL-F) LET opc = "N" LET sale_arr = "S" EXIT INPUT ON KEY (CONTROL-W) LET curr = arr_curr() LET scr_l = scr_line() ###### Proceso para abrir window en caso de desconocer el numero de orden ###### perteneciente a la factura que se aplicara el pago. CASE WHEN INFIELD (aplica_a) CALL busca_aplicacion() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false NEXT FIELD aplica_a END IF IF existe = "N" THEN LET existe = "S" NEXT FIELD aplica_a END IF DISPLAY arr_recibo[curr].aplica_a to s_recibo[scr_l].aplica_a DISPLAY arr_recibo[curr].valor_pen to s_recibo[scr_l].valor_pen LET arr_recibo[curr].valor_pag = arr_recibo[curr].valor_pen DISPLAY arr_recibo[curr].valor_pag to s_recibo[scr_l].valor_pag NEXT FIELD valor_pag LET verdad = "N" CALL repetir1() IF verdad = "S" THEN NEXT FIELD aplica_a END IF END CASE BEFORE ROW LET curr = arr_curr() LET scr_l = scr_line() AFTER FIELD orden_no IF arr_recibo[curr].orden_no != 999999 THEN #IS NOT NULL THEN IF recibo.cod_sp IS NULL THEN ##### Chequeando que el numero de orden a digitar exista en la maestra de pago[ SELECT UNIQUE a.tipo,a.orden_no,a.cod_sp,a.cod_sp_sec INTO p_tipo,p_orden,recibo.cod_sp,recibo.cod_sp_sec FROM cptb00001 a WHERE a.tipo = arr_recibo[curr].tipo AND a.orden_no = arr_recibo[curr].orden_no IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD tipo END IF ELSE ###### Chequeando que el numero de orden exista en la maestra de orden SELECT b.num_oc FROM cotb00014 b WHERE b.tipo = arr_recibo[curr].tipo AND b.num_oc = arr_recibo[curr].orden_no AND b.cod_sp = recibo.cod_sp AND b.cod_sp_sec = recibo.cod_sp_sec IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD tipo END IF END IF ELSE IF recibo.tipo_doc = "CP" THEN LET arr_recibo[curr].tipo = "99" NEXT FIELD valor_pag END IF END IF AFTER FIELD aplica_a IF arr_recibo[curr].orden_no is not null AND arr_recibo[curr].aplica_a IS NULL THEN LET tipo_doc1= "CP" # LET nom_tipo = "PAGO ADELANTADO" # DISPLAY BY NAME nom_tipo,recibo.tipo_doc attribute (bold) ELSE LET tipo_doc1 = recibo.tipo_doc END IF IF arr_recibo[curr].aplica_a IS NOT NULL THEN IF recibo.cod_sp != 1 THEN IF recibo.tipo_doc = "CP" THEN IF arr_recibo[curr].orden_no IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD orden_no ELSE NEXT FIELD valor_pag END IF END IF IF arr_recibo[curr].aplica_a IS NOT NULL THEN # LET arr_recibo[curr].orden_no = null # LET arr_recibo[curr].tipo = null LET verdad = "N" CALL repetir1() IF verdad = "S" THEN NEXT FIELD aplica_a END IF # Controla que la factura pertenezca al suplidor SELECT a.tipo,a.orden_no,a.valor INTO arr_recibo[curr].tipo,arr_recibo[curr].orden_no,valor_fac FROM cptb00001 a WHERE a.num_doc = arr_recibo[curr].aplica_a AND a.cod_sp=recibo.cod_sp AND a.cod_sp_sec=recibo.cod_sp_sec AND a.tipo_doc = "FT" AND a.status_t is null IF status = notfound THEN LET numero_msg = 126 CALL msg(numero_msg) NEXT FIELD aplica_a END IF # Busca el valor pendiente de la factura LET valor_fac1 = 0 SELECT sum(a.valor) INTO valor_fac1 FROM cptb00001 a WHERE a.cod_sp=recibo.cod_sp AND a.cod_sp_sec=recibo.cod_sp_sec AND a.aplica_a = arr_recibo[curr].aplica_a AND a.status_t IS NULL IF valor_fac1 IS NULL THEN LET valor_fac1 = 0 END IF IF valor_fac IS NULL THEN LET valor_fac = 0 END IF ####### Calculando el valor pendiente de la factura LET arr_recibo[curr].valor_pen = valor_fac1 # LET arr_recibo[curr].valor_pag = arr_recibo[curr].valor_pen # DISPLAY arr_recibo[curr].valor_pag to s_recibo[scr_l].valor_pag DISPLAY arr_recibo[curr].valor_pen to s_recibo[scr_l].valor_pen END IF END IF END IF AFTER FIELD valor_pag IF recibo.tipo_doc = "CP" THEN IF arr_recibo[curr].orden_no IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD orden_no END IF END IF IF arr_recibo[curr].aplica_a IS NOT NULL AND arr_recibo[curr].valor_pen IS NOT NULL THEN LET verdad = "N" CALL repetir1() IF verdad = "S" THEN NEXT FIELD aplica_a END IF END IF IF arr_recibo[curr].valor_pag IS NULL THEN LET arr_recibo[curr].valor_pag = 0 END IF IF arr_recibo[curr].aplica_a is not null THEN IF arr_recibo[curr].valor_pag = 0 THEN LET numero_msg = 207 CALL msg(numero_msg) NEXT FIELD valor_pag END IF END IF IF arr_recibo[curr].aplica_a is not null THEN IF arr_recibo[curr].valor_pag = 0 THEN LET numero_msg = 207 CALL msg(numero_msg) NEXT FIELD valor_pag END IF END IF LET valor_f = 0 FOR idx = 1 TO arr_count() IF arr_recibo[idx].valor_pag is null THEN LET arr_recibo[idx].valor_pag = 0 END IF LET valor_f = arr_recibo[idx].valor_pag + valor_f LET m = idx END FOR LET remanente = recibo.monto - valor_f DISPLAY BY NAME remanente attribute (bold) 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 END IF IF sale_arr = "S" THEN GOTO vuelve10 END IF END IF LABEL arr2: FOR idx = 1 TO 50 LET arr_cuenta1[idx].cuenta_no = null LET arr_cuenta1[idx].num_doc = null LET arr_cuenta1[idx].cod_aux = null LET arr_cuenta1[idx].cod_sec = null LET arr_cuenta1[idx].nom_cuenta = null LET arr_cuenta1[idx].departamento = null LET arr_cuenta1[idx].debito = null LET arr_cuenta1[idx].credito = null END FOR LET referencia = "CK.",recibo.numero USING "&&&&&&" DECLARE buscara1 CURSOR FOR SELECT c.cuenta_no,c.departamento,c.cod_aux,c.cod_sec,c.num_doc, d.descripcion,c.debito,c.credito FROM cgtb00004 c,cgtb00001 d WHERE c.cuenta_no = d.cuenta_no AND c.ref = referencia AND d.status_t IS NULL AND c.cuenta_no NOT IN (recibo.cuenta_p) AND c.detalles = recibo.cuenta_p LET idx = 1 FOREACH buscara1 INTO arr_cuenta1[idx].* LET idx = idx + 1 END FOREACH CALL SET_COUNT(idx - 1) LABEL err1: # Captura de la codificacion del cheque para contabilidad INPUT ARRAY arr_cuenta1 WITHOUT DEFAULTS FROM s_cuenta.* ON KEY (CONTROL-F) LET opc = "N" LET sale_Arr = "S" EXIT INPUT ON KEY(CONTROL-P) NEXT FIELD cuenta_no ON KEY(CONTROL-W) IF INFIELD(cuenta_no) THEN # CALL busca_cuenta() IF int_flag THEN LET int_flag = false NEXT FIELD cuenta_no END IF LET arr_cuenta1[curr].cuenta_no = cuentas[curr1].cuenta_no LET arr_cuenta1[curr].nom_cuenta = cuentas[curr1].descripcion DISPLAY arr_cuenta1[curr].cuenta_no TO s_cuenta[scr_l].cuenta_no DISPLAY arr_cuenta1[curr].nom_cuenta TO s_cuenta[scr_l].nom_cuenta IF cuentas[curr1].nivel != 3 THEN LET numero_msg = 175 CALL msg(numero_msg) NEXT FIELD cuenta_no END IF END IF BEFORE ROW LET curr = arr_curr() LET scr_l = scr_line() AFTER FIELD cuenta_no #LET arr_cuenta1[curr].cod_aux = recibo.cod_sp #LET arr_cuenta1[curr].cod_sec = recibo.cod_sp_sec DISPLAY arr_cuenta1[curr].cod_aux to s_cuenta[scr_l].cod_aux DISPLAY arr_cuenta1[curr].cod_sec to s_cuenta[scr_l].cod_sec IF arr_cuenta1[curr].cuenta_no is not null or arr_cuenta1[curr].cuenta_no != " " THEN SELECT a.descripcion,a.origen,a.depto,a.nivel,a.ref,a.cata INTO p_descripcion,p_origen,acept_dpto,p_nivel,p_ref,p_cata FROM cgtb00001 a WHERE a.cuenta_no = arr_cuenta1[curr].cuenta_no and a.status_t is null IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cuenta_no END IF LET arr_cuenta1[curr].nom_cuenta = p_descripcion DISPLAY arr_cuenta1[curr].nom_cuenta TO s_cuenta[scr_l].nom_cuenta # Controla que la cuenta del banco no sea igual a una cuenta digitada # en el arreglo LET cuenta_a = arr_cuenta1[curr].cuenta_no clipped LET cuenta_b = recibo.cuenta_p clipped IF cuenta_a = cuenta_b THEN LET numero_msg = 192 CALL msg(numero_msg) NEXT FIELD cuenta_no END IF #----------------------------------------------------------------------------- IF acept_dpto = "S" THEN NEXT FIELD departamento ELSE LET arr_cuenta1[curr].departamento = null DISPLAY arr_cuenta1[curr].departamento TO s_cuenta[scr_l].departamento END IF IF p_cata = "S" THEN NEXT FIELD cod_aux ELSE LET arr_cuenta1[curr].cod_aux = null LET arr_cuenta1[curr].cod_sec = null DISPLAY arr_cuenta1[curr].cod_aux TO s_cuenta[scr_l].cod_aux DISPLAY arr_cuenta1[curr].cod_sec TO s_cuenta[scr_l].cod_sec IF p_ref = "S" THEN NEXT FIELD num_doc ELSE LET arr_cuenta1[curr].num_doc = null DISPLAY arr_cuenta1[curr].num_doc TO s_cuenta[scr_l].num_doc END IF NEXT FIELD debito END IF END IF AFTER FIELD departamento IF arr_cuenta1[curr].cuenta_no is not null THEN IF acept_dpto = "S" THEN IF arr_cuenta1[curr].departamento is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD departamento END IF SELECT a.nom_dpto INTO nombre_dpto FROM adtb00001 a WHERE a.departamento = arr_cuenta1[curr].departamento and a.status_t is null IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD departamento END IF DISPLAY BY NAME nombre_dpto ATTRIBUTE(blue) END IF ELSE LET arr_cuenta1[curr].departamento = null DISPLAY arr_cuenta1[curr].departamento TO s_cuenta[scr_l].departamento NEXT FIELD cod_aux END IF AFTER FIELD cod_aux IF arr_cuenta1[curr].cuenta_no is not null THEN IF p_cata = "S" THEN IF arr_cuenta1[curr].cod_aux is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_aux END IF ELSE LET arr_cuenta1[curr].cod_aux = null LET arr_cuenta1[curr].cod_sec = null DISPLAY arr_cuenta1[curr].cod_aux TO s_cuenta[scr_l].cod_aux DISPLAY arr_cuenta1[curr].cod_sec TO s_cuenta[scr_l].cod_sec NEXT FIELD num_doc END IF END IF AFTER FIELD cod_sec IF arr_cuenta1[curr].cuenta_no THEN IF p_cata = "S" THEN IF arr_cuenta1[curr].cod_sec is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_aux END IF IF arr_cuenta1[curr].cod_aux != 1 THEN SELECT a.nom_sp INTO nombre_cata FROM cotb00001 a WHERE a.cod_sp = arr_cuenta1[curr].cod_aux AND a.cod_sp_sec = arr_cuenta1[curr].cod_sec IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_aux END IF DISPLAY BY NAME nombre_cata ATTRIBUTE(blue) END IF IF arr_cuenta1[curr].cod_aux = 1 THEN SELECT nom1_emp,apell1_emp,departamento,nomina INTO nombre_cata FROM adtb00003 WHERE num_emp = arr_cuenta1[curr].cod_sec IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_aux END IF DISPLAY BY NAME nombre_cata END IF END IF END IF IF p_ref = "S" THEN NEXT FIELD num_doc ELSE NEXT FIELD debito END IF AFTER FIELD num_doc IF arr_cuenta1[curr].cuenta_no is not null THEN IF p_ref = "S" THEN IF arr_cuenta1[curr].num_doc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_doc END IF ELSE LET arr_cuenta1[curr].num_doc = null DISPLAY arr_cuenta1[curr].num_doc TO s_cuenta[scr_l].num_doc END IF END IF AFTER FIELD debito IF arr_cuenta1[curr].debito is not null or arr_cuenta1[curr].debito != 0 THEN IF arr_cuenta1[curr].debito != 0 THEN IF arr_cuenta1[curr].cuenta_no is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cuenta_no END IF END IF END IF AFTER ROW IF arr_cuenta1[curr].cuenta_no is not null THEN IF arr_cuenta1[curr].debito = 0 and arr_cuenta1[curr].credito = 0 THEN LET numero_msg = 207 CALL msg(numero_msg) NEXT FIELD cuenta_no END IF END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF IF valor_f is null THEN LET valor_f = 0 END IF IF arr_cuenta1[curr].debito is not null THEN IF arr_cuenta1[curr].cuenta_no is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cuenta_no END IF END IF IF arr_cuenta1[curr].credito is not null THEN IF arr_cuenta1[curr].cuenta_no is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cuenta_no END IF END IF END INPUT IF sale_arr = "S" THEN GOTO arr10 END IF LET monto = 0 LET valor = 0 FOR idx = 1 TO arr_count() IF arr_cuenta1[idx].debito is null THEN LET arr_cuenta1[idx].debito = 0 END IF IF arr_cuenta1[idx].credito is null THEN LET arr_cuenta1[idx].credito = 0 END IF LET valor = valor + arr_cuenta1[idx].debito LET monto = arr_cuenta1[idx].credito + monto END FOR LET monto = valor - monto IF monto != recibo.monto THEN LET numero_msg = 178 CALL msg(numero_msg) GOTO err1 END IF PROMPT "Toda la Informacion Esta Correcta (S/N) ?" FOR char opc LET opc = upshift(opc) IF opc = "S" THEN { PROMPT "Desea Imprimir el Cheque Ahora (S/N) ?" FOR char opc1 LET opc1 = upshift(opc1) IF opc1 != "S" THEN START REPORT cheque TO "cheques1" END IF IF opc1 = "S" THEN START REPORT cheque TO "%USHOME%\\archivo" END IF } # Actualizacion de las tablas de cuentas por pagar y contabilidad general IF m > 0 or opcion = "S" THEN LET numero1 = recibo.numero DELETE FROM cptb00001 WHERE @tipo_doc = tipo_doc1 AND @num_doc = numero1 AND @cod_sp = recibo.cod_sp AND @cod_sp_sec = recibo.cod_sp_sec FOR idx = 1 to m IF arr_recibo[idx].valor_pag <> 0 and arr_recibo[idx].valor_pag is not null THEN ##### Proceso para insertar valores en cuentas por pagar #IF arr_recibo[idx].valor_pag > 0 THEN LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1 #END IF IF arr_recibo[idx].orden_no IS NOT NULL OR arr_recibo[idx].aplica_a IS NOT NULL THEN INSERT INTO cptb00001 values (tipo_doc1,recibo.numero,recibo.cod_sp,recibo.cod_sp_sec, recibo.fecha,recibo.fecha,arr_recibo[idx].orden_no, arr_recibo[idx].tipo,arr_recibo[idx].aplica_a, recibo.cuenta_p,arr_recibo[idx].valor_pag,detalle_1,null, usuario,fecha_crea,USER,CURRENT) END IF IF arr_recibo[idx].aplica_a is not null THEN IF idx < 6 THEN LET factura1 = arr_recibo[idx].aplica_a CLIPPED LET facturas = facturas CLIPPED,",",factura1 CLIPPED END IF END IF IF arr_recibo[idx].orden_no is not null and arr_recibo[idx].orden_no != 999999 THEN IF idx < 10 THEN LET orden1 = arr_recibo[idx].orden_no USING "######" LET ordenes = ordenes CLIPPED,",",orden1 CLIPPED END IF END IF END IF END FOR CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF # Actualizacion de la tabla transacciones de contabildad general LET referencia = "CK.",recibo.numero using "&&&&&&" DELETE FROM cgtb00004 WHERE ref = referencia FOR idx = 1 TO arr_count() IF arr_cuenta1[idx].cuenta_no is not null THEN IF arr_recibo[idx].orden_no is not null THEN LET refe[idx] = arr_recibo[idx].orden_no END IF IF arr_recibo[idx].orden_no is not null THEN LET refe[idx] = arr_recibo[idx].tipo using "&&","-", arr_recibo[idx].aplica_a using "&&&&&&" END IF IF arr_recibo[idx].aplica_a is not null THEN LET refe[idx] = arr_recibo[idx].aplica_a END IF INSERT INTO cgtb00004 values (recibo.fecha,2,referencia,arr_cuenta1[idx].cuenta_no, arr_cuenta1[idx].departamento,arr_cuenta1[idx].num_doc, arr_cuenta1[idx].cod_aux,arr_cuenta1[idx].cod_sec,null,detalle_1, detalle_2,arr_cuenta1[idx].debito,arr_cuenta1[idx].credito,null, usuario,fecha_crea,user,current) CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF END FOR DISPLAY " " # Actualiza La Tabla Datos Generales Del Cheque UPDATE cgtb00005 set fecha = recibo.fecha, portador = recibo.nom_sup, tasa = recibo.tasa WHERE cheque_no = recibo.numero and cuenta_no = "1108" # Agregar La Cuenta Contable del Banco INSERT INTO cgtb00004 values (recibo.fecha,2,referencia,recibo.cuenta_p,null, null,recibo.cod_sp,recibo.cod_sp_sec,null,detalle_1, detalle_2,0,recibo.monto,null,usuario,fecha_crea, user,current) LET numero_msg = 13 CALL msg(numero_msg) CLEAR FORM FOR idx = 1 TO 50 LET arr_cuenta1[idx].cuenta_no = null LET arr_cuenta1[idx].num_doc = null LET arr_cuenta1[idx].cod_aux = null LET arr_cuenta1[idx].cod_sec = null LET arr_cuenta1[idx].nom_cuenta = null LET arr_cuenta1[idx].departamento = null LET arr_cuenta1[idx].debito = null LET arr_cuenta1[idx].credito = null END FOR END IF COMMAND "Retornar" EXIT MENU END MENU END FUNCTION FUNCTION busca_cheque() DEFINE cheque_num CHAR(10) LET recibo.cod_sp = NULL LET recibo.cod_sp_sec = NULL LET cheque_num = recibo.numero USING "<<<<<<<<<<" SELECT UNIQUE a.cod_sp,a.cod_sp_sec INTO recibo.cod_sp,recibo.cod_sp_sec FROM cptb00001 a WHERE a.num_doc = cheque_num AND a.tipo_doc = "CK" IF STATUS = NOTFOUND THEN LET recibo.cod_sp = NULL LET recibo.cod_sp_sec = NULL END IF END FUNCTION