Files
MBS/PROYECTO/ccdir/ccprcs003.4gl
T

271 lines
8.5 KiB
Plaintext

{
-----------------------------------------------------------------------------
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"
"<Esc> Busca Registro <Delete> 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