Files
DECOMARMOL/PROYECTO/ccdir - Copy/ccprmt001.4gl
T
2026-09-22 20:38:51 -04:00

2179 lines
72 KiB
Plaintext

{
-----------------------------------------------------------------------------
PROGRAMA : CCPRMT001
OBJETIVO : Mantenimiento de Recibo de Pago y otros Movimientos
REALIZADO POR : JUAN SOTO
FECHA : Enero 1997
MODIFICACION : El campo cod_emp de la tabla cctb00001 se guarda el codigo de la sucursale quien
emite el recibo
En el campo costo de la tabla cctb00001 seguarda 1-Si el documento
debe salir en el reporte de cobros de la encargada y 0- En caso
contrario
-----------------------------------------------------------------------------
}
GLOBALS "ccprgb000.4gl"
DEFINE valor_cheque1,p_num_doc INTEGER
DEFINE valor_ctrl1,valor_nc,nc_pend,valor_ctrl,p_total,
remanente,val_pen,valor2 DECIMAL(12,2)
DEFINE fecha1 DATE
DEFINE nombre_cta,p_nombre_tipo CHAR(30)
DEFINE tipo_ant,tipo_doc2,tipo_doc1 CHAR(2)
DEFINE opc CHAR(1),
avance BOOLEAN,
navance SMALLINT,
ch_itbis char(2)
MAIN
DEFER INTERRUPT
CALL STARTLOG("ccprmt01.log")
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CONNECT to "decomarmol" USER usuarios USING clave
SELECT a.* INTO p_companias.* FROM companias a
SELECT a.sucid,a.sucnombre INTO codigo_sucursal,nombre_sucursal
FROM sucursales a,seg0001 b
WHERE b.usuario = usuarios AND b.sucid = a.sucid
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage("ERROR","USTED NO TIENE LOCALIDAD ASIGNADA, CONTACTE ADMINISTRADOR SISTEMAS","STOP")
EXIT PROGRAM
END IF
CALL ccprmt001()
END MAIN
####### Funcion para agregar un recibo de pago
FUNCTION ccprmt001()
OPTIONS
FORM LINE 8,
ERROR LINE 24,
COMMENT LINE 22,
PROMPT LINE 23
# CALL pantalla()
OPEN FORM ccfmmt001 FROM "ccfmmt001"
DISPLAY FORM ccfmmt001
DISPLAY "ccprmt001" AT 4,3
DISPLAY "Movimientos de CXC" AT 6,31
DISPLAY nombre_sucursal TO localidad
LET fecha1 = today
MENU "OPCION"
COMMAND "Adicionar"
"<Esc> Adiciona Registro <Delete> Cancela Operacion"
CALL ccpcad001()
COMMAND "Consultar-modificar"
"<Esc> Busca Registro <Delete> Cancela Operacion"
CALL ccpcmf001()
COMMAND "Salir" "Retorna Menu Anterior"
EXIT MENU
END MENU
END FUNCTION
FUNCTION ccpcad001()
DEFINE emp SMALLINT
DEFINE hoy DATE
LET hoy = null
LABEL volver:
LET recibo.fecha_orig = fecha1
LET valor_ctrl = NULL
LET tipo_ant = "PG"
DISPLAY nombre_sucursal TO localidad
INPUT BY NAME recibo.*,valor_ctrl,ch_itbis WITHOUT DEFAULTS
## VENTANAS PARA BUSCAR LOS CLIENTES Y LOS EMPLEADOS
BEFORE INPUT
LET ch_itbis = 'SI'
DISPLAY BY NAME ch_itbis
BEFORE FIELD num_doc
IF recibo.tipo_doc = 'PG' THEN
NEXT FIELD tipo_cliente
END IF
ON KEY (CONTROL-W)
CASE
WHEN INFIELD(tipo_cliente)
CALL consulta_clientes()
LET recibo.tipo_cliente = cliente_dir.tipo_cliente
LET recibo.sec_cliente = cliente_dir.sec_cliente
SELECT a.nombre INTO nom_cli FROM vetb00004 a
WHERE a.tipo_cliente = recibo.tipo_cliente and
a.sec_cliente = recibo.sec_cliente AND a.status_t IS NULL
DISPLAY BY NAME recibo.tipo_cliente ATTRIBUTE (BOLD)
DISPLAY BY NAME recibo.sec_cliente ATTRIBUTE(BOLD)
DISPLAY BY NAME nom_cli ATTRIBUTE (BOLD)
NEXT FIELD cod_emp_sec
WHEN INFIELD(sec_cliente)
CALL consulta_clientes()
LET recibo.tipo_cliente = cliente_dir.tipo_cliente
LET recibo.sec_cliente = cliente_dir.sec_cliente
SELECT nombre INTO nom_cli FROM vetb00004
WHERE tipo_cliente = recibo.tipo_cliente and
sec_cliente = recibo.sec_cliente
DISPLAY BY NAME recibo.tipo_cliente ATTRIBUTE (BOLD)
DISPLAY BY NAME recibo.sec_cliente ATTRIBUTE(BOLD)
DISPLAY BY NAME nom_cli ATTRIBUTE (BOLD)
NEXT FIELD cod_emp_sec
WHEN INFIELD(cod_emp_sec)
CALL consulta_empleados()
LET recibo.cod_emp_sec = transportista.sec_transp
SELECT nom1_emp,apell1_emp INTO descrip2,descrip3 FROM adtb00003
WHERE num_emp = recibo.cod_emp_sec
DISPLAY BY NAME recibo.cod_emp_sec ATTRIBUTE (BOLD)
LET nombre_emp = descrip2 clipped," ",descrip3 clipped
DISPLAY BY NAME nombre_emp ATTRIBUTE (BOLD)
NEXT FIELD fecha_orig
END CASE
{
AFTER FIELD deposito
IF recibo.cuenta_no is not null THEN
IF recibo.deposito is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD deposito
END IF
SELECT unique num_doc FROM tetb00001
WHERE cuenta_no = recibo.cuenta_no and num_doc = recibo.deposito
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD deposito
END IF
END IF
}
## AQUI SE PREPARA PARA LA CAPTURA DE INFORMACION
BEFORE FIELD tipo_doc
LET recibo.tipo_doc = tipo_ant
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
LET tipo_ant = recibo.tipo_doc
{
IF recibo.tipo_doc = "PG" AND recibo.deposito IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD deposito
ELSE
IF recibo.tipo_doc != "PG" AND recibo.deposito IS NOT NULL THEN
LET numero_msg = 192
CALL msg(numero_msg)
LET recibo.deposito = null
DISPLAY BY NAME recibo.deposito
END IF
END IF
}
CASE
WHEN recibo.tipo_doc = "PG"
LET nombre_tipo = "PAGOS"
EXIT CASE
WHEN recibo.tipo_doc = "OC"
LET nombre_tipo = "OTROS CREDITOS"
EXIT CASE
WHEN recibo.tipo_doc = "NC"
LET nombre_tipo = "NOTA CREDITO"
EXIT CASE
WHEN recibo.tipo_doc = "ND"
LET nombre_tipo = "NOTA DEBITO"
EXIT CASE
WHEN recibo.tipo_doc = "PI"
LET nombre_tipo = "PAGO INTER."
EXIT CASE
WHEN recibo.tipo_doc = "DV"
LET nombre_tipo = "DEVOLUCION DINERO"
EXIT CASE
END CASE
DISPLAY BY NAME nombre_tipo ATTRIBUTE (BOLD)
LET p_nombre_tipo = nombre_tipo
#IF recibo.tipo_doc <> "RM" AND recibo.tipo_doc <> 'RC' THEN
SELECT a.ult_recibo INTO p_num_doc FROM cctb00003 a
WHERE a.tipo_doc = recibo.tipo_doc
IF STATUS = NOTFOUND THEN
LET p_num_doc = 0
END IF
LET p_num_doc = p_num_doc + 1
LET recibo.num_doc = p_num_doc
#END IF
{
AFTER FIELD cuenta_no
IF recibo.cuenta_no is not null THEN
SELECT descripcion INTO nombre_cta FROM cgtb00001
WHERE cuenta_no = recibo.cuenta_no and status_t is null
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cuenta_no
END IF
DISPLAY BY NAME nombre_cta ATTRIBUTE (blue)
END IF
}
## CHEQUEA QUE EL REGISTRO NO SE REPITA
AFTER FIELD num_doc
IF recibo.num_doc IS NULL or
recibo.num_doc = 0 THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_doc
END IF
SELECT UNIQUE a.num_doc FROM cctb00001 a
WHERE a.tipo_doc = recibo.tipo_doc AND
a.num_doc = recibo.num_doc
IF STATUS != NOTFOUND THEN
LET numero_msg = 12
CALL msg(numero_msg)
NEXT FIELD num_doc
END IF
## CHEQUEA QUE EL CLIENTE EXISTA, SI EXISTE DESPLEGA SU NOMBRE
AFTER FIELD tipo_cliente
IF recibo.tipo_cliente IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
# Controla que el TIPO DE MOVIMIENTO FI solo sea a tipo clientes 13
IF recibo.tipo_doc = "FI" AND recibo.tipo_cliente = 12 THEN
LET numero_msg = 240
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
AFTER FIELD sec_cliente
IF recibo.sec_cliente IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD sec_cliente
END IF
SELECT b.nombre INTO nom_cli FROM vetb00004 b
WHERE b.tipo_cliente = recibo.tipo_cliente and
b.sec_cliente = recibo.sec_cliente
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
DISPLAY BY NAME nom_cli ATTRIBUTE (BOLD)
# BUSCA EL VENDEDOR PARA ESTE CLIENTE
SELECT a.sec_vend INTO recibo.cod_emp_sec
FROM vetb00028 a
WHERE a.tipo_cliente = recibo.tipo_cliente AND
a.sec_cliente = recibo.sec_cliente
DISPLAY BY NAME recibo.cod_emp_sec
IF recibo.cod_emp_sec IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD sec_cliente
END IF
SELECT nom1_emp,apell1_emp INTO descrip2,descrip3 FROM adtb00003
WHERE num_emp = recibo.cod_emp_sec
LET nombre_emp = descrip2 CLIPPED," ",descrip3
DISPLAY BY NAME nombre_emp ATTRIBUTE (BOLD)
NEXT FIELD fecha_orig
AFTER FIELD cod_emp_sec
IF recibo.cod_emp_sec IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_emp_sec
END IF
SELECT nom1_emp,apell1_emp INTO descrip2,descrip3 FROM adtb00003
WHERE num_emp = recibo.cod_emp_sec
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_emp_sec
END IF
LET nombre_emp = descrip2 clipped," ",descrip3 clipped
DISPLAY BY NAME nombre_emp ATTRIBUTE (BOLD)
IF recibo.tipo_doc = "ND" THEN
SELECT sec_vend FROM vetb00028
WHERE tipo_cliente = recibo.tipo_cliente and
sec_cliente = recibo.sec_cliente
IF status != notfound THEN
LET numero_msg = 357
CALL msg(numero_msg)
END IF
END IF
## VERIFICA EL ULTIMO NUMERO DE RECIBO DEL VENDEDOR
{ IF recibo.tipo_doc = "PG" THEN
SELECT ult_recibo INTO p_num_doc FROM cctb00003
WHERE sec_vend = recibo.cod_emp_sec and status_t is null and
tipo_doc = "PG"
IF status = notfound THEN
LET numero_msg = 128
CALL msg(numero_msg)
SLEEP 2
RETURN
END IF
LET p_num_doc = p_num_doc + 1
# Chequea que el recibo del vendedor este fuera de secuencia
IF recibo.num_doc != p_num_doc THEN
LET numero_msg = 155
CALL msg(numero_msg)
NEXT FIELD num_doc
END IF
DISPLAY BY NAME recibo.num_doc ATTRIBUTE (BOLD)
# Controlando que el numero del recibo este dentro de la secuencia
# del vendedor
SELECT max(sec_de),max(sec_a),max(fecha)
INTO relacion.sec_de,relacion.sec_a,relacion.fecha
FROM cctb00002
WHERE sec_vend = recibo.cod_emp_sec and status_t is null
IF status = notfound THEN
LET numero_msg = 123
CALL msg(numero_msg)
NEXT FIELD num_doc
END IF
IF recibo.num_doc < relacion.sec_de OR
recibo.num_doc > relacion.sec_a THEN
LET numero_msg = 125
CALL msg(numero_msg)
NEXT FIELD num_doc
END IF
END IF}
AFTER FIELD fecha_orig
IF recibo.fecha_orig IS NULL OR recibo.fecha_orig > TODAY THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_orig
END IF
LET p_fechas = recibo.fecha_orig
CALL prd(p_fechas,usuarios) RETURNING bandera
IF bandera = 1 THEN
LET bandera = 0
NEXT FIELD fecha_orig
END IF
LET fecha1 = recibo.fecha_orig
BEFORE FIELD valor_ctrl
LET valor_ctrl = null
DISPLAY BY NAME valor_ctrl
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLEAR FORM
RETURN
END IF
SELECT nom1_emp,apell1_emp INTO descrip2,descrip3 FROM adtb00003
WHERE num_emp = recibo.cod_emp_sec
LET nombre_emp = descrip2 CLIPPED," ",descrip3
{
IF recibo.tipo_doc = "PG" THEN
IF recibo.cuenta_no is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cuenta_no
END IF
END IF
}
IF valor_ctrl IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD valor_ctrl
END IF
EXIT INPUT
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLEAR FORM
RETURN
END IF
CALL arr_recibo.clear()
LABEL arreglo1:
## AQUI SE INTRODUCEN LOS DATOS DEL ARREGLO
INPUT ARRAY arr_recibo WITHOUT DEFAULTS FROM s_recibo.*
BEFORE INPUT
IF recibo.tipo_doc="PG" THEN
LET curr=arr_curr()
LET scr_l = scr_line()
CALL busca_avance() RETURNING arr_recibo[curr].num_nc,arr_recibo[curr].valor_pen,
arr_recibo[curr].cotizacion_no
LET arr_recibo[curr].valor_pag = arr_recibo[curr].valor_pen
DISPLAY arr_recibo[curr].num_nc to s_recibo[scr_l].num_nc
DISPLAY arr_recibo[curr].valor_pen to s_recibo[scr_l].valor_pen
DISPLAY arr_recibo[curr].valor_pag to s_recibo[scr_l].valor_pag
DISPLAY arr_recibo[curr].aplica_a to s_recibo[scr_l].aplica_a
DISPLAY arr_recibo[curr].cotizacion_no to s_recibo[scr_l].cotizacion_no
END IF
## VENTANA PARA BUSCAR LOS DOCUMENTOS
ON KEY (CONTROL-W)
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 bandera = 0
CALL repetir()
IF bandera = 1 THEN
NEXT FIELD aplica_a
END IF
NEXT FIELD aplica_a
WHEN INFIELD(num_nc)
LET curr = arr_curr()
LET scr_l = scr_line()
CALL busca_avance() RETURNING arr_recibo[curr].num_nc,arr_recibo[curr].valor_pen,
arr_recibo[curr].cotizacion_no
LET arr_recibo[curr].valor_pag = arr_recibo[curr].valor_pen
DISPLAY arr_recibo[curr].num_nc to s_recibo[scr_l].num_nc
DISPLAY arr_recibo[curr].valor_pen to s_recibo[scr_l].valor_pen
DISPLAY arr_recibo[curr].valor_pag to s_recibo[scr_l].valor_pag
DISPLAY arr_recibo[curr].aplica_a to s_recibo[scr_l].aplica_a
DISPLAY arr_recibo[curr].cotizacion_no to s_recibo[scr_l].cotizacion_no
END CASE
BEFORE ROW
LET curr = arr_curr()
LET scr_l = scr_line()
AFTER FIELD num_nc
LET nc_pend = 0
IF recibo.tipo_doc = "AV" THEN
LET arr_recibo[curr].num_nc = NULL
DISPLAY arr_recibo[curr].num_nc TO s_recibo[scr_l].num_nc
END IF
IF arr_recibo[curr].num_nc IS NOT NULL THEN
SELECT UNIQUE num_doc FROM cctb00001 a
WHERE a.tipo_doc = "AV" AND a.status_t IS NULL AND
a.num_doc = arr_recibo[curr].num_nc AND
a.tipo_cliente = recibo.tipo_cliente AND
a.sec_cliente = recibo.sec_cliente
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num_nc
END IF
LET valor_nc = 0
SELECT SUM(a.valor+a.monto_desc) INTO valor_nc FROM cctb00001 a
WHERE a.tipo_doc = "AV" AND a.status_t IS NULL AND
a.num_doc = arr_recibo[curr].num_nc AND
a.tipo_cliente = recibo.tipo_cliente AND
a.sec_cliente = recibo.sec_cliente
IF valor_nc IS NULL THEN
LET valor_nc = 0
END IF
LET nc_pend = valor_nc
LET arr_recibo[curr].valor_pen = nc_pend
DISPLAY arr_recibo[curr].valor_pen to s_recibo[scr_l].valor_pen
DISPLAY BY NAME nc_pend
END IF
AFTER FIELD aplica_a
IF arr_recibo[curr].num_nc IS NOT NULL THEN
IF arr_recibo[curr].aplica_a IS NULL THEN
CALL fgl_winmessage("ERROR","DEBE COLOCAR EL DOCUMENTO DE FACTURA APLICAR EL AVANCE","INFO")
NEXT FIELD aplica_a
END IF
END IF
IF arr_recibo[curr].aplica_a IS NOT NULL THEN
LET bandera = 0
CALL repetir()
IF bandera = 1 THEN
NEXT FIELD aplica_a
END IF
IF recibo.tipo_doc = "AV" THEN
IF recibo.num_doc != arr_recibo[curr].aplica_a THEN
ERROR "Si Es Un Avance Debe Aplicarse a Si Mismo"
NEXT FIELD aplica_a
END IF
END IF
# Controla que el documento factura pertenezca al cliente
IF recibo.tipo_doc = "PG" THEN
SELECT unique a.tipo_cliente FROM cctb00001 a
WHERE a.num_doc = arr_recibo[curr].aplica_a and
a.tipo_cliente = recibo.tipo_cliente and
a.sec_cliente = recibo.sec_cliente and
(a.tipo_doc IN ("FT","FE","FI","ND")) and
a.status_t is null
IF status = notfound THEN
LET numero_msg = 126
CALL msg(numero_msg)
NEXT FIELD aplica_a
END IF
END IF
# Busca el valor pendiente de la factura
IF arr_recibo[curr].num_nc IS NULL THEN
SELECT sum(a.valor+a.monto_desc) INTO valor_fac FROM cctb00001 a
WHERE a.aplica_a = arr_recibo[curr].aplica_a and
a.tipo_cliente = recibo.tipo_cliente AND
a.sec_cliente = recibo.sec_cliente AND a.status_t is null
LET arr_recibo[curr].valor_pen = valor_fac
ELSE
LET arr_recibo[curr].valor_pen = 0
END IF
DISPLAY arr_recibo[curr].valor_pen to s_recibo[scr_l].valor_pen
END IF
BEFORE FIELD desc_p
IF arr_recibo[curr].num_nc IS NOT NULL THEN
LET arr_recibo[curr].desc_p = 0
NEXT FIELD valor_pag
ELSE
LET arr_recibo[curr].desc_p = 0
LET arr_recibo[curr].valor_pag = arr_recibo[curr].valor_pen
DISPLAY arr_recibo[curr].valor_pen to s_recibo[scr_l].valor_pen
DISPLAY arr_recibo[curr].desc_p to s_recibo[scr_l].desc_p
END IF
AFTER FIELD desc_p
IF arr_recibo[curr].num_nc IS NOT NULL THEN
LET arr_recibo[curr].desc_p = 0
ELSE
IF arr_recibo[curr].desc_p is null THEN
LET arr_recibo[curr].desc_p = 0
END IF
LET arr_recibo[curr].valor_pag = arr_recibo[curr].valor_pag -
arr_recibo[curr].desc_p
END IF
DISPLAY arr_recibo[curr].valor_pag to s_recibo[scr_l].valor_pag
AFTER FIELD valor_pag
IF arr_recibo[curr].aplica_a IS NULL AND
arr_recibo[curr].num_nc IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD aplica_a
END IF
IF arr_recibo[curr].valor_pag IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD aplica_a
END IF
LET p_total = 0
LET remanente = valor_ctrl
FOR idx = 1 TO arr_count()
IF arr_recibo[idx].valor_pag is not null THEN
IF arr_recibo[idx].num_nc IS NULL THEN
LET p_total = p_total + arr_recibo[idx].valor_pag
LET remanente = remanente - arr_recibo[idx].valor_pag
END IF
END IF
END FOR
IF p_total < 0 THEN
LET p_total = p_total * -1
END IF
if arr_recibo[curr].num_nc is not null then
IF p_total > valor_ctrl THEN
LET numero_msg = 178
CALL msg(numero_msg)
END IF
end if
DISPLAY BY NAME p_total ATTRIBUTE(BOLD)
DISPLAY BY NAME remanente ATTRIBUTE(blue)
# Controla que el valor aplicado a las facturas no exceda el monto del recibo
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLEAR FORM
RETURN
END IF
END INPUT
LET p_companias.cod_comp = 1
{
IF p_total != valor_ctrl THEN
LET numero_msg = 178
CALL msg(numero_msg)
LET curr = 0
LET scr_l = 0
GOTO arreglo1
END IF
}
LET opc = NULL
LET valor_cheque1 = NULL
IF recibo.tipo_doc = "ND" THEN
PROMPT "NOTA DE DEBITO ES DEBIDO A CHEQUE DEVUELTO...[S/N]? " FOR CHAR opc
LET opc = UPSHIFT(opc)
IF opc = "S" THEN
SELECT sec_vend INTO recibo.cod_emp_sec
FROM vetb00028
WHERE tipo_cliente = recibo.tipo_cliente and
sec_cliente = recibo.sec_cliente
DISPLAY BY NAME recibo.cod_emp_sec
LET valor_cheque1 = recibo.num_doc
ELSE
LET valor_cheque1 = NULL
END IF
END IF
CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
doble_on,doble_off,comp_on,comp_off,
doce,normal,archivo,copia
START REPORT cctb01 TO archivo
SELECT a.ult_recibo INTO p_num_doc FROM cctb00003 a
WHERE a.tipo_doc = recibo.tipo_doc
IF STATUS = NOTFOUND THEN
LET p_num_doc = 0
END IF
LET p_num_doc = p_num_doc + 1
LET recibo.num_doc = p_num_doc
DISPLAY BY NAME recibo.num_doc
# INSERTA EL COMENTARIO
BEGIN WORK
UPDATE cctb00003 set ult_recibo = recibo.num_doc,
us_crea = SUSER_SNAME(),
fech_crea = GETDATE(),
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE tipo_doc = recibo.tipo_doc
INSERT INTO cctb00011(cod_cia,num_doc,tipo_doc,tipo_cliente,sec_cliente,comentario,us_crea,fech_crea,SucID,chitbis,
cod_emp_sec,valor_recibo)
VALUES (p_companias.cod_comp,recibo.num_doc,recibo.tipo_Doc,recibo.tipo_cliente,recibo.sec_cliente,
recibo.comentario,SUSER_SNAME(),GETDATE(),codigo_sucursal,ch_itbis,recibo.cod_emp_sec,
valor_ctrl)
IF SQLSTATE > 02 THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR","NO FUE POSIBLE GUARDAR LA TRANSACCION","STOP")
RETURN
END IF
LET avance = FALSE
LET navance = 1
## SI NO OCURRE NINGUN ERROR SE PROCEDE A INSERTAR EL REGISTRO
FOR idx = 1 to arr_count()
IF arr_recibo[idx].aplica_a is not null THEN
IF recibo.tipo_doc = "PG" THEN
IF recibo.cod_emp_sec IS NULL OR recibo.cod_emp_sec = 0 THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR","NO TIENE VENDEDOR","STOP")
GOTO arreglo1
END IF
END IF
IF recibo.tipo_doc != "ND" AND recibo.tipo_doc != "DV" THEN
IF recibo.tipo_doc != "FI" THEN
LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1
LET arr_recibo[idx].desc_p = arr_recibo[idx].desc_p * -1
END IF
END IF
# ESTAS INSTRUCCIONES ES PARA ENTRAR LOS AV-AVANCES POR ESTE PROGRAMA
# SUPONGO QUE ESTAS LINEAS SERAN TEMPORALES HASTA QUE LOS AVANCES SE
# INTRODUZCAN POR OTRO MANTENIMIENTO
IF recibo.tipo_doc = "AV" THEN
IF arr_recibo[idx].num_nc IS NOT NULL THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR","El Campo de Numero de Avancve Debe Estar En Nulo","STOP")
RETURN
END IF
IF arr_recibo[idx].aplica_a != recibo.num_doc THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR", "Documento Debe Aplicarse a Si Mismo","STOP")
RETURN
END IF
IF arr_recibo[idx].valor_pag < 0 THEN
LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * - 1
END IF
END IF
#--------------------------------------------------------------------------
LET navance = 1
LET tipo_doc1 = NULL
IF tipo_doc1 = 'PG' THEN
LET navance = 1
END IF
IF arr_recibo[idx].num_nc IS NOT NULL THEN
LET tipo_doc1 = "AV"
LET avance = TRUE
LET navance = 0
ELSE
LET arr_recibo[idx].num_nc = recibo.num_doc
LET tipo_doc1 = recibo.tipo_doc
LET avance = FALSE
LET navance = 1
END IF
IF recibo.tipo_doc = "DV" THEN
IF arr_recibo[idx].valor_pag < 0 THEN
LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag *-1
END IF
END IF
IF recibo.tipo_doc = "ND" THEN
IF arr_recibo[idx].valor_pag < 0 THEN
LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag *-1
END IF
END IF
LET p_companias.cod_comp = 1
INSERT INTO cctb00001 (cod_cia,tipo_doc,num_doc,tipo_cliente,sec_cliente,cod_emp,cod_emp_sec,fecha_orig,
fecha_ven,aplica_a,num_cheque,valor,valor_cheque,costo,monto_desc,us_crea,fech_crea,
banco)
values (p_companias.cod_comp,tipo_doc1,
arr_recibo[idx].num_nc,recibo.tipo_cliente,recibo.sec_cliente,codigo_sucursal,
recibo.cod_emp_sec,recibo.fecha_orig,"010101",arr_recibo[idx].aplica_a,
recibo.num_doc,arr_recibo[idx].valor_pag,
valor_cheque1,navance,arr_recibo[idx].desc_p,SUSER_SNAME(),GETDATE(),
arr_recibo[idx].cotizacion_no)
IF SQLSTATE > 02 THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR","NO FUE POSIBLE GUARDAR LA TRANSACCION","STOP")
RETURN
END IF
INSERT INTO cctb00005 (num_doc,tipo_Doc,aplica_a,valor_pagado)
VALUES (recibo.num_doc,recibo.tipo_doc,arr_recibo[idx].aplica_a,arr_recibo[idx].valor_pag)
IF SQLSTATE > 02 THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR","NO FUE POSIBLE GUARDAR LA TRANSACCION","STOP")
RETURN
END IF
{ IF tipo_doc1 = "ND" THEN
UPDATE cctb00001 set valor_cheque = numero_recibo
WHERE num_doc = recibo.num_doc AND
tipo_doc = "ND"
END IF
INSERT INTO cctb00001 values (recibo.cuenta_no,null,tipo_doc1,
arr_recibo[idx].num_nc,recibo.tipo_cliente,recibo.sec_cliente,null,
recibo.cod_emp_sec,recibo.fecha_orig,null,arr_recibo[idx].aplica_a,
recibo.deposito,recibo.num_doc,arr_recibo[idx].valor_pag,null,
valor_cheque1,null,arr_recibo[idx].desc_p,null,SUSER_SNAME(),GETDATE(),null,null)
}
IF avance = FALSE THEN
OUTPUT TO REPORT cctb01(recibo.tipo_cliente,
recibo.sec_cliente,recibo.fecha_orig,recibo.num_doc,
recibo.cod_emp_sec,tipo_doc1,null,null,
arr_recibo[idx].aplica_a,arr_recibo[idx].desc_p,arr_recibo[idx].valor_pag,
nom_cli,nombre_emp,nombre_cta,recibo.comentario)
END IF
END IF
END FOR
FINISH REPORT cctb01
RUN imprime
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
COMMIT WORK
LET numero_msg = 1
CALL msg(numero_msg)
LET emp = recibo.cod_emp_sec
CLEAR FORM
GOTO volver
END FUNCTION
## Funcion para consultar/modificar un recibo de pago
FUNCTION ccpcmf001()
DEFINE usuario RECORD
us_crea CHAR(9),
fech_crea LIKE cctb00001.fech_crea
END RECORD
## SE PREPARA EL CRITERIO PARA CONSULTAR/MODIFICAR UN REGISTRO
CONSTRUCT CRITERIO ON b.tipo_doc,b.num_doc,b.tipo_cliente,
b.sec_cliente, b.cod_emp_sec,b.fecha_orig
FROM tipo_doc,num_doc,tipo_cliente,sec_cliente,cod_emp_sec,
fecha_orig
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLEAR FORM
RETURN
END IF
LET selec =
"SELECT b.tipo_doc,b.num_doc,b.tipo_cliente, ",
" b.sec_cliente,a.cod_emp_sec,a.fecha_orig,b.comentario,b.chitbis,a.cod_emp_sec,b.valor_recibo ",
"FROM cctb00011 b,cctb00001 a ",
"WHERE ",criterio clipped," AND ",
" a.num_cheque = b.num_doc AND ",
" b.tipo_Doc = a.tipo_Doc AND ",
" a.cod_emp = b.sucid AND ",
" a.status_t is null ORDER BY b.tipo_Doc,b.num_doc "
PREPARE busca FROM selec
DECLARE datos SCROLL CURSOR FOR busca
OPEN datos
FETCH FIRST datos INTO recibo.*,ch_itbis
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
CALL datos_doc()
MENU "OPCION"
COMMAND "Siguiente"
"Presenta en pantalla el proximo registro encontrado"
FETCH NEXT datos INTO recibo.*,ch_itbis
IF status = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
CALL datos_doc()
COMMAND "Anterior"
"Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS datos INTO recibo.*,ch_itbis
IF status = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
CALL datos_doc()
COMMAND "Primero"
"Presenta en pantalla el primer registro encontrado"
FETCH FIRST datos INTO recibo.*,ch_itbis
IF status = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
CALL datos_doc()
COMMAND "Ultimo"
"Presenta en pantalla el ultimo registro encontrado"
FETCH LAST datos INTO recibo.*,ch_itbis
IF status = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
CALL datos_doc()
{ COMMAND KEY("I") "re-Imprimir"
CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
doble_on,doble_off,comp_on,comp_off,
doce,normal,archivo,copia
START REPORT cctb01 TO archivo
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_doc = ? OR a.tipo_doc = 'AV') AND ",
" a.num_cheque = ?) AND (a.tipo_cliente = ? AND ",
" a.sec_cliente = ?) ORDER BY 2,1 "
ELSE
LET selec =
"SELECT num_doc,aplica_a,valor,monto_desc,valor FROM cctb00001 ",
"WHERE (tipo_doc=? AND num_cheque=?)AND (tipo_cliente = ? AND ",
" sec_cliente = ?) ORDER BY 2,1 "
END IF
PREPARE comando1 FROM selec
DECLARE buscar11 CURSOR FOR comando1
OPEN buscar11 USING recibo.tipo_doc,recibo.num_doc,recibo.tipo_cliente,
recibo.sec_cliente
LET idx = 1
WHILE STATUS != NOTFOUND
FETCH buscar11 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" AND 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
OUTPUT TO REPORT cctb01(recibo.tipo_cliente,
recibo.sec_cliente,recibo.fecha_orig,recibo.num_doc,
recibo.cod_emp_sec,recibo.tipo_doc,null,null,
arr_recibo[idx].aplica_a,arr_recibo[idx].desc_p,arr_recibo[idx].valor_pag,
nom_cli,nombre_emp,nombre_cta,recibo.comentario)
LET idx = idx + 1
END WHILE
FINISH REPORT cctb01
RUN imprime
COMMAND "Escoger"
INPUT BY NAME recibo.tipo_cliente,
recibo.sec_cliente,recibo.cod_emp_sec,valor_ctrl,
recibo.comentario,ch_itbis
WITHOUT DEFAULTS
## CHEQUEA QUE EL CLIENTE EXISTA, SI EXISTE DESPLEGA SU NOMBRE
AFTER FIELD tipo_cliente
IF recibo.tipo_cliente IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
# Controla que el TIPO DE MOVIMIENTO FI solo sea a tipo clientes 13
IF recibo.tipo_doc = "FI" AND recibo.tipo_cliente = 12 THEN
LET numero_msg = 240
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
AFTER FIELD sec_cliente
IF recibo.sec_cliente IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD sec_cliente
END IF
SELECT b.nombre INTO nom_cli FROM vetb00004 b
WHERE b.tipo_cliente = recibo.tipo_cliente and
b.sec_cliente = recibo.sec_cliente
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
DISPLAY BY NAME nom_cli ATTRIBUTE (BOLD)
AFTER FIELD cod_emp_sec
IF recibo.cod_emp_sec IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_emp_sec
END IF
SELECT nom1_emp,apell1_emp INTO descrip2,descrip3 FROM adtb00003
WHERE num_emp = recibo.cod_emp_sec
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cod_emp_sec
END IF
LET nombre_emp = descrip2 clipped," ",descrip3 clipped
DISPLAY BY NAME nombre_emp ATTRIBUTE (BOLD)
IF recibo.tipo_doc = "ND" THEN
SELECT sec_vend FROM vetb00028
WHERE tipo_cliente = recibo.tipo_cliente and
sec_cliente = recibo.sec_cliente
IF status != notfound THEN
LET numero_msg = 357
CALL msg(numero_msg)
END IF
END IF
AFTER FIELD valor_ctrl
IF valor_ctrl IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD valor_ctrl
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
GO TO vuelve
END IF
EXIT INPUT
END INPUT
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_doc = ? OR a.tipo_doc = 'AV') AND ",
" a.num_cheque = ?) AND (a.tipo_cliente = ? AND ",
" a.sec_cliente = ?) ORDER BY 2,1 "
ELSE
LET selec =
"SELECT num_doc,aplica_a,valor,monto_desc,valor FROM cctb00001 ",
"WHERE (tipo_doc=? AND num_cheque=?)AND (tipo_cliente = ? AND ",
" sec_cliente = ?) ORDER BY 2,1 "
END IF
PREPARE comando FROM selec
DECLARE buscar1 CURSOR FOR comando
OPEN buscar1 USING recibo.tipo_doc,recibo.num_doc,recibo.tipo_cliente,
recibo.sec_cliente
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" AND 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) 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)
LABEL arreglo2:
## AQUI SE MODIFICAN/ACTUALIZAN LOS CAMPOS DEL ARREGLO
INPUT ARRAY arr_recibo WITHOUT DEFAULTS FROM s_recibo.*
## VENTANA PARA BUSCAR LOS DOCUMENTOS
ON KEY (CONTROL-W)
LET curr = arr_curr()
LET scr_l = scr_line()
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 bandera = 0
CALL repetir()
IF bandera = 1 THEN
NEXT FIELD aplica_a
END IF
NEXT FIELD aplica_a
END CASE
BEFORE ROW
LET curr = arr_curr()
LET scr_l = scr_line()
AFTER FIELD num_nc
LET nc_pend = 0
IF recibo.tipo_doc = "AV" THEN
LET arr_recibo[curr].num_nc = NULL
DISPLAY arr_recibo[curr].num_nc TO s_recibo[scr_l].num_nc
END IF
IF arr_recibo[curr].num_nc IS NOT NULL THEN
SELECT UNIQUE num_doc FROM cctb00001 a
WHERE a.tipo_doc = "AV" AND a.status_t IS NULL AND
a.num_doc = arr_recibo[curr].num_nc AND
a.tipo_cliente = recibo.tipo_cliente AND
a.sec_cliente = recibo.sec_cliente
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num_nc
END IF
LET valor_nc = 0
SELECT SUM(a.valor+a.monto_desc) INTO valor_nc FROM cctb00001 a
WHERE a.tipo_doc = "AV" AND a.status_t IS NULL AND
a.num_doc = arr_recibo[curr].num_nc AND
a.tipo_cliente = recibo.tipo_cliente AND
a.sec_cliente = recibo.sec_cliente
IF valor_nc IS NULL THEN
LET valor_nc = 0
END IF
END IF
AFTER FIELD aplica_a
IF arr_recibo[curr].aplica_a IS NOT NULL THEN
LET bandera = 0
CALL repetir()
IF bandera = 1 THEN
NEXT FIELD aplica_a
END IF
IF recibo.tipo_doc = "AV" THEN
IF recibo.num_doc != arr_recibo[curr].aplica_a THEN
ERROR "Si Es Un Avance Debe Aplicarse a Si Mismo"
NEXT FIELD aplica_a
END IF
END IF
#IF recibo.tipo_doc != "AV" AND
# arr_recibo[curr].aplica_a = recibo.num_doc THEN
# LET numero_msg = 131
# CALL msg(numero_msg)
# NEXT FIELD aplica_a
#END IF
# Controla que la factura pertenezca al cliente
IF recibo.tipo_doc = "PG" THEN
SELECT unique tipo_cliente FROM cctb00001
WHERE num_doc = arr_recibo[curr].aplica_a and
tipo_cliente = recibo.tipo_cliente and
sec_cliente = recibo.sec_cliente and
(tipo_doc IN ("FT","FE","FI","ND")) and status_t is null
IF status = notfound THEN
LET numero_msg = 126
CALL msg(numero_msg)
NEXT FIELD aplica_a
END IF
END IF
# Busca el valor pendiente de la factura
IF arr_recibo[curr].num_nc IS NULL THEN
SELECT sum(a.valor+a.monto_desc) INTO valor_fac
FROM cctb00001 a
WHERE a.aplica_a=arr_recibo[curr].aplica_a and
a.status_t is null AND
a.tipo_cliente = recibo.tipo_cliente AND
a.sec_cliente = recibo.sec_cliente
LET arr_recibo[curr].valor_pen = valor_fac
ELSE
LET arr_recibo[curr].valor_pen = 0
END IF
DISPLAY arr_recibo[curr].valor_pen to s_recibo[scr_l].valor_pen
DISPLAY arr_recibo[curr].valor_pen to s_recibo[scr_l].valor_pen
END IF
BEFORE FIELD desc_p
IF arr_recibo[curr].num_nc IS NOT NULL THEN
LET arr_recibo[curr].desc_p = 0
NEXT FIELD valor_pag
END IF
IF arr_recibo[curr].desc_p IS NULL THEN
LET arr_recibo[curr].desc_p = 0
END IF
DISPLAY arr_recibo[curr].desc_p to s_recibo[scr_l].desc_p
AFTER FIELD desc_p
IF arr_recibo[curr].num_nc IS NOT NULL THEN
LET arr_recibo[curr].desc_p = 0
ELSE
IF arr_recibo[curr].desc_p is null THEN
LET arr_recibo[curr].desc_p = 0
END IF
END IF
AFTER FIELD valor_pag
IF arr_recibo[curr].aplica_a IS NULL AND
arr_recibo[curr].num_nc IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD aplica_a
END IF
IF arr_recibo[curr].valor_pag IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD valor_pag
END IF
LET remanente = valor_ctrl
LET p_total = 0
FOR idx = 1 TO arr_count()
IF arr_recibo[idx].valor_pag is not null THEN
IF arr_recibo[idx].num_nc IS NULL THEN
LET p_total = p_total - arr_recibo[idx].valor_pag
END IF
END IF
END FOR
IF p_total < 0 THEN
LET p_total = p_total * -1
END IF
DISPLAY BY NAME remanente ATTRIBUTE(blue)
IF p_total != valor_ctrl THEN
LET numero_msg = 178
CALL msg(numero_msg)
END IF
DISPLAY BY NAME p_total ATTRIBUTE(BOLD)
# Controla que el valor aplicado a las facturas no exceda el monto del recibo
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLEAR FORM
RETURN
END IF
IF p_total != valor_ctrl THEN
LET numero_msg = 178
CALL msg(numero_msg)
GOTO arreglo2
END IF
LET opc = NULL
LET valor_cheque1 = NULL
IF recibo.tipo_doc = "ND" THEN
PROMPT "NOTA DE DEBITO ES DEBIDO A CHEQUE DEVUELTO...[S/N]? " FOR CHAR opc
LET opc = UPSHIFT(opc)
IF opc = "S" THEN
LET valor_cheque1 = recibo.num_doc
ELSE
LET valor_cheque1 = NULL
END IF
END IF
## AQUI SE REALIZA LA MODIFICACION DEL REGISTRO
IF recibo.tipo_doc = "PG" THEN
BEGIN WORK
DELETE FROM cctb00001 WHERE num_cheque= recibo.num_doc and
tipo_doc IN ("PG","AV") AND valor < 0 AND fecha_orig = recibo.fecha_orig
IF SQLSTATE > 02 THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR","NO FUE POSIBLE GUARDAR LA TRANSACCION","STOP")
RETURN
END IF
ELSE
IF recibo.tipo_doc = "ND" THEN
SELECT unique a.valor_cheque INTO valor_cheque1
FROM cctb00001 a
WHERE a.num_doc = recibo.num_doc AND
a.tipo_doc = "ND"
END IF
BEGIN WORK
UPDATE cctb00011 SET comentario = recibo.comentario,
cod_emp_Sec = recibo.cod_emp_sec,
valor_recibo = valor_ctrl,
fecha_orig = recibo.fecha_orig,
cctb00011.chitis = chitbis,
us_mod = usuarios,
fech_mod = getdate()
WHERE num_doc = recibo.num_doc AND tipo_doc = recibo.tipo_doc
DELETE FROM cctb00005 WHERE num_Doc = recibo.num_doc AND tipo_Doc = recibo.tipo_doc
IF SQLSTATE > 02 THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR","NO FUE POSIBLE GUARDAR LA TRANSACCION","STOP")
RETURN
END IF
DELETE FROM cctb00001 WHERE cctb00001.num_doc= recibo.num_doc and
cctb00001.tipo_doc = recibo.tipo_doc and CONVERT (CHAR(10),fech_crea,101) > '01/01/2009'
IF SQLSTATE > 02 THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR","NO FUE POSIBLE GUARDAR LA TRANSACCION","STOP")
RETURN
END IF
END IF
CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
doble_on,doble_off,comp_on,comp_off,
doce,normal,archivo,copia
START REPORT cctb01 TO archivo
LET avance = FALSE
FOR idx = 1 to arr_count()
IF arr_recibo[idx].aplica_a is not null OR
arr_recibo[idx].num_nc is not null THEN
IF recibo.tipo_doc != "ND" AND recibo.tipo_doc != "OD" THEN
IF recibo.tipo_doc != "FI" THEN
LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag * -1
LET arr_recibo[idx].desc_p = arr_recibo[idx].desc_p * -1
END IF
END IF
LET tipo_doc1 = NULL
LET navance = 1
IF arr_recibo[idx].num_nc IS NOT NULL THEN
LET tipo_doc1 = "AV"
LET avance = TRUE
LET navance = 1
ELSE
LET arr_recibo[idx].num_nc = recibo.num_doc
LET tipo_doc1 = recibo.tipo_doc
LET avance = FALSE
LET navance = 0
END IF
IF recibo.tipo_doc = "DV" THEN
IF arr_recibo[idx].valor_pag < 0 THEN
LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag *-1
END IF
END IF
IF recibo.tipo_doc = "ND" THEN
IF arr_recibo[idx].valor_pag < 0 THEN
LET arr_recibo[idx].valor_pag = arr_recibo[idx].valor_pag *-1
END IF
END IF
IF avance = FALSE THEN # CONTROL AVANCE
INSERT INTO cctb00001
VALUES (p_companias.cod_comp,null,tipo_doc1,arr_recibo[idx].num_nc,
recibo.tipo_cliente,recibo.sec_cliente,codigo_sucursal,recibo.cod_emp_sec,
recibo.fecha_orig,"010101",arr_recibo[idx].aplica_a,null,
recibo.num_doc,arr_recibo[idx].valor_pag,null,valor_cheque1,navance,
arr_recibo[idx].desc_p,null,SUSER_SNAME(),GETDATE(),null,null,NULL)
IF SQLSTATE > 02 THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR","NO FUE POSIBLE GUARDAR LA TRANSACCION","STOP")
RETURN
END IF
OUTPUT TO REPORT cctb01(recibo.tipo_cliente,
recibo.sec_cliente,recibo.fecha_orig,recibo.num_doc,
recibo.cod_emp_sec,tipo_doc1,null,null,
arr_recibo[idx].aplica_a,arr_recibo[idx].desc_p,arr_recibo[idx].valor_pag,
nom_cli,nombre_emp,nombre_cta,recibo.comentario)
END IF # IF DEL AVANCE
END IF
END FOR
COMMIT WORK
FINISH REPORT cctb01
RUN imprime
COMMIT WORK
LET numero_msg = 13
CALL msg(numero_msg)
}
COMMAND KEY ("N") "aNular"
## AQUI SE REALIZA LA ANULACION DE UN REGISTRO
LET p_fechas = recibo.fecha_orig
CALL prd(p_fechas,usuarios) RETURNING bandera
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
LET respuesta = fgl_winquestion("INFO","ESTA SEGURO DE QUERER ANULAR ESTE DOCUMENTO?","NO","NO|YES","question",0)
IF UPSHIFT(respuesta) = "YES" THEN
IF recibo.tipo_doc = "PG" THEN
UPDATE cctb00001 set status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE()
WHERE tipo_doc IN ("AV","PG") and num_cheque = recibo.num_doc
ELSE
UPDATE cctb00001 set status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE()
WHERE tipo_doc = recibo.tipo_doc and num_cheque = recibo.num_doc
END IF
LET numero_msg = 82
CALL msg(numero_msg)
END IF
COMMAND "Retornar"
CLEAR FORM
FOR idx = 1 to 3
LET arr_recibo[idx].aplica_a = null
LET arr_recibo[idx].valor_pen = null
LET arr_recibo[idx].valor_pag = null
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
END FOR
EXIT MENU
END MENU
END FUNCTION
FUNCTION busca_aplicacion()
OPEN WINDOW busqueda1 AT 10,10 WITH FORM "ccfmwd001"
ATTRIBUTE (BORDER,FORM LINE FIRST + 1, comment line last)
CALL ui.Interface.LoadStyles("mbsStyle")
DECLARE aplicar CURSOR FOR
SELECT a.aplica_a,SUM(a.valor+a.monto_desc) FROM cctb00001 a
WHERE a.tipo_cliente = recibo.tipo_cliente AND
a.sec_cliente = recibo.sec_cliente AND a.status_t is null {and
a.fech_crea > datetime (1994-01-01 08:00) year to minute}
GROUP BY a.aplica_a HAVING SUM(a.valor+a.monto_desc) > 0 ORDER BY 1
LET existe = "N"
LET idx = 1
FOREACH aplicar INTO aplica_wd[idx].aplica_a,aplica_wd[idx].pendiente
IF status = NOTFOUND THEN
LET existe = "N"
EXIT FOREACH
END IF
CALL integridad()
# Busca el tipo de movimiento
SELECT unique a.tipo_doc INTO tipo_doc2
FROM cctb00001 a
WHERE (a.tipo_cliente = recibo.tipo_cliente and
a.sec_cliente = recibo.sec_cliente and a.tipo_doc NOT IN ("PG","AV") and
a.num_doc = aplica_wd[idx].aplica_a) and a.status_t is null
IF status < 0 THEN
CALL integridad()
LET tipo_doc2 = "SQ"
END IF
LET aplica_wd[idx].tipo_doc = tipo_doc2
# Busca Nota de credito
LET valor_ctrl1 = 0
IF tipo_doc2 = "AV" THEN
SELECT SUM(a.valor*-1) INTO valor_ctrl1 FROM cctb00001 a
WHERE (a.tipo_cliente = recibo.tipo_cliente AND
a.sec_cliente = recibo.sec_cliente AND
a.num_doc = aplica_wd[idx].aplica_a AND a.tipo_doc = "AV" AND
a.num_doc != a.aplica_a) AND a.status_t IS NULL
IF valor_ctrl1 is null THEN
LET valor_ctrl1 = 0
END IF
LET aplica_wd[idx].pendiente = aplica_wd[idx].pendiente - valor_ctrl1
END IF
LET existe = "S"
IF aplica_wd[idx].pendiente != 0 THEN
LET idx = idx + 1
END IF
END FOREACH
IF existe = "N" and idx = 1 THEN
LET numero_msg = 127
CALL msg(numero_msg)
GOTO salir
END IF
CALL set_count(idx-1)
DISPLAY ARRAY aplica_wd TO consart.*
LET curr1 = arr_curr()
LET arr_recibo[curr].aplica_a = aplica_wd[curr1].aplica_a
LET arr_recibo[curr].valor_pen = aplica_wd[curr1].pendiente
LABEL salir:
CLOSE WINDOW busqueda1
END FUNCTION
FUNCTION repetir()
DEFINE ant_art RECORD
num_nc INTEGER,
aplica_a INTEGER,
valor_pag DECIMAL(12,2)
END RECORD
LET ant_art.num_nc = arr_recibo[curr].num_nc
LET ant_art.aplica_a = arr_recibo[curr].aplica_a
LET ant_art.valor_pag = arr_recibo[curr].valor_pag
FOR idx = 1 to arr_count()
IF idx != curr THEN
IF arr_recibo[idx].aplica_a IS NOT NULL AND
arr_recibo[idx].valor_pag IS NOT NULL THEN
IF arr_recibo[idx].num_nc = ant_art.num_nc AND
arr_recibo[idx].aplica_a = ant_art.aplica_a AND
arr_recibo[idx].valor_pag = ant_art.valor_pag THEN
LET numero_msg = 21
CALL msg(numero_msg)
LET bandera = 1
ELSE
IF bandera != 1 THEN
LET bandera = 0
END IF
END IF
END IF
END IF
END FOR
END FUNCTION
{
FUNCTION consulta_clientes()
OPEN WINDOW busqueda AT 7,12 WITH FORM "vefmwd002"
ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST,MESSAGE LINE LAST)
LET int_flag = false
CONSTRUCT criterio ON a.nombre FROM nombre
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
GO TO salir_consulta_c
END IF
LET selec2 = "SELECT a.tipo_cliente, a.sec_cliente, a.nombre ",
"FROM vetb00004 a ",
"WHERE a.status_t is null AND ",criterio clipped," ORDER BY 1,2 "
PREPARE busca_clientes FROM selec2
DECLARE buscar_clientes CURSOR FOR busca_clientes
LET idx = 1
FOREACH buscar_clientes INTO arr_clientes[idx].*
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
EXIT FOREACH
END IF
LET idx = idx + 1
END FOREACH
CALL set_count(idx-1)
MESSAGE " <Esc> Selecciona Cliente donde esta el cursor"
DISPLAY ARRAY arr_clientes TO s_clientes.*
LET curr1 = arr_curr()
LET cliente_dir.tipo_cliente = arr_clientes[curr1].tipo_cliente
LET cliente_dir.sec_cliente = arr_clientes[curr1].sec_cliente
LET descrip1 = arr_clientes[curr1].nombre
LABEL salir_consulta_c:
CLOSE WINDOW busqueda
END FUNCTION
}
{
FUNCTION anular()
OPEN WINDOW anula AT 7,5 WITH FORM "vefmwd006" ATTRIBUTE (BORDER,
COMMENT LINE LAST - 1,PROMPT LINE LAST,FORM LINE FIRST + 1)
LABEL vuelve:
INPUT BY NAME p_fact_no
AFTER FIELD p_fact_no
SELECT UNIQUE fecha_factura,orden,tipo_cliente,sec_cliente,neto
INTO fact_gral.fecha_factura,fact_gral.orden,fact_gral.tipo_cliente,
fact_gral.sec_cliente,fact_gral.total_fact
FROM vetb00002
WHERE factura = p_fact_no AND status_t IS NULL AND
fech_crea > datetime (1994-03-31 08:00) year to minute
IF STATUS = NOTFOUND THEN
LET numero_msg = 102
CALL msg(numero_msg)
NEXT FIELD p_fact_no
END IF
SELECT a.nombre
INTO fact_gral.nombre
FROM vetb00004 a
WHERE a.tipo_cliente = fact_gral.tipo_cliente AND
a.sec_cliente = fact_gral.sec_cliente
DISPLAY BY NAME fact_gral.tipo_cliente,fact_gral.sec_cliente,
fact_gral.total_fact,fact_gral.nombre ATTRIBUTE(blue)
IF fact_gral.fecha_factura < "310394" THEN
LET numero_msg = 58
CALL msg(numero_msg)
GOTO salir
END IF
LET p_fechas = fact_gral.fecha_factura
IF fact_gral.fecha_factura != TODAY THEN
ERROR "NO PUEDE ANULAR FACTURA QUE NO SEAN DEL DIA DE HOY"
RETURN
END IF
CALL prd()
IF bandera =1 THEN
SLEEP 2
EXIT INPUT
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
EXIT INPUT
END IF
EXIT INPUT
END INPUT
IF bandera = 1 THEN
LET bandera = 0
GOTO salir
END IF
# Este Int_flag es porque tuve que salir del input con el int_flag verdadero
# y asi poder salir del window sin problemas
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
GOTO salir
END IF
LABEL atras:
PROMPT "Esta seguro de Anular Esta Factura? (S/N)" FOR CHAR opt3
LET opt3 = UPSHIFT(opt3)
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
GOTO salir
END IF
IF opt3 != "S" AND opt3 != "N" THEN
LET numero_msg = -1301
CALL msg(numero_msg)
GOTO atras
END IF
IF opt3 = "N" THEN
GOTO salir
END IF
IF opt3 = "S" THEN
UPDATE vetb00002 SET status_t = "E",
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE factura = p_fact_no AND fech_crea > datetime (1994-03-31 08:00)
year to minute
UPDATE iptb00006 SET status_t = "E",
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE num_doc = p_fact_no AND cod_mov IN (30,31,32) AND
fech_crea > datetime (1994-03-31 08:00) year to minute
UPDATE vetb00003 SET status_t = "E",
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE factura = p_fact_no AND fech_crea > datetime (1994-03-31 08:00)
year to minute
UPDATE cctb00001 SET status_t = "E",
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE num_doc = p_fact_no AND (tipo_doc = "FT" or tipo_doc = "FE") AND
fech_crea > datetime (1994-03-31 08:00) year to minute
UPDATE cctb00001 SET status_t = "E",
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE aplica_a = p_fact_no AND tipo_doc = "PC"
# ANULACION DE LAS SERIES
IF fact_gral.ventas = "1" THEN
LET p_codigo = 30
ELSE
LET p_codigo = 31
END IF
UPDATE vetb00042 set status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE()
WHERE factura = p_fact_no AND cod_mov = p_codigo
LET numero_msg = 82
CALL msg(numero_msg)
END IF
LABEL salir:
LET fact_gral.fecha_factura = TODAY
#CLOSE FORM vefmwd006
CLOSE WINDOW anula
END FUNCTION
}
REPORT cctb01(p_tipo_cliente,p_sec_cliente,p_fecha_orig,
p_num_doc,p_cod_emp_sec,p_tipo_doc,
p_cuenta_no,p_banco,p_aplica_a,
p_monto_desc,p_valor,p_nombre,
p_nomb_emp,p_nombre_cta,p_comentario)
DEFINE p_tipo_cliente LIKE cctb00001.tipo_cliente,
p_sec_cliente LIKE cctb00001.sec_cliente,
p_fecha_orig LIKE cctb00001.fecha_orig,
p_num_doc LIKE cctb00001.num_doc,
p_cod_emp_sec LIKE cctb00001.cod_emp_sec,
p_tipo_doc LIKE cctb00001.tipo_doc,
p_cuenta_no LIKE cctb00001.cuenta_no,
p_banco LIKE cctb00001.banco,
p_aplica_a LIKE cctb00001.aplica_a,
p_monto_desc LIKE cctb00001.monto_desc,
p_valor LIKE cctb00001.valor,
p_nomb_emp CHAR(40),
p_nombre_cta CHAR(30),
p_cod_cia LIKE cctb00001.cod_cia,
pitbis DEC(12,2)
define
hora char(5),
l smallint,
p_nombre LIKE vetb00004.nombre,
p_comentario CHAR(120), #LIKE cctb00011.comentario,
ditbis DEC(12,2)
output
top margin 0
bottom margin 5
left margin 0
page length 33
ORDER BY p_sec_cliente,p_num_doc
format
page header
LET hora = time
LET lj = (80 - LENGTH(p_companias.nombre CLIPPED))/2
print column 2, "ccprmt001",
column 15, negrilla_on,
column lj, p_companias.nombre, negrillas_of,
column 40, "NO. DOC.: ",p_num_doc using "<<<<<<<"
print column lj, "RNC: ",p_companias.rnc
LET lj = (80 - LENGTH(p_companias.direccion CLIPPED))/2
print column 1, negrilla_on,TODAY USING "DD/MM/YYYY",
column lj, p_companias.direccion, negrillas_of,
column 73, p_fecha_orig USING "dd/mm/yyyy"
IF p_tipo_doc = 'PG' THEN
LET lj = (80 - LENGTH(p_nombre_tipo))/2
print column 1, negrilla_on,
column lj, "RECIBO INGRESOS",negrillas_of,
column 73, hora
ELSE
LET lj = (80 - LENGTH("DOCUMENTOS"))/2
PRINT COLUMN l,"DOCUMENTOS"
END IF
SKIP 1 LINES
BEFORE GROUP OF p_sec_cliente
SELECT a.itbi INTO pitbis FROM vetb00019 a
WHERE a.disponible = "S"
IF pitbis IS NULL THEN
LET pitbis = 0
END IF
PRINT COLUMN 5, "LOCALIDAD :",nombre_sucursal
PRINT COLUMN 5, "CUENTA :",p_cuenta_no CLIPPED," - ",p_nombre_cta CLIPPED,
COLUMN 50,"DEPOSITO :", p_banco
PRINT COLUMN 5, "CLIENTE :",p_nombre CLIPPED,"(",
p_tipo_cliente USING "<<","-",
p_sec_cliente USING "<<<<<",")"
PRINT COLUMN 5, "VENDEDOR :",p_cod_emp_sec USING "<<<<"," - ",p_nomb_emp CLIPPED
PRINT COLUMN 5, "TIPO PAGO :",p_tipo_doc CLIPPED," - ",p_nombre_tipo CLIPPED
PRINT doce
print column 1,
"===============================================================",
"================================"
print column 5, "Aplica Factura ",
column 23, " Descuento",
column 37, " Valor ",
# column 54, " ITBIS",
column 70, " TOTAL"
#print column 37, " S/ITBIS"
print column 1,
"===============================================================",
"================================"
on every row
{IF p_tipo_Doc = "NC" THEN
IF ncr = "S" THEN
LET ditbis =p_valor * (pitbis/100)
ELSE
LET ditbis = 0
END IF
UPDATE cctb00001 SET valor_efectivo = p_valor,
valor_cheque = ditbis,
valor = p_valor+ditbis
WHERE tipo_doc = p_tipo_Doc AND
num_doc = p_num_doc AND
aplica_a = p_aplica_a AND
tipo_cliente =p_tipo_cliente AND
sec_cliente = p_sec_cliente
END IF
}
print column 5, p_aplica_a USING "#######",
column 23, p_monto_desc USING "#,###,###.##",
column 37, p_valor USING "##,###,###.##",
column 54, ditbis USING "##,###,###.##",
column 70, p_valor USING "###,###,###.##"
let l = 12
{QUITE LA SUMATORIA DE P_VALOR + DITBIS PORQUE PARA ESTA EMPRESA NO NECESITA ESE
CALCULO, SE INSTALO EL PROGRAM DE NOTAS DE CREDITOS POR VENTAS}
AFTER GROUP OF p_sec_cliente
PRINT COLUMN 5, "Total----> ",
COLUMN 23, GROUP SUM(p_monto_desc) USING "#,###,###.##" ,
COLUMN 37, GROUP SUM(p_valor) USING "##,###,###.##"
{ IF p_tipo_doc = "NC" or p_tipo_doc = "ND" THEN
SELECT a.itbi INTO pitbis FROM vetb00019 a
WHERE a.disponible = "S"
IF pitbis IS NULL THEN
LET pitbis = 0
END IF
IF ncr = "S" THEN
LET ditbis =GROUP SUM(p_valor)* (pitbis/100)
ELSE
LET ditbis = 0
END IF
SKIP 1 LINE
PRINT COLUMN 37, pitbis USING "###.##","% ITBIS",
COLUMN 54, ditbis USING "##,###,###.##"
PRINT COLUMN 39, "TOTAL ",
COLUMN 54, GROUP SUM(p_valor) USING "##,###,###.##"
END IF}
on last row
PRINT COLUMN 2, "COMENTARIOS : "
PRINT COLUMN 5, p_comentario[1,60] CLIPPED
PRINT COLUMN 5, p_comentario[61,120] CLIPPED
PAGE TRAILER
SKIP 1 LINE
PRINT COLUMN 10, "____________________________________",
COLUMN 60, "____________________________________"
PRINT COLUMN 10, " Preparado Por ",
COLUMN 60, " Autorizado Por "
print normal
END REPORT
FUNCTION busca_avance()
DEFINE ravances DYNAMIC ARRAY OF RECORD
fecha DATE,
aplica_a INT,
pcotizacion INT,
nombre_proyecto VARCHAR(100),
pendiente DEC(12,2)
END RECORD,
pnombre_proyecto VARCHAR(100)
OPEN WINDOW busqueda1 AT 10,10 WITH FORM "ccfmwd005"
ATTRIBUTE (BORDER,FORM LINE FIRST + 1, comment line last)
CALL ui.Interface.LoadStyles("mbsStyle")
DECLARE avances CURSOR FOR
SELECT a.num_doc,a.banco,SUM(a.valor+a.monto_desc)
FROM cctb00001 a
WHERE a.tipo_cliente = recibo.tipo_cliente AND
a.sec_cliente = recibo.sec_cliente AND a.status_t is null AND
a.tipo_Doc = 'AV'
GROUP BY a.num_doc,a.banco
HAVING SUM(a.valor+a.monto_desc) <> 0
ORDER BY a.num_doc
LET existe = "N"
LET idx = 1
FOREACH avances INTO ravances[idx].aplica_a,ravances[idx].pcotizacion,ravances[idx].pendiente
IF status = NOTFOUND THEN
LET existe = "N"
EXIT FOREACH
END IF
# busca nombre del proyecto
LET pnombre_proyecto = NULL
SELECT a.nombre_proyecto INTO pnombre_proyecto
FROM vetb00050 a
WHERE a.cotizacion_no = ravances[idx].pcotizacion
LET ravances[idx].nombre_proyecto = pnombre_proyecto
LET ravances[idx].nombre_proyecto=pnombre_proyecto
SELECT DISTINCT CONVERT(CHAR(10),a.fecha_orig,103) INTO ravances[idx].fecha
FROM cctb00001 a
WHERE a.tipo_doc ='AV' AND
a.num_doc = ravances[idx].aplica_a AND a.num_doc = a.aplica_a AND
a.tipo_cliente = recibo.tipo_cliente AND a.sec_cliente = recibo.sec_cliente
LET existe = "S"
IF ravances[idx].pendiente != 0 THEN
LET idx = idx + 1
ELSE
CONTINUE FOREACH
END IF
END FOREACH
IF existe="S" THEN
DISPLAY ARRAY ravances TO savance.*
END IF
LET curr1= arr_curr()
CLOSE WINDOW busqueda1
RETURN ravances[curr1].aplica_a, ravances[curr1].pendiente,ravances[curr1].pcotizacion
END FUNCTION
FUNCTION datos_doc()
CASE
WHEN recibo.tipo_doc = "PG"
LET nombre_tipo = "PAGOS A FACTURAS"
EXIT CASE
WHEN recibo.tipo_doc = "OC"
LET nombre_tipo = "OTROS CREDITOS"
EXIT CASE
WHEN recibo.tipo_doc = "NC"
LET nombre_tipo = "NOTA CREDITO"
EXIT CASE
WHEN recibo.tipo_doc = "ND"
LET nombre_tipo = "NOTA DEBITO"
EXIT CASE
WHEN recibo.tipo_doc = "PI"
LET nombre_tipo = "PAGO INTER."
EXIT CASE
WHEN recibo.tipo_doc = "DV"
LET nombre_tipo = "DEVOLUCION DINERO"
EXIT CASE
END CASE
LET p_nombre_tipo = nombre_tipo
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
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
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
{
SELECT descripcion INTO nombre_cta FROM cgtb00001
WHERE cuenta_no = recibo.cuenta_no
}
DISPLAY BY NAME recibo.*,nom_cli,nombre_emp,valor_ctrl,nombre_cta
IF recibo.tipo_doc = "PG" THEN
LET selec =
"SELECT a.num_doc,a.banco,a.aplica_a,a.valor,a.monto_desc,a.valor ",
"FROM cctb00001 a ",
"WHERE ((a.tipo_doc = ? OR a.tipo_doc = 'AV') AND ",
" a.num_cheque = ?) AND (a.tipo_cliente = ? AND ",
" a.sec_cliente = ?) ORDER BY 2,1 "
ELSE
LET selec =
"SELECT a.num_doc,a.banco,aplica_a,valor,monto_desc,valor FROM cctb00001 a ",
"WHERE (a.tipo_doc=? AND a.num_cheque=?)AND (a.tipo_cliente = ? AND ",
" a.sec_cliente = ?) ORDER BY a.banco,a.num_Doc "
END IF
PREPARE comando FROM selec
DECLARE buscar1 CURSOR FOR comando
OPEN buscar1 USING recibo.tipo_doc,recibo.num_doc,recibo.tipo_cliente,
recibo.sec_cliente
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" AND 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) 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
DISPLAY ARRAY arr_recibo TO s_recibo.*
ON ACTION imprimir
CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
doble_on,doble_off,comp_on,comp_off,
doce,normal,archivo,copia
START REPORT cctb01 TO archivo
FOR idx = 1 TO arr_recibo.getLength()
IF arr_recibo[idx].num_nc IS NULL THEN
OUTPUT TO REPORT cctb01(recibo.tipo_cliente,
recibo.sec_cliente,recibo.fecha_orig,recibo.num_doc,
recibo.cod_emp_sec,recibo.tipo_doc,null,null,
arr_recibo[idx].aplica_a,arr_recibo[idx].desc_p,arr_recibo[idx].valor_pag,
nom_cli,nombre_emp,nombre_cta,recibo.comentario)
END IF
END FOR
FINISH REPORT cctb01
RUN imprime
AFTER DISPLAY
EXIT DISPLAY
END DISPLAY
END FUNCTION