Files
DECOMARMOL/PROYECTO/ccdir/ccprmt001.4gl.bak_emisordgii_20261011

6175 lines
223 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
CALL ccprmt001()
END MAIN
####### Funcion para agregar un recibo de pago
FUNCTION ccprmt001()
OPTIONS FORM LINE 8, ERROR LINE 24, COMMENT LINE 22, PROMPT LINE 23
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")
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 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
IF 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
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 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
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