6215 lines
225 KiB
Plaintext
6215 lines
225 KiB
Plaintext
{
|
|
-----------------------------------------------------------------------------
|
|
PROGRAMA : CCPRMT001
|
|
OBJETIVO : Mantenimiento de Recibo de Pago y otros Movimientos
|
|
REALIZADO POR : JUAN SOTO
|
|
FECHA : Enero 1997
|
|
-----------------------------------------------------------------------------
|
|
}
|
|
IMPORT UTIL
|
|
GLOBALS "ccprgb000.4gl"
|
|
|
|
DEFINE
|
|
documento_encabezado RECORD
|
|
tipoEcf,
|
|
eNcf,
|
|
indicadorMontoGravado,
|
|
tipoPago,
|
|
fechaLimitePago,
|
|
FormadePAgo,
|
|
montoPago,
|
|
FechaVencimientoSecuencia,
|
|
rncEmisor,
|
|
razonSocialEmisor,
|
|
direccionEmisor,
|
|
Municipio,
|
|
Provincia,
|
|
telefonoEmisor,
|
|
correoEmisor,
|
|
webSite,
|
|
codigoVendedor,
|
|
numeroFacturaInterna,
|
|
numeroPedidoInterno,
|
|
fechaEmision,
|
|
rncComprador,
|
|
razonSocialComprador,
|
|
montoGravadoTotal,
|
|
montoGravadoI1,
|
|
montoGravadoI2,
|
|
montoGravadoI3,
|
|
montoExento,
|
|
itbis1,
|
|
itbis2,
|
|
itbis3,
|
|
totalItbis,
|
|
totalItbis1,
|
|
totalItbis2,
|
|
totalItbis3,
|
|
montoTotal,
|
|
tipoIngreso,
|
|
terminoPago,
|
|
TipoCuentaPago,
|
|
NumeroCuentaPago,
|
|
IdentificadorExtranjero,
|
|
contactoComprador,
|
|
CorreoComprador,
|
|
DireccionComprador,
|
|
MunicipioComprador,
|
|
ProvinciaComprador,
|
|
FechaEntrega,
|
|
FechaOrdenCompra,
|
|
NumeroOrdenCompra,
|
|
CodigoInternoComprador,
|
|
nombreFile,
|
|
IndicadorNotaCredito,
|
|
NCFmodificado,
|
|
codigoModificacion,
|
|
fechaNCFmodificado
|
|
STRING
|
|
END RECORD,
|
|
tipodocumento CHAR(2),
|
|
ambiente STRING
|
|
|
|
DEFINE
|
|
documento_Detalle DYNAMIC ARRAY OF RECORD
|
|
indicadorFacturacion,
|
|
nombreItem,
|
|
indicadorBienoServicio,
|
|
cantidadItem,
|
|
precioUnitarioItem,
|
|
montoItem
|
|
STRING,
|
|
DescripcionItem VARCHAR(1000),
|
|
NumeroLinea INT
|
|
END RECORD,
|
|
xhash CHAR(6),
|
|
xfechaFirmaDigital DATETIME YEAR TO SECOND
|
|
|
|
DEFINE decenas DYNAMIC ARRAY OF CHAR(20)
|
|
DEFINE centenas DYNAMIC ARRAY OF CHAR(20)
|
|
DEFINE
|
|
unidades1 DYNAMIC ARRAY OF CHAR(20),
|
|
reimprime, hecha_aqui VARCHAR(2),
|
|
rnc VARCHAR(11),
|
|
direccion_Sucursal, descripcion, desc_modificacion VARCHAR(100),
|
|
arr_articulos DYNAMIC ARRAY OF RECORD
|
|
area SMALLINT,
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
cantidad_1, cantidad_2 DEC(12, 4),
|
|
descrip_Esp VARCHAR(70),
|
|
unidad_med VARCHAR(4),
|
|
precio, por_desc, valor_desc, valor_itbis, valor DEC(12, 2),
|
|
id_tipo SMALLINT
|
|
END RECORD
|
|
DEFINE xorden,
|
|
numero_recibo,
|
|
valor_cheque1,
|
|
p_num_doc,
|
|
num_doc_ref,
|
|
hsucid,
|
|
xfactura,
|
|
xsucid
|
|
INTEGER
|
|
DEFINE
|
|
valor_ctrl1,
|
|
valor_nc,
|
|
nc_pend,
|
|
valor_ctrl,
|
|
p_total,
|
|
tasa,
|
|
pitbis,
|
|
ditbis,
|
|
valor_orig,
|
|
valor_aplicado,
|
|
remanente,
|
|
val_pen,
|
|
valor2,
|
|
xvalor_bruto,
|
|
xdescuento,
|
|
xsub_total,
|
|
xitbis,
|
|
xneto
|
|
DECIMAL(12, 2),
|
|
psimbolo, pmoneda, valor_letras, phash, xrespuesta, codigo, message_err
|
|
STRING,
|
|
dias SMALLINT,
|
|
ffecha DATE,
|
|
imagen BYTE
|
|
DEFINE fecha1 DATE
|
|
DEFINE nombre_cta, qncf CHAR(30)
|
|
DEFINE tipo_ant, tipo_doc2, tipo_doc1, ptipo_nc, chr_impresion, vacio CHAR(2)
|
|
DEFINE
|
|
opc, ncr, tienencf CHAR(1),
|
|
p_nombre_tipo, pdescrip_mov CHAR(40),
|
|
dir1, dir2, dir3, dir4 CHAR(30),
|
|
pdireccion CHAR(200),
|
|
cod_mov_ref, no_reg SMALLINT,
|
|
pdocumento_ref DYNAMIC ARRAY OF INT,
|
|
simbolo, id_provincia_dgii, id_municipio_dgii VARCHAR(6),
|
|
idtipo SMALLINT,
|
|
xventas CHAR(1),
|
|
ncffechaVencimiento BOOLEAN
|
|
|
|
DEFINE pok RECORD
|
|
trackId, ERROR, mensaje STRING
|
|
END RECORD
|
|
|
|
DEFINE p RECORD
|
|
|
|
trackid STRING,
|
|
codigo, estado, rnc, encf, secuenciaUtilizada, fechaRecepcion STRING,
|
|
|
|
mensajes DYNAMIC ARRAY OF RECORD
|
|
valor, codigo STRING
|
|
END RECORD
|
|
END RECORD
|
|
|
|
MAIN
|
|
DEFER INTERRUPT
|
|
CALL STARTLOG("ccprmt01.log")
|
|
CALL ARG_VAL(1) RETURNING usuarios
|
|
CALL ARG_VAL(2) RETURNING clave
|
|
CALL ARG_VAL(4) RETURNING impresor
|
|
|
|
CONNECT TO "decomarmol" USER usuarios USING clave
|
|
|
|
-- campo por campo (evita descuadre del SELECT * con la companias del .sch)
|
|
SELECT a.cod_comp, a.nombre, a.rnc, a.direccion, a.telefono, a.fax, a.ambientedgii
|
|
INTO p_companias.cod_comp, p_companias.nombre, p_companias.rnc, p_companias.direccion,
|
|
p_companias.telefono, p_companias.fax, p_companias.ambientedgii
|
|
FROM companias a
|
|
|
|
SELECT a.sucid,
|
|
b.sucnombre,
|
|
b.direccion,
|
|
b.telefono,
|
|
b.fax,
|
|
b.rnc,
|
|
a.cod_perfil,
|
|
c.id_municipio_dgii,
|
|
c.id_dgii
|
|
INTO codigo_sucursal,
|
|
nombre_sucursal,
|
|
direccion_sucursal,
|
|
p_companias.telefono,
|
|
p_companias.fax,
|
|
p_companias.rnc,
|
|
pperfil,
|
|
id_municipio_dgii,
|
|
id_provincia_dgii
|
|
FROM seg0001 a, sucursales b, vetb00020 c
|
|
WHERE a.usuario = usuarios
|
|
AND a.sucid = b.sucid
|
|
AND b.localidad = c.cod_provincia
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL fgl_winmessage(
|
|
"ERROR",
|
|
"USTED NO TIENE LOCALIDAD ASIGNADA, CONTACTE ADMINISTRADOR SISTEMAS",
|
|
"STOP")
|
|
EXIT PROGRAM
|
|
END IF
|
|
|
|
# Provincia/municipio del emisor (e-CF) salen de companias, no de vetb00020
|
|
CALL ubicacion_emisor_dgii(id_provincia_dgii, id_municipio_dgii)
|
|
RETURNING id_provincia_dgii, id_municipio_dgii
|
|
|
|
CALL ccprmt001()
|
|
END MAIN
|
|
|
|
# Provincia y municipio del EMISOR para el e-CF (codigos DGII de 6 digitos)
|
|
# tomados de companias.id_dgii / companias.id_municipio_dgii.
|
|
# vetb00020 queda solo para la ubicacion de los clientes.
|
|
# Si companias no los tiene, se dejan los valores recibidos.
|
|
FUNCTION ubicacion_emisor_dgii(pprovincia, pmunicipio)
|
|
DEFINE pprovincia, pmunicipio STRING
|
|
DEFINE vprovincia, vmunicipio INTEGER
|
|
|
|
LET vprovincia = NULL
|
|
LET vmunicipio = NULL
|
|
SELECT a.id_dgii, a.id_municipio_dgii
|
|
INTO vprovincia, vmunicipio
|
|
FROM companias a
|
|
IF vprovincia IS NOT NULL THEN
|
|
LET pprovincia = vprovincia USING "&&&&&&"
|
|
END IF
|
|
IF vmunicipio IS NOT NULL THEN
|
|
LET pmunicipio = vmunicipio USING "&&&&&&"
|
|
END IF
|
|
RETURN pprovincia, pmunicipio
|
|
END FUNCTION
|
|
####### Funcion para agregar un recibo de pago
|
|
|
|
FUNCTION ccprmt001()
|
|
|
|
OPTIONS FORM LINE 8, ERROR LINE 24, COMMENT LINE 22, PROMPT LINE 23
|
|
|
|
OPEN FORM ccfmmt001 FROM "ccfmmt001"
|
|
DISPLAY FORM ccfmmt001
|
|
DISPLAY "ccprmt001" AT 4, 3
|
|
DISPLAY "Movimientos de CXC" AT 6, 31
|
|
|
|
LET fecha1 = TODAY
|
|
LET hecha_Aqui = "NO"
|
|
MENU "OPCION"
|
|
ON ACTION Adicionar
|
|
LET hecha_aqui = "SI"
|
|
CALL arr_recibo.clear()
|
|
CLEAR FORM
|
|
CALL ccpcad001()
|
|
ON ACTION Consulta_modifica
|
|
CALL ccpcmf001()
|
|
ON ACTION Salir
|
|
EXIT MENU
|
|
END MENU
|
|
END FUNCTION
|
|
|
|
FUNCTION ccpcad001()
|
|
DEFINE emp SMALLINT
|
|
DEFINE hoy DATE
|
|
LET hoy = NULL
|
|
|
|
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
|
|
ERROR "USTED NO TIENE LOCALIDAD ASIGNADA, CONTACTE ADMINISTRADOR SISTEMAS"
|
|
RETURN
|
|
END IF
|
|
|
|
DIALOG ATTRIBUTES(UNBUFFERED)
|
|
INPUT BY NAME recibo.tipo_doc,
|
|
recibo.tipo_cliente,
|
|
recibo.sec_cliente,
|
|
recibo.cod_emp_sec,
|
|
recibo.fecha_orig,
|
|
recibo.comentario,
|
|
aplicacion_antiguas,
|
|
valor_ctrl,
|
|
monto_efectivo,
|
|
monto_ck,
|
|
monto_cr,
|
|
ptipo_nc,
|
|
cod_mov_ref,
|
|
num_doc_ref,
|
|
xsucid,
|
|
xfactura,
|
|
idtipo,
|
|
recibo.num_doc
|
|
ATTRIBUTE(WITHOUT DEFAULTS)
|
|
BEFORE INPUT
|
|
LET idtipo = NULL
|
|
CALL tiposModificacion()
|
|
CALL localidades("1")
|
|
# Lista de la Localidad del encabezado (xsucid): antes no se llenaba
|
|
# y el campo quedaba vacio sin opciones; por defecto la del usuario
|
|
CALL localidades("2")
|
|
IF xsucid IS NULL THEN
|
|
LET xsucid = codigo_sucursal
|
|
DISPLAY BY NAME xsucid
|
|
END IF
|
|
LET recibo.fecha_orig = fecha1
|
|
LET valor_ctrl = NULL
|
|
LET tipo_ant = "RC"
|
|
LET aplicacion_antiguas = "NO"
|
|
LET xfactura = NULL
|
|
LET chr_impresion = "NO"
|
|
## VENTANAS PARA BUSCAR LOS CLIENTES Y LOS EMPLEADOS
|
|
ON KEY(CONTROL-W)
|
|
CASE
|
|
WHEN INFIELD(codigodgii)
|
|
IF recibo.tipo_doc = "NC" OR recibo.tipo_doc = "ND" THEN
|
|
CALL btipo_fact(recibo.tipo_doc)
|
|
RETURNING codigodgii, fecha_vencimiento
|
|
IF int_flag THEN
|
|
LET int_flag = FALSE
|
|
END IF
|
|
DISPLAY BY NAME fecha_Vencimiento
|
|
END IF
|
|
WHEN INFIELD(tipo_cliente)
|
|
CALL consulta_clientes()
|
|
|
|
LET recibo.tipo_cliente = cliente_dir.tipo_cliente
|
|
LET recibo.sec_cliente = cliente_dir.sec_cliente
|
|
|
|
SELECT b.nombre,
|
|
a.calle,
|
|
a.casa_num,
|
|
a.urbanizacion,
|
|
a.barrio
|
|
INTO nom_cli, dir1, dir2, dir3, dir4
|
|
FROM vetb00004 b, vetb00005 a
|
|
WHERE (b.tipo_cliente = recibo.tipo_cliente)
|
|
AND (b.sec_cliente = recibo.sec_cliente)
|
|
AND b.tipo_cliente = a.tipo_cliente
|
|
AND b.sec_cliente = a.sec_cliente
|
|
LET pdireccion =
|
|
dir1 CLIPPED,
|
|
" ",
|
|
dir2 CLIPPED,
|
|
" ",
|
|
dir3 CLIPPED,
|
|
" ",
|
|
dir4
|
|
|
|
DISPLAY BY NAME recibo.tipo_cliente ATTRIBUTE(BOLD)
|
|
DISPLAY BY NAME recibo.sec_cliente ATTRIBUTE(BOLD)
|
|
DISPLAY BY NAME nom_cli ATTRIBUTE(BOLD)
|
|
|
|
NEXT FIELD cod_emp_sec
|
|
|
|
WHEN INFIELD(sec_cliente)
|
|
CALL consulta_clientes()
|
|
|
|
LET recibo.tipo_cliente = cliente_dir.tipo_cliente
|
|
LET recibo.sec_cliente = cliente_dir.sec_cliente
|
|
|
|
SELECT nombre
|
|
INTO nom_cli
|
|
FROM vetb00004
|
|
WHERE tipo_cliente = recibo.tipo_cliente
|
|
AND sec_cliente = recibo.sec_cliente
|
|
|
|
DISPLAY BY NAME recibo.tipo_cliente ATTRIBUTE(BOLD)
|
|
DISPLAY BY NAME recibo.sec_cliente ATTRIBUTE(BOLD)
|
|
DISPLAY BY NAME nom_cli ATTRIBUTE(BOLD)
|
|
|
|
NEXT FIELD cod_emp_sec
|
|
|
|
WHEN INFIELD(cod_emp_sec)
|
|
CALL consulta_empleados()
|
|
|
|
LET recibo.cod_emp_sec = transportista.sec_transp
|
|
SELECT nom1_emp, apell1_emp
|
|
INTO descrip2, descrip3
|
|
FROM adtb00003
|
|
WHERE num_emp = recibo.cod_emp_sec
|
|
|
|
DISPLAY BY NAME recibo.cod_emp_sec ATTRIBUTE(BOLD)
|
|
LET nombre_emp = descrip2 CLIPPED, " ", descrip3 CLIPPED
|
|
DISPLAY BY NAME nombre_emp ATTRIBUTE(BOLD)
|
|
|
|
NEXT FIELD fecha_orig
|
|
END CASE
|
|
BEFORE FIELD tipo_doc
|
|
LET recibo.tipo_doc = tipo_ant
|
|
AFTER FIELD tipo_doc
|
|
IF recibo.tipo_doc IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD tipo_doc
|
|
END IF
|
|
LET tipo_ant = recibo.tipo_doc
|
|
LET tienencf = "N"
|
|
|
|
CASE
|
|
WHEN recibo.tipo_doc = "PG"
|
|
LET nombre_tipo = "PAGOS A FACTURA"
|
|
|
|
EXIT CASE
|
|
WHEN recibo.tipo_doc = "RC"
|
|
LET nombre_tipo = "PAGOS"
|
|
|
|
EXIT CASE
|
|
|
|
WHEN recibo.tipo_doc = "OC"
|
|
LET nombre_tipo = "OTROS CREDITOS"
|
|
|
|
EXIT CASE
|
|
WHEN recibo.tipo_doc = "OD"
|
|
LET nombre_tipo = "OTROS DEBITOS"
|
|
|
|
EXIT CASE
|
|
|
|
WHEN recibo.tipo_doc = "ED"
|
|
LET nombre_tipo = "ENTRADAS"
|
|
EXIT CASE
|
|
WHEN recibo.tipo_doc = "NC"
|
|
LET nombre_tipo = "NOTA CREDITO"
|
|
LET tienencf = "S"
|
|
NEXT FIELD cod_mov_ref
|
|
EXIT CASE
|
|
WHEN recibo.tipo_doc = "ND"
|
|
LET nombre_tipo = "NOTA DEBITO"
|
|
LET tienencf = "S"
|
|
NEXT FIELD xfactura
|
|
EXIT CASE
|
|
WHEN recibo.tipo_doc = "PI"
|
|
LET nombre_tipo = "PAGO INTER."
|
|
EXIT CASE
|
|
WHEN recibo.tipo_doc = "RM"
|
|
LET nombre_tipo = "RECIBOS MICELANEOS"
|
|
EXIT CASE
|
|
|
|
WHEN recibo.tipo_doc = "RC"
|
|
LET nombre_tipo = "INGRESOS CXC"
|
|
EXIT CASE
|
|
WHEN recibo.tipo_doc = "DV"
|
|
LET nombre_tipo = "DEVOLUCION DINERO"
|
|
EXIT CASE
|
|
|
|
END CASE
|
|
|
|
IF recibo.tipo_doc = 'AV' THEN
|
|
CALL fgl_winmessage(
|
|
"INFO", "TIPO DOCUMENTO INCORRECTO", "INFO")
|
|
NEXT FIELD tipo_Doc
|
|
END IF
|
|
# DISPLAY BY NAME nombre_tipo ATTRIBUTE (BOLD)
|
|
|
|
LET p_nombre_tipo = nombre_tipo
|
|
|
|
{
|
|
AFTER FIELD cuenta_no
|
|
|
|
IF recibo.cuenta_no is not null THEN
|
|
SELECT descripcion INTO nombre_cta FROM cgtb00001
|
|
WHERE cuenta_no = recibo.cuenta_no and status_t is null
|
|
IF status = notfound THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cuenta_no
|
|
END IF
|
|
DISPLAY BY NAME nombre_cta ATTRIBUTE (blue)
|
|
END IF
|
|
}
|
|
## CHEQUEA QUE EL REGISTRO NO SE REPITA
|
|
BEFORE FIELD num_doc
|
|
IF recibo.tipo_Doc = 'RC' OR recibo.tipo_Doc = 'RM' THEN
|
|
NEXT FIELD tipo_cliente
|
|
END IF
|
|
{AFTER FIELD num_doc
|
|
IF recibo.num_doc IS NULL or
|
|
recibo.num_doc = 0 THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD num_doc
|
|
END IF
|
|
|
|
SELECT UNIQUE a.num_doc FROM cctb00001 a
|
|
WHERE a.tipo_doc = recibo.tipo_doc AND
|
|
a.num_doc = recibo.num_doc
|
|
|
|
IF STATUS != NOTFOUND THEN
|
|
LET numero_msg = 12
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD num_doc
|
|
END IF
|
|
}
|
|
## CHEQUEA QUE EL CLIENTE EXISTA, SI EXISTE DESPLEGA SU NOMBRE
|
|
AFTER FIELD tipo_cliente
|
|
IF recibo.tipo_cliente IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
DISPLAY "NOMBRE ", nom_cli
|
|
NEXT FIELD tipo_cliente
|
|
END IF
|
|
# BUSCA LA TASA
|
|
{ LET tasa =0
|
|
SELECT a.tasa INTO tasa FROM vetb00060 a,vetb00061 b
|
|
WHERE b.tipo_cliente = recibo.tipo_cliente AND
|
|
b.ventas = a.ventas
|
|
|
|
IF tasa IS NULL OR tasa = 0 THEN
|
|
CALL msg(16)
|
|
NEXT FIELD tipo_cliente
|
|
END IF
|
|
DISPLAY BY NAME tasa}
|
|
|
|
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,
|
|
a.calle,
|
|
a.casa_num,
|
|
a.urbanizacion,
|
|
a.barrio,
|
|
b.zona_postal
|
|
INTO nom_cli, dir1, dir2, dir3, dir4, tipodocumento
|
|
FROM vetb00004 b, OUTER vetb00005 a
|
|
WHERE (b.tipo_cliente = recibo.tipo_cliente)
|
|
AND (b.sec_cliente = recibo.sec_cliente)
|
|
AND b.tipo_cliente = a.tipo_cliente
|
|
AND b.sec_cliente = a.sec_cliente
|
|
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD tipo_cliente
|
|
END IF
|
|
LET pdireccion =
|
|
dir1 CLIPPED,
|
|
" ",
|
|
dir2 CLIPPED,
|
|
" ",
|
|
dir3 CLIPPED,
|
|
" ",
|
|
dir4
|
|
|
|
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 cod_emp_sec
|
|
END IF
|
|
NEXT FIELD fecha_orig
|
|
AFTER FIELD cod_mov_ref
|
|
IF recibo.tipo_doc = 'NC' THEN
|
|
IF cod_mov_ref IS NOT NULL AND cod_mov_ref <> 0 THEN
|
|
SELECT a.descrip_mov
|
|
INTO pdescrip_mov
|
|
FROM iptb00005 a
|
|
WHERE a.cod_mov = cod_mov_ref AND a.status_t IS NULL
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL msg(3)
|
|
NEXT FIELD cod_mov_ref
|
|
END IF
|
|
DISPLAY BY NAME pdescrip_mov
|
|
END IF
|
|
END IF
|
|
AFTER FIELD xfactura
|
|
|
|
IF xfactura IS NOT NULL AND xfactura <> 0 THEN
|
|
IF xsucid IS NULL THEN
|
|
CALL msg(16)
|
|
NEXT FIELD xsucid
|
|
END IF
|
|
SELECT a.tipo_cliente,
|
|
a.sec_cliente,
|
|
b.nombre,
|
|
a.sucid,
|
|
a.fecha_factura,
|
|
a.sec_vend,
|
|
c.nom1_emp,
|
|
c.apell1_emp,
|
|
a.prima_us,
|
|
a.orden,
|
|
a.ventas
|
|
INTO recibo.tipo_cliente,
|
|
recibo.sec_cliente,
|
|
nom_cli,
|
|
arr_recibo[1].sucid,
|
|
ffecha,
|
|
recibo.cod_emp_sec,
|
|
descrip2,
|
|
descrip3,
|
|
tasa,
|
|
xorden,
|
|
xventas
|
|
FROM vetb00002 a
|
|
LEFT OUTER
|
|
JOIN adtb00003 c
|
|
ON c.num_emp = a.sec_vend,
|
|
vetb00004 b
|
|
WHERE a.factura = xfactura
|
|
AND a.sucid = xsucid
|
|
AND a.tipo_cliente = b.tipo_cliente
|
|
AND a.sec_cliente = b.sec_cliente
|
|
AND a.status_t IS NULL
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL msg(3)
|
|
NEXT FIELD xfactura
|
|
END IF
|
|
|
|
LET nombre_emp = descrip2 CLIPPED, " ", descrip3 CLIPPED
|
|
|
|
DISPLAY BY NAME recibo.cod_emp_sec,
|
|
nombre_emp,
|
|
tasa,
|
|
recibo.tipo_cliente,
|
|
recibo.sec_cliente,
|
|
nom_cli,
|
|
ffecha
|
|
|
|
IF ffecha > recibo.fecha_orig THEN
|
|
CALL msg(1011)
|
|
NEXT FIELD ffactura
|
|
END IF
|
|
IF tienencf = "S" THEN
|
|
IF recibo.fecha_orig > "12312006" THEN
|
|
IF codigodgii IS NULL THEN
|
|
|
|
CALL btipo_fact(
|
|
recibo.tipo_doc)
|
|
RETURNING codigodgii, fecha_vencimiento
|
|
DISPLAY BY NAME fecha_vencimiento, codigodgii
|
|
END IF
|
|
END IF
|
|
END IF
|
|
|
|
IF idtipo IS NULL THEN
|
|
CALL msg(16)
|
|
NEXT FIELD idtipo
|
|
END IF
|
|
IF recibo.tipo_doc = 'NC' THEN
|
|
IF ptipo_nc IS NULL THEN
|
|
CALL msg(16)
|
|
NEXT FIELD ptipo_nc
|
|
END IF
|
|
END IF
|
|
CALL calculo_nc(
|
|
num_doc_ref, cod_mov_ref, tasa, idtipo)
|
|
RETURNING xvalor_bruto,
|
|
xdescuento,
|
|
xsub_total,
|
|
xitbis,
|
|
xneto
|
|
IF xvalor_bruto = 0 THEN
|
|
CALL msg(16)
|
|
LET valor_ctrl = xvalor_bruto
|
|
NEXT FIELD valor_ctrl
|
|
END IF
|
|
LET valor_ctrl = xneto
|
|
LET arr_recibo[1].valor_pag = valor_ctrl
|
|
LET arr_recibo[1].desc_p = 0
|
|
|
|
DISPLAY BY NAME valor_ctrl
|
|
IF codigodgii <> 'B04' THEN
|
|
NEXT FIELD num_doc_ref
|
|
ELSE
|
|
NEXT FIELD valor_ctrl
|
|
END IF
|
|
IF valor_ctrl IS NULL THEN
|
|
NEXT FIELD valor_ctrl
|
|
END IF
|
|
END IF
|
|
AFTER FIELD num_doc_ref
|
|
IF recibo.tipo_doc = "NC" THEN
|
|
|
|
IF num_doc_ref <> 0 THEN
|
|
SELECT DISTINCT CAST(a.fact_no AS INT),
|
|
a.cod_sp,
|
|
a.cod_sp_sec,
|
|
b.nombre
|
|
INTO xfactura,
|
|
recibo.tipo_cliente,
|
|
recibo.sec_cliente,
|
|
nom_cli
|
|
FROM iptb00006 a, vetb00004 b
|
|
WHERE a.num_doc = num_doc_ref
|
|
AND a.cod_mov = cod_mov_ref
|
|
AND a.cod_sp = b.tipo_cliente
|
|
AND a.cod_sp_sec = b.sec_cliente
|
|
AND a.status_t IS NULL
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL msg(3)
|
|
NEXT FIELD num_doc_ref
|
|
END IF
|
|
|
|
DISPLAY BY NAME recibo.tipo_cliente,
|
|
recibo.sec_cliente,
|
|
nom_cli
|
|
SELECT COUNT(*)
|
|
INTO no_reg
|
|
FROM cctb00001 a
|
|
WHERE a.banco = cod_mov_ref
|
|
AND a.num_cheque = num_doc_ref
|
|
AND a.status_t IS NULL
|
|
IF no_reg > 0 THEN
|
|
CALL msg(364)
|
|
NEXT FIELD num_doc_ref
|
|
END IF
|
|
|
|
LET arr_recibo[1].aplica_a = xfactura
|
|
SELECT a.sucid,
|
|
a.fecha_factura,
|
|
a.sec_vend,
|
|
c.nom1_emp,
|
|
c.apell1_emp,
|
|
a.prima_us,
|
|
a.orden
|
|
INTO arr_recibo[1].sucid,
|
|
ffecha,
|
|
recibo.cod_emp_sec,
|
|
descrip2,
|
|
descrip3,
|
|
tasa,
|
|
xorden
|
|
FROM vetb00002 a
|
|
LEFT OUTER
|
|
JOIN adtb00003 c
|
|
ON c.num_emp = a.sec_vend
|
|
WHERE a.factura = xfactura
|
|
AND a.tipo_cliente = recibo.tipo_cliente
|
|
AND a.sec_cliente = recibo.sec_cliente
|
|
|
|
LET nombre_emp = descrip2 CLIPPED, " ", descrip3 CLIPPED
|
|
|
|
DISPLAY BY NAME recibo.cod_emp_sec, nombre_emp, tasa
|
|
END IF
|
|
END IF
|
|
NEXT FIELD sucid
|
|
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 fecha_orig
|
|
IF recibo.fecha_orig IS NULL OR recibo.fecha_orig > TODAY THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fecha_orig
|
|
END IF
|
|
LET p_fechas = recibo.fecha_orig
|
|
|
|
CALL prd(p_fechas, usuarios) RETURNING bandera
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
NEXT FIELD fecha_orig
|
|
END IF
|
|
|
|
LET fecha1 = recibo.fecha_orig
|
|
|
|
BEFORE FIELD valor_ctrl
|
|
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 recibo.tipo_Doc <> 'NC' THEN
|
|
LET valor_ctrl = monto_efectivo + monto_cr + monto_ck
|
|
END IF
|
|
DISPLAY BY NAME valor_ctrl
|
|
|
|
AFTER FIELD valor_ctrl
|
|
IF valor_ctrl IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD valor_ctrl
|
|
END IF
|
|
IF recibo.tipo_doc = 'NC' THEN
|
|
NEXT FIELD ptipo_nc
|
|
ELSE
|
|
LET ptipo_nc = NULL
|
|
END IF
|
|
|
|
AFTER INPUT
|
|
IF INT_FLAG THEN
|
|
LET INT_FLAG = FALSE
|
|
CALL msg(2)
|
|
RETURN
|
|
END IF
|
|
|
|
IF recibo.tipo_doc = 'RC' THEN
|
|
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 valor_ctrl = monto_efectivo + monto_cr + monto_ck
|
|
DISPLAY BY NAME valor_ctrl
|
|
|
|
END IF
|
|
|
|
IF aplicacion_antiguas = "SI" THEN
|
|
CALL aplica_mas_antiguas()
|
|
END IF
|
|
IF recibo.tipo_doc = 'NC' OR recibo.tipo_doc = 'ND' THEN
|
|
IF xfactura IS NULL OR xfactura = 0 THEN
|
|
CALL msg(16)
|
|
NEXT FIELD xfactura
|
|
END IF
|
|
IF recibo.tipo_doc <> 'RC' AND recibo.tipo_doc <> 'RM' THEN
|
|
SELECT a.ult_recibo
|
|
INTO p_num_doc
|
|
FROM cctb00003 a
|
|
WHERE a.tipo_doc = recibo.tipo_doc
|
|
AND a.sucid = codigo_sucursal
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET p_num_doc = 0
|
|
END IF
|
|
LET p_num_doc = p_num_doc + 1
|
|
LET recibo.num_doc = p_num_doc
|
|
END IF
|
|
|
|
IF tienencf = "S" THEN
|
|
IF recibo.fecha_orig > "12312006" THEN
|
|
IF codigodgii IS NULL THEN
|
|
|
|
CALL btipo_fact(
|
|
recibo.tipo_doc)
|
|
RETURNING codigodgii, fecha_vencimiento
|
|
DISPLAY BY NAME fecha_Vencimiento, codigodgii
|
|
END IF
|
|
|
|
SELECT MAX(a.ncf)
|
|
INTO kncf
|
|
FROM vetb00072 a
|
|
WHERE a.tipo_doc = recibo.tipo_Doc
|
|
AND a.codigo_dgii = codigodgii
|
|
|
|
IF kncf IS NULL THEN
|
|
LET kncf = 0
|
|
END IF
|
|
LET kncf = kncf + 1
|
|
DISPLAY BY NAME kncf, codigodgii
|
|
SELECT a.tipo_ncf
|
|
INTO descripcion
|
|
FROM vetb00071 a
|
|
WHERE kncf BETWEEN a.ncf_inicial AND a.ncf_final
|
|
AND a.tipo_doc = recibo.tipo_doc
|
|
AND a.codigo_dgii = codigodgii
|
|
AND UPPER(a.disponible) = "S"
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 391
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD tipo_doc
|
|
END IF
|
|
END IF
|
|
END IF
|
|
IF idtipo IS NULL THEN
|
|
CALL msg(16)
|
|
NEXT FIELD idtipo
|
|
END IF
|
|
# El tipo de nota (devolucion / sin ITBIS / otros creditos) solo
|
|
# aplica a la nota de CREDITO; la de debito no lo lleva
|
|
IF recibo.tipo_doc = 'NC' AND ptipo_nc IS NULL THEN
|
|
CALL msg(16)
|
|
NEXT FIELD ptipo_nc
|
|
END IF
|
|
CALL calculo_nc(
|
|
num_doc_ref, cod_mov_ref, tasa, idtipo)
|
|
RETURNING xvalor_bruto,
|
|
xdescuento,
|
|
xsub_total,
|
|
xitbis,
|
|
xneto
|
|
IF xvalor_bruto = 0 THEN
|
|
CALL msg(16)
|
|
LET valor_ctrl = xvalor_bruto
|
|
NEXT FIELD valor_ctrl
|
|
END IF
|
|
LET valor_ctrl = xneto
|
|
LET arr_recibo[1].valor_pag = valor_ctrl
|
|
LET arr_recibo[1].desc_p = 0
|
|
|
|
DISPLAY BY NAME valor_ctrl
|
|
IF codigodgii <> 'B04' THEN
|
|
NEXT FIELD num_doc_ref
|
|
ELSE
|
|
NEXT FIELD valor_ctrl
|
|
END IF
|
|
END IF
|
|
IF valor_ctrl IS NULL THEN
|
|
NEXT FIELD valor_ctrl
|
|
END IF
|
|
END INPUT
|
|
|
|
## AQUI SE INTRODUCEN LOS DATOS DEL ARREGLO
|
|
INPUT ARRAY arr_recibo FROM s_recibo.* ATTRIBUTE(WITHOUT DEFAULTS)
|
|
BEFORE INPUT
|
|
LET curr = arr_curr()
|
|
CALL localidades("1")
|
|
# LET arr_recibo[curr].sucid = xsucid
|
|
# LET arr_Recibo[arr_curr()].aplica_a = xfactura
|
|
## VENTANA PARA BUSCAR LOS DOCUMENTOS
|
|
ON KEY(CONTROL-W)
|
|
CASE
|
|
WHEN INFIELD(aplica_a)
|
|
CALL busca_aplicacion()
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
NEXT FIELD aplica_a
|
|
END IF
|
|
IF existe = "N" THEN
|
|
LET existe = "S"
|
|
NEXT FIELD aplica_a
|
|
END IF
|
|
|
|
DISPLAY arr_recibo[curr].aplica_a
|
|
TO s_recibo[scr_l].aplica_a
|
|
DISPLAY arr_recibo[curr].valor_pen
|
|
TO s_recibo[scr_l].valor_pen
|
|
LET bandera = 0
|
|
CALL repetir()
|
|
IF bandera = 1 THEN
|
|
NEXT FIELD aplica_a
|
|
END IF
|
|
NEXT FIELD aplica_a
|
|
END CASE
|
|
|
|
BEFORE ROW
|
|
LET curr = arr_curr()
|
|
LET scr_l = scr_line()
|
|
BEFORE FIELD aplica_A
|
|
IF recibo.tipo_doc = 'NC' THEN
|
|
|
|
SELECT DISTINCT b.num_doc, b.sucid
|
|
INTO arr_recibo[curr].aplica_a, arr_recibo[curr].sucid
|
|
FROM iptb00006 a, cctb00001 b
|
|
WHERE (a.cod_mov = cod_mov_ref
|
|
AND a.num_doc = num_doc_ref)
|
|
AND (a.cod_sp = recibo.tipo_cliente
|
|
AND a.cod_sp_sec = recibo.sec_cliente)
|
|
AND b.tipo_cliente = recibo.tipo_cliente
|
|
AND b.sec_cliente = recibo.sec_cliente
|
|
AND a.fact_no = b.num_doc
|
|
AND b.tipo_Doc IN ('FT', 'FE')
|
|
AND a.status_t IS NULL
|
|
DISPLAY arr_recibo[curr].aplica_a
|
|
TO s_recibo[scr_l].aplica_a
|
|
DISPLAY arr_recibo[curr].sucid TO s_recibo[scr_l].sucid
|
|
|
|
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
|
|
LET curr = arr_curr()
|
|
IF arr_recibo[curr].aplica_a IS NOT NULL THEN
|
|
LET bandera = 0
|
|
CALL repetir()
|
|
DISPLAY "AQUI TAL VEZ"
|
|
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
|
|
CALL msg(131)
|
|
NEXT FIELD aplica_a
|
|
END IF
|
|
END IF
|
|
|
|
# Controla que la factura pertenezca al cliente
|
|
# IF recibo.tipo_doc = "PG" OR recibo.tipo_doc="NC" OR recibo.tipo_doc="ND" THEN
|
|
|
|
{ SELECT MAX(a.documento_ref),MAX(a.tipo_doc)
|
|
INTO pdocumento_ref[curr],arr_Recibo[curr].tipo_doc_aplica
|
|
FROM cctb00001 a
|
|
WHERE (a.tipo_cliente = recibo.tipo_cliente and
|
|
a.sec_cliente = recibo.sec_cliente) AND
|
|
a.sucid = arr_recibo[curr].sucid AND
|
|
(a.num_doc = arr_recibo[curr].aplica_a 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}
|
|
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
|
|
|
|
IF recibo.tipo_doc = 'NC'
|
|
AND (ptipo_nc = '01' OR ptipo_nc = '03') THEN
|
|
SELECT DISTINCT a.fact_no
|
|
FROM iptb00006 a
|
|
WHERE a.cod_mov = cod_mov_ref
|
|
AND a.num_doc = num_doc_ref
|
|
AND a.fact_no = arr_recibo[curr].aplica_a
|
|
AND a.status_t IS NULL
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL fgl_winmessage(
|
|
"INFO",
|
|
"ESTA FACTURA NO EXISTE PARA EL DOCUMENTO DE ALMACEN ESPECIFICADO",
|
|
"INFO")
|
|
NEXT FIELD aplica_A
|
|
END IF
|
|
SELECT ISNULL(SUM(a.cantidad_2 * b.precio), 0)
|
|
INTO arr_recibo[curr].valor_pag
|
|
FROM iptb00006 a, vetb00003 b
|
|
WHERE a.cod_mov = cod_mov_ref
|
|
AND a.num_doc = num_doc_ref
|
|
AND a.fact_no = arr_recibo[curr].aplica_a
|
|
AND b.factura = arr_recibo[curr].aplica_a
|
|
AND a.cod_n = b.cod_n
|
|
AND a.cod_grupo = b.cod_grupo
|
|
AND a.cod_tipo = b.cod_tipo
|
|
AND a.cod_sec = b.cod_sec
|
|
LET arr_recibo[curr].valor_pen =
|
|
arr_recibo[curr].valor_pag
|
|
DISPLAY arr_recibo[curr].valor_pag
|
|
TO s_recibo[scr_l].valor_pag
|
|
|
|
END IF
|
|
# END IF
|
|
|
|
# Busca el valor pendiente de la factura
|
|
IF recibo.tipo_doc <> 'NC' THEN
|
|
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
|
|
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].tipo_doc_aplica
|
|
TO s_recibo[scr_l].tipo_doc_aplica
|
|
|
|
END IF
|
|
END IF
|
|
BEFORE FIELD desc_p
|
|
|
|
IF arr_recibo[curr].num_nc IS NOT NULL THEN
|
|
LET arr_recibo[curr].desc_p = 0
|
|
NEXT FIELD valor_pag
|
|
ELSE
|
|
LET arr_recibo[curr].desc_p = 0
|
|
LET arr_recibo[curr].valor_pag = arr_recibo[curr].valor_pen
|
|
DISPLAY arr_recibo[curr].valor_pen
|
|
TO s_recibo[scr_l].valor_pen
|
|
DISPLAY arr_recibo[curr].desc_p TO s_recibo[scr_l].desc_p
|
|
END IF
|
|
|
|
AFTER FIELD desc_p
|
|
IF arr_recibo[curr].num_nc IS NOT NULL THEN
|
|
LET arr_recibo[curr].desc_p = 0
|
|
ELSE
|
|
|
|
IF arr_recibo[curr].desc_p IS NULL THEN
|
|
LET arr_recibo[curr].desc_p = 0
|
|
END IF
|
|
|
|
LET arr_recibo[curr].valor_pag =
|
|
arr_recibo[curr].valor_pag - arr_recibo[curr].desc_p
|
|
END IF
|
|
DISPLAY arr_recibo[curr].valor_pag TO s_recibo[scr_l].valor_pag
|
|
|
|
AFTER FIELD valor_pag
|
|
|
|
IF arr_recibo[curr].aplica_a IS NULL
|
|
AND arr_recibo[curr].num_nc IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD aplica_a
|
|
END IF
|
|
|
|
IF arr_recibo[curr].valor_pag IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD aplica_a
|
|
END IF
|
|
LET p_total = 0
|
|
LET remanente = valor_ctrl
|
|
FOR idx = 1 TO arr_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[arr_curr()].num_nc IS NOT NULL THEN
|
|
IF p_total > valor_ctrl THEN
|
|
LET numero_msg = 502
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
END IF
|
|
DISPLAY BY NAME p_total ATTRIBUTE(BOLD)
|
|
|
|
DISPLAY BY NAME remanente ATTRIBUTE(BLUE)
|
|
END INPUT
|
|
|
|
ON ACTION guardar
|
|
LET reimprime = 'NO'
|
|
LET p_total = 0
|
|
LET remanente = valor_ctrl
|
|
IF recibo.tipo_doc = 'ND' THEN
|
|
IF xfactura IS NULL THEN
|
|
CALL msg(16)
|
|
NEXT FIELD xfactura
|
|
END IF
|
|
LET arr_recibo[1].aplica_a = xfactura
|
|
LET arr_Recibo[1].valor_pag = valor_ctrl
|
|
|
|
IF xventas = '2' OR xventas = '3' THEN
|
|
LET arr_recibo[1].tipo_doc_aplica = "FE"
|
|
END IF
|
|
IF xventas = '1' THEN
|
|
LET arr_recibo[1].tipo_doc_aplica = "FT"
|
|
END IF
|
|
END IF
|
|
IF recibo.tipo_doc = 'NC' THEN
|
|
IF ptipo_nc IS NULL THEN
|
|
CALL msg(16)
|
|
NEXT FIELD ptipo_nc
|
|
END IF
|
|
IF xfactura IS NULL THEN
|
|
IF num_doc_ref IS NULL OR num_doc_ref = 0 THEN
|
|
CALL msg(16)
|
|
NEXT FIELD num_doc_ref
|
|
END IF
|
|
IF xfactura IS NULL THEN
|
|
CALL msg(16)
|
|
NEXT FIELD num_doc_ref
|
|
END IF
|
|
IF idtipo IS NULL THEN
|
|
CALL msg(16)
|
|
NEXT FIELD idtipo
|
|
END IF
|
|
IF arr_articulos.getLength() = 0 THEN
|
|
CALL msg(16)
|
|
NEXT FIELD num_doc_ref
|
|
END IF
|
|
IF monto_efectivo IS NULL THEN
|
|
LET monto_efectivo = 0
|
|
END IF
|
|
ELSE
|
|
LET arr_recibo[1].aplica_a = xfactura
|
|
LET arr_Recibo[1].valor_pag = valor_ctrl
|
|
|
|
IF xventas = '2' OR xventas = '3' THEN
|
|
LET arr_recibo[1].tipo_doc_aplica = "FE"
|
|
END IF
|
|
IF xventas = '1' THEN
|
|
LET arr_recibo[1].tipo_doc_aplica = "FT"
|
|
END IF
|
|
END IF
|
|
|
|
END IF
|
|
|
|
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[arr_curr()].num_nc IS NOT NULL THEN
|
|
IF p_total > valor_ctrl THEN
|
|
LET numero_msg = 502
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
END IF
|
|
DISPLAY BY NAME p_total ATTRIBUTE(BOLD)
|
|
|
|
DISPLAY BY NAME remanente ATTRIBUTE(BLUE)
|
|
# Controla que el valor aplicado a las facturas no exceda el monto del recibo
|
|
|
|
IF recibo.tipo_doc = "NC" OR recibo.tipo_doc = 'ND' THEN
|
|
|
|
IF idtipo IS NULL THEN
|
|
CALL msg(16)
|
|
NEXT FIELD idtipo
|
|
END IF
|
|
|
|
LET ncr = NULL
|
|
# PROMPT "TIENE ITBIS(S/N)? " FOR CHAR ncr
|
|
# LET ncr = UPSHIFT(ncr)
|
|
END IF
|
|
|
|
LET opc = NULL
|
|
LET valor_cheque1 = NULL
|
|
|
|
IF recibo.tipo_doc = "ND" THEN
|
|
PROMPT "NOTA DE DEBITO ES DEBIDO A CHEQUE DEVUELTO...[S/N]? "
|
|
FOR CHAR opc
|
|
LET opc = UPSHIFT(opc)
|
|
|
|
IF opc = "S" THEN
|
|
SELECT sec_vend
|
|
INTO recibo.cod_emp_sec
|
|
FROM vetb00028
|
|
WHERE tipo_cliente = recibo.tipo_cliente
|
|
AND sec_cliente = recibo.sec_cliente
|
|
DISPLAY BY NAME recibo.cod_emp_sec
|
|
LET valor_cheque1 = recibo.num_doc
|
|
ELSE
|
|
LET valor_cheque1 = NULL
|
|
END IF
|
|
END IF
|
|
|
|
#START REPORT cctb01 TO archivo
|
|
# busca el ultimo numero de los recibos RC, con los AV
|
|
IF recibo.tipo_doc <> 'RC' AND recibo.tipo_doc <> 'RM' THEN
|
|
SELECT a.ult_recibo
|
|
INTO p_num_doc
|
|
FROM cctb00003 a
|
|
WHERE a.tipo_doc
|
|
=
|
|
recibo.tipo_doc #AND a.sucid =codigo_sucursal
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET p_num_doc = 0
|
|
END IF
|
|
LET p_num_doc = p_num_doc + 1
|
|
LET recibo.num_doc = p_num_doc
|
|
END IF
|
|
BEGIN WORK
|
|
# busca el ultimo numero de los recibos RC, con los AV
|
|
IF recibo.tipo_Doc = 'RC' OR recibo.tipo_Doc = 'RM' THEN
|
|
SELECT a.ult_recibo
|
|
INTO p_num_doc
|
|
FROM cctb00003 a
|
|
WHERE a.tipo_doc = 'AV'
|
|
IF p_num_doc IS NULL THEN
|
|
LET p_num_doc = 0
|
|
INSERT INTO cctb00003(
|
|
ult_recibo, tipo_Doc.us_crea)
|
|
VALUES(0, 'AV', user, "1")
|
|
END IF
|
|
LET recibo.num_doc = p_num_doc + 1
|
|
UPDATE cctb00003
|
|
SET ult_recibo = recibo.num_doc
|
|
WHERE tipo_doc = 'AV'
|
|
|
|
END IF
|
|
|
|
DISPLAY BY NAME recibo.num_doc
|
|
|
|
{ DE ESTA FORMA ERA QUE ESTABA AL 23/02/2016
|
|
IF recibo.tipo_doc != "PG" THEN
|
|
IF recibo.tipo_doc <> 'RC' THEN
|
|
if recibo.tipo_doc <> 'RM' THEN
|
|
SELECT a.ult_recibo INTO p_num_doc FROM cctb00003 a
|
|
WHERE a.tipo_doc = recibo.tipo_doc
|
|
IF STATUS = NOTFOUND THEN
|
|
LET p_num_doc = 0
|
|
END IF
|
|
LET p_num_doc = p_num_doc + 1
|
|
LET recibo.num_doc = p_num_doc
|
|
END IF
|
|
END IF
|
|
|
|
IF recibo.tipo_Doc = 'RC' or recibo.tipo_Doc = 'RM' THEN
|
|
SELECT a.ult_recibo INTO p_num_doc FROM cctb00003 a WHERE a.tipo_doc = 'AV'
|
|
IF p_num_doc IS NULL THEN
|
|
LET p_num_doc = 0
|
|
INSERT INTO cctb00003 (ult_recibo,tipo_Doc.us_crea) values (0,'AV',usuarios,"1")
|
|
END IF
|
|
LET recibo.num_doc = p_num_doc + 1
|
|
update cctb00003 set ult_recibo=recibo.num_doc where tipo_doc = 'AV'
|
|
END IF
|
|
|
|
}
|
|
|
|
#NCF
|
|
|
|
IF recibo.tipo_Doc = "NC" OR recibo.tipo_Doc = "ND" THEN
|
|
|
|
SELECT a.ncf
|
|
INTO kncf
|
|
FROM vetb00073 a
|
|
WHERE a.codigo_dgii = codigodgii
|
|
AND a.tipo_doc = recibo.tipo_doc
|
|
|
|
IF kncf IS NULL THEN
|
|
LET kncf = 0
|
|
END IF
|
|
LET kncf = kncf + 1
|
|
UPDATE vetb00073
|
|
SET ncf = kncf
|
|
WHERE codigo_dgii = codigodgii
|
|
AND tipo_doc = recibo.tipo_doc
|
|
|
|
DISPLAY BY NAME kncf, codigodgii
|
|
SELECT DISTINCT a.ncf
|
|
FROM vetb00072 a
|
|
WHERE a.codigo_dgii = codigodgii AND a.ncf = kncf
|
|
IF STATUS <> NOTFOUND THEN
|
|
CALL msg(390)
|
|
CONTINUE DIALOG
|
|
END IF
|
|
INSERT INTO vetb00072
|
|
(documento, tipo_doc, codigo_dgii, ncf, us_crea, fech_crea, sucid)
|
|
VALUES(recibo.num_doc,
|
|
recibo.tipo_doc,
|
|
codigodgii,
|
|
kncf,
|
|
usuarios,
|
|
GETDATE(),
|
|
"1")
|
|
|
|
END IF
|
|
|
|
INSERT INTO cctb00011(
|
|
cod_cia,
|
|
num_doc,
|
|
tipo_doc,
|
|
tipo_cliente,
|
|
sec_cliente,
|
|
comentario,
|
|
us_crea,
|
|
fech_crea,
|
|
sucid,
|
|
tipo_nc,
|
|
valor_efectivo,
|
|
valor_tarjeta,
|
|
valor_cheque,
|
|
chitbis,
|
|
emitida)
|
|
VALUES(1,
|
|
recibo.num_doc,
|
|
recibo.tipo_Doc,
|
|
recibo.tipo_cliente,
|
|
recibo.sec_cliente,
|
|
recibo.comentario,
|
|
usuarios,
|
|
GETDATE(),
|
|
codigo_sucursal,
|
|
ptipo_nc,
|
|
monto_efectivo,
|
|
monto_cr,
|
|
monto_ck,
|
|
ncr,
|
|
hecha_aqui)
|
|
|
|
## SI NO OCURRE NINGUN ERROR SE PROCEDE A INSERTAR EL REGISTRO
|
|
DISPLAY "DATA APLICA?A ",
|
|
arr_recibo[1].aplica_a,
|
|
" IT ",
|
|
xitbis,
|
|
" LENGTH: ",
|
|
arr_recibo.getLength()
|
|
# ADICION PRODUCTOS NC O ND
|
|
IF recibo.tipo_doc = 'NC' OR recibo.tipo_doc = 'ND' THEN
|
|
FOR k = 1 TO arr_articulos.getLength()
|
|
IF arr_articulos[k].cod_sec IS NOT NULL THEN
|
|
INSERT INTO cctb00010(
|
|
tipo_doc,
|
|
num_doc,
|
|
cod_n,
|
|
cod_grupo,
|
|
cod_tipo,
|
|
cod_sec,
|
|
cantidad,
|
|
precio,
|
|
descuento,
|
|
porc_desc,
|
|
itbis,
|
|
num_doc_almacen,
|
|
cod_mov,
|
|
bodega,
|
|
us_crea,
|
|
fech_crea,
|
|
descripcion)
|
|
VALUES(recibo.tipo_doc,
|
|
recibo.num_doc,
|
|
arr_articulos[k].cod_n,
|
|
arr_articulos[k].cod_grupo,
|
|
arr_articulos[k].cod_tipo,
|
|
arr_articulos[k].cod_sec,
|
|
arr_articulos[k].cantidad_2,
|
|
arr_articulos[k].precio,
|
|
arr_articulos[k].valor_desc,
|
|
arr_articulos[k].por_desc,
|
|
arr_articulos[k].valor_itbis,
|
|
pdocumento_ref[idx],
|
|
cod_mov_ref,
|
|
"1",
|
|
usuarios,
|
|
getdate(),
|
|
arr_articulos[k].descrip_Esp)
|
|
|
|
END IF
|
|
END FOR
|
|
END IF
|
|
FOR idx = 1 TO arr_recibo.getLength()
|
|
IF arr_recibo[idx].aplica_a IS NOT NULL THEN
|
|
# PG ya no exige empleado (cod_emp_sec): se comporta como RC.
|
|
# Se comenta el candado que abortaba el guardado e impedia el
|
|
# INSERT en cctb00001 cuando el PG no traia empleado.
|
|
{
|
|
IF recibo.tipo_doc = "PG" THEN
|
|
IF recibo.cod_emp_sec IS NULL
|
|
OR recibo.cod_emp_sec = 0 THEN
|
|
LET numero_msg = 68
|
|
CALL msg(numero_msg)
|
|
CONTINUE DIALOG
|
|
|
|
END IF
|
|
END IF
|
|
}
|
|
|
|
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
|
|
IF recibo.tipo_doc = "OC" THEN
|
|
IF arr_recibo[idx].valor_pag > 0 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
|
|
IF recibo.tipo_doc = "OD" THEN
|
|
IF arr_recibo[idx].valor_pag < 0 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
|
|
|
|
IF recibo.tipo_doc = "DV" OR recibo.tipo_Doc = 'OD' THEN
|
|
IF arr_recibo[idx].valor_pag < 0 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
|
|
IF arr_recibo[idx].tipo_doc_aplica = 'AV' THEN
|
|
IF arr_recibo[idx].valor_pag > 0 THEN
|
|
LET valor_aplicado =
|
|
arr_recibo[idx].valor_pag * -1
|
|
END IF
|
|
LET xorden = NULL
|
|
SELECT a.num_oc
|
|
INTO xorden
|
|
FROM prtb00012 a
|
|
WHERE a.cotizacion_no = pdocumento_ref[idx]
|
|
AND a.tipo_cliente = recibo.tipo_cliente
|
|
AND a.sec_cliente = recibo.sec_cliente
|
|
AND a.status_t IS NULL
|
|
|
|
# PARA REAPLICAR LOS AVANCES CUANDO ES POR DEVOLUCION DE DINERO DEL AVANCE ORIGINAL
|
|
INSERT INTO cctb00001(
|
|
cod_cia,
|
|
tipo_doc,
|
|
num_doc,
|
|
tipo_cliente,
|
|
sec_cliente,
|
|
cod_emp,
|
|
cod_emp_sec,
|
|
fecha_orig,
|
|
fecha_ven,
|
|
aplica_a,
|
|
num_cheque,
|
|
valor,
|
|
valor_cheque,
|
|
costo,
|
|
monto_desc,
|
|
us_crea,
|
|
fech_crea,
|
|
banco,
|
|
tipo_doc_aplica,
|
|
documento_ref,
|
|
num_oc,
|
|
sucid,
|
|
localidad_aplica_a)
|
|
VALUES(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,
|
|
valor_cheque1,
|
|
recibo.num_doc,
|
|
arr_recibo[idx].desc_p,
|
|
SUSER_SNAME(),
|
|
GETDATE(),
|
|
pdocumento_ref[idx],
|
|
arr_recibo[idx].tipo_doc_aplica,
|
|
pdocumento_ref[idx],
|
|
xorden,
|
|
codigo_sucursal,
|
|
xsucid)
|
|
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
|
|
ERROR "El Campo de Numero de Avancve Debe Estar En Nulo"
|
|
|
|
CONTINUE DIALOG
|
|
END IF
|
|
IF arr_recibo[idx].aplica_a != recibo.num_doc THEN
|
|
ERROR "Documento Debe Aplicarse a Si Mismo"
|
|
|
|
CONTINUE DIALOG
|
|
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 tipo_doc1 = NULL
|
|
IF arr_recibo[idx].num_nc IS NOT NULL THEN
|
|
LET tipo_doc1 = "AV"
|
|
ELSE
|
|
|
|
LET arr_recibo[idx].num_nc = recibo.num_doc
|
|
LET tipo_doc1 = recibo.tipo_doc
|
|
|
|
END IF
|
|
IF arr_recibo[idx].desc_p IS NULL THEN
|
|
LET arr_recibo[idx].desc_p = 0
|
|
END IF
|
|
|
|
IF recibo.tipo_doc = 'NC' OR recibo.tipo_doc = 'ND' THEN
|
|
IF recibo.tipo_cliente <> 17 THEN
|
|
LET arr_recibo[1].tipo_doc_aplica = 'FT'
|
|
ELSE
|
|
LET arr_recibo[1].tipo_doc_aplica = 'FE'
|
|
END IF
|
|
|
|
IF xitbis < 0 THEN
|
|
LET xitbis = xitbis * -1
|
|
END IF
|
|
|
|
LET arr_recibo[idx].valor_pag = xneto * -1
|
|
|
|
IF arr_recibo[idx].valor_pag > 0 THEN
|
|
LET arr_recibo[idx].valor_pag =
|
|
arr_recibo[idx].valor_pag * -1
|
|
END IF
|
|
|
|
IF xitbis > 0 THEN
|
|
LET xitbis = xitbis * -1
|
|
END IF
|
|
|
|
END IF
|
|
IF arr_recibo[idx].valor_pag < 0
|
|
AND recibo.tipo_doc = 'ND' THEN
|
|
LET arr_recibo[idx].valor_pag =
|
|
arr_recibo[idx].valor_pag * -1
|
|
END IF
|
|
IF codigodgii NOT MATCHES 'B*' THEN
|
|
LET qncf =
|
|
"E", codigodgii CLIPPED, kncf USING "&&&&&&&&&&"
|
|
ELSE
|
|
LET qncf = codigodgii CLIPPED, kncf USING "&&&&&&&&&&"
|
|
END IF
|
|
DISPLAY qncf TO codigodgii
|
|
-- El valor no puede quedar en blanco: cctb00001.valor es NOT NULL.
|
|
-- Si quedo NULL (p.ej. NC sin neto calculado o guardar sin pasar
|
|
-- por el campo), se aborta el guardado con mensaje y ROLLBACK en
|
|
-- vez de reventar el INSERT en la base de datos.
|
|
IF arr_recibo[idx].valor_pag IS NULL THEN
|
|
ROLLBACK WORK
|
|
CALL msg(16)
|
|
CONTINUE DIALOG
|
|
END IF
|
|
INSERT INTO cctb00001(
|
|
tipo_Doc,
|
|
num_doc,
|
|
tipo_cliente,
|
|
sec_cliente,
|
|
cod_emp_sec,
|
|
fecha_orig,
|
|
fecha_ven,
|
|
aplica_a,
|
|
localidad_aplica_a,
|
|
valor,
|
|
num_cheque,
|
|
valor_cheque,
|
|
monto_desc,
|
|
us_crea,
|
|
fech_crea,
|
|
bodega,
|
|
sucid,
|
|
documento_ref,
|
|
valor_efectivo,
|
|
valor_tarjeta,
|
|
banco,
|
|
efectivo,
|
|
tipo_doc_aplica,
|
|
idtipo,
|
|
ncf)
|
|
VALUES(tipo_doc1,
|
|
arr_recibo[idx].num_nc,
|
|
recibo.tipo_cliente,
|
|
recibo.sec_cliente,
|
|
recibo.cod_emp_sec,
|
|
recibo.fecha_orig,
|
|
"010101",
|
|
arr_recibo[idx].aplica_a,
|
|
arr_recibo[idx].sucid,
|
|
arr_recibo[idx].valor_pag,
|
|
recibo.num_doc,
|
|
valor_cheque1,
|
|
arr_recibo[idx].desc_p,
|
|
usuarios,
|
|
getdate(),
|
|
"1",
|
|
codigo_sucursal,
|
|
pdocumento_ref[idx],
|
|
monto_efectivo,
|
|
monto_cr,
|
|
cod_mov_ref,
|
|
ncr,
|
|
arr_recibo[idx].tipo_doc_aplica,
|
|
idtipo,
|
|
qncf)
|
|
|
|
IF tipo_doc1 = "ND" THEN
|
|
UPDATE cctb00001
|
|
SET valor_cheque = numero_recibo
|
|
WHERE num_doc = recibo.num_doc AND tipo_doc = "ND"
|
|
END IF
|
|
|
|
END IF
|
|
END FOR
|
|
# Actualiza el correlativo en cctb00003 para CUALQUIER tipo de documento
|
|
# (antes se excluia PG). Si no existe la fila del tipo_doc, la inserta
|
|
# por primera vez; si existe, la actualiza con el ultimo numero usado.
|
|
SELECT a.tipo_doc
|
|
FROM cctb00003 a
|
|
WHERE a.tipo_Doc = recibo.tipo_doc
|
|
IF STATUS != NOTFOUND THEN
|
|
UPDATE cctb00003
|
|
SET ult_recibo = recibo.num_doc,
|
|
us_crea = usuarios,
|
|
fech_crea = getdate(),
|
|
us_mod = usuarios,
|
|
fech_mod = getdate()
|
|
WHERE tipo_doc = recibo.tipo_doc
|
|
ELSE
|
|
INSERT INTO cctb00003(
|
|
tipo_doc, ult_recibo, sucid)
|
|
VALUES(recibo.tipo_doc, recibo.num_doc, "1")
|
|
END IF
|
|
COMMIT WORK
|
|
|
|
LET numero_msg = 1
|
|
CALL msg(numero_msg)
|
|
LET emp = recibo.cod_emp_sec
|
|
CLEAR FORM
|
|
|
|
IF recibo.tipo_doc <> 'NC' AND recibo.tipo_doc <> 'ND' THEN
|
|
|
|
LET r_filename = "ccprmt001a.4rp"
|
|
LET r_output = "PDF"
|
|
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
|
|
LET hsucid = arr_recibo[idx].sucid
|
|
LET hsucid = arr_recibo[idx].sucid
|
|
IF arr_recibo[idx].valor_pag < 0 THEN
|
|
LET arr_recibo[idx].valor_pag =
|
|
arr_recibo[idx].valor_pag * -1
|
|
END IF
|
|
|
|
OUTPUT TO REPORT cctb01b(
|
|
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,
|
|
codigodgii,
|
|
kncf,
|
|
ditbis)
|
|
END IF
|
|
# END IF
|
|
END FOR
|
|
FINISH REPORT cctb01b
|
|
END IF
|
|
|
|
END IF
|
|
IF recibo.tipo_doc = 'NC' OR recibo.tipo_doc = 'ND' THEN
|
|
|
|
LET r_filename = "ccprmt001encf.4rp"
|
|
LET r_output = "PDF"
|
|
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_encf 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
|
|
|
|
LET hsucid = arr_recibo[idx].sucid
|
|
IF arr_recibo[idx].valor_pag < 0 THEN
|
|
LET arr_recibo[idx].valor_pag =
|
|
arr_recibo[idx].valor_pag * -1
|
|
END IF
|
|
|
|
OUTPUT TO REPORT cctb01b_encf(
|
|
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,
|
|
codigodgii,
|
|
ditbis)
|
|
END IF
|
|
# END IF
|
|
END FOR
|
|
FINISH REPORT cctb01b_encf
|
|
|
|
UPDATE cctb00001
|
|
SET num_cheque = num_doc_ref, itbis = xitbis
|
|
WHERE num_doc = recibo.num_doc
|
|
AND tipo_cliente = recibo.tipo_cliente
|
|
AND sec_cliente = recibo.sec_cliente
|
|
AND tipo_doc IN ("NC", "ND")
|
|
|
|
END IF
|
|
END IF
|
|
{
|
|
IF recibo.tipo_doc = "PG" THEN
|
|
UPDATE cctb00003 set ult_recibo = recibo.num_doc,
|
|
us_crea = usuarios,
|
|
fech_crea = getdate(),
|
|
us_mod = usuarios,
|
|
fech_mod = getdate()
|
|
WHERE sec_vend = recibo.cod_emp_sec
|
|
END IF
|
|
}
|
|
|
|
EXIT DIALOG
|
|
|
|
ON ACTION CANCEL
|
|
LET INT_FLAG = FALSE
|
|
CALL msg(2)
|
|
EXIT PROGRAM
|
|
END DIALOG
|
|
|
|
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 a.banco,a.tipo_doc,a.num_doc,a.tipo_cliente,
|
|
a.sec_cliente, a.cod_emp_sec,a.fecha_orig
|
|
FROM deposito,tipo_doc,num_doc,tipo_cliente,sec_cliente,cod_emp_sec,
|
|
fecha_orig
|
|
}
|
|
CONSTRUCT CRITERIO
|
|
ON a.tipo_doc,
|
|
a.num_doc,
|
|
a.tipo_cliente,
|
|
a.sec_cliente,
|
|
a.cod_emp_sec,
|
|
a.fecha_orig
|
|
FROM tipo_doc,
|
|
num_doc,
|
|
tipo_cliente,
|
|
sec_cliente,
|
|
cod_emp_sec,
|
|
fecha_orig
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
CLEAR FORM
|
|
RETURN
|
|
END IF
|
|
|
|
LET selec =
|
|
"SELECT a.tipo_doc,a.num_doc,a.tipo_cliente, a.sec_cliente,a.cod_emp_sec,CONVERT(CHAR(10),",
|
|
"a.fecha_orig,103),ISNULL(b.comentario,' '),c.codigo_dgii,a.banco,a.num_cheque,b.tipo_nc,b.valor_efectivo,",
|
|
"b.valor_cheque,b.valor_tarjeta,b.chitbis,b.emitida,a.trackid,a.fechaFirmaDigital,a.hash,a.estado_dgii ",
|
|
" FROM cctb00001 a LEFT OUTER JOIN cctb00011 b ON a.num_doc = b.num_doc AND a.tipo_doc = b.tipo_doc
|
|
LEFT OUTER JOIN vetb00072 c ON c.documento = a.num_doc AND c.tipo_Doc = a.tipo_doc
|
|
WHERE ",
|
|
criterio CLIPPED,
|
|
" and a.tipo_doc NOT IN('FE','PC','FT') AND
|
|
a.status_t is null"
|
|
|
|
PREPARE busca FROM selec
|
|
DECLARE datos SCROLL CURSOR FOR busca
|
|
OPEN datos
|
|
|
|
FETCH FIRST datos
|
|
INTO recibo.*,
|
|
codigodgii,
|
|
cod_mov_ref,
|
|
num_doc_ref,
|
|
ptipo_nc,
|
|
monto_efectivo,
|
|
monto_ck,
|
|
monto_cr,
|
|
ncr,
|
|
hecha_aqui,
|
|
p.trackid,
|
|
xfechaFirmaDigital,
|
|
xhash,
|
|
p.estado
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
|
|
IF recibo.tipo_doc = "PG" THEN
|
|
SELECT SUM((a.valor - monto_desc) * - 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
|
|
IF recibo.tipo_Doc = "NC" 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 = recibo.tipo_doc
|
|
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
|
|
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, a.calle, a.casa_num, a.urbanizacion, a.barrio
|
|
INTO nom_cli, dir1, dir2, dir3, dir4
|
|
FROM vetb00004 b, vetb00005 a
|
|
WHERE (b.tipo_cliente = recibo.tipo_cliente)
|
|
AND (b.sec_cliente = recibo.sec_cliente)
|
|
AND b.tipo_cliente = a.tipo_cliente
|
|
AND b.sec_cliente = a.sec_cliente
|
|
LET pdireccion =
|
|
dir1 CLIPPED, " ", dir2 CLIPPED, " ", dir3 CLIPPED, " ", dir4
|
|
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
|
|
}
|
|
IF valor_ctrl < 0 THEN
|
|
LET valor_ctrl = valor_ctrl * -1
|
|
END IF
|
|
|
|
DISPLAY BY NAME recibo.*,
|
|
nom_cli,
|
|
nombre_emp,
|
|
valor_ctrl,
|
|
nombre_cta,
|
|
codigodgii,
|
|
kncf,
|
|
cod_mov_ref,
|
|
num_doc_ref,
|
|
ptipo_nc,
|
|
monto_efectivo,
|
|
monto_ck,
|
|
monto_cr,
|
|
p.trackid,
|
|
p.estado
|
|
CALL detallecxc()
|
|
|
|
MENU "OPCION"
|
|
COMMAND "Siguiente"
|
|
"Presenta en pantalla el proximo registro encontrado"
|
|
FETCH NEXT datos
|
|
INTO recibo.*,
|
|
codigodgii,
|
|
cod_mov_ref,
|
|
num_doc_ref,
|
|
ptipo_nc,
|
|
monto_efectivo,
|
|
monto_ck,
|
|
monto_cr,
|
|
ncr,
|
|
hecha_aqui
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 4
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
|
|
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 + a.monto_desc) * - 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, a.calle, a.casa_num, a.urbanizacion, a.barrio
|
|
INTO nom_cli, dir1, dir2, dir3, dir4
|
|
FROM vetb00004 b, vetb00005 a
|
|
WHERE (b.tipo_cliente = recibo.tipo_cliente)
|
|
AND (b.sec_cliente = recibo.sec_cliente)
|
|
AND b.tipo_cliente = a.tipo_cliente
|
|
AND b.sec_cliente = a.sec_cliente
|
|
LET pdireccion =
|
|
dir1 CLIPPED, " ", dir2 CLIPPED, " ", dir3 CLIPPED, " ", dir4
|
|
|
|
SELECT nom1_emp, apell1_emp
|
|
INTO descrip2, descrip3
|
|
FROM adtb00003
|
|
WHERE num_emp = recibo.cod_emp_sec
|
|
|
|
LET nombre_emp = descrip2 CLIPPED, " ", descrip3 CLIPPED
|
|
DISPLAY BY NAME recibo.*,
|
|
nom_cli,
|
|
nombre_emp,
|
|
valor_ctrl,
|
|
nombre_cta,
|
|
codigodgii,
|
|
kncf,
|
|
ptipo_nc,
|
|
monto_efectivo,
|
|
monto_ck,
|
|
monto_cr
|
|
COMMAND "Imprimir"
|
|
SELECT b.nombre,
|
|
a.calle,
|
|
a.casa_num,
|
|
a.urbanizacion,
|
|
a.barrio,
|
|
b.num_rnc
|
|
INTO nom_cli, dir1, dir2, dir3, dir4, rnc
|
|
FROM vetb00004 b, vetb00005 a
|
|
WHERE (b.tipo_cliente = recibo.tipo_cliente)
|
|
AND (b.sec_cliente = recibo.sec_cliente)
|
|
AND b.tipo_cliente = a.tipo_cliente
|
|
AND b.sec_cliente = a.sec_cliente
|
|
|
|
LET pdireccion =
|
|
dir1 CLIPPED, " ", dir2 CLIPPED, " ", dir3 CLIPPED, " ", dir4
|
|
|
|
SELECT nom1_emp, apell1_emp
|
|
INTO descrip2, descrip3
|
|
FROM adtb00003
|
|
WHERE num_emp = recibo.cod_emp_sec
|
|
|
|
LET nombre_emp = descrip2 CLIPPED, " ", descrip3 CLIPPED
|
|
DISPLAY BY NAME recibo.*,
|
|
nom_cli,
|
|
nombre_emp,
|
|
valor_ctrl,
|
|
nombre_cta,
|
|
codigodgii,
|
|
ptipo_nc,
|
|
monto_efectivo,
|
|
monto_ck,
|
|
monto_cr
|
|
|
|
LET reimprime = "SI"
|
|
CASE
|
|
WHEN recibo.tipo_doc = "PG"
|
|
LET nombre_tipo = "PAGOS"
|
|
|
|
EXIT CASE
|
|
WHEN recibo.tipo_doc = "RC"
|
|
LET nombre_tipo = "PAGOS"
|
|
|
|
EXIT CASE
|
|
|
|
WHEN recibo.tipo_doc = "OC"
|
|
LET nombre_tipo = "OTROS CREDITOS"
|
|
EXIT CASE
|
|
WHEN recibo.tipo_doc = "OD"
|
|
LET nombre_tipo = "OTROS DEBITOS"
|
|
EXIT CASE
|
|
|
|
WHEN recibo.tipo_doc = "ED"
|
|
LET nombre_tipo = "ENTRADAS"
|
|
EXIT CASE
|
|
WHEN recibo.tipo_doc = "NC"
|
|
LET nombre_tipo = "NOTA CREDITO"
|
|
LET tienencf = "S"
|
|
EXIT CASE
|
|
WHEN recibo.tipo_doc = "ND"
|
|
LET nombre_tipo = "NOTA DEBITO"
|
|
LET tienencf = "S"
|
|
EXIT CASE
|
|
WHEN recibo.tipo_doc = "PI"
|
|
LET nombre_tipo = "PAGO INTER."
|
|
EXIT CASE
|
|
WHEN recibo.tipo_doc = "RM"
|
|
LET nombre_tipo = "RECIBOS MICELANEOS"
|
|
EXIT CASE
|
|
|
|
WHEN recibo.tipo_doc = "RC"
|
|
LET nombre_tipo = "INGRESOS CXC"
|
|
EXIT CASE
|
|
WHEN recibo.tipo_doc = "DV"
|
|
LET nombre_tipo = "DEVOLUCION DINERO"
|
|
EXIT CASE
|
|
|
|
END CASE
|
|
|
|
LET p_nombre_tipo = nombre_tipo CLIPPED
|
|
LET chr_impresion = "SI"
|
|
LET tipo_Doc1 = recibo.tipo_doc
|
|
CALL detallecxc()
|
|
|
|
IF recibo.tipo_doc = 'NC' OR recibo.tipo_doc = 'ND' THEN
|
|
|
|
LET r_filename = "ccprmt001encf.4rp"
|
|
LET r_output = "PDF"
|
|
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_encf 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
|
|
# LET hsucid = arr_recibo[idx].sucid
|
|
IF arr_recibo[idx].valor_pag < 0 THEN
|
|
LET arr_recibo[idx].valor_pag =
|
|
arr_recibo[idx].valor_pag * -1
|
|
END IF
|
|
|
|
OUTPUT TO REPORT cctb01b_encf(
|
|
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,
|
|
codigodgii,
|
|
ditbis)
|
|
END IF
|
|
# END IF
|
|
END FOR
|
|
FINISH REPORT cctb01b_encf
|
|
END IF
|
|
|
|
END IF
|
|
IF recibo.tipo_doc = 'RC'
|
|
OR recibo.tipo_doc = 'OC'
|
|
OR recibo.tipo_doc = 'OD' THEN
|
|
|
|
LET r_filename = "ccprmt001a.4rp"
|
|
LET r_output = "PDF"
|
|
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
|
|
LET hsucid = arr_recibo[idx].sucid
|
|
LET hsucid = arr_recibo[idx].sucid
|
|
IF arr_recibo[idx].valor_pag < 0 THEN
|
|
LET arr_recibo[idx].valor_pag =
|
|
arr_recibo[idx].valor_pag * -1
|
|
END IF
|
|
|
|
OUTPUT TO REPORT cctb01b(
|
|
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,
|
|
codigodgii,
|
|
kncf,
|
|
ditbis)
|
|
END IF
|
|
# END IF
|
|
END FOR
|
|
FINISH REPORT cctb01b
|
|
END IF
|
|
|
|
END IF
|
|
|
|
COMMAND "Anterior"
|
|
"Presenta en pantalla el registro anterior encontrado"
|
|
FETCH PREVIOUS datos
|
|
INTO recibo.*,
|
|
codigodgii,
|
|
cod_mov_ref,
|
|
num_doc_ref,
|
|
ptipo_nc,
|
|
monto_efectivo,
|
|
monto_ck,
|
|
monto_cr,
|
|
ncr
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 5
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
|
|
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, a.calle, a.casa_num, a.urbanizacion, a.barrio
|
|
INTO nom_cli, dir1, dir2, dir3, dir4
|
|
FROM vetb00004 b, vetb00005 a
|
|
WHERE (b.tipo_cliente = recibo.tipo_cliente)
|
|
AND (b.sec_cliente = recibo.sec_cliente)
|
|
AND b.tipo_cliente = a.tipo_cliente
|
|
AND b.sec_cliente = a.sec_cliente
|
|
LET pdireccion =
|
|
dir1 CLIPPED, " ", dir2 CLIPPED, " ", dir3 CLIPPED, " ", dir4
|
|
|
|
SELECT nom1_emp, apell1_emp
|
|
INTO descrip2, descrip3
|
|
FROM adtb00003
|
|
WHERE num_emp = recibo.cod_emp_sec
|
|
|
|
LET nombre_emp = descrip2 CLIPPED, " ", descrip3 CLIPPED
|
|
|
|
DISPLAY BY NAME recibo.*,
|
|
nom_cli,
|
|
nombre_emp,
|
|
valor_ctrl,
|
|
nombre_cta,
|
|
codigodgii,
|
|
kncf,
|
|
cod_mov_ref,
|
|
num_doc_ref,
|
|
ptipo_nc,
|
|
monto_efectivo,
|
|
monto_ck,
|
|
monto_cr
|
|
COMMAND "Primero" "Presenta en pantalla el primer registro encontrado"
|
|
FETCH FIRST datos
|
|
INTO recibo.*,
|
|
codigodgii,
|
|
cod_mov_ref,
|
|
num_doc_ref,
|
|
ptipo_nc,
|
|
monto_efectivo,
|
|
monto_ck,
|
|
monto_cr,
|
|
ncr
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 5
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
|
|
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" 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, a.calle, a.casa_num, a.urbanizacion, a.barrio
|
|
INTO nom_cli, dir1, dir2, dir3, dir4
|
|
FROM vetb00004 b, vetb00005 a
|
|
WHERE (b.tipo_cliente = recibo.tipo_cliente)
|
|
AND (b.sec_cliente = recibo.sec_cliente)
|
|
AND b.tipo_cliente = a.tipo_cliente
|
|
AND b.sec_cliente = a.sec_cliente
|
|
LET pdireccion =
|
|
dir1 CLIPPED, " ", dir2 CLIPPED, " ", dir3 CLIPPED, " ", dir4
|
|
SELECT nom1_emp, apell1_emp
|
|
INTO descrip2, descrip3
|
|
FROM adtb00003
|
|
WHERE num_emp = recibo.cod_emp_sec
|
|
|
|
LET nombre_emp = descrip2 CLIPPED, " ", descrip3 CLIPPED
|
|
|
|
DISPLAY BY NAME recibo.*,
|
|
nom_cli,
|
|
nombre_emp,
|
|
valor_ctrl,
|
|
nombre_cta,
|
|
codigodgii,
|
|
kncf,
|
|
cod_mov_ref,
|
|
num_doc_ref,
|
|
ptipo_nc,
|
|
monto_efectivo,
|
|
monto_ck,
|
|
monto_cr,
|
|
banco
|
|
COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado"
|
|
FETCH LAST datos
|
|
INTO recibo.*,
|
|
codigodgii,
|
|
cod_mov_ref,
|
|
num_doc_ref,
|
|
ptipo_nc,
|
|
monto_efectivo,
|
|
monto_ck,
|
|
monto_cr,
|
|
ncr
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 4
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
|
|
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" 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, a.calle, a.casa_num, a.urbanizacion, a.barrio
|
|
INTO nom_cli, dir1, dir2, dir3, dir4
|
|
FROM vetb00004 b, vetb00005 a
|
|
WHERE (b.tipo_cliente = recibo.tipo_cliente)
|
|
AND (b.sec_cliente = recibo.sec_cliente)
|
|
AND b.tipo_cliente = a.tipo_cliente
|
|
AND b.sec_cliente = a.sec_cliente
|
|
LET pdireccion =
|
|
dir1 CLIPPED, " ", dir2 CLIPPED, " ", dir3 CLIPPED, " ", dir4
|
|
|
|
SELECT nom1_emp, apell1_emp
|
|
INTO descrip2, descrip3
|
|
FROM adtb00003
|
|
WHERE num_emp = recibo.cod_emp_sec
|
|
|
|
LET nombre_emp = descrip2 CLIPPED, " ", descrip3 CLIPPED
|
|
|
|
DISPLAY BY NAME recibo.*,
|
|
nom_cli,
|
|
nombre_emp,
|
|
valor_ctrl,
|
|
nombre_cta,
|
|
codigodgii,
|
|
ptipo_nc,
|
|
cod_mov_ref,
|
|
num_doc_ref,
|
|
ptipo_nc,
|
|
monto_efectivo,
|
|
monto_ck,
|
|
monto_cr
|
|
COMMAND "Escoger"
|
|
"<Esc> Actualiza Registro <Delete> Cancela Operacion"
|
|
|
|
## AQUI SE MODIFICAN/ACTUALIZAN LOS DATOS DEL REGISTRO
|
|
|
|
{ ESTA EN COMENTARIO PORQUE EL USUARIO EN CXC DE EXTERIOR ESTA REALIZANDO UNA LABOR
|
|
INMEDIATAMENTE TERMINE DEBE COMUNICARSE CON TI 31/10/2020
|
|
|
|
LET p_fechas = recibo.fecha_orig
|
|
CALL prd(p_fechas,usuarios) RETURNING bandera
|
|
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
END IF
|
|
}
|
|
IF recibo.tipo_doc = 'NC' THEN
|
|
CALL fgl_winmessage(
|
|
"INFO", "NO PUEDES MODIFICAR NOTAS DE CREDITOS", "INFO")
|
|
CONTINUE MENU
|
|
END IF
|
|
LET reimprime = "NO"
|
|
LET chr_impresion = 'NO'
|
|
INPUT BY NAME codigodgii,
|
|
recibo.tipo_cliente,
|
|
recibo.sec_cliente,
|
|
recibo.cod_emp_sec,
|
|
recibo.fecha_orig,
|
|
valor_ctrl,
|
|
monto_efectivo,
|
|
monto_ck,
|
|
monto_cr,
|
|
ptipo_nc,
|
|
cod_mov_ref,
|
|
num_doc_ref
|
|
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 cod_mov_ref
|
|
IF recibo.tipo_doc = 'NC' THEN
|
|
SELECT a.descrip_mov
|
|
INTO pdescrip_mov
|
|
FROM iptb00005 a
|
|
WHERE a.cod_mov = cod_mov_ref AND a.status_t IS NULL
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL msg(3)
|
|
NEXT FIELD cod_mov_ref
|
|
END IF
|
|
DISPLAY BY NAME pdescrip_mov
|
|
END IF
|
|
|
|
AFTER FIELD num_doc_ref
|
|
IF recibo.tipo_doc = "NC" AND ptipo_nc = '01' THEN
|
|
IF num_doc_ref > 0 THEN
|
|
SELECT DISTINCT a.num_doc
|
|
FROM iptb00006 a
|
|
WHERE a.num_doc = num_doc_ref
|
|
AND a.cod_mov = cod_mov_ref
|
|
AND a.status_t IS NULL
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL msg(3)
|
|
NEXT FIELD num_doc_ref
|
|
END IF
|
|
END IF
|
|
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,
|
|
a.calle,
|
|
a.casa_num,
|
|
a.urbanizacion,
|
|
a.barrio
|
|
INTO nom_cli, dir1, dir2, dir3, dir4
|
|
FROM vetb00004 b, vetb00005 a
|
|
WHERE (b.tipo_cliente = recibo.tipo_cliente)
|
|
AND (b.sec_cliente = recibo.sec_cliente)
|
|
AND b.tipo_cliente = a.tipo_cliente
|
|
AND b.sec_cliente = a.sec_cliente
|
|
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD tipo_cliente
|
|
END IF
|
|
LET pdireccion =
|
|
dir1 CLIPPED,
|
|
" ",
|
|
dir2 CLIPPED,
|
|
" ",
|
|
dir3 CLIPPED,
|
|
" ",
|
|
dir4
|
|
|
|
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
|
|
|
|
## VENTANAS PARA DESPLEGAR LOS CLIENTES Y LOS EMPLEADOS
|
|
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
|
|
{ ESTA EN COMENTARIO PORQUE EL USUARIO EN CXC DE EXTERIOR ESTA REALIZANDO UNA LABOR
|
|
INMEDIATAMENTE TERMINE DEBE COMUNICARSE CON TI 31/10/2020
|
|
CALL prd(p_fechas,usuarios) RETURNING bandera
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
NEXT FIELD fecha_orig
|
|
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
|
|
IF recibo.tipo_doc = 'NC' THEN
|
|
NEXT FIELD ptipo_nc
|
|
ELSE
|
|
LET ptipo_nc = NULL
|
|
END IF
|
|
|
|
AFTER INPUT
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
CONTINUE MENU
|
|
END IF
|
|
CASE
|
|
WHEN recibo.tipo_doc = "PG"
|
|
LET nombre_tipo = "PAGOS"
|
|
EXIT CASE
|
|
WHEN recibo.tipo_doc = "OC"
|
|
LET nombre_tipo = "OTROS CREDITOS"
|
|
EXIT CASE
|
|
WHEN recibo.tipo_doc = "ED"
|
|
LET nombre_tipo = "ENTRADAS"
|
|
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 = 'RC' THEN
|
|
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 valor_ctrl = monto_efectivo + monto_cr + monto_ck
|
|
DISPLAY BY NAME valor_ctrl
|
|
|
|
END IF
|
|
|
|
EXIT INPUT
|
|
END INPUT
|
|
CALL detallecxc()
|
|
CALL set_count(idx - 1)
|
|
|
|
LABEL arreglo2:
|
|
## AQUI SE MODIFICAN/ACTUALIZAN LOS CAMPOS DEL ARREGLO
|
|
INPUT ARRAY arr_recibo WITHOUT DEFAULTS FROM s_recibo.*
|
|
BEFORE INPUT
|
|
CALL localidades("1")
|
|
|
|
## 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"
|
|
OR recibo.tipo_doc = "NC"
|
|
OR recibo.tipo_doc = "ND" THEN
|
|
|
|
SELECT UNIQUE a.documento_ref, a.tipo_doc
|
|
INTO pdocumento_ref[curr],
|
|
arr_Recibo[curr].tipo_doc_aplica
|
|
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.sucid = arr_recibo[curr].sucid
|
|
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
|
|
# notas de creditos
|
|
IF recibo.tipo_doc = 'NC' AND ptipo_nc = '01' THEN
|
|
SELECT DISTINCT a.fact_no
|
|
FROM iptb00006 a
|
|
WHERE a.cod_mov = cod_mov_ref
|
|
AND a.num_doc = num_doc_ref
|
|
AND a.fact_no = arr_recibo[curr].aplica_a
|
|
AND a.status_t IS NULL
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL fgl_winmessage(
|
|
"INFO",
|
|
"ESTA FACTURA NO EXISTE PARA EL DOCUMENTO DE ALMACEN ESPECIFICADO",
|
|
"INFO")
|
|
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].tipo_Doc_aplica
|
|
TO s_recibo[scr_l].tipo_Doc_aplica
|
|
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].desc_p < 0 THEN
|
|
LET arr_recibo[idx].desc_p =
|
|
arr_recibo[idx].desc_p * -1
|
|
END IF
|
|
|
|
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 = 502
|
|
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
|
|
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_count()
|
|
IF arr_recibo[idx].aplica_a IS NOT NULL THEN
|
|
IF arr_recibo[idx].valor_pag IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD valor_pag
|
|
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
IF recibo.tipo_doc <> 'NC' OR recibo.tipo_doc <> 'ND' THEN
|
|
IF p_total != valor_ctrl THEN
|
|
LET numero_msg = 502
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD aplia_a
|
|
END IF
|
|
END IF
|
|
|
|
END INPUT
|
|
|
|
IF recibo.tipo_doc = "NC" OR recibo.tipo_doc = "ND" THEN
|
|
|
|
LET ncr = NULL
|
|
# PROMPT "TIENE ITBIS(S/N)? " FOR CHAR ncr
|
|
# LET ncr = UPSHIFT(ncr)
|
|
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
|
|
BEGIN WORK
|
|
IF recibo.tipo_doc = "PG" THEN
|
|
DELETE FROM cctb00001
|
|
WHERE num_cheque = recibo.num_doc
|
|
AND tipo_doc IN ("PG", "AV")
|
|
AND valor < 0
|
|
AND fecha_orig = recibo.fecha_orig
|
|
AND sucid = codigo_sucursal
|
|
|
|
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
|
|
DELETE FROM cctb00001
|
|
WHERE num_doc = recibo.num_doc
|
|
AND @tipo_doc = recibo.tipo_doc
|
|
AND fecha_orig = recibo.fecha_orig
|
|
AND sucid = codigo_sucursal
|
|
|
|
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
|
|
UPDATE cctb00011
|
|
SET tipo_cliente = recibo.tipo_cliente,
|
|
sec_cliente = recibo.sec_cliente,
|
|
comentario = recibo.comentario,
|
|
valor_efectivo = monto_efectivo,
|
|
valor_cheque = monto_ck,
|
|
valor_tarjeta = monto_cr,
|
|
us_mod = usuarios,
|
|
fech_mod = getdate()
|
|
WHERE tipo_doc = recibo.tipo_doc AND num_doc = recibo.num_doc
|
|
|
|
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
|
|
IF arr_recibo[idx].num_nc IS NOT NULL THEN
|
|
LET tipo_doc1 = "AV"
|
|
ELSE
|
|
LET arr_recibo[idx].num_nc = recibo.num_doc
|
|
LET tipo_doc1 = recibo.tipo_doc
|
|
IF recibo.tipo_doc = 'NC' THEN
|
|
LET recibo.num_doc = num_doc_ref
|
|
END IF
|
|
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
|
|
IF arr_recibo[idx].valor_pag > 0 THEN
|
|
LET valor_aplicado = arr_recibo[idx].valor_pag * -1
|
|
END IF
|
|
IF arr_recibo[idx].tipo_doc_aplica = 'AV' THEN
|
|
LET xorden = NULL
|
|
SELECT a.num_oc
|
|
INTO xorden
|
|
FROM prtb00012 a
|
|
WHERE a.cotizacion_no = pdocumento_ref[idx]
|
|
AND a.status_t IS NULL
|
|
# PARA REAPLICAR LOS AVANCES CUANDO ES POR DEVOLUCION DE DINERO DEL AVANCE ORIGINAL
|
|
INSERT INTO cctb00001(
|
|
cod_cia,
|
|
tipo_doc,
|
|
num_doc,
|
|
tipo_cliente,
|
|
sec_cliente,
|
|
cod_emp,
|
|
cod_emp_sec,
|
|
fecha_orig,
|
|
fecha_ven,
|
|
aplica_a,
|
|
num_cheque,
|
|
valor,
|
|
valor_cheque,
|
|
costo,
|
|
monto_desc,
|
|
us_crea,
|
|
fech_crea,
|
|
banco,
|
|
tipo_doc_aplica,
|
|
documento_ref,
|
|
num_oc,
|
|
sucid)
|
|
VALUES(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,
|
|
valor_cheque1,
|
|
recibo.num_doc,
|
|
arr_recibo[idx].desc_p,
|
|
SUSER_SNAME(),
|
|
GETDATE(),
|
|
pdocumento_ref[idx],
|
|
arr_recibo[idx].tipo_doc_aplica,
|
|
pdocumento_ref[idx],
|
|
xorden,
|
|
codigo_sucursal)
|
|
END IF
|
|
|
|
END IF
|
|
|
|
IF recibo.tipo_doc = "OC" 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 arr_recibo[idx].desc_p IS NULL THEN
|
|
LET arr_recibo[idx].desc_p = 0
|
|
END IF
|
|
IF arr_recibo[idx].desc_p < 0 THEN
|
|
LET arr_recibo[idx].desc_p = arr_recibo[idx].desc_p * -1
|
|
END IF
|
|
|
|
IF recibo.tipo_doc = 'NC' THEN
|
|
LET arr_recibo[1].aplica_a = xfactura
|
|
# LET monto_efectivo = xitbis
|
|
END IF
|
|
|
|
INSERT INTO cctb00001(
|
|
tipo_Doc,
|
|
num_doc,
|
|
tipo_cliente,
|
|
sec_cliente,
|
|
cod_emp_sec,
|
|
fecha_orig,
|
|
fecha_ven,
|
|
aplica_a,
|
|
localidad_aplica_a,
|
|
banco,
|
|
num_cheque,
|
|
valor,
|
|
valor_cheque,
|
|
monto_desc,
|
|
us_crea,
|
|
fech_crea,
|
|
bodega,
|
|
sucid,
|
|
documento_ref,
|
|
valor_efectivo,
|
|
valor_tarjeta,
|
|
efectivo,
|
|
tipo_doc_aplica)
|
|
VALUES(tipo_doc1,
|
|
arr_recibo[idx].num_nc,
|
|
recibo.tipo_cliente,
|
|
recibo.sec_cliente,
|
|
recibo.cod_emp_sec,
|
|
recibo.fecha_orig,
|
|
"010101",
|
|
arr_recibo[idx].aplica_a,
|
|
arr_recibo[idx].sucid,
|
|
cod_mov_ref,
|
|
recibo.num_doc,
|
|
arr_recibo[idx].valor_pag,
|
|
valor_cheque1,
|
|
arr_recibo[idx].desc_p,
|
|
usuarios,
|
|
getdate(),
|
|
"1",
|
|
codigo_sucursal,
|
|
pdocumento_ref[idx],
|
|
monto_efectivo,
|
|
monto_cr,
|
|
ncr,
|
|
arr_recibo[idx].tipo_doc_aplica)
|
|
|
|
IF recibo.tipo_doc = 'NC' THEN
|
|
LET recibo.num_doc = arr_recibo[idx].num_nc
|
|
END IF
|
|
LET hsucid = arr_recibo[idx].sucid
|
|
IF arr_recibo[idx].valor_pag < 0 THEN
|
|
LET arr_recibo[idx].valor_pag =
|
|
arr_recibo[idx].valor_pag * -1
|
|
END IF
|
|
|
|
END IF
|
|
END FOR
|
|
COMMIT WORK
|
|
IF recibo.tipo_doc <> 'NC' AND recibo.tipo_doc <> 'ND' THEN
|
|
|
|
LET r_filename = "ccprmt001a.4rp"
|
|
LET r_output = "PDF"
|
|
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
|
|
LET hsucid = arr_recibo[idx].sucid
|
|
LET hsucid = arr_recibo[idx].sucid
|
|
IF arr_recibo[idx].valor_pag < 0 THEN
|
|
LET arr_recibo[idx].valor_pag =
|
|
arr_recibo[idx].valor_pag * -1
|
|
END IF
|
|
|
|
OUTPUT TO REPORT cctb01b(
|
|
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,
|
|
codigodgii,
|
|
kncf,
|
|
ditbis)
|
|
END IF
|
|
# END IF
|
|
END FOR
|
|
FINISH REPORT cctb01b
|
|
END IF
|
|
|
|
END IF
|
|
|
|
# IMPRESION e-NCF
|
|
IF recibo.tipo_doc = 'NC' OR recibo.tipo_doc = 'ND' THEN
|
|
|
|
LET r_filename = "ccprmt001encf.4rp"
|
|
LET r_output = "PDF"
|
|
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_encf TO XML HANDLER HANDLER
|
|
|
|
FOR idx = 1 TO arr_recibo.getLength()
|
|
|
|
IF arr_recibo[idx].valor_pag IS NOT NULL THEN
|
|
LET hsucid = arr_recibo[idx].sucid
|
|
LET hsucid = arr_recibo[idx].sucid
|
|
IF arr_recibo[idx].valor_pag < 0 THEN
|
|
LET arr_recibo[idx].valor_pag =
|
|
arr_recibo[idx].valor_pag * -1
|
|
END IF
|
|
|
|
OUTPUT TO REPORT cctb01b_encf(
|
|
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,
|
|
codigodgii,
|
|
ditbis)
|
|
END IF
|
|
|
|
END FOR
|
|
FINISH REPORT cctb01b_encf
|
|
END IF
|
|
END IF
|
|
#-----------------------------------------------------------------------------------------------------
|
|
|
|
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
|
|
IF recibo.tipo_doc = "PG" THEN
|
|
UPDATE cctb00001
|
|
SET status_t = "E", us_mod = usuarios, fech_mod = getdate()
|
|
WHERE tipo_doc IN ("AV", "PG")
|
|
AND num_cheque = recibo.num_doc
|
|
ELSE
|
|
UPDATE cctb00001
|
|
SET status_t = "E", us_mod = usuarios, fech_mod = getdate()
|
|
WHERE tipo_doc = recibo.tipo_doc
|
|
AND num_doc = recibo.num_doc
|
|
END IF
|
|
|
|
LET numero_msg = 82
|
|
CALL msg(numero_msg)
|
|
|
|
COMMAND "Retornar"
|
|
CLEAR FORM
|
|
|
|
FOR idx = 1 TO 3
|
|
LET arr_recibo[idx].aplica_a = NULL
|
|
LET arr_recibo[idx].valor_pen = NULL
|
|
LET arr_recibo[idx].valor_pag = NULL
|
|
|
|
DISPLAY arr_recibo[idx].aplica_a TO s_recibo[idx].aplica_a
|
|
DISPLAY arr_recibo[idx].valor_pen TO s_recibo[idx].valor_pen
|
|
DISPLAY arr_recibo[idx].valor_pag TO s_recibo[idx].valor_pag
|
|
END FOR
|
|
|
|
EXIT MENU
|
|
END MENU
|
|
END FUNCTION
|
|
|
|
FUNCTION busca_aplicacion()
|
|
OPEN WINDOW busqueda1
|
|
AT 10, 10
|
|
WITH FORM "ccfmwd001"
|
|
ATTRIBUTE(BORDER, FORM LINE FIRST + 1, COMMENT LINE LAST)
|
|
CALL ui.Interface.LoadStyles("mbsStyle")
|
|
DECLARE aplicar CURSOR FOR
|
|
SELECT a.aplica_a, SUM(a.valor + a.monto_desc)
|
|
FROM cctb00001 a
|
|
WHERE a.tipo_cliente = recibo.tipo_cliente
|
|
AND a.sec_cliente = recibo.sec_cliente
|
|
AND a.status_t IS NULL
|
|
GROUP BY a.aplica_a
|
|
HAVING SUM(a.valor + a.monto_desc) > 0
|
|
ORDER BY 1
|
|
|
|
LET existe = "N"
|
|
LET idx = 1
|
|
FOREACH aplicar INTO aplica_wd[idx].aplica_a, aplica_wd[idx].pendiente
|
|
IF status = NOTFOUND THEN
|
|
LET existe = "N"
|
|
EXIT FOREACH
|
|
END IF
|
|
|
|
CALL integridad()
|
|
|
|
# Busca el tipo de movimiento
|
|
SELECT UNIQUE a.tipo_doc
|
|
INTO tipo_doc2
|
|
FROM cctb00001 a
|
|
WHERE (a.tipo_cliente = recibo.tipo_cliente
|
|
AND a.sec_cliente = recibo.sec_cliente
|
|
AND a.tipo_doc NOT IN ("PG", "AV")
|
|
AND a.num_doc = aplica_wd[idx].aplica_a)
|
|
AND a.status_t IS NULL
|
|
|
|
IF status < 0 THEN
|
|
CALL integridad()
|
|
LET tipo_doc2 = "SQ"
|
|
END IF
|
|
|
|
LET aplica_wd[idx].tipo_doc = tipo_doc2
|
|
|
|
# Busca Nota de credito
|
|
LET valor_ctrl1 = 0
|
|
IF tipo_doc2 = "AV" THEN
|
|
SELECT SUM(a.valor * - 1)
|
|
INTO valor_ctrl1
|
|
FROM cctb00001 a
|
|
WHERE (a.tipo_cliente = recibo.tipo_cliente
|
|
AND a.sec_cliente = recibo.sec_cliente
|
|
AND a.num_doc = aplica_wd[idx].aplica_a
|
|
AND a.tipo_doc = "AV"
|
|
AND a.num_doc != a.aplica_a)
|
|
AND a.status_t IS NULL
|
|
|
|
IF valor_ctrl1 IS NULL THEN
|
|
LET valor_ctrl1 = 0
|
|
END IF
|
|
LET aplica_wd[idx].pendiente =
|
|
aplica_wd[idx].pendiente - valor_ctrl1
|
|
END IF
|
|
|
|
LET existe = "S"
|
|
IF aplica_wd[idx].pendiente != 0 THEN
|
|
LET idx = idx + 1
|
|
END IF
|
|
|
|
END FOREACH
|
|
|
|
IF existe = "N" AND idx = 1 THEN
|
|
LET numero_msg = 127
|
|
CALL msg(numero_msg)
|
|
GOTO salir
|
|
END IF
|
|
|
|
CALL set_count(idx - 1)
|
|
DISPLAY ARRAY aplica_wd TO consart.*
|
|
LET 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 busca_aplicacion()
|
|
OPEN WINDOW busqueda1 AT 10,10 WITH FORM "ccfmwd001"
|
|
ATTRIBUTE (BORDER,FORM LINE FIRST + 1, comment line last)
|
|
|
|
DECLARE aplicar CURSOR FOR
|
|
SELECT a.aplica_a,SUM(a.valor+a.monto_desc) FROM cctb00001 a
|
|
WHERE a.tipo_cliente = recibo.tipo_cliente AND
|
|
a.sec_cliente = recibo.sec_cliente AND a.status_t is null {and
|
|
a.fech_crea > datetime (1994-01-01 08:00) year to minute#
|
|
GROUP BY a.aplica_a HAVING SUM(a.valor+a.monto_desc) > 0 ORDER BY a.aplica_A
|
|
|
|
LET existe = "N"
|
|
LET idx = 1
|
|
FOREACH aplicar INTO aplica_wd[idx].aplica_a,aplica_wd[idx].pendiente
|
|
IF status = NOTFOUND THEN
|
|
LET existe = "N"
|
|
EXIT FOREACH
|
|
END IF
|
|
|
|
|
|
|
|
{
|
|
# Busca el tipo de movimiento
|
|
SELECT unique a.tipo_doc INTO tipo_doc2
|
|
FROM cctb00001 a
|
|
WHERE (a.tipo_cliente = recibo.tipo_cliente and
|
|
a.sec_cliente = recibo.sec_cliente and a.tipo_doc != "PG" and
|
|
a.num_doc = aplica_wd[idx].aplica_a) and a.status_t is null
|
|
|
|
IF status < 0 THEN
|
|
|
|
LET tipo_doc2 = "SQ"
|
|
END IF
|
|
#
|
|
LET tipo_doc2 = "FT"
|
|
LET aplica_wd[idx].tipo_doc = tipo_doc2
|
|
|
|
# Busca Nota de credito
|
|
LET valor_ctrl1 = 0
|
|
IF tipo_doc2 = "AV" THEN
|
|
SELECT SUM(a.valor*-1) INTO valor_ctrl1 FROM cctb00001 a
|
|
WHERE (a.tipo_cliente = recibo.tipo_cliente AND
|
|
a.sec_cliente = recibo.sec_cliente AND
|
|
a.num_doc = aplica_wd[idx].aplica_a AND a.tipo_doc = "AV" AND
|
|
a.num_doc != a.aplica_a) AND a.status_t IS NULL
|
|
|
|
IF valor_ctrl1 is null THEN
|
|
LET valor_ctrl1 = 0
|
|
END IF
|
|
LET aplica_wd[idx].pendiente = aplica_wd[idx].pendiente - valor_ctrl1
|
|
END IF
|
|
|
|
LET existe = "S"
|
|
IF aplica_wd[idx].pendiente != 0 THEN
|
|
LET idx = idx + 1
|
|
END IF
|
|
|
|
END FOREACH
|
|
|
|
IF existe = "N" and idx = 1 THEN
|
|
LET numero_msg = 127
|
|
CALL msg(numero_msg)
|
|
GOTO salir
|
|
END IF
|
|
|
|
CALL set_count(idx-1)
|
|
DISPLAY ARRAY aplica_wd TO consart.*
|
|
LET curr1 = arr_curr()
|
|
|
|
LET arr_recibo[curr].aplica_a = aplica_wd[curr1].aplica_a
|
|
LET arr_recibo[curr].valor_pen = aplica_wd[curr1].pendiente
|
|
LABEL salir:
|
|
CLOSE WINDOW busqueda1
|
|
END FUNCTION
|
|
}
|
|
FUNCTION repetir()
|
|
|
|
DEFINE ant_art RECORD
|
|
num_nc INTEGER,
|
|
aplica_a INTEGER,
|
|
valor_pag DECIMAL(12, 2)
|
|
END RECORD
|
|
LET ant_art.num_nc = arr_recibo[curr].num_nc
|
|
LET ant_art.aplica_a = arr_recibo[curr].aplica_a
|
|
LET ant_art.valor_pag = arr_recibo[curr].valor_pag
|
|
|
|
FOR idx = 1 TO arr_count()
|
|
IF idx != curr THEN
|
|
IF arr_recibo[idx].aplica_a IS NOT NULL
|
|
AND arr_recibo[idx].valor_pag IS NOT NULL THEN
|
|
|
|
IF arr_recibo[idx].num_nc = ant_art.num_nc
|
|
AND arr_recibo[idx].aplica_a = ant_art.aplica_a
|
|
AND arr_recibo[idx].valor_pag = ant_art.valor_pag THEN
|
|
LET numero_msg = 21
|
|
CALL msg(numero_msg)
|
|
LET bandera = 1
|
|
ELSE
|
|
IF bandera != 1 THEN
|
|
LET bandera = 0
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
END FUNCTION
|
|
|
|
FUNCTION consulta_clientes()
|
|
OPEN WINDOW busqueda
|
|
AT 7, 12
|
|
WITH FORM "vefmwd002"
|
|
ATTRIBUTE(BORDER,
|
|
FORM LINE FIRST + 2,
|
|
COMMENT LINE LAST,
|
|
MESSAGE LINE LAST)
|
|
|
|
LET int_flag = FALSE
|
|
CONSTRUCT criterio ON a.nombre FROM nombre
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
GO TO salir_consulta_c
|
|
END IF
|
|
|
|
LET selec2 =
|
|
"SELECT a.tipo_cliente, a.sec_cliente, a.nombre ",
|
|
"FROM vetb00004 a ",
|
|
"WHERE a.status_t is null AND ",
|
|
criterio CLIPPED,
|
|
" ORDER BY 1,2 "
|
|
|
|
PREPARE busca_clientes FROM selec2
|
|
DECLARE buscar_clientes CURSOR FOR busca_clientes
|
|
LET idx = 1
|
|
|
|
FOREACH buscar_clientes INTO arr_clientes[idx].*
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
EXIT FOREACH
|
|
END IF
|
|
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
|
|
CALL set_count(idx - 1)
|
|
MESSAGE " <Esc> Selecciona Cliente donde esta el cursor"
|
|
DISPLAY ARRAY arr_clientes TO s_clientes.*
|
|
LET curr1 = arr_curr()
|
|
|
|
LET cliente_dir.tipo_cliente = arr_clientes[curr1].tipo_cliente
|
|
LET cliente_dir.sec_cliente = arr_clientes[curr1].sec_cliente
|
|
LET descrip1 = arr_clientes[curr1].nombre
|
|
|
|
LABEL salir_consulta_c:
|
|
CLOSE WINDOW busqueda
|
|
|
|
END FUNCTION
|
|
|
|
FUNCTION consulta_empleados()
|
|
OPEN WINDOW busqueda2
|
|
AT 7, 12
|
|
WITH FORM "vefmwd001"
|
|
ATTRIBUTE(BORDER,
|
|
FORM LINE FIRST + 2,
|
|
COMMENT LINE LAST,
|
|
MESSAGE LINE LAST)
|
|
|
|
LET int_flag = FALSE
|
|
CONSTRUCT criterio ON a.nom1_emp FROM descrip6
|
|
|
|
LET selec2 =
|
|
"SELECT num_emp,a.nom1_emp,a.apell1_emp ",
|
|
"FROM adtb00003 a",
|
|
"WHERE a.status_t is null AND ",
|
|
criterio CLIPPED,
|
|
" ORDER BY 1 "
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
GO TO salir_consulta_e
|
|
END IF
|
|
|
|
PREPARE busca_empleados FROM selec2
|
|
IF status >= 0 THEN
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
|
|
END IF
|
|
|
|
DECLARE buscar_empleados CURSOR FOR busca_empleados
|
|
LET idx = 1
|
|
|
|
FOREACH buscar_empleados INTO arr_empleados[idx].*
|
|
IF status = NOTFOUND THEN
|
|
EXIT FOREACH
|
|
END IF
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
EXIT FOREACH
|
|
END IF
|
|
|
|
LET empleados[idx].num_emp = arr_empleados[idx].num_emp
|
|
LET empleados[idx].descrip6 =
|
|
arr_empleados[idx].nom1_emp CLIPPED,
|
|
" ",
|
|
arr_empleados[idx].apell1_emp CLIPPED
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
|
|
CALL set_count(idx - 1)
|
|
MESSAGE " <Esc> Selecciona Empleado donde esta el cursor"
|
|
DISPLAY ARRAY empleados TO s_empleados.*
|
|
LET curr1 = arr_curr()
|
|
|
|
LET transportista.sec_transp = empleados[curr1].num_emp
|
|
LET descrip6 = empleados[curr1].descrip6
|
|
|
|
LABEL salir_consulta_e:
|
|
CLOSE WINDOW busqueda2
|
|
|
|
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)
|
|
|
|
|
|
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 = usuarios,
|
|
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 = usuarios,
|
|
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 = usuarios,
|
|
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 = usuarios,
|
|
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 = usuarios,
|
|
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 = usuarios, 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_sucid,
|
|
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_sucid SMALLINT,
|
|
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,
|
|
|
|
pcodigodgii VARCHAR(19),
|
|
pncf INT,
|
|
ncf_factura VARCHAR(19),
|
|
p_localidad VARCHAR(30),
|
|
articulos RECORD
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
cantidad DEC(12, 5),
|
|
descrip_Esp VARCHAR(70)
|
|
|
|
END RECORD
|
|
|
|
DEFINE
|
|
hora CHAR(5),
|
|
l SMALLINT,
|
|
p_nombre LIKE vetb00004.nombre,
|
|
p_comentario CHAR(120), #LIKE cctb00011.comentario
|
|
vtot DEC(16,2), vgdesc DEC(16,2), vgval DEC(16,2), vgtot DEC(16,2)
|
|
|
|
OUTPUT
|
|
TOP MARGIN 0
|
|
BOTTOM MARGIN 5
|
|
LEFT MARGIN 0
|
|
|
|
ORDER BY p_sec_cliente, p_num_doc
|
|
|
|
FORMAT
|
|
PAGE HEADER
|
|
LET hora = TIME
|
|
SELECT a.cod_comp, a.nombre, a.rnc, a.direccion, a.telefono, a.fax, a.ambientedgii
|
|
INTO p_companias.cod_comp, p_companias.nombre, p_companias.rnc, p_companias.direccion,
|
|
p_companias.telefono, p_companias.fax, p_companias.ambientedgii
|
|
FROM companias a
|
|
LET lj = (110 - LENGTH(p_companias.nombre CLIPPED)) / 2
|
|
|
|
PRINT comp_on
|
|
PRINT COLUMN 2,
|
|
"ccprmt001",
|
|
COLUMN 15,
|
|
negrilla_on,
|
|
COLUMN lj,
|
|
p_companias.nombre,
|
|
COLUMN 65,
|
|
negrillas_of,
|
|
COLUMN 90,
|
|
"Pag. ",
|
|
PAGENO
|
|
PRINT COLUMN lj, "RNC: ", p_companias.rnc
|
|
LET lj = (110 - LENGTH(p_companias.direccion CLIPPED)) / 2
|
|
PRINT COLUMN 1,
|
|
negrilla_on,
|
|
COLUMN lj,
|
|
p_companias.direccion,
|
|
COLUMN 65,
|
|
negrillas_of #,
|
|
# column 90, today using "dd/mm/yyyy"
|
|
LET lj = (110 - LENGTH(p_nombre_tipo)) / 2
|
|
PRINT COLUMN 1,
|
|
negrilla_on,
|
|
COLUMN lj,
|
|
p_nombre_tipo CLIPPED,
|
|
COLUMN 65,
|
|
negrillas_of,
|
|
COLUMN 93,
|
|
hora
|
|
|
|
SKIP 3 LINES
|
|
|
|
BEFORE GROUP OF p_sec_cliente
|
|
SELECT a.itbi INTO pitbis FROM vetb00019 a WHERE a.disponible = "S"
|
|
IF pitbis IS NULL THEN
|
|
LET pitbis = 0
|
|
END IF
|
|
|
|
PRINT COLUMN 5, "LOCALIDAD :", nombre_sucursal
|
|
PRINT COLUMN 5, " NUMERO DOCUM. : ", p_num_doc USING "########"
|
|
PRINT COLUMN 5,
|
|
" CUENTA : ",
|
|
p_cuenta_no CLIPPED,
|
|
" - ",
|
|
p_nombre_cta CLIPPED,
|
|
COLUMN 70,
|
|
" DEPOSITO : ",
|
|
p_banco
|
|
PRINT COLUMN 5,
|
|
" CLIENTE : ",
|
|
p_tipo_cliente,
|
|
"-",
|
|
p_sec_cliente USING "<<<<<",
|
|
" - ",
|
|
p_nombre CLIPPED,
|
|
COLUMN 70,
|
|
" FECHA : ",
|
|
p_fecha_orig USING "dd/mm/yyyy"
|
|
PRINT COLUMN 5, "DIRECCION : ", pdireccion CLIPPED
|
|
|
|
PRINT COLUMN 5,
|
|
" VENDEDOR : ",
|
|
p_cod_emp_sec,
|
|
" - ",
|
|
p_nomb_emp CLIPPED
|
|
PRINT COLUMN 5,
|
|
" TIPO PAGO : ",
|
|
p_tipo_doc CLIPPED,
|
|
" - ",
|
|
p_nombre_tipo CLIPPED
|
|
PRINT COLUMN 5,
|
|
" NCF : ",
|
|
codigodgii CLIPPED,
|
|
kncf USING "&&&&&&&&"
|
|
IF fecha_vencimiento > '05/01/2018' THEN
|
|
PRINT COLUMN 5,
|
|
" Valido hasta : ",
|
|
fecha_vencimiento USING "dd/mm/yyyy"
|
|
END IF
|
|
|
|
#PRINT doce
|
|
|
|
IF p_tipo_Doc = 'NC' OR p_tipo_doc = 'ND' THEN
|
|
SELECT a.itbi
|
|
INTO pitbis
|
|
FROM vetb00019 a
|
|
WHERE a.disponible = "S"
|
|
IF pitbis IS NULL THEN
|
|
LET pitbis = 0
|
|
END IF
|
|
|
|
END IF
|
|
PRINT p_cod_cia USING "<<<<"
|
|
PRINT COLUMN 1,
|
|
"===============================================================",
|
|
"======================================================"
|
|
PRINT COLUMN 5,
|
|
"Aplica Factura",
|
|
COLUMN 20,
|
|
"Localidad ",
|
|
COLUMN 43,
|
|
"Descuento",
|
|
COLUMN 64,
|
|
"Valor",
|
|
8 SPACES,
|
|
"ITBIS",
|
|
COLUMN 90,
|
|
"TOTAL",
|
|
11 SPACES,
|
|
"NCF APLICADO"
|
|
|
|
# print column 37, " S/ITBIS"
|
|
|
|
PRINT COLUMN 1,
|
|
"===============================================================",
|
|
"======================================================"
|
|
|
|
SKIP 1 LINE
|
|
|
|
ON EVERY ROW
|
|
|
|
IF p_tipo_Doc = "NC" OR p_tipo_doc = "ND" THEN
|
|
|
|
IF ncr = "S" THEN
|
|
LET ditbis = p_valor * (pitbis / 100)
|
|
ELSE
|
|
LET ditbis = 0
|
|
END IF
|
|
IF chr_impresion <> "SI" THEN
|
|
DISPLAY "esto ", chr_impresion, " ", ditbis
|
|
UPDATE cctb00001
|
|
SET valor_cheque = p_valor,
|
|
valor_efectivo = ditbis,
|
|
valor = p_valor + ditbis,
|
|
banco = cod_mov_ref,
|
|
num_cheque = num_doc_ref,
|
|
efectivo = ncr
|
|
WHERE tipo_doc = p_tipo_Doc
|
|
AND num_doc = p_num_doc
|
|
AND aplica_a = p_aplica_a
|
|
AND tipo_cliente = p_tipo_cliente
|
|
AND sec_cliente = p_sec_cliente
|
|
END IF
|
|
SELECT a.codigo_dgii, a.ncf
|
|
INTO pcodigodgii, pncf
|
|
FROM vetb00072 a
|
|
WHERE a.tipo_Doc IN ('FE', 'FT')
|
|
AND a.documento = p_aplica_a
|
|
AND a.sucid = p_sucid
|
|
|
|
LET ncf_factura = pcodigodgii CLIPPED, pncf USING "&&&&&&&&"
|
|
END IF
|
|
IF p_tipo_doc = 'RC' THEN
|
|
LET ditbis = 0
|
|
END IF
|
|
SELECT a.sucnombre
|
|
INTO p_localidad
|
|
FROM sucursales a
|
|
WHERE a.sucid = p_sucid
|
|
LET vtot = p_valor + ditbis
|
|
PRINT COLUMN 5,
|
|
p_aplica_a USING "#######",
|
|
COLUMN 20,
|
|
p_localidad,
|
|
COLUMN 43,
|
|
p_monto_desc USING "#,###,###.##",
|
|
COLUMN 57,
|
|
p_valor USING "##,###,###.##",
|
|
COLUMN 64,
|
|
ditbis USING "##,###,###.##",
|
|
COLUMN 83,
|
|
vtot USING "###,###,###.##",
|
|
2 SPACES,
|
|
ncf_factura
|
|
LET l = 12
|
|
|
|
AFTER GROUP OF p_sec_cliente
|
|
|
|
PRINT COLUMN 1,
|
|
"===============================================================",
|
|
"======================================================"
|
|
IF p_tipo_doc = "NC" OR p_tipo_doc = "ND" THEN
|
|
IF ncr = "S" THEN
|
|
LET ditbis = GROUP SUM(p_valor) * (pitbis / 100)
|
|
ELSE
|
|
LET ditbis = 0
|
|
END IF
|
|
END IF
|
|
LET vgdesc = GROUP SUM(p_monto_desc)
|
|
LET vgval = GROUP SUM(p_valor)
|
|
LET vgtot = vgval + ditbis
|
|
PRINT COLUMN 5,
|
|
"Total----> ",
|
|
COLUMN 43,
|
|
vgdesc USING "#,###,###.##",
|
|
COLUMN 57,
|
|
vgval USING "##,###,###.##",
|
|
1 SPACES,
|
|
ditbis USING "##,###,###.##",
|
|
COLUMN 84,
|
|
vgtot USING "##,###,###.##"
|
|
|
|
SKIP 1 LINE
|
|
IF p_tipo_doc = "NC" THEN
|
|
|
|
PRINT COLUMN 1,
|
|
"===============================================================",
|
|
"======================================================"
|
|
PRINT COLUMN 5, "PRODUCTO(S)", COLUMN 109, "CANTIDAD"
|
|
|
|
PRINT COLUMN 1,
|
|
"===============================================================",
|
|
"======================================================"
|
|
DECLARE busca_nc CURSOR FOR
|
|
SELECT a.cod_n,
|
|
a.cod_grupo,
|
|
a.cod_tipo,
|
|
a.cod_sec,
|
|
b.cantidad_2,
|
|
a.descrip_esp
|
|
FROM iptb00002 a, iptb00006 b
|
|
WHERE b.num_doc = num_doc_ref
|
|
AND b.cod_mov = cod_mov_ref
|
|
AND a.cod_n = b.cod_n
|
|
AND a.cod_grupo = b.cod_grupo
|
|
AND a.cod_tipo = b.cod_tipo
|
|
AND a.cod_sec = b.cod_sec
|
|
|
|
FOREACH busca_nc INTO articulos.*
|
|
PRINT 5,
|
|
articulos.cod_n USING "&&&&",
|
|
"-",
|
|
articulos.cod_grupo USING "&&&&",
|
|
"-",
|
|
articulos.cod_tipo USING "&&&&",
|
|
"-",
|
|
articulos.cod_sec USING "&&&&",
|
|
" ",
|
|
articulos.descrip_Esp,
|
|
articulos.cantidad USING "##,###,###.####"
|
|
END FOREACH
|
|
END IF
|
|
|
|
ON LAST ROW
|
|
|
|
SKIP 2 LINES
|
|
|
|
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 comp_off, normal
|
|
END REPORT
|
|
FUNCTION aplica_mas_antiguas()
|
|
DEFINE
|
|
balance, valor_aplicando DEC(12, 2),
|
|
j, psucid INT,
|
|
pventas CHAR(1)
|
|
DECLARE busca_antiguas CURSOR FOR
|
|
SELECT a.aplica_a,
|
|
SUM(a.valor + a.monto_desc),
|
|
b.ventas,
|
|
b.sucid,
|
|
CONVERT(CHAR(10), b.fecha_factura, 103)
|
|
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, b.sucid
|
|
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, psucid
|
|
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'
|
|
LET arr_recibo[j].sucid = psucid
|
|
ELSE
|
|
LET arr_recibo[j].tipo_doc_aplica = 'FE'
|
|
LET arr_recibo[j].sucid = psucid
|
|
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'
|
|
LET arr_recibo[j].sucid = psucid
|
|
ELSE
|
|
LET arr_recibo[j].tipo_doc_aplica = 'FE'
|
|
LET arr_recibo[j].sucid = psucid
|
|
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 detallecxc()
|
|
DEFINE k INT
|
|
IF recibo.tipo_doc = "PG" THEN
|
|
LET selec =
|
|
"SELECT a.num_doc,a.sucid,a.tipo_doc_aplica,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
|
|
IF recibo.tipo_doc = "NC" OR recibo.tipo_doc = "ND" THEN
|
|
LET selec =
|
|
"SELECT a.num_doc,a.sucid,a.tipo_doc_aplica,a.aplica_a,a.valor,isnull(a.monto_desc,0),
|
|
a.valor,isnull(a.valor_efectivo,0),b.prima_us,b.orden,a.localidad_aplica_a FROM cctb00001 a INNER JOIN vetb00002 b
|
|
ON b.factura = a.aplica_a AND b.sucid = a.localidad_aplica_a AND a.tipo_cliente = b.tipo_cliente AND
|
|
a.sec_cliente = b.sec_cliente ",
|
|
"WHERE (a.tipo_doc=? AND a.num_doc=?)AND (a.tipo_cliente = ? AND ",
|
|
" a.sec_cliente = ?) ORDER BY 2,1 "
|
|
|
|
ELSE
|
|
LET selec =
|
|
"SELECT num_doc,sucid,tipo_doc_aplica,aplica_a,valor,monto_desc,valor,isnull(valor_efectivo,0)
|
|
FROM cctb00001 ",
|
|
"WHERE (tipo_doc=? AND num_cheque=?)AND (tipo_cliente = ? AND ",
|
|
" sec_cliente = ?) ORDER BY 2,1 "
|
|
|
|
END IF
|
|
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 k = 1
|
|
WHILE STATUS != NOTFOUND
|
|
|
|
FETCH buscar1 INTO arr_recibo[k].*, xitbis, tasa, xorden, hsucid
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
EXIT WHILE
|
|
END IF
|
|
LET xfactura = arr_recibo[k].aplica_a
|
|
SELECT a.fecha_factura
|
|
INTO ffecha
|
|
FROM vetb00002 a
|
|
WHERE a.factura = xfactura AND a.sucid = hsucid
|
|
|
|
LET valor_ctrl = arr_recibo[k].valor_pag
|
|
CALL llenaarticulos()
|
|
|
|
IF arr_recibo[k].num_nc = recibo.num_doc THEN
|
|
LET arr_recibo[k].num_nc = NULL
|
|
END IF
|
|
IF recibo.tipo_doc != "ND" AND recibo.tipo_doc != "OD" THEN
|
|
|
|
LET arr_recibo[k].valor_pen = arr_recibo[k].valor_pen * -1
|
|
ELSE
|
|
IF arr_recibo[k].valor_pen < 0 THEN
|
|
LET arr_recibo[k].valor_pen = arr_recibo[k].valor_pen * -1
|
|
END IF
|
|
END IF
|
|
LET arr_recibo[k].valor_pag = arr_recibo[k].valor_pen
|
|
LET arr_recibo[k].valor_pen = 0
|
|
LET arr_recibo[k].desc_p = arr_recibo[k].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[k].aplica_a
|
|
AND status_t IS NULL
|
|
AND num_cheque = recibo.num_doc
|
|
|
|
LET arr_recibo[k].valor_pen = valor2
|
|
#ORIENTACION DOCUMENTO
|
|
IF recibo.tipo_doc = "OD" THEN
|
|
IF arr_recibo[k].valor_pag < 0 THEN
|
|
LET arr_recibo[k].valor_pag = arr_recibo[k].valor_pag * -1
|
|
END IF
|
|
END IF
|
|
|
|
IF recibo.tipo_doc = "OC" THEN
|
|
IF arr_recibo[k].valor_pag < 0 THEN
|
|
LET arr_recibo[k].valor_pag = arr_recibo[k].valor_pag * -1
|
|
END IF
|
|
END IF
|
|
|
|
IF recibo.tipo_doc = "DV" THEN
|
|
IF arr_recibo[k].valor_pag < 0 THEN
|
|
LET arr_recibo[k].valor_pag = arr_recibo[k].valor_pag * -1
|
|
END IF
|
|
END IF
|
|
IF recibo.tipo_doc = "OD" THEN
|
|
IF ARR_RECIBO[k].VALOR_PAG < 0 THEN
|
|
LET arr_recibo[k].valor_pag = arr_recibo[k].valor_pag * -1
|
|
END IF
|
|
END IF
|
|
IF recibo.tipo_doc = 'NC' OR recibo.tipo_doc = 'ND' THEN
|
|
LET arr_recibo[k].valor_pag = valor_ctrl * -1
|
|
END IF
|
|
|
|
LET k = k + 1
|
|
END WHILE
|
|
|
|
END FUNCTION
|
|
FUNCTION llenaarticulos()
|
|
DEFINE
|
|
i INT,
|
|
tvalor_bruto, tdescuento, tsub_total, titbis, tneto DEC(16, 2)
|
|
DECLARE buscarticulos CURSOR FOR
|
|
SELECT a.cod_n,
|
|
a.cod_Grupo,
|
|
a.cod_tipo,
|
|
a.cod_sec,
|
|
a.cantidad,
|
|
a.precio,
|
|
a.porc_desc,
|
|
a.descuento,
|
|
a.itbis,
|
|
a.descripcion
|
|
FROM cctb00010 a
|
|
WHERE a.num_doc = recibo.num_doc AND a.tipo_doc = recibo.tipo_doc
|
|
|
|
LET i = 1
|
|
LET xvalor_bruto = 0
|
|
LET xsub_total = 0
|
|
LET xdescuento = 0
|
|
LET xitbis = 0
|
|
LET xneto = 0
|
|
|
|
FOREACH buscarticulos
|
|
INTO arr_articulos[i].cod_n,
|
|
arr_articulos[i].cod_grupo,
|
|
arr_articulos[i].cod_tipo,
|
|
arr_articulos[i].cod_sec,
|
|
arr_articulos[i].cantidad_2,
|
|
arr_articulos[i].precio,
|
|
arr_articulos[i].por_desc,
|
|
arr_articulos[i].valor_desc,
|
|
arr_articulos[i].valor_itbis,
|
|
arr_articulos[i].descrip_Esp
|
|
|
|
IF arr_articulos[i].cod_sec IS NOT NULL THEN
|
|
IF reimprime = "SI" THEN
|
|
LET xvalor_bruto =
|
|
xvalor_bruto
|
|
+ (arr_articulos[i].cantidad_2
|
|
* arr_articulos[i].precio)
|
|
LET xdescuento = xdescuento + arr_articulos[i].valor_desc
|
|
|
|
LET xitbis = xitbis + arr_articulos[i].valor_itbis
|
|
END IF
|
|
END IF
|
|
LET i = i + 1
|
|
END FOREACH
|
|
IF reimprime <> "SI" THEN
|
|
CALL calculos()
|
|
RETURNING tvalor_bruto, tdescuento, tsub_total, titbis, tneto
|
|
|
|
LET xitbis = titbis
|
|
LET xsub_total = tsub_total
|
|
#DISPLAY "datos ",xvalor_bruto, " xdes ",xdescuento," xsub ",xsub_total," xitbis ",xitbis
|
|
LET xneto = xsub_total + xitbis
|
|
LET xvalor_bruto = tvalor_bruto
|
|
ELSE
|
|
LET xsub_total = xsub_total + (xvalor_bruto - xdescuento)
|
|
LET xneto = valor_ctrl * -1
|
|
END IF
|
|
DISPLAY "VALORES: ", xvalor_bruto, " neto ", xsub_total
|
|
DISPLAY BY NAME xfactura
|
|
END FUNCTION
|
|
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,
|
|
pcodigodgii,
|
|
pncf,
|
|
monto_itbis)
|
|
|
|
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, monto_itbis DEC(12, 2),
|
|
labelcliente, sfecha STRING,
|
|
ncf_factura VARCHAR(19),
|
|
pcodigodgii, fcodigodgii VARCHAR(19),
|
|
pncf, fncf INT,
|
|
encabezado VARCHAR(2),
|
|
articulos RECORD
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
cantidad DEC(12, 5),
|
|
descrip_Esp VARCHAR(70)
|
|
|
|
END RECORD,
|
|
arr_articulos DYNAMIC ARRAY OF RECORD
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
cantidad DEC(12, 5),
|
|
descrip_Esp VARCHAR(70)
|
|
END RECORD,
|
|
vimagen BOOLEAN,
|
|
imagen BYTE,
|
|
nombre_file, filedestino STRING
|
|
|
|
DEFINE
|
|
hora CHAR(5),
|
|
|
|
p_nombre LIKE vetb00004.nombre,
|
|
p_comentario CHAR(120), #LIKE cctb00011.comentario,
|
|
descuento, dtotal_monto, total_monto, ditbis DEC(12, 2),
|
|
tipodocumento VARCHAR(50)
|
|
|
|
ORDER BY p_sec_cliente, p_num_doc
|
|
|
|
FORMAT
|
|
FIRST PAGE HEADER
|
|
LET hora = TIME
|
|
LET total_monto = 0
|
|
LET encabezado = 'NO'
|
|
IF p_tipo_doc = 'PG' OR p_tipo_doc = 'RC' THEN
|
|
LET tipodocumento = 'RECIBO DE INGRESOS'
|
|
LET labelcliente = "HEMOS RECIBIDO DE "
|
|
ELSE
|
|
LET tipodocumento = 'DOCUMENTO CUENTAS POR COBRAR'
|
|
LET labelcliente =
|
|
"CLIENTE: ",
|
|
p_tipo_cliente USING "&&",
|
|
"-",
|
|
p_sec_cliente USING "&&&&&&&",
|
|
" "
|
|
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
|
|
IF fecha_vencimiento > '05/01/2018' THEN
|
|
LET sfecha = 'SI'
|
|
ELSE
|
|
LET sfecha = 'NO'
|
|
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,
|
|
pcodigodgii,
|
|
pncf,
|
|
recibo.comentario,
|
|
pdireccion
|
|
|
|
ON EVERY ROW
|
|
|
|
IF p_tipo_Doc = "NC" OR p_tipo_doc = "ND" THEN
|
|
|
|
# IF ncr = "S" THEN
|
|
# LET ditbis =p_valor * (pitbis/100)
|
|
# ELSE
|
|
# LET ditbis = 0
|
|
# END IF
|
|
|
|
SELECT a.codigo_dgii, a.ncf
|
|
INTO fcodigodgii, fncf
|
|
FROM vetb00072 a
|
|
WHERE a.tipo_Doc IN ('FE', 'FT')
|
|
AND a.documento = p_aplica_a
|
|
AND a.sucid = hsucid
|
|
|
|
LET ncf_factura = fcodigodgii CLIPPED, fncf USING "&&&&&&&&"
|
|
END IF
|
|
IF p_tipo_doc <> "NC" THEN
|
|
LET encabezado = 'NO'
|
|
END IF
|
|
|
|
IF p_tipo_doc = "NC" THEN
|
|
|
|
DECLARE busca_nc1 CURSOR FOR
|
|
SELECT a.cod_n,
|
|
a.cod_grupo,
|
|
a.cod_tipo,
|
|
a.cod_sec,
|
|
b.cantidad_2,
|
|
a.descrip_esp
|
|
FROM iptb00002 a, iptb00006 b
|
|
WHERE b.num_doc = num_doc_ref
|
|
AND b.cod_mov = cod_mov_ref
|
|
AND a.cod_n = b.cod_n
|
|
AND a.cod_grupo = b.cod_grupo
|
|
AND a.cod_tipo = b.cod_tipo
|
|
AND a.cod_sec = b.cod_sec
|
|
LET idx = 1
|
|
FOREACH busca_nc1 INTO arr_articulos[idx].*
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
END IF
|
|
IF monto_itbis IS NULL THEN
|
|
LET monto_itbis = 0
|
|
END IF
|
|
IF monto_itbis < 0 THEN
|
|
LET monto_itbis = monto_itbis * -1
|
|
END IF
|
|
IF p_monto_Desc < 0 THEN
|
|
LET p_monto_Desc = p_monto_Desc * -1
|
|
END IF
|
|
DISPLAY "valores ", p_valor, " ", monto_itbis, " ", p_monto_desc
|
|
IF reimprime = "NO" THEN
|
|
LET p_valor = p_valor - monto_itbis
|
|
LET dtotal_monto = p_valor + monto_itbis - p_monto_desc
|
|
ELSE
|
|
LET p_valor = p_valor - monto_itbis
|
|
LET dtotal_monto = p_valor + monto_itbis
|
|
END IF
|
|
|
|
LET dtotal_monto = p_valor + monto_itbis - p_monto_desc
|
|
IF arr_articulos.getLength() > 1 THEN
|
|
LET encabezado = 'SI'
|
|
FOR idx = 1 TO arr_articulos.getLength()
|
|
IF arr_articulos[idx].descrip_Esp IS NOT NULL THEN
|
|
LET articulos.cod_n = arr_articulos[idx].cod_n
|
|
LET articulos.cod_grupo = arr_articulos[idx].cod_grupo
|
|
LET articulos.cod_tipo = arr_articulos[idx].cod_tipo
|
|
LET articulos.cod_sec = arr_articulos[idx].cod_sec
|
|
LET articulos.descrip_Esp =
|
|
arr_articulos[idx].descrip_Esp
|
|
LET articulos.cantidad = arr_articulos[idx].cantidad
|
|
|
|
PRINTX articulos.cod_n,
|
|
articulos.cod_grupo,
|
|
articulos.cod_tipo,
|
|
articulos.cod_sec,
|
|
articulos.descrip_Esp,
|
|
articulos.cantidad
|
|
|
|
END IF
|
|
|
|
END FOR
|
|
ELSE
|
|
LET encabezado = "NO"
|
|
LET articulos.cod_n = 0
|
|
LET articulos.cod_grupo = 0
|
|
LET articulos.cod_tipo = 0
|
|
LET articulos.cod_sec = 0
|
|
LET articulos.descrip_Esp = "NO TIENE"
|
|
LET articulos.cantidad = 0
|
|
|
|
END IF
|
|
|
|
PRINTX p_aplica_a,
|
|
p_monto_desc,
|
|
p_valor,
|
|
monto_itbis,
|
|
ncf_factura,
|
|
encabezado,
|
|
dtotal_monto
|
|
|
|
LET total_monto = total_monto + dtotal_monto
|
|
|
|
AFTER GROUP OF p_sec_cliente
|
|
#IMAGEN
|
|
IF p_tipo_doc = "NC" THEN
|
|
LET vimagen = TRUE
|
|
LOCATE imagen IN MEMORY
|
|
|
|
SELECT a.firmafactura, a.nombre_file_firma
|
|
INTO imagen, nombre_file
|
|
FROM seg0001 a
|
|
WHERE a.usuario = usuarios
|
|
|
|
# LET filedestino = 'E:\\MARMOTECH\\test\\IMAGENES\\tmp\\',usuarios CLIPPED,nombre_file CLIPPED
|
|
LET filedestino =
|
|
'.\\IMAGENES\\tmp\\', usuarios CLIPPED, nombre_file CLIPPED
|
|
IF imagen IS NULL THEN
|
|
LET vimagen = FALSE
|
|
LET filedestino = '.\\IMAGENES\\tmp\\tmpdefault.png'
|
|
ELSE
|
|
CALL imagen.writeFile(filedestino)
|
|
CALL comprimeImagen(filedestino, ' -resize 200x200 ')
|
|
CALL imagen.readFile(filedestino)
|
|
END IF
|
|
ELSE
|
|
LET vimagen = FALSE
|
|
END IF
|
|
# BUSCA TIPO DE VENTAS
|
|
SELECT a.simbolo, a.descripcion_moneda
|
|
INTO psimbolo, pmoneda
|
|
FROM vetb00061 a, vetb00060 b
|
|
WHERE a.ventas = b.ventas AND b.tipo_cliente = p_tipo_cliente
|
|
|
|
LET descuento = GROUP SUM(p_monto_desc)
|
|
IF p_tipo_doc = 'NC' THEN
|
|
LET valor_orig = total_monto
|
|
ELSE
|
|
LET total_monto = GROUP SUM(p_valor)
|
|
LET valor_orig = total_monto
|
|
END IF
|
|
LET valor_letras = NULL
|
|
CALL convierte()
|
|
|
|
PRINTX descuento,
|
|
total_monto,
|
|
valor_letras,
|
|
psimbolo,
|
|
vimagen,
|
|
imagen
|
|
|
|
ON LAST ROW
|
|
|
|
PRINTX p_comentario
|
|
CALL arr_articulos.clear()
|
|
|
|
END REPORT
|
|
|
|
REPORT cctb01b_encf(
|
|
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,
|
|
pcodigodgii,
|
|
monto_itbis)
|
|
|
|
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, monto_itbis DEC(12, 2),
|
|
labelcliente, sfecha STRING,
|
|
ncf_factura VARCHAR(19),
|
|
pcodigodgii, fcodigodgii VARCHAR(19),
|
|
pncf INT,
|
|
encabezado VARCHAR(2),
|
|
articulos RECORD
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
cantidad DEC(12, 5),
|
|
descrip_Esp VARCHAR(70),
|
|
unidad_med VARCHAR(4),
|
|
precio, por_desc, valor_desc, valor_itbis, valor DEC(12, 2)
|
|
|
|
END RECORD,
|
|
vimagen BOOLEAN,
|
|
|
|
nombre_file,
|
|
filedestino,
|
|
ch_fecha,
|
|
dataqrcode,
|
|
chfechafirmadigital,
|
|
respuesta
|
|
STRING,
|
|
|
|
buf base.StringBuffer,
|
|
bufmsg base.StringBuffer,
|
|
imsg INT,
|
|
qrpath STRING,
|
|
rnccomprador VARCHAR(11)
|
|
|
|
DEFINE
|
|
hora CHAR(5),
|
|
|
|
p_nombre LIKE vetb00004.nombre,
|
|
p_comentario CHAR(120), #LIKE cctb00011.comentario,
|
|
descuento, dtotal_monto, total_monto, ditbis DEC(12, 2),
|
|
tipodocumento VARCHAR(50),
|
|
ch_ncf VARCHAR(50),
|
|
mostrarQR BOOLEAN,
|
|
rhash VARCHAR(50),
|
|
chbruto, chdescuento, chsubtotal, chitbis, chneto VARCHAR(100)
|
|
|
|
ORDER BY p_num_doc
|
|
|
|
FORMAT
|
|
FIRST PAGE HEADER
|
|
LET hora = TIME
|
|
|
|
LET total_monto = 0
|
|
|
|
LET encabezado = 'NO'
|
|
IF p_tipo_doc = 'PG' OR p_tipo_doc = 'RC' THEN
|
|
LET tipodocumento = 'RECIBO DE INGRESOS'
|
|
LET labelcliente = "HEMOS RECIBIDO DE "
|
|
ELSE
|
|
LET tipodocumento = 'DOCUMENTO CUENTAS POR COBRAR'
|
|
LET labelcliente =
|
|
"CLIENTE: ",
|
|
p_tipo_cliente USING "&&",
|
|
"-",
|
|
p_sec_cliente USING "&&&&&&&",
|
|
" "
|
|
END IF
|
|
|
|
BEFORE GROUP OF p_sec_cliente
|
|
DISPLAY "xfactura ", xfactura, " SCID ", hsucid
|
|
SELECT DISTINCT a.ncf,
|
|
a.prima_us,
|
|
b.codigo_dgii,
|
|
c.num_rnc,
|
|
# d.simbolo,
|
|
a.ventas,
|
|
c.zona_postal
|
|
INTO fcodigodgii,
|
|
tasa,
|
|
documento_encabezado.tipoPago,
|
|
rnccomprador,
|
|
# simbolo,
|
|
xventas,
|
|
tipodocumento
|
|
FROM vetb00002 a, vetb00012 b, vetb00004 c, vetb00060 d
|
|
WHERE a.factura = xfactura
|
|
AND a.sucid = hsucid
|
|
AND a.tipo_cliente = c.tipo_cliente
|
|
AND a.sec_cliente = c.sec_cliente
|
|
AND a.ventas = d.ventas
|
|
AND a.cond_pago = b.cond_pago
|
|
|
|
LET ncf_factura = fcodigodgii CLIPPED
|
|
LET documento_encabezado.tipoPago = '1'
|
|
IF tipodocumento = '3' THEN
|
|
LET documento_encabezado.IdentificadorExtranjero =
|
|
rnccomprador CLIPPED
|
|
|
|
END IF
|
|
{ SELECT a.itbi INTO pitbis FROM vetb00019 a
|
|
WHERE a.disponible = "S"}
|
|
IF pitbis IS NULL THEN
|
|
LET pitbis = 0
|
|
END IF
|
|
IF fecha_vencimiento > '05/01/2018' THEN
|
|
LET sfecha = 'SI'
|
|
ELSE
|
|
LET sfecha = 'NO'
|
|
END IF
|
|
|
|
SELECT DISTINCT a.ncf, a.fechafirmadigital, a.hash
|
|
INTO ch_ncf, xfechafirmadigital, xhash
|
|
FROM cctb00001 a
|
|
WHERE a.num_doc = recibo.num_doc
|
|
AND a.tipo_Doc = recibo.tipo_doc
|
|
AND a.tipo_cliente = recibo.tipo_cliente
|
|
AND a.sec_cliente = recibo.sec_cliente
|
|
|
|
# DISPLAY "info: ",recibo.num_doc," tipo ",recibo.tipo_doc," ff ",xfechaFirmadigital
|
|
SELECT a.tipo_ncf
|
|
INTO descripcion
|
|
FROM vetb00071 a
|
|
WHERE a.tipo_Doc = p_tipo_doc AND a.codigo_dgii = pcodigodgii
|
|
|
|
IF reimprime <> "SI" THEN
|
|
IF ch_ncf NOT MATCHES 'B*' OR ch_ncf IS NULL THEN
|
|
LET mostrarQR = TRUE
|
|
LET ch_ncf =
|
|
"E", codigodgii CLIPPED, kncf USING "&&&&&&&&&&"
|
|
LET ch_ncf = 'e-NCF:', ch_ncf CLIPPED
|
|
ELSE
|
|
IF ch_ncf MATCHES 'B*' THEN
|
|
LET mostrarQR = FALSE
|
|
LET ch_ncf = 'NCF:', ch_ncf CLIPPED
|
|
END IF
|
|
END IF
|
|
ELSE
|
|
LET mostrarQR = TRUE
|
|
LET qncf = ch_ncf CLIPPED
|
|
LET ch_ncf = 'e-NCF:', ch_ncf CLIPPED
|
|
|
|
SELECT a.fecha_vencimiento
|
|
INTO fecha_vencimiento
|
|
FROM vetb00071 a
|
|
WHERE a.tipo_Doc = p_tipo_doc
|
|
AND a.codigo_dgii = pcodigodgii
|
|
|
|
CALL sus_caracter(xhash) RETURNING rhash
|
|
END IF
|
|
|
|
LET ch_fecha = fecha_vencimiento USING "dd-mm-yyyy"
|
|
IF ch_fecha IS NOT NULL THEN
|
|
LET ncffechaVencimiento = TRUE
|
|
LET documento_encabezado.FechaVencimientoSecuencia = ch_fecha
|
|
ELSE
|
|
LET ncffechaVencimiento = FALSE
|
|
LET documento_encabezado.FechaVencimientoSecuencia = NULL
|
|
END IF
|
|
# LET qncf = "E", codigodgii CLIPPED, kncf USING "&&&&&&&&&&"
|
|
------->Documento Encabezado OBLIGATORIO
|
|
LET documento_encabezado.tipoEcf = codigodgii CLIPPED
|
|
|
|
LET documento_encabezado.rncEmisor = p_companias.rnc CLIPPED
|
|
LET documento_encabezado.razonSocialEmisor =
|
|
p_companias.nombre CLIPPED
|
|
LET documento_encabezado.direccionEmisor =
|
|
p_companias.direccion CLIPPED
|
|
LET documento_encabezado.Municipio =
|
|
id_municipio_dgii CLIPPED
|
|
LET documento_encabezado.Provincia =
|
|
id_provincia_dgii CLIPPED
|
|
|
|
SELECT a.titulo
|
|
INTO desc_modificacion
|
|
FROM cctb00037 a
|
|
WHERE a.idtipo = idtipo
|
|
-- NO se encodea p_nombre: sus_caracter() es para URL/QR y metia
|
|
-- %20/%3B en la razon social del XML (RazonSocialComprador) y del
|
|
-- reporte. El nombre va limpio, igual que en veprmt022
|
|
-- (razonSocialComprador = nombre CLIPPED).
|
|
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,
|
|
pcodigodgii,
|
|
pncf,
|
|
recibo.comentario,
|
|
pdireccion,
|
|
direccion_sucursal,
|
|
rnccomprador,
|
|
descripcion,
|
|
ch_fecha,
|
|
ch_ncf,
|
|
mostrarQR,
|
|
desc_modificacion,
|
|
tasa,
|
|
num_doc_ref,
|
|
xorden,
|
|
xfactura,
|
|
ncffechaVencimiento
|
|
|
|
ON EVERY ROW
|
|
|
|
LET chbruto = simbolo CLIPPED, xvalor_bruto USING "<<<,<<<,<&&.##"
|
|
LET chdescuento = simbolo CLIPPED, xdescuento USING "<<<,<<<,<&&.##"
|
|
LET chsubtotal =
|
|
simbolo CLIPPED,
|
|
xvalor_bruto - xdescuento USING "<<<,<<<,<&&.##"
|
|
LET chitbis = simbolo CLIPPED, xitbis USING "<<<,<<<,<&&.##"
|
|
LET chneto = simbolo CLIPPED, xneto USING "<<<,<<<,<&&.##"
|
|
|
|
DISPLAY "antes ", xitbis
|
|
LET ditbis = xitbis * tasa
|
|
DISPLAY "despues ", ditbis, " tasa ", tasa
|
|
# LET monto_itbis = xitbis estaba antes
|
|
LET monto_itbis = ditbis
|
|
|
|
LET dtotal_monto = xsub_total * tasa
|
|
|
|
LET p_monto_Desc = xdescuento
|
|
LET total_monto = xneto * tasa
|
|
LET p_valor = xsub_total
|
|
|
|
IF monto_itbis < 0 THEN
|
|
LET monto_itbis = monto_itbis * -1
|
|
END IF
|
|
IF p_monto_Desc < 0 THEN
|
|
LET p_monto_Desc = p_monto_Desc * -1
|
|
END IF
|
|
|
|
IF arr_articulos.getLength() > 1 THEN
|
|
LET encabezado = 'SI'
|
|
|
|
FOR idx = 1 TO arr_articulos.getLength()
|
|
IF arr_articulos[idx].descrip_Esp IS NOT NULL THEN
|
|
LET articulos.cod_n = arr_articulos[idx].cod_n
|
|
LET articulos.cod_grupo = arr_articulos[idx].cod_grupo
|
|
LET articulos.cod_tipo = arr_articulos[idx].cod_tipo
|
|
LET articulos.cod_sec = arr_articulos[idx].cod_sec
|
|
LET articulos.descrip_Esp =
|
|
arr_articulos[idx].descrip_Esp
|
|
LET articulos.cantidad = arr_articulos[idx].cantidad_2
|
|
LET articulos.unidad_med = arr_articulos[idx].unidad_med
|
|
LET articulos.precio = arr_articulos[idx].precio * tasa
|
|
|
|
LET articulos.por_desc = arr_articulos[idx].por_desc
|
|
LET articulos.valor_desc =
|
|
arr_Articulos[idx].valor_desc * tasa
|
|
LET articulos.valor_itbis =
|
|
arr_articulos[idx].valor_itbis * tasa
|
|
LET articulos.valor =
|
|
(arr_articulos[idx].cantidad_2 * articulos.precio)
|
|
- articulos.valor_desc
|
|
DISPLAY "aqui se imprime ", ditbis
|
|
PRINTX articulos.cod_n,
|
|
articulos.cod_grupo,
|
|
articulos.cod_tipo,
|
|
articulos.cod_sec,
|
|
articulos.descrip_Esp,
|
|
articulos.cantidad,
|
|
articulos.unidad_med,
|
|
articulos.precio,
|
|
articulos.por_desc,
|
|
articulos.valor_desc,
|
|
articulos.valor_itbis,
|
|
articulos.valor,
|
|
ditbis,
|
|
chbruto,
|
|
chdescuento,
|
|
chsubtotal,
|
|
chitbis,
|
|
chneto,
|
|
total_monto
|
|
|
|
END IF
|
|
|
|
END FOR
|
|
ELSE
|
|
LET encabezado = "NO"
|
|
LET articulos.cod_n = 0
|
|
LET articulos.cod_grupo = 0
|
|
LET articulos.cod_tipo = 0
|
|
LET articulos.cod_sec = 0
|
|
LET articulos.descrip_Esp = "NO TIENE"
|
|
LET articulos.cantidad = 0
|
|
|
|
END IF
|
|
IF ditbis < 0 THEN
|
|
LET ditbis = ditbis * -1
|
|
END IF
|
|
LET documento_encabezado.montoTotal =
|
|
total_monto USING "<<<<<<<<<<<<&.##"
|
|
LET documento_encabezado.montoGravadoTotal =
|
|
p_valor * tasa USING "<<<<<<<<<<<<<&.##"
|
|
IF monto_itbis = 0 OR monto_itbis IS NULL THEN
|
|
LET documento_encabezado.montoGravadoI1 =
|
|
0 USING "<<<<<<<<<<<<<&.##"
|
|
ELSE
|
|
LET documento_encabezado.montoGravadoI1 =
|
|
p_valor * tasa USING "<<<<<<<<<<<<<&.##"
|
|
END IF
|
|
|
|
LET documento_encabezado.totalItbis =
|
|
monto_itbis USING "<<<<<<<<<<<<<&.##"
|
|
LET documento_encabezado.totalItbis1 =
|
|
monto_itbis USING "<<<<<<<<<<<<<&.##"
|
|
|
|
LET documento_encabezado.tipoIngreso = '01'
|
|
|
|
IF tipodocumento <> '3' THEN
|
|
LET documento_encabezado.rncComprador = rnccomprador CLIPPED
|
|
END IF
|
|
IF tipodocumento = '3' THEN
|
|
LET documento_encabezado.IdentificadorExtranjero =
|
|
rnccomprador CLIPPED
|
|
END IF
|
|
LET documento_encabezado.razonSocialComprador = p_nombre CLIPPED
|
|
LET documento_encabezado.codigoVendedor = p_cod_emp_sec
|
|
LET documento_encabezado.numeroFacturaInterna = p_aplica_a
|
|
|
|
LET documento_encabezado.fechaEmision =
|
|
p_fecha_orig
|
|
USING "dd-mm-yyyy" --Creo deberia usar getdate porque es una fecha diferente
|
|
{Si es un getdate entonces restar dias fecha emision de fecha_org, si es > 30 entonces llenar
|
|
IndicadorNotaCredito }
|
|
|
|
LET documento_encabezado.NCFmodificado = fcodigodgii CLIPPED
|
|
LET documento_encabezado.fechaNCFmodificado =
|
|
ffecha USING "dd-mm-yyyy"
|
|
LET documento_encabezado.codigoModificacion = idtipo
|
|
LET documento_encabezado.eNcf =
|
|
"E", codigodgii CLIPPED, kncf USING "&&&&&&&&&&"
|
|
LET documento_encabezado.nombreFile =
|
|
p_companias.rnc CLIPPED,
|
|
"E",
|
|
codigodgii CLIPPED,
|
|
kncf USING "&&&&&&&&&&",
|
|
".xml"
|
|
IF mostrarQR THEN
|
|
IF reimprime <> "SI" THEN
|
|
CALL generafile(
|
|
documento_encabezado.*,
|
|
documento_detalle,
|
|
codigo_sucursal,
|
|
codigo_sucursal,
|
|
'adicionar')
|
|
RETURNING xhash, respuesta, xfechaFirmadigital, codigo
|
|
DISPLAY "retorna desde EL NC: ", respuesta
|
|
|
|
CALL sus_caracter(xhash) RETURNING rhash
|
|
IF codigo = '200' THEN
|
|
TRY
|
|
CALL util.JSON.parse(respuesta, pok)
|
|
|
|
CATCH
|
|
LET pok.trackId = NULL
|
|
LET pok.mensaje = 'ERROR EN PARSE'
|
|
END TRY
|
|
END IF
|
|
|
|
UPDATE cctb00001
|
|
SET ultima_respuesta = respuesta,
|
|
hash = xhash,
|
|
fechaFirmadigital = xfechaFirmadigital,
|
|
cctb00001.trackid = pok.trackId
|
|
WHERE num_doc = p_num_doc AND tipo_doc = p_tipo_doc
|
|
END IF
|
|
LET chfechafirmadigital =
|
|
util.Datetime.format(
|
|
xfechafirmadigital, "%d-%m-%Y %H:%M:%S")
|
|
LET buf = base.StringBuffer.create()
|
|
CALL buf.append(chfechafirmadigital)
|
|
CALL buf.replace(' ', '%20', 1)
|
|
LET chfechafirmadigital = buf.toString()
|
|
|
|
-- El segmento de la URL del QR depende del ambiente DGII de la
|
|
-- empresa (companias.ambientedgii), asi no hay que cambiarlo a mano
|
|
-- entre test y produccion.
|
|
CASE
|
|
WHEN p_companias.ambientedgii CLIPPED = "produccion"
|
|
LET qrpath = "ecf"
|
|
WHEN p_companias.ambientedgii CLIPPED = "certificacion"
|
|
LET qrpath = "certecf"
|
|
OTHERWISE
|
|
LET qrpath = "testecf"
|
|
END CASE
|
|
|
|
LET dataqrcode =
|
|
'https://ecf.dgii.gov.do/', qrpath CLIPPED,
|
|
'/consultatimbre?rncemisor=',
|
|
p_companias.rnc CLIPPED,
|
|
"&rnccomprador=",
|
|
rnccomprador CLIPPED,
|
|
"&encf=",
|
|
qncf CLIPPED,
|
|
"&fechaemision=",
|
|
p_fecha_orig USING 'dd-mm-yyyy',
|
|
"&montototal=",
|
|
total_monto USING "<<<<<<<<#.##",
|
|
"&fechafirma=",
|
|
chfechafirmadigital,
|
|
"&codigoseguridad=",
|
|
rhash
|
|
END IF
|
|
PRINTX p_aplica_a,
|
|
p_monto_desc,
|
|
p_valor,
|
|
monto_itbis,
|
|
ncf_factura,
|
|
encabezado,
|
|
dtotal_monto,
|
|
dataqrcode,
|
|
xhash,
|
|
chfechafirmadigital
|
|
IF reimprime <> "SI" THEN
|
|
IF mostrarqr THEN
|
|
CALL ambiente() RETURNING ambiente
|
|
CALL procesoEncf(
|
|
' ', ambiente, ' ', 0, 0, 'consultatrackid', respuesta)
|
|
RETURNING phash, xrespuesta, codigo
|
|
|
|
DISPLAY "estado respuesta: ",
|
|
CURRENT,
|
|
xrespuesta,
|
|
" codigo: ",
|
|
codigo
|
|
|
|
TRY
|
|
|
|
CALL util.JSON.parse(xrespuesta, p)
|
|
CATCH
|
|
LET message_err = "Error JSON: ", STATUS
|
|
DISPLAY message_Err
|
|
END TRY
|
|
END IF
|
|
LET p.trackid = pok.trackId
|
|
# LET p.estado = p.estado
|
|
# LET p.secuenciaUtilizada = p1.secuenciaUtilizada
|
|
# LET p.encf = p1.encf
|
|
# LET p.mensajes[1].valor = p1.mensajes
|
|
|
|
IF p.estado = ' ' OR p.estado IS NULL THEN
|
|
LET p.estado = 'Rechazado'
|
|
END IF
|
|
|
|
DISPLAY BY NAME p.trackid
|
|
IF p.estado = 'Rechazado' THEN
|
|
DISPLAY BY NAME p.estado ATTRIBUTE(RED, REVERSE)
|
|
-- Arma el/los motivo(s) del rechazo que devuelve la DGII y los
|
|
-- muestra en el campo "mensajes" del form. Antes no se escribia
|
|
-- nada en ese campo (p.mensajes[] traia el detalle pero nunca
|
|
-- se desplegaba), por eso "no salia el mensaje".
|
|
LET bufmsg = base.StringBuffer.create()
|
|
FOR imsg = 1 TO p.mensajes.getLength()
|
|
IF p.mensajes[imsg].valor IS NOT NULL THEN
|
|
IF bufmsg.getLength() > 0 THEN
|
|
CALL bufmsg.append(" | ")
|
|
END IF
|
|
CALL bufmsg.append(p.mensajes[imsg].codigo CLIPPED)
|
|
CALL bufmsg.append(" - ")
|
|
CALL bufmsg.append(p.mensajes[imsg].valor CLIPPED)
|
|
END IF
|
|
END FOR
|
|
IF bufmsg.getLength() = 0 THEN
|
|
-- Si la DGII no desgloso mensajes, mostrar la respuesta cruda
|
|
CALL bufmsg.append(xrespuesta CLIPPED)
|
|
END IF
|
|
LET message_err = bufmsg.toString()
|
|
DISPLAY message_err TO mensajes
|
|
ELSE
|
|
DISPLAY BY NAME p.estado ATTRIBUTE(GREEN, REVERSE)
|
|
DISPLAY "" TO mensajes
|
|
END IF
|
|
|
|
UPDATE cctb00001
|
|
SET estado_dgii = p.estado
|
|
WHERE num_doc = p_num_doc AND tipo_doc = p_tipo_doc
|
|
END IF
|
|
AFTER GROUP OF p_sec_cliente
|
|
#IMAGEN
|
|
IF p_tipo_doc = "NC" THEN
|
|
LET vimagen = TRUE
|
|
LOCATE imagen IN MEMORY
|
|
|
|
SELECT a.firmafactura, a.nombre_file_firma
|
|
INTO imagen, nombre_file
|
|
FROM seg0001 a
|
|
WHERE a.usuario = usuarios
|
|
|
|
# LET filedestino = 'E:\\MARMOTECH\\test\\IMAGENES\\tmp\\',usuarios CLIPPED,nombre_file CLIPPED
|
|
LET filedestino =
|
|
'.\\IMAGENES\\tmp\\', usuarios CLIPPED, nombre_file CLIPPED
|
|
IF imagen IS NULL THEN
|
|
LET vimagen = FALSE
|
|
LET filedestino = '.\\IMAGENES\\tmp\\tmpdefault.png'
|
|
ELSE
|
|
CALL imagen.writeFile(filedestino)
|
|
CALL comprimeImagen(filedestino, ' -resize 200x200 ')
|
|
CALL imagen.readFile(filedestino)
|
|
END IF
|
|
ELSE
|
|
LET vimagen = FALSE
|
|
END IF
|
|
# BUSCA TIPO DE VENTAS
|
|
SELECT a.simbolo, a.descripcion_moneda
|
|
INTO psimbolo, pmoneda
|
|
FROM vetb00061 a, vetb00060 b
|
|
WHERE a.ventas = b.ventas AND b.tipo_cliente = p_tipo_cliente
|
|
|
|
LET descuento = xdescuento
|
|
|
|
PRINTX descuento, valor_letras, psimbolo, vimagen, imagen
|
|
|
|
ON LAST ROW
|
|
|
|
PRINTX p_comentario
|
|
CALL arr_articulos.clear()
|
|
|
|
END REPORT
|
|
|
|
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
|
|
FUNCTION calculo_nc(documento_alm, pcodigo_mov, tasa, ptipo)
|
|
DEFINE
|
|
j, xaplica, documento_alm, pcodigo_mov, ptipo INT,
|
|
sub_total, tasa, pdescuento DEC(18, 2),
|
|
dvalor_bruto,
|
|
ddescuento,
|
|
dsub_total,
|
|
ditbis,
|
|
dneto,
|
|
tvalor_bruto,
|
|
tdescuento,
|
|
tsub_total,
|
|
titbis,
|
|
tneto,
|
|
dprecio
|
|
DEC(18, 2)
|
|
OPEN WINDOW w1 WITH FORM "ccfmwd019"
|
|
|
|
LET ditbis = 0
|
|
LET dsub_total = 0
|
|
LET dvalor_bruto = 0
|
|
LET pdescuento = 0
|
|
LET sub_total = 0
|
|
|
|
IF hecha_aqui = "NO" OR hecha_aqui IS NULL THEN
|
|
DECLARE busca_nc11 CURSOR FOR
|
|
SELECT '1',
|
|
a.cod_n,
|
|
a.cod_grupo,
|
|
a.cod_tipo,
|
|
a.cod_sec,
|
|
b.cantidad,
|
|
a.descrip_esp,
|
|
a.unidad_med,
|
|
b.precio,
|
|
b.porc_desc,
|
|
b.descuento,
|
|
ISNULL(b.itbis, 0),
|
|
a.tipoproducto
|
|
FROM iptb00002 a, cctb00010 b
|
|
WHERE b.num_doc_almacen = documento_alm
|
|
AND b.cod_mov = p_tipo_doc
|
|
AND a.cod_n = b.cod_n
|
|
AND a.cod_grupo = b.cod_grupo
|
|
AND a.cod_tipo = b.cod_tipo
|
|
AND a.cod_sec = b.cod_sec
|
|
LET j = 1
|
|
|
|
FOREACH busca_nc11 INTO arr_articulos[j].*
|
|
IF arr_articulos[j].precio > 0 THEN
|
|
CALL calculos()
|
|
RETURNING tvalor_bruto,
|
|
tdescuento,
|
|
tsub_total,
|
|
titbis,
|
|
tneto
|
|
LET xitbis = titbis
|
|
LET xsub_total = tsub_total
|
|
LET j = j + 1
|
|
END IF
|
|
|
|
END FOREACH
|
|
ELSE
|
|
IF documento_alm > 0 THEN
|
|
DECLARE busca_nd11 CURSOR FOR
|
|
SELECT b.area,
|
|
a.cod_n,
|
|
a.cod_grupo,
|
|
a.cod_tipo,
|
|
a.cod_sec,
|
|
d.cantidad_1,
|
|
d.cantidad_2,
|
|
a.descrip_esp,
|
|
a.unidad_med,
|
|
b.precio,
|
|
b.cantidad_2,
|
|
b.valor_desc,
|
|
b.itbis,
|
|
b.valor,
|
|
a.tipoproducto
|
|
FROM iptb00002 a, vetb00003 b, vetb00002 c, iptb00006 d
|
|
WHERE b.factura = xfactura
|
|
AND b.factura = c.factura
|
|
AND ( b.sucid = c.sucid OR b.sucid IS NULL OR c.sucid IS NULL OR b.sucid = 0 OR c.sucid = 0 )
|
|
AND a.cod_n = b.cod_n
|
|
AND a.cod_grupo = b.cod_grupo
|
|
AND a.cod_tipo = b.cod_tipo
|
|
AND a.cod_sec = b.cod_sec
|
|
-- El area a veces viene y a veces no. Se tolera el area
|
|
-- ausente (NULL/0) en cualquiera de los dos lados para no
|
|
-- perder el producto; si ambos la traen, se cruza por area.
|
|
AND ( b.area = d.area
|
|
OR b.area IS NULL OR d.area IS NULL
|
|
OR b.area = 0 OR d.area = 0 )
|
|
AND d.num_Doc = documento_alm
|
|
AND d.cod_mov = pcodigo_mov
|
|
AND a.cod_n = d.cod_n
|
|
AND a.cod_grupo = d.cod_grupo
|
|
AND a.cod_tipo = d.cod_tipo
|
|
AND a.cod_sec = d.cod_sec
|
|
AND b.factura = CAST(d.fact_no AS INT)
|
|
LET j = 1
|
|
|
|
FOREACH busca_nd11 INTO arr_articulos[j].*
|
|
IF arr_articulos[j].precio > 0 THEN
|
|
CALL calculos()
|
|
RETURNING tvalor_bruto,
|
|
tdescuento,
|
|
tsub_total,
|
|
titbis,
|
|
tneto
|
|
LET j = j + 1
|
|
END IF
|
|
|
|
END FOREACH
|
|
DISPLAY BY NAME tvalor_bruto, tdescuento, tsub_total, titbis, tneto
|
|
DISPLAY ARRAY arr_articulos TO sproductos.*
|
|
BEFORE DISPLAY
|
|
DISPLAY BY NAME tvalor_bruto,
|
|
tdescuento,
|
|
tsub_total,
|
|
titbis,
|
|
tneto
|
|
AFTER DISPLAY
|
|
LET xitbis = titbis
|
|
LET xsub_total = tsub_total
|
|
EXIT DISPLAY
|
|
END DISPLAY
|
|
ELSE
|
|
LET selec =
|
|
"SELECT TOP 1 b.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.cantidad,b.cantidad,a.descrip_esp,
|
|
a.unidad_med,b.precio,b.cantidad_2,
|
|
b.valor_desc,b.itbis,b.valor,a.tipoproducto
|
|
FROM iptb00002 a,vetb00003 b,vetb00002 c
|
|
WHERE b.factura =",
|
|
xfactura,
|
|
" AND b.factura = c.factura AND
|
|
( b.sucid = c.sucid OR b.sucid IS NULL OR c.sucid IS NULL OR b.sucid = 0 OR c.sucid = 0 ) AND
|
|
a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND
|
|
a.cod_sec = b.cod_sec
|
|
"
|
|
PREPARE bcomando FROM selec
|
|
DECLARE busca_nd111 CURSOR FOR bcomando
|
|
|
|
LET j = 1
|
|
|
|
FOREACH busca_nd111 INTO arr_articulos[j].*
|
|
IF arr_articulos[j].precio > 0 THEN
|
|
CALL calculos()
|
|
RETURNING tvalor_bruto,
|
|
tdescuento,
|
|
tsub_total,
|
|
titbis,
|
|
tneto
|
|
LET j = j + 1
|
|
END IF
|
|
|
|
END FOREACH
|
|
IF j = 1 THEN
|
|
CALL fgl_winmessage("NOTA",
|
|
"No se encontraron productos con precio en la factura indicada.\nVerifique el numero de factura y su localidad.",
|
|
"exclamation")
|
|
END IF
|
|
DISPLAY BY NAME tvalor_bruto, tdescuento, tsub_total, titbis, tneto
|
|
INPUT ARRAY arr_articulos
|
|
FROM sproductos.*
|
|
ATTRIBUTE(WITHOUT DEFAULTS)
|
|
|
|
AFTER ROW
|
|
CALL calculos()
|
|
RETURNING tvalor_bruto,
|
|
tdescuento,
|
|
tsub_total,
|
|
titbis,
|
|
tneto
|
|
LET xitbis = titbis
|
|
LET xsub_total = tsub_total
|
|
DISPLAY BY NAME tvalor_bruto,
|
|
tdescuento,
|
|
tsub_total,
|
|
titbis,
|
|
tneto
|
|
AFTER INPUT
|
|
IF int_flag THEN
|
|
CALL msg(16)
|
|
|
|
LET tvalor_bruto = 0
|
|
LET tdescuento = 0
|
|
LET tsub_total = 0
|
|
LET titbis = 0
|
|
LET tneto = 0
|
|
EXIT INPUT
|
|
END IF
|
|
CALL calculos()
|
|
RETURNING tvalor_bruto,
|
|
tdescuento,
|
|
tsub_total,
|
|
titbis,
|
|
tneto
|
|
LET xitbis = titbis
|
|
LET xsub_total = tsub_total
|
|
DISPLAY BY NAME tvalor_bruto,
|
|
tdescuento,
|
|
tsub_total,
|
|
titbis,
|
|
tneto
|
|
EXIT INPUT
|
|
END INPUT
|
|
END IF
|
|
END IF
|
|
|
|
CLOSE WINDOW w1
|
|
IF int_flag THEN
|
|
LET int_flag = FALSE
|
|
END IF
|
|
RETURN tvalor_bruto, tdescuento, tsub_total, titbis, tneto
|
|
END FUNCTION
|
|
FUNCTION calculos()
|
|
DEFINE dvalor_bruto,
|
|
ddescuento,
|
|
dprecio,
|
|
dsub_total,
|
|
ditbis,
|
|
dneto,
|
|
tvalor_bruto,
|
|
tdescuento,
|
|
tsub_total,
|
|
titbis,
|
|
tneto,
|
|
ldesc
|
|
DEC(12, 2)
|
|
|
|
IF recibo.tipo_doc = 'NC' THEN
|
|
LET documento_encabezado.IndicadorNotaCredito = '0' USING "&"
|
|
ELSE
|
|
LET documento_encabezado.IndicadorNotaCredito = NULL
|
|
END IF
|
|
|
|
IF ptipo_nc = '01' THEN
|
|
SELECT a.itbi INTO pitbis FROM vetb00019 a WHERE a.disponible = "S"
|
|
|
|
LET documento_encabezado.indicadorMontoGravado = '1'
|
|
ELSE
|
|
LET documento_encabezado.indicadorMontoGravado = '0' USING "&"
|
|
END IF
|
|
IF recibo.tipo_doc = 'ND' THEN
|
|
LET documento_encabezado.indicadorMontoGravado = '0' USING "&"
|
|
END IF
|
|
IF pitbis IS NULL THEN
|
|
LET pitbis = 0
|
|
END IF
|
|
|
|
LET documento_encabezado.itbis1 = pitbis USING "&&"
|
|
|
|
LET ldesc = 0
|
|
LET tvalor_bruto = 0
|
|
LET tdescuento = 0
|
|
LET tsub_total = 0
|
|
LET titbis = 0
|
|
LET tneto = 0
|
|
LET ditbis = 0
|
|
LET dsub_total = 0
|
|
LET dvalor_bruto = 0
|
|
LET dias = recibo.fecha_orig - ffecha
|
|
DISPLAY "dias ", dias, " tipos nc ", ptipo_nc
|
|
FOR idx = 1 TO arr_articulos.getLength()
|
|
IF arr_articulos[idx].precio > 0 THEN
|
|
|
|
LET ditbis = 0
|
|
LET dvalor_bruto =
|
|
arr_articulos[idx].precio * arr_articulos[idx].cantidad_2
|
|
LET ddescuento = dvalor_bruto * (arr_articulos[idx].por_desc / 100)
|
|
LET dprecio =
|
|
(arr_articulos[idx].precio * arr_articulos[idx].cantidad_2)
|
|
LET dsub_total = dvalor_bruto - ddescuento
|
|
|
|
IF dias > 30 THEN
|
|
LET ditbis = 0
|
|
LET documento_encabezado.indicadorMontoGravado = '0' USING "&"
|
|
IF recibo.tipo_doc = 'NC' THEN
|
|
LET documento_encabezado.IndicadorNotaCredito = '1'
|
|
ELSE
|
|
LET documento_encabezado.IndicadorNotaCredito = NULL
|
|
END IF
|
|
LET documento_encabezado.itbis3 = '0' USING "&&"
|
|
LET documento_encabezado.montoGravadoI3 =
|
|
0 USING "<<<<<<<<<<<<<<.##"
|
|
LET documento_encabezado.totalItbis3 = '00' USING "&&"
|
|
ELSE
|
|
IF ptipo_nc = '01' THEN
|
|
|
|
LET ditbis = dsub_total * (pitbis / 100)
|
|
LET arr_articulos[idx].valor_itbis = ditbis
|
|
|
|
LET ditbis = arr_articulos[idx].valor_itbis
|
|
LET documento_encabezado.indicadorMontoGravado = '1'
|
|
ELSE
|
|
|
|
LET documento_encabezado.itbis3 = '0' USING "&&"
|
|
LET documento_encabezado.montoGravadoI3 =
|
|
0 USING "<<<<<<<<<<<<<<.##"
|
|
LET documento_encabezado.totalItbis3 =
|
|
0 USING "<<<<<<<<<<<<<<.##"
|
|
END IF
|
|
END IF
|
|
|
|
LET dneto = dsub_total
|
|
LET ldesc =
|
|
arr_articulos[idx].precio * (arr_articulos[idx].por_desc / 100)
|
|
|
|
LET arr_articulos[idx].valor_desc = ddescuento
|
|
LET arr_articulos[idx].valor_itbis = ditbis
|
|
LET arr_articulos[idx].valor = dneto
|
|
|
|
LET documento_detalle[idx].DescripcionItem = NULL
|
|
LET documento_detalle[idx].cantidadItem =
|
|
arr_articulos[idx].cantidad_2 USING "<<<<<<<<<<<<<&.##"
|
|
LET documento_detalle[idx].indicadorFacturacion = '1' USING "&"
|
|
LET documento_detalle[idx].precioUnitarioItem =
|
|
(arr_articulos[idx].valor / arr_articulos[idx].cantidad_2)
|
|
* tasa
|
|
USING "<<<<<<<<<<<&.####"
|
|
#(dneto* tasa)/ arr_articulos[idx].cantidad_2 USING "<<<<<<<<<<<&.##"
|
|
LET documento_detalle[idx].montoItem =
|
|
dneto * tasa USING "<<<<<<<<<<<<<&.##"
|
|
|
|
LET documento_detalle[idx].nombreItem =
|
|
arr_articulos[idx]
|
|
.descrip_Esp CLIPPED --Tengo la descripcion pero no el nombre del producto
|
|
LET documento_detalle[idx].indicadorBienoServicio =
|
|
arr_articulos[idx]
|
|
.id_tipo --el generafile llena este campo, pero no estoy convencido
|
|
|
|
DISPLAY "DITBIS ", ditbis, " s ", dsub_total, " v ", idx
|
|
|
|
LET dneto = dsub_total + ditbis
|
|
LET ldesc = 0
|
|
LET tvalor_bruto = tvalor_bruto + dvalor_bruto
|
|
LET tdescuento = tdescuento + ddescuento
|
|
LET tsub_total = tsub_total + dsub_total
|
|
LET titbis = titbis + ditbis
|
|
LET tneto = tneto + dneto
|
|
END IF
|
|
END FOR
|
|
LET monto_efectivo = tvalor_bruto
|
|
RETURN tvalor_bruto, tdescuento, tsub_total, titbis, tneto
|
|
END FUNCTION
|