{ ----------------------------------------------------------------------------- PROGRAMA : CCPRCS003 OBJETIVO : Consultas de Movimientos CXC REALIZADO POR : JUAN SOTO FECHA : Enero 26, 1997 DIRECTOR PROYECTO : JOSE ALFREDO PAULINO ALEJO ----------------------------------------------------------------------------- } GLOBALS "ccprgb000.4gl" DEFINE valor_cheque1,p_num_doc,aplicar INTEGER DEFINE valor_nc,nc_pend,valor_ctrl,p_total,val_pen,valor2 DECIMAL(12,2) DEFINE fecha1 DATE DEFINE nombre_cta CHAR(30) DEFINE tipo_doc1 CHAR(2) DEFINE opc CHAR(1) MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CALL ARG_VAL(7) RETURNING strconect IF strconect = 'marmotech' THEN CONNECT to strconect USER 'conecta' USING 'conecta' ELSE CONNECT to strconect USER usuarios USING clave END IF SELECT a.* INTO p_companias.* FROM companias a CALL ccprcs003() END MAIN ####### Funcion para agregar un recibo de pago FUNCTION ccprcs003() OPTIONS FORM LINE 8, ERROR LINE 24, COMMENT LINE 22, PROMPT LINE 23 #CALL pantalla() OPEN FORM ccfmcs003 FROM "ccfmcs003" DISPLAY FORM ccfmcs003 DISPLAY "ccprcs003" AT 4,3 DISPLAY "Movimientos de CXC" AT 6,31 MENU "OPCION" COMMAND "Consultar-modificar" " Busca Registro Cancela Operacion" CALL ccpccs003() COMMAND "Salir" "Retorna Menu Anterior" EXIT MENU END MENU END FUNCTION ## Funcion para consultar/modificar un recibo de pago FUNCTION ccpccs003() DEFINE usuario RECORD us_crea CHAR(9), fech_crea LIKE cctb00001.fech_crea END RECORD DIALOG ATTRIBUTES(UNBUFFERED, FIELD ORDER FORM) ## SE PREPARA EL CRITERIO PARA CONSULTAR/MODIFICAR UN REGISTRO CONSTRUCT CRITERIO ON a.tipo_doc,a.num_doc,a.tipo_cliente,a.sec_cliente, a.cod_emp_sec FROM tipo_doc,num_doc,tipo_cliente,sec_cliente,cod_emp_sec ON ACTION buscar LET selec = "SELECT UNIQUE a.tipo_doc,a.num_doc,a.tipo_cliente, ", " a.sec_cliente,a.cod_emp_sec,CONVERT(CHAR(10),a.fecha_orig,103) ", "FROM cctb00001 a ", "WHERE ",criterio clipped, " and a.tipo_doc NOT IN ('FE','FT','DE','PC') AND ", " a.status_t is null ORDER BY CONVERT(CHAR(10),a.fecha_orig,103)" PREPARE busca FROM selec DECLARE datos SCROLL CURSOR FOR busca OPEN datos FETCH FIRST datos INTO recibo.* IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF CALL informacion() MENU "OPCION" COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO recibo.* IF status = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF CALL informacion() COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO recibo.* IF status = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF CALL informacion() COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO recibo.* IF status = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF CALL informacion() COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO recibo.* IF status = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF CALL informacion() COMMAND "Ver" IF recibo.tipo_doc = "PG" THEN LET selec = "SELECT a.num_doc,a.aplica_a,a.valor,a.monto_desc,a.valor FROM cctb00001 a ", "WHERE a.tipo_cliente = ? and a.sec_cliente = ? and (a.tipo_doc = ? OR ", " a.tipo_doc = 'DE') AND a.num_cheque = ? AND a.status_t IS NULL ", " ORDER BY aplica_a,num_doc " ELSE LET selec = "SELECT num_doc,aplica_a,valor,monto_desc,valor FROM cctb00001 ", "WHERE tipo_cliente = ? and sec_cliente = ? and tipo_doc = ? AND ", " num_cheque = ? AND status_t IS NULL ORDER BY num_doc,aplica_A " END IF PREPARE comando FROM selec DECLARE buscar1 CURSOR FOR comando OPEN buscar1 USING recibo.tipo_cliente,recibo.sec_cliente,recibo.tipo_doc, recibo.num_doc LET idx = 1 WHILE STATUS != NOTFOUND FETCH buscar1 INTO arr_recibo[idx].* IF STATUS = NOTFOUND THEN EXIT WHILE END IF IF arr_recibo[idx].num_nc = recibo.num_doc THEN LET arr_recibo[idx].num_nc = null END IF IF recibo.tipo_doc != "ND" OR recibo.tipo_doc='OD' THEN LET arr_recibo[idx].valor_pen = arr_recibo[idx].valor_pen * -1 ELSE IF arr_recibo[idx].valor_pen < 0 THEN LET arr_recibo[idx].valor_pen = arr_recibo[idx].valor_pen *-1 END IF END IF LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pen LET arr_recibo[idx].valor_pen = 0 LET arr_recibo[idx].desc_p = arr_recibo[idx].desc_p * -1 SELECT sum(valor+monto_desc) INTO valor2 FROM cctb00001 WHERE tipo_cliente = recibo.tipo_cliente and sec_cliente = recibo.sec_cliente and aplica_a = arr_recibo[idx].aplica_a and status_t is null AND num_cheque = recibo.num_doc LET arr_recibo[idx].valor_pen = valor2 LET idx = idx + 1 END WHILE CALL set_count(idx - 1) ## AQUI SE MODIFICAN/ACTUALIZAN LOS CAMPOS DEL ARREGLO DISPLAY ARRAY arr_recibo TO s_recibo.* ON ACTION productos IF recibo.tipo_doc = 'ND' OR recibo.tipo_doc='OD' OR recibo.tipo_doc='NC' OR recibo.tipo_doc='OC' THEN CALL productos(arr_recibo[arr_curr()].aplica_a) END IF AFTER DISPLAY EXIT DISPLAY END DISPLAY COMMAND "Retornar" CLEAR FORM EXIT MENU END MENU ON ACTION CANCEL LET INT_FLAG=FALSE EXIT PROGRAM AFTER CONSTRUCT END CONSTRUCT END DIALOG END FUNCTION FUNCTION informacion() IF recibo.tipo_doc = "PG" THEN SELECT SUM((a.valor)*-1) INTO valor_ctrl FROM cctb00001 a WHERE a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.tipo_doc = "PG" AND a.num_doc = recibo.num_doc AND a.cod_emp_sec = recibo.cod_emp_sec AND a.status_t IS NULL SELECT SUM((a.valor)*-1) INTO valor_nc FROM cctb00001 a WHERE a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.tipo_doc = "AV" AND a.num_cheque = recibo.num_doc AND a.cod_emp_sec = recibo.cod_emp_sec AND a.status_t IS NULL IF valor_nc IS NULL THEN LET valor_nc = 0 END IF LET valor_ctrl = valor_ctrl - valor_nc ELSE SELECT SUM((a.valor)*-1) INTO valor_ctrl FROM cctb00001 a WHERE a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente AND a.tipo_doc = recibo.tipo_doc AND a.num_cheque = recibo.num_doc AND a.cod_emp_sec = recibo.cod_emp_sec AND a.status_t IS NULL END IF IF valor_ctrl IS NULL THEN LET valor_ctrl = 0 END IF IF recibo.tipo_doc = "ND" OR recibo.tipo_doc = 'OD' THEN SELECT DISTINCT a.num_doc INTO pnum_doc FROM iptb00006 a WHERE a.fact_no LET valor_ctrl = valor_ctrl * -1 IF valor_ctrl < 0 THEN LET valor_ctrl = valor_ctrl * -1 END IF END IF SELECT nombre INTO nom_cli FROM vetb00004 WHERE tipo_cliente = recibo.tipo_cliente and sec_cliente = recibo.sec_cliente SELECT nom1_emp,apell1_emp INTO descrip2,descrip3 FROM adtb00003 WHERE num_emp = recibo.cod_emp_sec LET nombre_emp = descrip2 clipped," ",descrip3 clipped DISPLAY BY NAME recibo.*,nom_cli,nombre_emp,valor_ctrl,nombre_cta END FUNCTION