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

4379 lines
158 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
-----------------------------------------------------------------------------
}
IMPORT os
GLOBALS "ccprgb000.4gl"
DEFINE xvalorck, xvalorCr, xvalorEfectivo, xvalorComision, xvalorLink,xefectivopesos,xckpesos,xlinkpesos,xcrpesos DEC(12, 2)
DEFINE monto_efectivo, monto_ck, monto_cr, monto_link,link_pesos,kefectivo_pesos,tarjeta_pesos,ck_pesos DECIMAL(12, 2),tipo_cuenta int
DEFINE efectivo, ck, cr,tasa DECIMAL(12, 2)
DEFINE decenas DYNAMIC ARRAY OF CHAR(20)
DEFINE centenas DYNAMIC ARRAY OF CHAR(20),ventas int
DEFINE
unidades1 DYNAMIC ARRAY OF CHAR(20),
valor_fact_original DYNAMIC ARRAY OF DEC(12, 2),
num_recibo_ing, deposito, XidEntrada INT,
foto CHAR(200),
nombre_file_foto CHAR(100),
imagefac, d_tipos, f_tipos, mensaje, filepath, filedestino, extension
STRING,
pimagen BYTE,
xventas CHAR(1)
DEFINE valor_cheque1,
p_num_doc,
xcotizacion,
xorden,
xfactura_ext,
numero_doc,
sec_vend_a
INTEGER
DEFINE
valor_ctrl1,
valor_nc,
nc_pend,
valor_ctrl,
p_total,
valor_orig,
remanente,
valor_aplicado,
valor2,
p_comision,
v_comision
DECIMAL(12, 2),
psimbolo, pmoneda, valor_letras STRING
DEFINE fecha1 DATE
DEFINE nombre_cta CHAR(30)
DEFINE tipo_ant, tipo_doc2, tipo_doc1 CHAR(2)
DEFINE
opc CHAR(1),
avance, generaE BOOLEAN,
navance, plataforma SMALLINT,
ch_itbis CHAR(2),
ppaga_itbis, encontre_factura CHAR(1),
avance_e DYNAMIC ARRAY OF INT,
actualiza VARCHAR(2)
DEFINE
registroEntrada DYNAMIC ARRAY OF RECORD
referenciaEntrada VARCHAR(25),
fecha DATE,
tipo CHAR(1),
cuenta_no VARCHAR(8),
departamento INT,
detalle VARCHAR(100),
debito, credito DEC(12, 2)
END RECORD,
entradaDiario VARCHAR(25),
i SMALLINT,
rdeposito INT,
xmontoDeposito DEC(12, 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 "marmotech" AS "IFMX" USER usuarios USING clave
CONNECT TO "smarmotech" AS "MSSQL" 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"
ON ACTION Adicionar
LET INT_FLAG = FALSE
CALL ccpcad001()
ON ACTION Consultar_modificar
CALL ccpcmf001()
ON ACTION Salir
EXIT MENU
END MENU
END FUNCTION
FUNCTION ccpcad001()
DEFINE emp SMALLINT
DEFINE hoy DATE
INITIALIZE recibo.tipo_doc,
recibo.cuenta_no,
recibo.tipo_cliente,
recibo.sec_cliente,
recibo.cod_emp_sec,
recibo.fecha_orig,
recibo.comentario,
valor_ctrl,
ch_itbis,
monto_efectivo,
monto_ck,
monto_cr,
plataforma,
monto_link,link_pesos,kefectivo_pesos,tarjeta_pesos,ck_pesos,tasa TO NULL
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,
monto_efectivo,
monto_ck,
monto_cr,
monto_link,
plataforma,tasa
WITHOUT DEFAULTS
## VENTANAS PARA BUSCAR LOS CLIENTES Y LOS EMPLEADOS
BEFORE INPUT
LET tasa = null
CALL cuenta()
CALL plataformapago()
LET ch_itbis = 'SI'
LET aplicacion_antiguas = 'NO'
DISPLAY BY NAME ch_itbis
# Limpia en pantalla los valores en pesos para que no quede el de un recibo anterior
LET kefectivo_pesos = 0
LET ck_pesos = 0
LET tarjeta_pesos = 0
LET link_pesos = 0
DISPLAY BY NAME kefectivo_pesos, ck_pesos, tarjeta_pesos, link_pesos
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
LET nom_cli =
nom_cli CLIPPED,
" ",
recibo.tipo_cliente USING "<<",
"-",
recibo.sec_cliente USING "<<<<<<<"
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
## 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
ELSE
IF recibo.tipo_doc = "PG" THEN
CALL dialog.setFieldActive("cuenta_no", TRUE)
NEXT FIELD cuenta_no
ELSE
CALL dialog.setFieldActive("cuenta_no", FALSE)
END IF
END IF
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
#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 ISNULL(a.ult_recibo, 0)
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
DISPLAY "ULTIMO ", p_num_doc
LET p_num_doc = p_num_doc + 1
LET recibo.num_doc = p_num_doc
DISPLAY recibo.num_doc
ON ACTION busca_foto ATTRIBUTE(TEXT = "Foto", IMAGE = "upload")
LET d_tipos = "Images"
LET f_tipos = "*.jpg *.png *.gif *.jpeg"
LET mensaje = %"Elige Imagen"
LET imagefac = "*.jpg"
CALL ui.interface.frontcall(
"standard",
"openfile",
[imagefac, d_tipos, f_tipos, mensaje],
filepath)
DISPLAY filepath
LOCATE pimagen IN MEMORY
# CALL FGL_WINMESSAGE("W",filedestino,"stop")
DISPLAY "aqui es", filepath
IF filepath IS NOT NULL THEN
LET filedestino =
FGL_GETENV("imagenrecibo"), "\\", nombre_file_foto CLIPPED
LET filedestino = os.Path.basename(filepath)
CALL fgl_getfile(filepath, filedestino)
CALL pimagen.readFile(filedestino)
DISPLAY filedestino TO foto
LET extension = os.Path.extension(filedestino)
END IF
LET foto = filedestino
## CHEQUEA QUE EL REGISTRO NO SE REPITA
AFTER FIELD num_doc
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
SELECT a.paga_itbis
INTO ppaga_itbis
FROM vetb00060 a
WHERE a.tipo_cliente = recibo.tipo_cliente
IF ppaga_itbis = 'N' THEN
LET ch_itbis = 'NO'
ELSE
LET ch_itbis = "SI"
END IF
## CHEQUEA QUE EL CLIENTE EXISTA, SI EXISTE DESPLEGA SU NOMBRE
AFTER FIELD tipo_cliente
SELECT a.ventas INTO ventas FROM vetb00060 a
WHERE a.tipo_cliente=recibo.tipo_cliente
SELECT a.ventas INTO tipo_cuenta FROM cgtb00012 a
WHERE a.cuenta_no=recibo.cuenta_no
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,
ISNULL(c.calle, ' ') + ISNULL(c.casa_num, ' ')
+ ISNULL(c.urbanizacion, ' ')
+ ISNULL(c.barrio, ' '),
a.ventas
INTO nom_cli, xdireccion, xventas
FROM vetb00004 b
INNER
JOIN vetb00060 a
ON a.tipo_cliente = recibo.tipo_cliente
LEFT OUTER
JOIN vetb00005 c
ON b.tipo_cliente = c.tipo_cliente
AND b.sec_cliente = c.sec_cliente
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
LET nom_cli =
nom_cli CLIPPED,
" ",
recibo.tipo_cliente USING "<<",
"-",
recibo.sec_cliente USING "<<<<<<<"
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
SELECT a.ventas INTO ventas FROM vetb00060 a
WHERE a.tipo_cliente=recibo.tipo_cliente
SELECT a.ventas INTO tipo_cuenta FROM cgtb00012 a
WHERE a.cuenta_no=recibo.cuenta_no
#CHEQUEA SI LA CUENTA DE BANCO ES EN PESOS O DOLARES
{ AFTER FIELD tasa
IF tasa IS NULL THEN
# CALL fgl_winmessage("aqui","entro","Stop")
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tasa
END IF }
AFTER FIELD cod_emp_sec
IF recibo.tipo_cliente IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tipo_cliente
END IF
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
AFTER FIELD plataforma
IF monto_cr != 0 THEN
SELECT a.comisiones
INTO p_comision
FROM cctb00009 a
WHERE a.id = plataforma
LET v_comision = monto_cr * (p_comision / 100)
DISPLAY BY NAME v_comision, p_comision
IF plataforma IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD plataforma
END IF
END IF
BEFORE FIELD valor_ctrl
LET valor_ctrl = NULL
IF monto_efectivo IS NULL THEN
LET monto_efectivo = 0
END IF
IF monto_cr IS NULL THEN
LET monto_cr = 0
END IF
IF monto_ck IS NULL THEN
LET monto_ck = 0
END IF
IF v_comision IS NULL THEN
LET v_comision = 0
END IF
IF monto_link IS NULL THEN
LET monto_link = 0
END IF
IF recibo.tipo_Doc <> 'NC' THEN
LET valor_ctrl =
monto_efectivo + monto_cr + monto_ck + monto_link
LET kefectivo_pesos=tasa*monto_efectivo
LET ck_pesos=tasa*monto_ck
LET tarjeta_pesos=tasa*monto_cr
LET link_pesos=tasa*monto_link
END IF
DISPLAY BY NAME valor_ctrl,kefectivo_pesos,ck_pesos,tarjeta_pesos,link_pesos
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLEAR FORM
RETURN
END IF
IF recibo.tipo_doc = 'PG' THEN
IF tipo_cuenta = 1 AND ventas<>1 THEN
# Cuenta en pesos y cliente en dolares: la tasa es obligatoria y no puede ser 1
IF tasa IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tasa
ELSE
IF tasa <= 1 THEN
CALL fgl_winmessage(
"TASA NO PERMITIDA",
"EL CLIENTE ES EN DOLARES Y LA CUENTA DE DEPOSITO ESTA EN PESOS.\n\nDEBE REGISTRAR LA TASA DE CAMBIO (MAYOR QUE 1). NO SE PERMITE DEJARLA EN 1.",
"STOP")
NEXT FIELD tasa
END IF
END IF
END IF
IF tasa IS NULL THEN
LET tasa = 1
END IF
IF monto_efectivo IS NULL THEN
LET monto_efectivo = 0
END IF
IF monto_cr != 0 THEN
IF plataforma IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD plataforma
END IF
END IF
IF monto_cr = 0 THEN
LET plataforma = 0
END IF
IF v_comision IS NULL THEN
LET v_comision = 0
END IF
IF monto_cr IS NULL THEN
LET monto_cr = 0
END IF
IF monto_ck IS NULL THEN
LET monto_ck = 0
END IF
LET valor_ctrl =
monto_efectivo + monto_cr + monto_ck + monto_link
LET kefectivo_pesos=tasa*monto_efectivo
LET ck_pesos=tasa*monto_ck
LET tarjeta_pesos=tasa*monto_cr
LET link_pesos=tasa*monto_link
IF kefectivo_pesos =0 AND ck_pesos =0 AND tarjeta_pesos =0 AND link_pesos = 0 THEN
CALL msg(16)
NEXT FIELD monto_efectivo
END IF
DISPLAY "valor ", valor_ctrl
DISPLAY BY NAME valor_ctrl,kefectivo_pesos,ck_pesos,tarjeta_pesos,link_pesos
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
SELECT a.paga_itbis, a.ventas, a.identrada
INTO ppaga_itbis, xventas, XidEntrada
FROM vetb00060 a
WHERE a.tipo_cliente = recibo.tipo_cliente
IF ppaga_itbis = 'N' THEN
LET ch_itbis = 'NO'
ELSE
LET ch_itbis = "SI"
END IF
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
CALL arr_recibo.clear()
IF valor_ctrl IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD valor_ctrl
END IF
# IF aplicacion_antiguas = "SI" THEN
# CALL aplica_mas_antiguas()
# END IF
EXIT INPUT
END INPUT
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 ACTION aplicacion
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 tipo_doc_recibo
IF recibo.tipo_doc = 'ND' OR recibo.tipo_doc = 'OD' THEN
IF arr_recibo[curr].num_cheque IS NOT NULL THEN
SELECT MAX(a.num_doc)
INTO num_recibo_ing
FROM cctb00001 a
WHERE a.num_doc = arr_recibo[curr].num_cheque
AND a.tipo_cliente = recibo.tipo_cliente
AND a.sec_cliente = recibo.sec_cliente
AND a.status_t IS NULL
IF num_recibo_ing IS NULL THEN
CALL msg(3)
NEXT FIELD num_cheque
END IF
IF arr_recibo[curr].tipo_doc_recibo IS NULL THEN
CALL msg(16)
NEXT FIELD tipo_doc_recibo
END IF
SELECT ISNULL(SUM(a.valor + a.monto_desc), 0)
INTO arr_recibo[curr].valor_cheque
FROM cctb00001 a
WHERE a.tipo_cliente = recibo.tipo_cliente
AND a.sec_cliente = recibo.sec_cliente
AND a.tipo_doc = arr_recibo[curr].tipo_doc_recibo
AND a.num_doc = arr_recibo[curr].num_cheque
AND a.aplica_a = arr_recibo[curr].aplica_a
AND a.status_t IS NULL
LET arr_recibo[curr].valor_cheque =
arr_recibo[curr].valor_cheque * -1
IF arr_recibo[curr].valor_cheque = 0 THEN
DISPLAY arr_recibo[curr].valor_cheque
TO s_recibo[scr_l].valor_cheque
ATTRIBUTE(RED)
CALL msg(3)
NEXT FIELD num_cheque
END IF
END IF
DISPLAY arr_recibo[curr].valor_cheque
TO s_recibo[scr_l].valor_cheque
ATTRIBUTE(BLUE)
ELSE
IF arr_recibo[idx].num_cheque IS NOT NULL THEN
CALL msg(1007)
NEXT FIELD num_cheque
END IF
END IF
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
# Controla que el documento factura pertenezca al cliente
# IF recibo.tipo_doc = "PG" OR recibo.tipo_doc='ND' 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 = arr_recibo[curr].tipo_doc_aplica)
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 cotizacion y orden
LET xcotizacion = NULL
LET xorden = NULL
LET condicionPago = 'NO TIENE'
IF arr_recibo[curr].tipo_doc_aplica = 'FT'
OR arr_recibo[curr].tipo_doc_aplica = 'FE' THEN
SELECT MAX(a.cotizacion_no),
MAX(a.orden),
MAX(b.descrip),
MAX(a.neto)
INTO xcotizacion,
xorden,
condicionPago,
valor_fact_original[curr]
FROM vetb00002 a, vetb00012 b
WHERE (a.factura = 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
AND a.cond_pago = b.cond_pago
IF xcotizacion IS NOT NULL THEN
SELECT ISNULL(a.sec_vend_aux, 0)
INTO sec_vend_a
FROM vetb00050 a
WHERE a.cotizacion_no = xcotizacion
LET recibo.cod_emp_sec = sec_vend_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.tipo_doc NOT IN ('AV', 'AP')
AND a.status_t IS NULL
IF arr_recibo[curr].valor_pag IS NULL THEN
LET arr_recibo[curr].valor_pag = valor_fac
END IF
IF aplicacion_antiguas = "NO" THEN
LET arr_recibo[curr].valor_pen = valor_fac
END IF
ELSE
SELECT SUM(a.valor + a.monto_desc)
INTO valor_fac
FROM cctb00001 a
WHERE (a.aplica_a = arr_recibo[curr].num_nc)
AND (a.tipo_doc IN ('AV', 'AP'))
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
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
IF aplicacion_antiguas = "NO" THEN
LET arr_recibo[curr].valor_pag = arr_recibo[curr].valor_pen
END IF
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
IF recibo.tipo_doc <> 'ND'
AND recibo.tipo_doc <> 'OC'
AND recibo.tipo_doc <> 'NC' THEN
IF recibo.tipo_doc <> 'OD' THEN
IF arr_recibo[curr].valor_pen < 0 THEN
CALL msg(1005)
LET arr_recibo[curr].valor_pag = 0
NEXT FIELD aplica_a
END IF
IF arr_recibo[curr].valor_pen > 0 THEN
IF arr_recibo[curr].valor_pag
> arr_recibo[curr].valor_pen THEN
CALL msg(1006)
NEXT FIELD valor_pag
END IF
END IF
END IF
END IF
IF arr_recibo[curr].num_cheque IS NOT NULL THEN
IF arr_recibo[curr].valor_pag
< arr_recibo[curr].valor_cheque THEN
CALL msg(1008)
NEXT FIELD valor_pag
END IF
END IF
IF recibo.tipo_doc = 'OD' OR recibo.tipo_doc = 'ND' THEN
IF arr_recibo[curr].num_cheque IS NULL THEN
IF arr_recibo[curr].valor_pen + arr_recibo[curr].valor_pag
> valor_fact_original[curr] THEN
CALL msg(1009)
# NEXT FIELD valor_pag
END IF
END IF
END IF
------ CONTROL VALOR RECIBO DE INGRESOS ------------------------------
# IF recibo.tipo_doc = 'PG' THEN
LET p_total = 0
LET remanente = valor_ctrl
FOR idx = 1 TO arr_Recibo.getLength()
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)
NEXT FIELD valor_pag
END IF
END IF
DISPLAY BY NAME p_total ATTRIBUTE(BOLD)
DISPLAY BY NAME remanente ATTRIBUTE(BLUE)
# END IF
# 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
FOR idx = 1 TO arr_recibo.getLength()
IF arr_recibo[idx].num_nc IS NULL THEN
IF arr_recibo[idx].aplica_a IS NOT NULL THEN
# BUSCA VALOR FACTURA
IF arr_recibo[idx].num_nc IS NULL THEN
SELECT SUM(a.valor + a.monto_desc)
INTO valor_fac
FROM cctb00001 a
WHERE (a.aplica_a = arr_recibo[idx].aplica_a)
AND (a.tipo_cliente = recibo.tipo_cliente
AND a.sec_cliente = recibo.sec_cliente)
AND a.tipo_doc NOT IN ('AV', 'AP')
AND a.status_t IS NULL
IF arr_recibo[idx].valor_pag IS NULL THEN
LET arr_recibo[idx].valor_pag = valor_fac
END IF
IF aplicacion_antiguas = "NO" THEN
LET arr_recibo[idx].valor_pen = valor_fac
END IF
ELSE
SELECT SUM(a.valor + a.monto_desc)
INTO valor_fac
FROM cctb00001 a
WHERE (a.aplica_a = arr_recibo[idx].num_nc)
AND (a.tipo_doc IN ('AV', 'AP'))
AND (a.tipo_cliente = recibo.tipo_cliente
AND a.sec_cliente = recibo.sec_cliente)
AND a.status_t IS NULL
LET arr_recibo[idx].valor_pen = valor_fac
END IF
IF recibo.tipo_doc <> 'ND' THEN
IF recibo.tipo_doc <> 'OD' THEN
IF arr_recibo[idx].valor_pen < 0 THEN
CALL fgl_winmessage(
"INFO",
"NO PUEDE APLICAR VALOR A ESTE DOCUMENTO, ESTA EN NEGATIVO",
"INFO")
LET arr_recibo[idx].valor_pag = 0
NEXT FIELD aplica_a
END IF
END IF
END IF
# CONTROL CHEQUE DEVUELTO
IF recibo.tipo_doc = 'ND' OR recibo.tipo_doc = 'OD' THEN
IF arr_recibo[idx].num_cheque IS NOT NULL THEN
IF arr_recibo[idx].tipo_doc_recibo IS NULL THEN
CALL msg(16)
NEXT FIELD tipo_doc_recibo
END IF
SELECT a.num_recibo_dev
FROM cctb00001 a
WHERE a.num_recibo_dev
=
arr_recibo[idx].num_cheque
AND a.tipo_cliente = recibo.tipo_cliente
AND a.sec_cliente = recibo.sec_cliente
AND a.status_t IS NULL
IF STATUS != NOTFOUND THEN
CALL msg(1015)
NEXT FIELD num_cheque
END IF
SELECT ISNULL(SUM(a.valor + a.monto_desc), 0)
INTO arr_recibo[idx].valor_cheque
FROM cctb00001 a
WHERE a.tipo_cliente = recibo.tipo_cliente
AND a.sec_cliente = recibo.sec_cliente
AND a.tipo_doc
=
arr_recibo[idx].tipo_doc_recibo
AND a.num_doc
=
arr_recibo[idx].num_cheque
AND a.aplica_a
=
arr_recibo[idx].aplica_a
AND a.status_t IS NULL
LET arr_recibo[idx].valor_cheque =
arr_recibo[idx].valor_cheque * -1
IF arr_recibo[idx].valor_cheque = 0 THEN
DISPLAY arr_recibo[idx].valor_cheque
TO s_recibo[scr_l].valor_cheque
ATTRIBUTE(RED)
CALL msg(3)
NEXT FIELD num_cheque
END IF
END IF
DISPLAY arr_recibo[idx].valor_cheque
TO s_recibo[scr_l].valor_cheque
ATTRIBUTE(BLUE)
ELSE
IF arr_recibo[idx].num_cheque IS NOT NULL THEN
CALL msg(1007)
NEXT FIELD num_cheque
END IF
END IF
#------------------------------------- TERMINA PROCESO CHEQUE DEVUELTO
IF arr_recibo[curr].num_cheque IS NOT NULL THEN
IF arr_recibo[curr].valor_pag
< arr_recibo[curr].valor_cheque THEN
CALL msg(1008)
NEXT FIELD valor_pag
END IF
END IF
IF recibo.tipo_doc = 'OD' OR recibo.tipo_doc = 'ND' THEN
IF arr_recibo[curr].num_cheque IS NULL THEN
IF arr_recibo[curr].valor_pen
+ arr_recibo[curr].valor_pag
> valor_fact_original[curr] THEN
CALL msg(1009)
# NEXT FIELD valor_pag
END IF
END IF
END IF
{ DEBI QUITAR EL CONTROL PARA CUANDO EL DOCUMENTO ES UNA OD O ND FECHA 08-09-2022
IF arr_recibo[idx].valor_pen > 0 AND arr_recibo[idx].num_cheque IS NULL THEN
# VALOR ORIGINAL FACTURA
SELECT ISNULL(a.neto,0) INTO valor_fact_original[idx] FROM vetb00002 a
WHERE a.factura = arr_recibo[idx].aplica_a AND a.status_t IS NULL
IF arr_recibo[idx].valor_pag + arr_recibo[idx].valor_pen > valor_fact_original[idx] THEN
CALL fgl_winmessage("INFO","NO PUEDE APLICAR VALOR MAYOR AL VALOR PENDIENTE","INFO")
NEXT FIELD valor_pag
END IF
END IF}
END IF
END IF
------ CONTROL VALOR RECIBO DE INGRESOS ------------------------------
IF recibo.tipo_doc = 'PG' THEN
LET p_total = 0
LET remanente = valor_ctrl
FOR idx = 1 TO arr_Recibo.getLength()
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)
NEXT FIELD valor_pag
END IF
END IF
DISPLAY BY NAME p_total ATTRIBUTE(BOLD)
DISPLAY BY NAME remanente ATTRIBUTE(BLUE)
END IF
END FOR
END INPUT
LET p_companias.cod_comp = 1
LET opc = NULL
LET valor_cheque1 = NULL
LET afecta_ex = "YES"
IF recibo.tipo_doc = 'OD' OR recibo.tipo_doc = 'OC' THEN
LET afecta_ex =
fgl_winquestion(
"AFECTA",
"DESEA AFECTAR CXC FISCAL?",
"YES",
"YES|NO",
"QUESTION",
0)
END IF
#SI ES CLIENTE 17 - EXPORTACION PREGUNTA SI VA A FECTAR EN FINANZAS
IF recibo.tipo_doc = 'PG' AND recibo.tipo_cliente=17 THEN
LET afecta_ex =
fgl_winquestion(
"AFECTA",
"DESEA AFECTAR FINANZAS?",
"YES",
"YES|NO",
"QUESTION",
0)
END IF
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
IF filepath IS NOT NULL THEN
LET nombre_file_foto =
recibo.tipo_doc, "-", recibo.num_doc USING "<<<<<<", ".jpg"
DISPLAY "nombre ", recibo.tipo_doc, "-", nombre_file_foto
LET filedestino =
FGL_GETENV("imagenrecibo"), "\\", nombre_file_foto CLIPPED
# LET filedestino = "D:\\genero fuentes\\DECOMARMOL320\\decomarmol\\IMAGENFACTURA\\",nombre_file_foto CLIPPED
DISPLAY "2 foto", filedestino
# LET filedestino = os.Path.basename(filepath)
LOCATE pimagen IN MEMORY
CALL fgl_getfile(filepath, filedestino)
CALL pimagen.readFile(filedestino)
DISPLAY filedestino TO foto
LET extension = os.Path.extension(filedestino)
LET foto = filedestino
DISPLAY BY NAME nombre_file_foto
END IF
# LOCATE pimagen IN MEMORY
# GENERA REGISTRO PARA ACTUALIZAR EL MAYOR GENERAL
LET generaE = FALSE
LET registroEntrada[1].referenciaEntrada = NULL
IF recibo.tipo_doc = 'PG' THEN
CALL GeneraEntradaDiario(
usuarios,
'RECIBOS INGRESOS',
XidEntrada,
recibo.cuenta_no,
recibo.fecha_orig,
valor_ctrl,
0,
0,
recibo.tipo_cliente,
recibo.sec_cliente,
xventas,
0,
recibo.num_doc,
xvalorComision)
RETURNING generaE, registroEntrada
FOR i = 1 TO registroEntrada.getLength()
IF registroEntrada[i].referenciaEntrada IS NOT NULL THEN
LET entradaDiario = registroEntrada[i].referenciaEntrada
DISPLAY "SECUENCIA ENTRADA DIARIO: ", entradaDiario
END IF
END FOR
# CONTROL NUMERICO DEPOSITOS
IF recibo.cuenta_no IS NOT NULL THEN
CALL numeroDeposito(
recibo.cuenta_no,
recibo.fecha_orig,
codigo_sucursal,
xventas,
plataforma)
RETURNING rdeposito,
xmontoDeposito,
xvalorck,
xvalorCr,
xvalorEfectivo,
xvalorComision,
xvalorLink,xefectivopesos,xckpesos,xlinkpesos,xcrpesos
IF rdeposito = 0 THEN
SELECT a.num_doc INTO deposito FROM tetb00009 a
IF deposito IS NULL THEN
LET deposito = 0
INSERT INTO tetb00009 VALUES(deposito)
END IF
LET deposito = deposito + 1
END IF
END IF
#--------------------------------------------------------------------------------
END IF
# INSERTA EL COMENTARIO
BEGIN WORK
IF filepath IS NULL OR filepath = "" THEN
LET nombre_file_foto = NULL
LET filedestino = NULL
LET pimagen = NULL
END IF
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
IF monto_efectivo IS NULL THEN
LET monto_efectivo = 0
END IF
IF monto_cr IS NULL THEN
LET monto_cr = 0
END IF
IF monto_ck IS NULL THEN
LET monto_ck = 0
END IF
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,
valor_efectivo,
valor_tarjeta,
valor_cheque,
valor_link)
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,
monto_efectivo,
monto_cr,
monto_ck,
monto_link)
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
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
## SI NO OCURRE NINGUN ERROR SE PROCEDE A INSERTAR EL REGISTRO
LET actualiza = 'NO'
FOR idx = 1 TO arr_recibo.getLength()
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
LET numero_doc = arr_recibo[idx].num_nc
IF arr_recibo[idx].num_nc IS NOT NULL THEN
LET tipo_doc1 = "AV"
LET avance = TRUE
LET navance = 0
SELECT a.num_trans
INTO avance_e[idx]
FROM cctb00020 a
WHERE a.num_oc = arr_recibo[idx].num_nc
ELSE
LET numero_doc = recibo.num_doc
# LET arr_recibo[idx].num_nc = recibo.num_doc ASI ERA QUE ESTABA ANTES DEL 3/6/2019
LET tipo_doc1 = recibo.tipo_doc
LET avance = FALSE
LET navance = 1
END IF
LET actualiza = 'SI'
IF recibo.tipo_doc = "DV" OR recibo.tipo_doc = 'OD' THEN
IF arr_recibo[idx].tipo_doc_aplica = 'AV' THEN
LET valor_aplicado = arr_recibo[idx].valor_pag * -1
IF arr_recibo[idx].valor_pag > 0 THEN
LET valor_aplicado = arr_recibo[idx].valor_pag * -1
END IF
SELECT a.num_trans
INTO avance_e[idx]
FROM cctb00020 a
WHERE a.num_oc = arr_recibo[idx].aplica_a
# PARA REAPLICAR LOS AVANCES CUANDO ES POR DEVOLUCION DE DINERO DEL AVANCE ORIGINAL
INSERT INTO cctb00001(
cuenta_no,
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,
tipo_doc_aplica,
documento_ref,
num_oc,
sucid,
valor_efectivo,
valor_tarjeta,
valor_link,
plataforma,
p_comision,
v_comision)
VALUES(recibo.cuenta_no,
p_companias.cod_comp,
'AP',
arr_recibo[idx].aplica_a,
recibo.tipo_cliente,
recibo.sec_cliente,
codigo_sucursal,
recibo.cod_emp_sec,
recibo.fecha_orig,
"010101",
arr_recibo[idx].aplica_a,
recibo.num_doc,
valor_aplicado,
monto_ck,
navance,
arr_recibo[idx].desc_p,
SUSER_SNAME(),
GETDATE(),
arr_recibo[idx].cotizacion_no,
arr_recibo[idx].tipo_doc_aplica,
xcotizacion,
xorden,
codigo_sucursal,
monto_efectivo,
monto_cr,
monto_link,
plataforma,
p_comision,
v_comision)
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
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
IF arr_recibo[idx].desc_p IS NULL THEN
LET arr_recibo[idx].desc_p = 0
END IF
INSERT INTO cctb00001(
cuenta_no,
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,
tipo_doc_aplica,
documento_ref,
num_oc,
sucid,
num_recibo_dev,
valor_recibo_dev,
tipo_doc_recibo,
valor_efectivo,
valor_tarjeta,
num_doc_deposito,
referenciaEntrada,
valor_link,
plataforma,
p_comision,
v_comision,tasa,efectivo_pesos,ck_pesos,tarjeta_pesos,link_pesos)
VALUES(recibo.cuenta_no,
p_companias.cod_comp,
tipo_doc1,
numero_doc,
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,
monto_ck,
navance,
arr_recibo[idx].desc_p,
SUSER_SNAME(),
GETDATE(),
arr_recibo[idx].cotizacion_no,
arr_recibo[idx].tipo_doc_aplica,
xcotizacion,
xorden,
codigo_sucursal,
arr_recibo[idx].num_cheque,
arr_recibo[idx].valor_cheque,
arr_recibo[idx].tipo_doc_recibo,
monto_efectivo,
monto_cr,
deposito,
entradaDiario,
monto_link,
plataforma,
p_comision,
v_comision,tasa,kefectivo_pesos,ck_pesos,tarjeta_pesos,link_pesos)
IF filedestino IS NOT NULL THEN
UPDATE cctb00001
SET foto = filedestino,
imagen = pimagen,
nombre_file_foto = nombre_file_foto
WHERE num_doc = numero_doc AND tipo_doc = tipo_doc1
END IF
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
END IF
END FOR
#INSERTAR EN LA TABLA DE DEPOSITOS
IF recibo.cuenta_no IS NOT NULL THEN
CALL numeroDeposito(
recibo.cuenta_no,
recibo.fecha_orig,
codigo_sucursal,
xventas,
plataforma)
RETURNING rdeposito,
xmontoDeposito,
xvalorck,
xvalorCr,
xvalorEfectivo,
xvalorComision,
xvalorLink,xefectivopesos,xckpesos,xlinkpesos,xcrpesos
IF rdeposito = 0 THEN
SELECT a.num_doc INTO deposito FROM tetb00009 a
IF deposito IS NULL THEN
LET deposito = 0
INSERT INTO tetb00009 VALUES(deposito)
END IF
LET deposito = deposito + 1
DISPLAY BY NAME deposito
END IF
IF rdeposito = 0 THEN
UPDATE tetb00009 SET num_doc = deposito
END IF
DISPLAY BY NAME deposito
IF valor_ctrl < 0 THEN
LET valor_ctrl = valor_ctrl * -1
END IF
IF ventas!= 1 THEN
IF tipo_cuenta=1 THEN
LET valor_ctrl=kefectivo_pesos+link_pesos+ck_pesos+tarjeta_pesos
END IF
END IF
IF rdeposito = 0 THEN
INSERT INTO tetb00001(
num_doc,
cuenta_no,
fecha,
monto,
sucursal,
us_crea,
fech_crea,
monto_efectivo,
monto_ck,
monto_link,
monto_tarjeta,
plataforma,
p_comision,
v_comision,
ventas,efectivo_pesos,tarjeta_pesos,ck_pesos,link_pesos)
VALUES(deposito,
recibo.cuenta_no,
recibo.fecha_orig,
valor_ctrl,
p_companias.cod_comp,
usuarios,
getdate(),
monto_efectivo,
monto_ck,
monto_link,
monto_cr,
plataforma,
p_comision,
v_comision,
xventas,kefectivo_pesos,tarjeta_pesos,ck_pesos,link_pesos)
ELSE
LET deposito = rdeposito
UPDATE tetb00001
SET monto = xmontoDeposito + valor_ctrl,
monto_efectivo = xvalorEfectivo + monto_efectivo,
monto_tarjeta = xvalorCr + monto_cr,
monto_ck = xvalorck +monto_ck,
monto_link = xvalorLink+monto_link,
v_comision = v_comision + xvalorComision,
efectivo_pesos=xefectivopesos+kefectivo_pesos,
tarjeta_pesos=xcrpesos+tarjeta_pesos,
ck_pesos=xckpesos+ck_pesos,
link_pesos=xlinkpesos+link_pesos
WHERE num_doc = rdeposito
END IF
INSERT INTO tetb00008(
num_doc,
tipo_doc,
documento,
fecha,
tipo_cliente,
sec_cliente,
nombre,
valor,
us_crea,
fech_crea)
VALUES(deposito,
RECIBO.tipo_doc,
RECIBO.num_doc,
recibo.fecha_orig,
recibo.tipo_cliente,
recibo.sec_cliente,
nom_cli,
valor_ctrl,
usuarios,
getdate())
END IF
#------------------------------------------------------------------------------------------------
LET r_filename = "ccprmt001a.4rp"
LET r_output = "SVG"
LET preview = 1
-- configure report engine; the functions prefixed fgl that are called here are part of the GRW API
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
CALL fgl_report_selectDevice(r_output) -- changing default
IF preview = 0 THEN
CALL fgl_report_selectPreview(1) -- changing default
# CALL fgl_report_configureSVGPreview("PrintOnDefaultPrinter")
ELSE
CALL fgl_report_selectPreview(preview)
END IF
LET handler = fgl_report_commitCurrentSettings() -- commit changes
ELSE
EXIT PROGRAM
END IF
--run the report
IF handler IS NOT NULL THEN -- report engine was configured ok
START REPORT cctb01b TO XML HANDLER HANDLER
FOR idx = 1 TO arr_recibo.getLength()
IF arr_recibo[idx].num_nc IS NULL THEN
IF arr_recibo[idx].valor_pag IS NOT NULL THEN
OUTPUT TO REPORT cctb01b(
recibo.tipo_cliente,
recibo.sec_cliente,
recibo.fecha_orig,
recibo.num_doc,
recibo.cod_emp_sec,
recibo.tipo_doc,
recibo.cuenta_no,
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 cctb01b
END IF
# FINISH REPORT cctb01
# RUN imprime
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
ROLLBACK WORK
RETURN
END IF
IF actualiza = "NO" THEN
ROLLBACK WORK
CALL fgl_winmessage("INFO", "NO FUE POSIBLE ADICIONAR REGISTRO", "INFO")
EXIT PROGRAM
ELSE
#ACTUALIZACION CONTABILIDAD GENERAL
IF generaE THEN
FOR idx = 1 TO registroEntrada.getLength()
IF registroEntrada[idx].cuenta_no IS NOT NULL THEN
INSERT INTO cgtb00004(
fecha,
tipo,
ref,
cuenta_no,
detalle_1,
departamento,
debito,
credito,
us_crea,
fech_crea,
tipo_doc_cxc,
num_doc_cxc,
tipo_cliente,
sec_cliente,
sucid,
valor_original,
nombre_proveedor)
VALUES(registroEntrada[idx].fecha,
registroEntrada[idx].tipo,
registroEntrada[idx].referenciaEntrada,
registroEntrada[idx].cuenta_no,
registroEntrada[idx].detalle,
registroEntrada[idx].departamento,
registroEntrada[idx].debito,
registroEntrada[idx].credito,
usuarios,
GETDATE(),
recibo.tipo_doc,
recibo.num_doc,
recibo.tipo_cliente,
recibo.sec_cliente,
codigo_sucursal,
valor_ctrl,
nom_cli)
END IF
END FOR
END IF
COMMIT WORK
END IF
# ACTUALIZA OTRA DB
IF afecta_ex = "YES" THEN
SET CONNECTION "IFMX"
LET encontre_factura = 'S'
IF recibo.tipo_doc = 'PG' THEN
LET recibo.tipo_doc = 'RC'
END IF
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,
cod_emp_sec,
valor_recibo,
valor_efectivo,
valor_tarjeta,
valor_cheque)
VALUES(p_companias.cod_comp,
recibo.num_doc,
recibo.tipo_Doc,
recibo.tipo_cliente,
recibo.sec_cliente,
recibo.comentario,
SUSER_SNAME(),
GETDATE(),
codigo_sucursal,
recibo.cod_emp_sec,
valor_ctrl,
monto_efectivo,
monto_cr,
monto_ck)
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 = "RC" 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")
LET encontre_factura = 'N'
EXIT FOR
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 = 'RC' 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
# DEVOLUCION DINERO
IF recibo.tipo_doc = "DV" THEN
IF arr_recibo[idx].tipo_doc_aplica = 'AV' THEN
LET valor_aplicado = arr_recibo[idx].valor_pag * -1
IF arr_recibo[idx].valor_pag > 0 THEN
LET valor_aplicado = arr_recibo[idx].valor_pag * -1
END IF
# PARA REAPLICAR LOS AVANCES CUANDO ES POR DEVOLUCION DE DINERO DEL AVANCE ORIGINAL
INSERT INTO cctb00001(
cuenta_no,
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,
tipo_doc_aplica,
documento_ref,
num_oc,
sucid,
valor_efectivo,
valor_tarjeta,
monto_link,
plataforma,
p_comision,
v_comision)
VALUES(recibo.cuenta_no,
p_companias.cod_comp,
'AP',
avance_e[idx],
recibo.tipo_cliente,
recibo.sec_cliente,
codigo_sucursal,
recibo.cod_emp_sec,
recibo.fecha_orig,
"010101",
avance_e[idx],
recibo.num_doc,
valor_aplicado,
monto_ck,
avance_e[idx],
arr_recibo[idx].desc_p,
SUSER_SNAME(),
GETDATE(),
arr_recibo[idx].cotizacion_no,
arr_recibo[idx].tipo_doc_aplica,
xcotizacion,
xorden,
codigo_sucursal,
monto_efectivo,
monto_cr,
monto_link,
plataforma,
p_comision,
v_comision)
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
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
LET xfactura_ext = NULL
IF arr_recibo[idx].tipo_doc_aplica = 'AV' THEN
SELECT DISTINCT a.num_doc
FROM cctb00001 a
WHERE a.tipo_doc = arr_recibo[idx].tipo_doc_aplica
AND a.num_doc = avance_e[idx]
AND a.num_doc = a.aplica_a
AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
ROLLBACK WORK
RETURN
END IF
END IF
IF arr_recibo[idx].tipo_doc_aplica = 'FT'
OR arr_recibo[idx].tipo_doc_aplica = 'FE' THEN
SELECT a.factura, a.orden
INTO xfactura_ext, xorden
FROM vetb00002 a
WHERE a.tipo_cliente = recibo.tipo_cliente
AND a.sec_cliente = recibo.sec_cliente
AND a.factura_c = arr_recibo[idx].aplica_a
AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
ROLLBACK WORK
LET encontre_factura = 'N'
EXIT FOR
END IF
LET xcotizacion = NULL
SELECT a.cotizacion_no
INTO xcotizacion
FROM prtb00012 a
WHERE a.num_oc = xorden
END IF
IF tipo_Doc1 = 'RC' AND arr_recibo[idx].valor_pag > 0 THEN
LET arr_recibo[idx].valor_pag =
arr_recibo[idx].valor_pag * -1
END IF
IF tipo_Doc1 = 'OC' AND arr_recibo[idx].valor_pag > 0 THEN
LET arr_recibo[idx].valor_pag =
arr_recibo[idx].valor_pag * -1
END IF
SELECT a.factura
INTO avance_e[idx]
FROM vetb00002 a
WHERE a.factura_c = arr_recibo[idx].aplica_a
AND a.tipo_cliente = recibo.tipo_cliente
AND a.sec_cliente = recibo.sec_cliente
AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
ROLLBACK WORK
LET encontre_factura = 'N'
EXIT FOR
END IF
IF monto_efectivo IS NULL THEN
LET monto_efectivo = 0
END IF
IF monto_cr IS NULL THEN
LET monto_cr = 0
END IF
IF monto_ck IS NULL THEN
LET monto_ck = 0
END IF
LET efectivo = monto_efectivo
INSERT INTO cctb00001(
cuenta_no,
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,
tipo_doc_aplica,
documento_ref,
num_oc,
sucid,
valor_efectivo,
valor_tarjeta,
valor_link,
plataforma,
p_comision,
v_comision,tasa,efectivo_pesos,ck_pesos,tarjeta_pesos,link_pesos)
VALUES(recibo.cuenta_no,
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",
xfactura_ext,
recibo.num_doc,
arr_recibo[idx].valor_pag,
monto_ck,
avance_e[idx],
arr_recibo[idx].desc_p,
SUSER_SNAME(),
GETDATE(),
arr_recibo[idx].cotizacion_no,
arr_recibo[idx].tipo_doc_aplica,
xcotizacion,
xorden,
codigo_sucursal,
monto_efectivo,
monto_cr,
monto_link,
plataforma,
p_comision,
v_comision,tasa,kefectivo_pesos,ck_pesos,tarjeta_pesos,link_pesos)
IF SQLSTATE > 02 THEN
ROLLBACK WORK
CALL fgl_winmessage(
"ERROR",
"NO FUE POSIBLE GUARDAR LA TRANSACCION",
"STOP")
RETURN
END IF
END IF
END FOR
IF encontre_factura = 'S' THEN
COMMIT WORK
END IF
END IF
LET numero_msg = 1
CALL msg(numero_msg)
LET emp = recibo.cod_emp_sec
CLEAR FORM
LET INT_FLAG = FALSE
SET CONNECTION "MSSQL"
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,
a.cuenta_no,
b.fecha_orig
FROM tipo_doc,
num_doc,
tipo_cliente,
sec_cliente,
cod_emp_sec,
cuenta_no,
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.cuenta_no,a.fecha_orig,b.comentario,b.chitbis,a.cod_emp_sec,b.valor_recibo,a.foto, ",
" b.valor_efectivo,b.valor_tarjeta,b.valor_cheque,a.plataforma,a.p_comision,a.v_comision ",
"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,
recibo.cod_emp_sec,
valor_ctrl,
filedestino,
monto_efectivo,
monto_cr,
monto_ck,
monto_link,
plataforma,
p_comision,
v_comision
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
CALL datos_doc()
DISPLAY filedestino TO foto
MENU "OPCION"
COMMAND "Siguiente"
"Presenta en pantalla el proximo registro encontrado"
FETCH NEXT datos
INTO recibo.*,
ch_itbis,
recibo.cod_emp_sec,
valor_ctrl,
filedestino,
monto_efectivo,
monto_cr,
monto_ck,
monto_link,
plataforma,
p_comision,
v_comision
IF status = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
CALL datos_doc()
DISPLAY "archivo", filedestino
DISPLAY filedestino TO foto
COMMAND "Anterior"
"Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS datos
INTO recibo.*,
ch_itbis,
recibo.cod_emp_sec,
valor_ctrl,
filedestino,
monto_efectivo,
monto_cr,
monto_ck,
monto_link,
plataforma,
p_comision,
v_comision
IF status = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
CALL datos_doc()
DISPLAY filedestino TO foto
COMMAND "Primero" "Presenta en pantalla el primer registro encontrado"
FETCH FIRST datos
INTO recibo.*,
ch_itbis,
recibo.cod_emp_sec,
valor_ctrl,
filedestino,
monto_efectivo,
monto_cr,
monto_ck,
monto_link,
plataforma,
p_comision,
v_comision
IF status = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
CALL datos_doc()
DISPLAY filedestino TO foto
COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado"
FETCH LAST datos
INTO recibo.*,
ch_itbis,
recibo.cod_emp_sec,
valor_ctrl,
filedestino,
monto_efectivo,
monto_cr,
monto_ck,
monto_link,
plataforma,
p_comision,
v_comision
IF status = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
CALL datos_doc()
DISPLAY filedestino TO foto
{ 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
AND tipo_cliente = recibo.tipo_cliente
AND sec_cliente = recibo.sec_cliente
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),
b.fecha_factura,
b.cotizacion_no,
b.orden
FROM cctb00001 a, vetb00002 b
WHERE (a.tipo_cliente = recibo.tipo_cliente
AND a.sec_cliente = recibo.sec_cliente
AND a.tipo_cliente = b.tipo_cliente
AND a.sec_cliente = b.sec_cliente)
AND (a.tipo_doc NOT IN ('AV', 'AP') AND a.aplica_a = b.factura)
AND a.status_t IS NULL
GROUP BY b.fecha_factura, a.aplica_a, b.cotizacion_no, b.orden
HAVING SUM(a.valor + a.monto_desc) > 0
ORDER BY b.fecha_factura
LET existe = "N"
LET idx = 1
FOREACH aplicar
INTO aplica_wd[idx].aplica_a,
aplica_wd[idx].pendiente,
aplica_wd[idx].fecha,
aplica_wd[idx].cotizacion_no,
aplica_wd[idx].num_oc
IF status = NOTFOUND THEN
LET existe = "N"
EXIT FOREACH
END IF
CALL integridad()
# Busca el tipo de movimiento
SELECT MAX(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 ordes y cotizacion de la factura
IF tipo_Doc2 = 'FT' OR tipo_Doc2 = 'FE' THEN
SELECT a.orden,
a.cotizacion_no,
a.factura_ext,
CONVERT(CHAR(10), a.fecha_factura, 103)
INTO aplica_wd[idx].num_oc,
aplica_wd[idx].cotizacion_no,
aplica_wd[idx].factura_e,
aplica_wd[idx].fecha
FROM vetb00002 a
WHERE a.tipo_cliente = recibo.tipo_cliente
AND a.sec_cliente = recibo.sec_cliente
AND a.factura = aplica_wd[idx].aplica_a
END IF
# Busca Nota de credito
LET valor_ctrl1 = 0
IF tipo_doc2 = "AV" THEN
LET aplica_wd[idx].cotizacion_no = NULL
SELECT MAX(a.banco)
INTO aplica_wd[idx].cotizacion_no
FROM cctb00001 a
WHERE a.num_doc = aplica_wd[idx].num_oc
AND a.num_doc = a.aplica_a
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 INT_FLAG = FALSE
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 VARCHAR(100),
p_comentario, tipo_documento CHAR(120), #LIKE cctb00011.comentario,
ditbis, total_doc, total_desc DEC(12, 2)
ORDER BY p_sec_cliente, p_num_doc
FORMAT
PAGE HEADER
LET hora = TIME
IF p_tipo_doc = 'PG' THEN
LET tipo_documento = 'RECIBO INGRESOS'
ELSE
LET tipo_documento = 'DOCUMENTOS'
END IF
PRINTX p_companias.nombre,
p_num_doc,
p_companias.rnc,
p_companias.direccion,
p_fecha_orig,
hora,
tipo_documento
BEFORE GROUP OF p_sec_cliente
PRINTX nombre_sucursal,
p_cuenta_no,
p_nombre_cta,
p_banco,
p_nombre,
p_tipo_cliente,
p_sec_cliente,
p_cod_emp_sec,
p_nomb_emp,
p_tipo_doc,
p_nombre_tipo
ON EVERY ROW
PRINTX p_aplica_a, p_monto_desc, p_valor, p_valor
AFTER GROUP OF p_sec_cliente
LET total_doc = GROUP SUM(p_valor)
LET total_desc = GROUP SUM(p_monto_desc)
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
REPORT cctb01b(
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),
pitbis DEC(12, 2),
labelcliente, pnombreTipo STRING
DEFINE
hora CHAR(5),
p_nombre LIKE vetb00004.nombre,
p_comentario CHAR(120), #LIKE cctb00011.comentario,
descuento, total_monto, ditbis DEC(12, 2),
tipodocumento VARCHAR(50)
ORDER BY p_sec_cliente
FORMAT
PAGE HEADER
LET hora = TIME
LET p_nombre_tipo = pnombreTipo CLIPPED
IF p_tipo_doc = 'PG' THEN
LET tipodocumento = 'RECIBO DE INGRESOS'
LET labelcliente = "HEMOS RECIBIDO DE "
ELSE
LET tipodocumento = 'DOCUMENTO CUENTAS POR COBRAR'
LET labelcliente = "CLIENTE: "
END IF
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
PRINTX nombre_sucursal,
p_cuenta_no,
p_nombre_cta,
p_banco,
p_nombre,
p_tipo_cliente,
p_sec_cliente,
p_cod_emp_sec,
p_nomb_emp,
p_tipo_doc,
p_nombre_tipo,
tipodocumento,
hora,
p_companias.nombre,
p_num_doc,
p_companias.rnc,
p_companias.direccion,
p_fecha_orig,
p_companias.telefono,
p_companias.fax,
fecha_proximo,
labelcliente,
condicionPago,
xdireccion
ON EVERY ROW
PRINTX p_aplica_a, p_monto_desc, p_valor, ditbis, p_valor
AFTER GROUP OF p_sec_cliente
# BUSCA TIPO DE VENTAS
SELECT a.simbolo, a.descripcion_moneda, a.ventas
INTO psimbolo, pmoneda, xventas
FROM vetb00061 a, vetb00060 b
WHERE a.ventas = b.ventas AND b.tipo_cliente = p_tipo_cliente
LET descuento = GROUP SUM(p_monto_desc)
LET total_monto = GROUP SUM(p_valor)
LET valor_orig = total_monto
LET valor_letras = NULL
CALL convierte()
PRINTX descuento, total_monto, valor_letras, psimbolo
ON LAST ROW
PRINTX p_comentario
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 IN ('AV', 'AP')
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
IF INT_FLAG THEN
LET INT_FLAG = FALSE
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 b.nombre,
ISNULL(c.calle, ' ') + ISNULL(c.casa_num, ' ')
+ ISNULL(c.urbanizacion, ' ')
+ ISNULL(c.barrio, ' ')
INTO nom_cli, xdireccion
FROM vetb00004 b
LEFT OUTER
JOIN vetb00005 c
ON b.tipo_cliente = c.tipo_cliente AND b.sec_cliente = c.sec_cliente
WHERE b.tipo_cliente = recibo.tipo_cliente
AND b.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
IF recibo.tipo_doc = "PG" THEN
LET selec =
"SELECT a.num_doc,a.documento_ref,a.tipo_doc_aplica,a.aplica_a,a.valor,a.num_recibo_dev,a.tipo_doc_recibo,a.valor_recibo_dev,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.documento_ref,a.tipo_doc_aplica,aplica_a,valor,a.num_recibo_dev,a.tipo_doc_recibo,a.valor_recibo_dev,a.monto_desc,a.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}
LET r_filename = "ccprmt001a.4rp"
LET r_output = "SVG"
LET preview = 1
-- configure report engine; the functions prefixed fgl that are called here are part of the GRW API
IF fgl_report_loadCurrentSettings(
r_filename) THEN -- load the .4rp file
CALL fgl_report_selectDevice(r_output) -- changing default
IF preview = 0 THEN
CALL fgl_report_selectPreview(1) -- changing default
# CALL fgl_report_configureSVGPreview("PrintOnDefaultPrinter")
ELSE
CALL fgl_report_selectPreview(preview)
END IF
LET handler =
fgl_report_commitCurrentSettings() -- commit changes
ELSE
EXIT PROGRAM
END IF
--run the report
IF handler IS NOT NULL THEN -- report engine was configured ok
START REPORT cctb01b TO XML HANDLER HANDLER
FOR idx = 1 TO arr_recibo.getLength()
IF arr_recibo[idx].num_nc IS NULL THEN
IF arr_recibo[idx].valor_pag IS NOT NULL THEN
OUTPUT TO REPORT cctb01b(
recibo.tipo_cliente,
recibo.sec_cliente,
recibo.fecha_orig,
recibo.num_doc,
recibo.cod_emp_sec,
recibo.tipo_doc,
recibo.cuenta_no,
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 cctb01b
END IF
AFTER DISPLAY
EXIT DISPLAY
END DISPLAY
END FUNCTION
FUNCTION aplica_mas_antiguas()
DEFINE
balance, valor_aplicando DEC(12, 2),
j INT,
pventas CHAR(1)
DECLARE busca_antiguas CURSOR FOR
SELECT a.aplica_a,
SUM(a.valor + a.monto_desc),
b.ventas,
b.fecha_factura
FROM cctb00001 a, vetb00002 b
WHERE (a.tipo_cliente = recibo.tipo_cliente
AND a.sec_cliente = recibo.sec_cliente
AND a.tipo_cliente = b.tipo_cliente
AND a.sec_cliente = b.sec_cliente)
AND (a.tipo_doc NOT IN ('AV', 'AP') AND a.aplica_a = b.factura)
AND a.status_t IS NULL
GROUP BY a.aplica_a, b.fecha_factura, b.ventas
HAVING SUM(a.valor + a.monto_desc) > 0
ORDER BY b.fecha_factura
LET idx = 1
LET j = 1
LET valor_aplicando = 0
LET balance = valor_ctrl
FOREACH busca_antiguas
INTO aplica_wd[idx].aplica_a, aplica_wd[idx].pendiente, pventas
LET balance = balance - aplica_wd[idx].pendiente
IF balance < 0 THEN
IF valor_aplicando < valor_ctrl THEN
IF pventas = '1' THEN
LET arr_recibo[j].tipo_doc_aplica = 'FT'
ELSE
LET arr_recibo[j].tipo_doc_aplica = 'FE'
END IF
LET arr_recibo[j].aplica_a = aplica_wd[idx].aplica_a
LET arr_recibo[j].valor_pen = aplica_wd[idx].pendiente
LET arr_recibo[j].valor_pag = valor_ctrl - valor_aplicando
DISPLAY "DATA2 ",
arr_recibo[j].aplica_a,
" V ",
arr_recibo[j].valor_pag
END IF
EXIT FOREACH
ELSE
IF pventas = '1' THEN
LET arr_recibo[j].tipo_doc_aplica = 'FT'
ELSE
LET arr_recibo[j].tipo_doc_aplica = 'FE'
END IF
LET arr_recibo[j].aplica_a = aplica_wd[idx].aplica_a
LET arr_recibo[j].valor_pen = aplica_wd[idx].pendiente
IF balance > aplica_wd[idx].pendiente THEN
LET valor_aplicando = valor_aplicando + aplica_wd[idx].pendiente
LET arr_recibo[j].valor_pag = aplica_wd[idx].pendiente
END IF
DISPLAY "DATA ",
arr_recibo[j].aplica_a,
" V ",
arr_recibo[j].valor_pag
LET j = j + 1
END IF
LET idx = idx + 1
END FOREACH
END FUNCTION
FUNCTION convierte()
DEFINE consegui CHAR(1)
DEFINE p,
miles,
m,
k,
a,
b,
d,
c,
entero,
unidades_mi,
unidades_m,
unidad,
mil,
millon,
unid_c,
u
INTEGER
DEFINE cheles DECIMAL(7, 2)
CALL letras()
LET valor_letras = NULL
LET consegui = "N"
LET entero = valor_orig
LET cheles = (valor_orig - entero) * 100
LET unidad = entero / 100
LET unidad = entero - (unidad * 100)
LET a = entero / 1000
LET a = entero - (a * 1000)
LET d = entero - 19
IF d >= 82 THEN
LET c = entero / 100
# Para Controlar los miles y los cientos
IF c <= 9 THEN
LET valor_letras = valor_letras CLIPPED, " ", centenas[c] CLIPPED
ELSE
LET c = entero / 1000
LET b = entero / 1000000
END IF
IF d > 19 THEN
LET d = unidad - 19
END IF
IF unidad > 0 AND unidad < 20 THEN
LET d = unidad
LET valor_letras = valor_letras CLIPPED, " ", unidades1[d] CLIPPED
LET consegui = "S"
END IF
ELSE
IF d > 0 AND d <= 81 THEN
LET valor_letras = valor_letras CLIPPED, " ", decenas[d] CLIPPED
LET consegui = "S"
END IF
END IF
# Para controlar los miles
IF entero > 999 THEN
LET unidades_m = a / 100
LET unidades_m = a - (unidades_m * 100)
LET valor_letras = NULL
IF c = 1 THEN
LET valor_letras = "MIL"
END IF
IF c > 1 AND c <= 19 THEN
LET valor_letras =
valor_letras CLIPPED, " ", unidades1[c] CLIPPED, " ", "MIL"
END IF
IF c >= 20 AND c <= 999 THEN
IF c < 82 THEN
LET c = c - 19
LET valor_letras = valor_letras CLIPPED, " ", decenas[c] CLIPPED
ELSE
LET k = c / 100
IF k > 0 AND k < 10 THEN
LET unid_c = c - (k * 100) # AQUI FUE
IF k > 1 THEN
LET valor_letras =
valor_letras CLIPPED, " ", centenas[k] CLIPPED
ELSE
IF k = 1 THEN
IF unid_c > 0 THEN
LET valor_letras =
valor_letras CLIPPED,
" ",
centenas[k] CLIPPED
ELSE
LET valor_letras =
valor_letras CLIPPED,
" ",
decenas[81] CLIPPED
END IF
END IF
END IF
END IF
LET unid_c = c - (k * 100)
IF unid_c > 0 AND unid_c < 20 THEN
LET valor_letras =
valor_letras CLIPPED, " ", unidades1[unid_c] CLIPPED
ELSE
LET unid_c = unid_c - 19
IF unid_c > 0 AND unid_c <= 81 THEN
LET valor_letras =
valor_letras CLIPPED, " ", decenas[unid_c] CLIPPED
LET consegui = "S"
END IF
END IF
IF c > 82 AND c < 100 AND consegui <> "S" THEN
LET c = c - 19
LET valor_letras =
valor_letras CLIPPED, " ", decenas[c] CLIPPED
END IF
IF c > 100 AND consegui <> "S" THEN
LET c = c - 119
IF c > 0 AND c <= 81 THEN
LET valor_letras =
valor_letras CLIPPED, " ", decenas[c] CLIPPED
LET consegui = "N"
END IF
END IF
END IF
LET valor_letras = valor_letras CLIPPED, " ", "MIL"
END IF
LET c = a
IF c > 100 THEN
LET c = c / 100
LET valor_letras = valor_letras CLIPPED, " ", centenas[c] CLIPPED
END IF
IF c = 100 THEN
LET valor_letras = valor_letras CLIPPED, " ", decenas[81] CLIPPED
END IF
IF unidades_m > 0 AND unidades_m - 19 <= 81 THEN
LET a = unidades_m - 19
IF a > 0 AND a <= 81 THEN
LET valor_letras = valor_letras CLIPPED, " ", decenas[a] CLIPPED
LET consegui = "S"
ELSE
LET valor_letras =
valor_letras CLIPPED, " ", unidades1[unidades_m] CLIPPED
END IF
END IF
END IF
#========================================================================================
# Para Controlar cantidades en millones
IF entero > 999999 THEN
LET c = 0
LET miles = entero - 1000000
LET m = miles / 1000
LET p = miles - (m * 1000)
LET u = m / 100
LET u = m - (u * 100)
LET unidades_mi = p
LET unidades_mi = unidades_mi / 100
LET unidades_mi = p - (unidades_mi * 100)
LET valor_letras = NULL
IF b = 1 THEN
LET valor_letras = "UN MILLON"
END IF
IF b > 1 AND b <= 19 THEN
LET valor_letras =
valor_letras CLIPPED, " ", unidades1[b] CLIPPED, " ", "MILLONES"
END IF
IF b >= 20 AND b <= 999999 THEN
IF b < 82 THEN
LET b = b - 19
LET valor_letras =
valor_letras CLIPPED,
" ",
decenas[b] CLIPPED,
" ",
"MILLONES"
ELSE
LET k = b / 100
LET valor_letras =
valor_letras CLIPPED,
" ",
centenas[k] CLIPPED,
" ",
"MILLONES"
END IF
END IF
LET b = m / 100
IF b > 0 AND b <= 9 THEN
IF b = 1 THEN
LET valor_letras = valor_letras CLIPPED, " CIEN "
ELSE
LET valor_letras =
valor_letras CLIPPED, " ", centenas[b] CLIPPED
END IF
IF u > 0 AND u <= 19 THEN
IF u = 1 THEN
LET unidades1[1] = "UN"
END IF
LET valor_letras =
valor_letras CLIPPED, " ", unidades1[u] CLIPPED
END IF
LET u = u - 19
# IF u > 0 and u <= 19 THEN
# IF u = 1 THEN
# LET unidades1[1] = "UN"
# END IF
# LET valor_letras = valor_letras clipped," ",unidades1[u] clipped
# END IF
IF u >= 1 AND u < 82 THEN
# LET u = u - 19 # adicione este 13/5/2011 La quite el 30/5/2011
LET valor_letras = valor_letras CLIPPED, " ", decenas[u] CLIPPED
END IF
LET valor_letras = valor_letras CLIPPED, " ", "MIL"
END IF
IF p > 100 THEN
LET p = p / 100
LET valor_letras = valor_letras CLIPPED, " ", centenas[p] CLIPPED
END IF
LET unidades_mi = unidades_mi - 19
IF unidades_mi > 0 AND unidades_mi <= 81 THEN
LET m = unidades_mi
LET valor_letras = valor_letras CLIPPED, " ", decenas[m] CLIPPED
END IF
END IF
IF unidad > 0 AND unidad < 20 AND consegui = "N" THEN
LET d = unidad
LET valor_letras = valor_letras CLIPPED, " ", unidades1[d] CLIPPED
END IF
IF unidad >= 20 AND d <= 81 AND consegui = "N" THEN
LET valor_letras = valor_letras CLIPPED, " ", decenas[d] CLIPPED
END IF
LET valor_letras =
valor_letras CLIPPED,
" ",
pmoneda CLIPPED,
" CON",
" ",
cheles USING "&&",
"/100"
END FUNCTION
FUNCTION letras()
LET unidades1[1] = "UNO"
LET unidades1[2] = "DOS"
LET unidades1[3] = "TRES"
LET unidades1[4] = "CUATRO"
LET unidades1[5] = "CINCO"
LET unidades1[6] = "SEIS"
LET unidades1[7] = "SIETE"
LET unidades1[8] = "OCHO"
LET unidades1[9] = "NUEVE"
LET unidades1[10] = "DIEZ"
LET unidades1[11] = "ONCE"
LET unidades1[12] = "DOCE"
LET unidades1[13] = "TRECE"
LET unidades1[14] = "CATORCE"
LET unidades1[15] = "QUINCE"
LET unidades1[16] = "DIECISEIS"
LET unidades1[17] = "DIECISIETE"
LET unidades1[18] = "DIECIOCHO"
LET unidades1[19] = "DIECINUEVE"
LET decenas[1] = "VEINTE"
LET decenas[2] = "VEINTE Y UNO"
LET decenas[3] = "VEINTE Y DOS"
LET decenas[4] = "VEINTE Y TRES"
LET decenas[5] = "VEINTE Y CUATRO"
LET decenas[6] = "VEINTE Y CINCO"
LET decenas[7] = "VEINTE Y SEIS"
LET decenas[8] = "VEINTE Y SIETE"
LET decenas[9] = "VEINTE Y OCHO"
LET decenas[10] = "VEINTE Y NUEVE"
LET decenas[11] = "TREINTA"
LET decenas[12] = "TREINTA Y UNO"
LET decenas[13] = "TREINTA Y DOS"
LET decenas[14] = "TREINTA Y TRES"
LET decenas[15] = "TREINTA Y CUATRO"
LET decenas[16] = "TREINTA Y CINCO"
LET decenas[17] = "TREINTA Y SEIS"
LET decenas[18] = "TREINTA Y SIETE"
LET decenas[19] = "TREINTA Y OCHO"
LET decenas[20] = "TREINTA Y NUEVE"
LET decenas[21] = "CUARENTA"
LET decenas[22] = "CUARENTA Y UNO"
LET decenas[23] = "CUARENTA Y DOS"
LET decenas[24] = "CUARENTA Y TRES"
LET decenas[25] = "CUARENTA Y CUATRO"
LET decenas[26] = "CUARENTA Y CINCO"
LET decenas[27] = "CUARENTA Y SEIS"
LET decenas[28] = "CUARENTA Y SIETE"
LET decenas[29] = "CUARENTA Y OCHO"
LET decenas[30] = "CUARENTA Y NUEVE"
LET decenas[31] = "CINCUENTA"
LET decenas[32] = "CINCUENTA Y UNO"
LET decenas[33] = "CINCUENTA Y DOS"
LET decenas[34] = "CINCUENTA Y TRES"
LET decenas[35] = "CINCUENTA Y CUATRO"
LET decenas[36] = "CINCUENTA Y CINCO"
LET decenas[37] = "CINCUENTA Y SEIS"
LET decenas[38] = "CINCUENTA Y SIETE"
LET decenas[39] = "CINCUENTA Y OCHO"
LET decenas[40] = "CINCUENTA Y NUEVE"
LET decenas[41] = "SESENTA"
LET decenas[42] = "SESENTA Y UNO"
LET decenas[43] = "SESENTA Y DOS"
LET decenas[44] = "SESENTA Y TRES"
LET decenas[45] = "SESENTA Y CUATRO"
LET decenas[46] = "SESENTA Y CINCO"
LET decenas[47] = "SESENTA Y SEIS"
LET decenas[48] = "SESENTA Y SIETE"
LET decenas[49] = "SESENTA Y OCHO"
LET decenas[50] = "SESENTA Y NUEVE"
LET decenas[51] = "SETENTA"
LET decenas[52] = "SETENTA Y UNO"
LET decenas[53] = "SETENTA Y DOS"
LET decenas[54] = "SETENTA Y TRES"
LET decenas[55] = "SETENTA Y CUATRO"
LET decenas[56] = "SETENTA Y CINCO"
LET decenas[57] = "SETENTA Y SEIS"
LET decenas[58] = "SETENTA Y SIETE"
LET decenas[59] = "SETENTA Y OCHO"
LET decenas[60] = "SETENTA Y NUEVE"
LET decenas[61] = "OCHENTA"
LET decenas[62] = "OCHENTA Y UNO"
LET decenas[63] = "OCHENTA Y DOS"
LET decenas[64] = "OCHENTA Y TRES"
LET decenas[65] = "OCHENTA Y CUATRO"
LET decenas[66] = "OCHENTA Y CINCO"
LET decenas[67] = "OCHENTA Y SEIS"
LET decenas[68] = "OCHENTA Y SIETE"
LET decenas[69] = "OCHENTA Y OCHO"
LET decenas[70] = "OCHENTA Y NUEVE"
LET decenas[71] = "NOVENTA"
LET decenas[72] = "NOVENTA Y UNO"
LET decenas[73] = "NOVENTA Y DOS"
LET decenas[74] = "NOVENTA Y TRES"
LET decenas[75] = "NOVENTA Y CUATRO"
LET decenas[76] = "NOVENTA Y CINCO"
LET decenas[77] = "NOVENTA Y SEIS"
LET decenas[78] = "NOVENTA Y SIETE"
LET decenas[79] = "NOVENTA Y OCHO"
LET decenas[80] = "NOVENTA Y NUEVE"
LET decenas[81] = "CIEN"
LET centenas[1] = "CIENTO"
LET centenas[2] = "DOCIENTOS"
LET centenas[3] = "TRESCIENTOS"
LET centenas[4] = "CUATROCIENTOS"
LET centenas[5] = "QUINIENTOS"
LET centenas[6] = "SEISCIENTOS"
LET centenas[7] = "SETECIENTOS"
LET centenas[8] = "OCHOCIENTOS"
LET centenas[9] = "NOVECIENTOS"
END FUNCTION