{ ----------------------------------------------------------------------------- PROGRAMA : CPPRMT003 OBJETIVO : Mantenimiento de Cuenta Por Pagar Empleado REALIZADO POR : Tadeo A. Ferreras FECHA : Junio 17, 1993 ----------------------------------------------------------------------------- } GLOBALS "cpprgb000.4gl" DEFINE cod1_sp,cod1_sp_sec SMALLINT DEFINE p_orden INTEGER DEFINE pbase,flete,gasto,pvalor,tvalor DECIMAL(16,2) DEFINE val_pen,valor_fac1,valor2 DECIMAL(13,2) DEFINE nom_tipo CHAR(15) DEFINE idx1 SMALLINT DEFINE nombre,apellido CHAR(14) DEFINE tipo_emp CHAR(1) DEFINE buscar_oc RECORD orden_no INTEGER, fecha_orig DATE, cod_sp SMALLINT, num_emp SMALLINT, nom_sup CHAR(30) END RECORD DEFINE cod_sp1,cod_sp2 SMALLINT DEFINE total_v DECIMAL(12,2) DEFINE valor3 DECIMAL(12,2) DEFINE datos_usu RECORD status_t CHAR(1), us_crea CHAR(9), fech_crea LIKE cptb00001.fech_crea, us_mod CHAR(9), fech_mod LIKE cptb00001.fech_mod END RECORD DEFINE supl ARRAY[200] OF RECORD cod_sp SMALLINT, num_emp SMALLINT, nom_sp CHAR(30) END RECORD DEFINE factura1 RECORD num_emp SMALLINT, departamento SMALLINT, nivel_emp SMALLINT, cod_puesto SMALLINT, nombre CHAR(15), apellido CHAR(15), num_doc CHAR(10), fecha_orig DATE, valor_fac DECIMAL(12,2) END RECORD DEFINE arr_cta1 ARRAY[200] OF RECORD tipo CHAR(1), aplica_a CHAR(10), tipo_doc CHAR(2), valor_prep DECIMAL(12,2), valor DECIMAL(12,2) END RECORD DEFINE arr_cta ARRAY[200] OF RECORD cuenta_no CHAR(8), descripcion CHAR(30), valor_cta DECIMAL(12,2) END RECORD DEFINE compra ARRAY[300] OF RECORD codigo CHAR(10), descripcion CHAR(30), cantidad DECIMAL(12,2), precio DECIMAL(12,2), valor DECIMAL(12,2) END RECORD DEFINE arr_tipo ARRAY[300] OF RECORD tipo CHAR(2), num_oc INTEGER, fech_oc DATE END RECORD DEFINE proceso RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, cantidad DECIMAL(12,2), precio DECIMAL(12,2) END RECORD DEFINE i,j INTEGER FUNCTION cpprmt003() OPTIONS FORM LINE 8, ERROR LINE 24, COMMENT LINE 22, PROMPT LINE 23 CALL pantalla() OPEN FORM cpfmmt003 FROM "cpfmmt003" DISPLAY FORM cpfmmt003 DISPLAY "cpprmt003" AT 4,3 DISPLAY "Cuentas Por Pagar Empleados" AT 6,26 MENU "OPCION" COMMAND "Adicionar" " Adiciona Registro Cancela Operacion" CALL cppcad003() COMMAND "Consultar-modificar" " Busca Registro Cancela Operacion" CALL cppcmd003() COMMAND "Salir" EXIT MENU END MENU END FUNCTION ####### Proceso para Insertar Una Factura ########### FUNCTION cppcad003() DEFINE porc_p DECIMAL(10,2) DEFINE emp SMALLINT DEFINE hoy,fecha1,fecha2 DATE LET hoy = null INPUT BY NAME factura1.* WITHOUT DEFAULTS AFTER FIELD num_emp IF factura1.num_emp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_emp END IF SELECT a.departamento,a.nivel_emp,a.cod_puesto,a.nom1_emp,a.apell1_emp INTO factura1.departamento,factura1.nivel_emp,factura1.cod_puesto, factura1.nombre,factura1.apellido FROM adtb00003 a WHERE a.num_emp = factura1.num_emp AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_sp END IF DISPLAY BY NAME factura1.departamento THRU factura1.apellido AFTER FIELD num_doc #### Numero del documento o factura1 IF factura1.num_doc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_doc END IF SELECT UNIQUE a.num_nomi FROM notb00008 a WHERE a.num_emp = factura1.num_emp AND a.tipo_emp = "P" AND a.num_nomi = factura1.num_doc ##### Proceso para evitar se digite el mismo numero de factura1 ##### Para el mismo suplidor IF status != NOTFOUND THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD num_doc END IF AFTER FIELD fecha_orig IF factura1.fecha_orig IS NULL OR factura1.fecha_orig > TODAY THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_orig END IF LET p_fechas = factura1.fecha_orig CALL prd() IF bandera = 1 THEN LET bandera = 0 NEXT FIELD fecha_orig END IF AFTER FIELD valor_fac IF factura1.valor_fac IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD valor_fac END IF END INPUT ##### Proceso Para abortar OPERACION ###### IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF INPUT ARRAY arr_cta FROM cuentas.* BEFORE ROW LET curr = arr_curr() LET fila = scr_line() AFTER FIELD cuenta_no IF arr_cta[curr].cuenta_no IS NOT NULL THEN SELECT a.descripcion INTO arr_cta[curr].descripcion FROM cgtb00001 a WHERE a.cuenta_no = arr_cta[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 END IF DISPLAY arr_cta[curr].descripcion TO cuentas[fila].descripcion AFTER FIELD valor_cta ##### Valor del documento o factura1 IF arr_cta[curr].valor_cta IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD valor_cta END IF LET valor1 = 0 FOR i = 1 TO ARR_CURR() LET valor1 = valor1 + arr_cta[i].valor_cta END FOR DISPLAY BY NAME valor1 IF valor1 > factura1.valor_fac THEN LET numero_msg = 204 CALL msg(numero_msg) NEXT FIELD valor_cta END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF ###### Insertando registros en la Maestra de cuentas por Pagar #### {INSERT INTO notb00008 values (factura1.num_doc,"P",factura1.num_emp, factura1.departamento,factura1.nivel_emp,factura.cod_puesto, factura1.fecha_orig,93,null,factura1.valor_fac,"D",null,user,current, null,null) INSERT INTO notb00008 values (factura1.num_emp,factura1.departamento, factura1.nivel_emp,factura.cod_puesto,factura1.num_doc, 93,factura1.fecha_orig,factura1.valor_fac,null,null,user,current, null,null) } FOR idx = 1 to ARR_COUNT() IF arr_cta[idx].cuenta_no IS NOT NULL AND arr_cta[idx].valor_cta > 0 THEN INSERT INTO cptb00002 values (11,factura1.num_emp,arr_cta[idx].cuenta_no, factura1.num_doc,factura1.fecha_orig, arr_cta[idx].valor_cta,null,user,current, null,null) END IF END FOR LET numero_msg = 1 CALL msg(numero_msg) CLEAR FORM END FUNCTION ###### Proceso de Modificacion de registros FUNCTION cppcmd003() ##### Criterio de Busqueda de informacion a consultar y/o modificar CONSTRUCT CRITERIO ON b.cod_sp_sec,b.num_doc,b.fecha FROM num_emp,num_doc,fecha_orig IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF ##### Busquedas de los datos generales LET selec = "SELECT UNIQUE b.cod_sp_sec,a.departamento,a.nivel_emp,a.cod_puesto, ", " a.nom1_emp,a.apell1_emp,b.num_doc,b.fecha,SUM(b.valor) ", "FROM cptb00002 b,adtb00003 a ", "WHERE b.status_t is null AND b.cod_sp_sec = a.num_emp AND ", " b.cod_sp = 11 AND ",criterio clipped, " GROUP BY 1,2,3,4,5,6,7,8 ORDER BY 1,7" PREPARE busca FROM selec DECLARE datos SCROLL CURSOR FOR busca OPEN datos #### Buscando el primer registro FETCH FIRST datos INTO factura1.* IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF DISPLAY BY NAME factura1.* MENU "OPCION" COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO factura1.*,datos_usu.* IF status = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF DISPLAY BY NAME factura1.* COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO factura1.*,datos_usu.* IF status = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF DISPLAY BY NAME factura1.* COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO factura1.*,datos_usu.* IF status = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF DISPLAY BY NAME factura1.* COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO factura1.*,datos_usu.* IF status = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF DISPLAY BY NAME factura1.* ###### Escoger registro para modificar COMMAND "Escoger" " Actualiza Registro Cancela Operacion" LET p_fechas = factura1.fecha_orig CALL prd() IF bandera = 1 THEN LET bandera = 0 RETURN END IF INPUT BY NAME factura1.fecha_orig,factura1.valor_fac WITHOUT DEFAULTS AFTER FIELD fecha_orig IF factura1.fecha_orig IS NULL OR factura1.fecha_orig > TODAY THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_orig END IF LET p_fechas = factura1.fecha_orig CALL prd() IF bandera = 1 THEN LET bandera = 0 NEXT FIELD fecha_orig END IF AFTER FIELD valor_fac IF factura1.valor_fac IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD valor_fac END IF END INPUT ##### Proceso Para abortar OPERACION ###### IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF DECLARE buscar1 CURSOR FOR SELECT a.cuenta_no,b.descripcion,a.valor FROM cptb00002 a,cgtb00001 b WHERE a.cuenta_no = b.cuenta_no AND b.status_t IS NULL AND a.status_t IS NULL AND a.num_doc = factura1.num_doc AND a.cod_sp_sec = factura1.num_emp AND a.cod_sp = 11 LET idx = 1 LET valor1 = 0 FOREACH buscar1 INTO arr_cta[idx].* LET valor1 = valor1 + arr_cta[idx].valor_cta LET idx = idx + 1 END FOREACH CALL set_count(idx - 1) INPUT ARRAY arr_cta WITHOUT DEFAULTS FROM cuentas.* BEFORE ROW LET curr = arr_curr() LET fila = scr_line() AFTER FIELD cuenta_no IF arr_cta[curr].cuenta_no IS NOT NULL THEN SELECT a.descripcion INTO arr_cta[curr].descripcion FROM cgtb00001 a WHERE a.cuenta_no = arr_cta[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 END IF DISPLAY arr_cta[curr].descripcion TO cuentas[fila].descripcion AFTER FIELD valor_cta ##### Valor del documento o factura1 IF arr_cta[curr].valor_cta IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD valor_cta END IF LET valor1 = 0 FOR i = 1 TO arr_count() LET valor1 = valor1 + arr_cta[i].valor_cta END FOR DISPLAY BY NAME valor1 IF valor1 > factura1.valor_fac THEN LET numero_msg = 204 CALL msg(numero_msg) NEXT FIELD valor_cta END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF ###### Insertando registros en la Maestra de cuentas por Pagar #### DELETE FROM cptb00002 WHERE @num_doc = factura1.num_doc AND @cod_sp = 11 AND @cod_sp_sec = factura1.num_emp {UPDATE notb00008 set (fecha,valor,us_mod,fech_mod) = (factura1.fecha_orig,factura1.valor_fac, USER,CURRENT) WHERE @num_nomi = factura1.num_doc AND @num_emp = factura1.num_emp AND @tipo_emp = "P" UPDATE notb00011 set (fecha,monto,us_mod,fech_mod) = (factura1.fecha_orig,factura1.valor_fac, USER,CURRENT) WHERE @num_doc = factura1.num_doc AND @num_emp = factura1.num_emp} FOR idx = 1 to ARR_COUNT() IF arr_cta[idx].cuenta_no IS NOT NULL AND arr_cta[idx].valor_cta > 0 THEN INSERT INTO cptb00002 values (11,factura1.num_emp,arr_cta[idx].cuenta_no, factura1.num_doc,factura1.fecha_orig,arr_cta[idx].valor_cta,null, user,current,null,null) END IF END FOR LET numero_msg = 13 CALL msg(numero_msg) ##### Proceso Para Anular una Factura COMMAND KEY ("L") "eLiminar" DELETE FROM cptb00002 WHERE cod_sp = 11 AND cod_sp_sec = factura1.num_emp AND num_doc = factura1.num_doc LET numero_msg = 82 CALL msg(numero_msg) COMMAND "Retornar" CLEAR FORM EXIT MENU END MENU END FUNCTION