Files
MBS/PROYECTO/cgdir/edprrp116.4gl
T

474 lines
19 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : EDPRRP116
OBJETIVO : Listar las Entrada de Diario Cobros Clientes INTERNACIONALES US$
Ingresos
PROGRAMADOR : JUAN SOTO
FECHA REALIZACION : Septiembre 11, 2004
-------------------------------------------------------------------------------
}
SCHEMA smarmotech
GLOBALS
"cgprgb000.4gl"
DEFINE nombre_cta,detalle_ent,nombrecia VARCHAR(100),
afecta_act VARCHAR(2)
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CONNECT to "smarmotech" USER usuarios USING clave
SELECT a.nombre INTO nombrecia FROM companias a
CALL edprrp116()
END MAIN
FUNCTION edprrp116()
DEFINE diario1 RECORD
valor DECIMAL(10,2),
monto_desc DECIMAL(10,2),
cuenta_no_ingresos VARCHAR(10),
cuenta_no_prima_ingresos,cuenta_no_ventas,cuenta_no_prima VARCHAR(10),
departamento INT,
tasa DEC(10,2)
END RECORD,
p_cctb01 RECORD LIKE cctb00001.*,
mes,ano INT
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
##### Abriendo y desplegando el formulario de captura de datos
OPEN FORM edfmrp115 FROM "edfmrp116"
DISPLAY FORM edfmrp115
###### Aceptando los valores para el rango de fecha
INPUT BY NAME ventas,fecha1,fecha2,entra,afecta_act,detalle_ent WITHOUT DEFAULTS
BEFORE INPUT
LET pventas = ui.combobox.forname("formonly.ventas")
CALL cventas()
LET mes = MONTH(TODAY)-1
IF mes = 0 THEN
LET mes = 12
LET ano = YEAR(TODAY) - 1
LET fecha1 = MDY(mes,1,ano)
LET fecha2 = MDY(1,1,ano+1) - 1
ELSE
LET ano = YEAR(TODAY)
LET fecha1 = MDY(mes,1,ano)
LET fecha2 = MDY(mes+1,1,ano)-1
END IF
DISPLAY BY NAME fecha1,fecha2
BEFORE FIELD entra
CALL controlNumericoED(24,fecha2, NULL) RETURNING entra
DISPLAY "entrada: ",entra
DISPLAY BY NAME entra,ventas
AFTER FIELD fecha1
IF fecha1 IS NULL THEN
ERROR "(16) CAMPO EN BLANCO"
NEXT FIELD fecha1
END IF
IF fecha1 <= p_fecha THEN
ERROR "(179) EXISTE ENTRADA DE DIARIO CON ESA FECHA"
NEXT FIELD fecha1
END IF
AFTER FIELD fecha2
IF fecha2 is null THEN
ERROR "(16) CAMPO EN BLANCO"
NEXT FIELD fecha2
END IF
IF fecha1 > fecha2 THEN
ERROR "(149) FECHA NO PUEDE SER MAYOR QUE LA ANTERIOR"
NEXT FIELD fecha1
END IF
AFTER FIELD entra
SELECT UNIQUE CONVERT(varchar(10),a.fecha,103),a.ref INTO fecha2,entra
FROM cgtb00004 a WHERE a.ref = entra
IF status != NOTFOUND THEN
DISPLAY BY NAME fecha2
LET numero_msg = 12
CALL msg(numero_msg)
# CALL controlNumericoED(15,fecha2, NULL) RETURNING entra
NEXT FIELD fecha1
END IF
DISPLAY BY NAME entra
###### Selecionando en rango de fecha de la tabla de periodo para el fecha2
AFTER INPUT
IF INT_FLAG THEN
ERROR "OPERACION CANCELADA"
LET INT_FLAG = FALSE
RETURN
END IF
IF afecta_act = 'SI' THEN
SELECT UNIQUE a.ref FROM cgtb00004 a where a.ref = entra
IF STATUS != NOTFOUND THEN
ERROR "(12) REGISTRO EXISTE"
NEXT FIELD fecha2
END IF
END IF
{ IF ventas = 1 THEN
ERROR "NO PUEDES GENERAR ENTRADA DE VENTAS LOCALES EN ESTE PROGRAMA"
NEXT FIELD ventas
END IF}
END INPUT
##### Creando la facilidad para cancelar proceso con DELETE O SUPR
IF int_flag THEN
ERROR "(2) OPERACION CANCELADA"
LET int_flag = false
RETURN
END IF
CALL seleccionarsalida() RETURNING r_output
CALL configureOutput(r_output) RETURNING handler
START REPORT entrada14 TO XML HANDLER handler
# Busca la informacion requerida
LET tasa = tasa -1
DECLARE buscar CURSOR FOR
SELECT a.num_doc,a.aplica_a,a.tipo_doc,ISNULL(a.valor,0),ISNULL(a.monto_desc,0),b.cuenta_no_ingresos,
b.cuenta_no_prima_ingresos,b.cuenta_no_ventas,
b.cuenta_no_prima,b.departamento, c.tasa
FROM cctb00001 a,vetb00060 b,cgtb00084 c
WHERE a.status_t IS NULL AND (a.tipo_doc IN ("AV")) AND
a.tipo_cliente = b.tipo_cliente AND a.num_doc = a.aplica_a AND
b.ventas =ventas AND
b.tipo_cliente = c.tipo_cliente AND
c.ano = YEAR(fecha1) AND c.mes = MONTH(fecha2) AND
a.fecha_orig BETWEEN fecha1 AND fecha2
AND referenciaEntrada IS NULL
UNION
SELECT a.num_Doc,a.aplica_a,a.tipo_doc,ISNULL(a.valor,0),ISNULL(a.monto_desc,0),b.cuenta_no_ingresos,
b.cuenta_no_prima_ingresos,b.cuenta_no_ventas,b.cuenta_no_prima,
b.departamento,c.tasa
FROM cctb00001 a,vetb00060 b,cgtb00084 c
WHERE a.status_t IS NULL AND (a.tipo_doc IN ("PG","PC")) AND
a.tipo_cliente = b.tipo_cliente AND
b.ventas =ventas AND
b.tipo_cliente = c.tipo_cliente AND
c.ano = YEAR(fecha1) AND c.mes = MONTH(fecha2) AND
a.fecha_orig BETWEEN fecha1 AND fecha2
AND referenciaEntrada IS NULL
DISPLAY "<< Buscando Informacion ... Espere Por Favor. >>" AT 19,14
ATTRIBUTE (REVERSE,BOLD)
OPEN buscar
##### Envia la Informacion al printer de contabilidad
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
AT 19,14 ATTRIBUTE (REVERSE)
DELETE FROM tmpcobros
##### Loop para enviar informacion al reporte
DISPLAY "parametros ",ventas," ",fecha1, " ",fecha2," "
FOREACH buscar INTO p_cctb01.num_doc,p_cctb01.aplica_a, p_cctb01.tipo_doc,p_cctb01.valor,p_cctb01.monto_desc,diario1.cuenta_no_ingresos,diario1.cuenta_no_prima_ingresos,
diario1.cuenta_no_ventas,diario1.cuenta_no_prima, diario1.departamento, tasa
IF p_cctb01.monto_desc is null THEN
LET p_cctb01.monto_desc = 0
END IF
IF p_cctb01.valor is null THEN
LET p_cctb01.valor = 0
END IF
IF p_cctb01.valor < 0 THEN
LET p_cctb01.valor = p_cctb01.valor *-1
END IF
IF tasa > 1 THEN
LET tasa = tasa - 1
END IF
IF p_cctb01.monto_desc < 0 THEN
LET p_cctb01.monto_desc = p_cctb01.monto_desc *-1
END IF
INSERT INTO tmpcobros VALUES (p_cctb01.tipo_doc,p_cctb01.num_Doc,p_cctb01.aplica_a, p_cctb01.valor,p_cctb01.monto_desc)
OUTPUT TO REPORT entrada14(p_cctb01.tipo_doc,p_cctb01.valor,p_cctb01.monto_desc,
diario1.cuenta_no_ingresos,diario1.cuenta_no_prima_ingresos,
diario1.cuenta_no_ventas,diario1.cuenta_no_prima,diario1.departamento, tasa,
p_cctb01.num_doc,p_cctb01.tipo_doc)
END FOREACH
FINISH REPORT entrada14
END FUNCTION
#### Funcion para dar salida ordenada a la informacion requerida de
#### una entrada de diario de nominas local
REPORT entrada14(x,xcuenta_no_ingreso,xcuenta_no_prima_ingresos,xcuenta_no_ventas,
xcuenta_no_prima,xdepartamento,xtasa,pnumdoc,xtipodoc)
DEFINE x RECORD
tipo_doc VARCHAR(2),
valor,monto_desc DEC(12,2)
END RECORD,
LJ SMALLINT,
xcuenta_no_ingreso,xcuenta_no_prima_ingresos,xcuenta_no_ventas,xcuenta_no_prima VARCHAR(8),
xdepartamento,xdeptoAct,pnumdoc INT,
tienedepto CHAR(1),
xtipodoc CHAR(2),
ventasDescripcion VARCHAR(50)
### Acumula los valores de las diferentes cuentas para entrada diario de nomina
DEFINE debito,credito,xtasa DECIMAL(12,2),
xtipoClientes VARCHAR(50),
total1,total2,total4 DECIMAL(12,2),
{ doble_on CHAR(2),
doble_off CHAR(2),
negrillas_on CHAR(6),
negrillas_off CHAR(6),
comp_off CHAR(2) ,
} hora CHAR(5),
entrada CHAR(25),
tcredito,tdebito DEC(12,2)
OUTPUT
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 2
FORMAT
PAGE HEADER
{ LET negrillas_on = ASCII 27, ASCII 69
LET negrillas_off = ASCII 27, ASCII 70
LET comp_on = ASCII 15
LET comp_off = ASCII 18
LET normal = ASCII 27, ASCII 80}
LET hora = time
##### Selecionado la descripcion del fecha2
LET lj = (80 - LENGTH(nombrecia CLIPPED))/2
PRINT COLUMN 1, comp_off
PRINT COLUMN 1,"edprrp116",
COLUMN lj, nombrecia CLIPPED,
COLUMN 73, " Pag. ",pageno using "###"
PRINT COLUMN 28, "Sistema de Contabilidad",
COLUMN 73, today using "dd/mm/yy"
SELECT a.descripcion INTO ventasDescripcion
FROM vetb00061 a WHERE a.ventas = ventas
PRINT COLUMN 30,
ventasDescripcion CLIPPED,
COLUMN 76, hora
{ IF ventas = 2 OR ventas = 4 THEN
PRINT COLUMN 15,
"Entrada de Diario Cobros Clientes INTERNACIONALES USD$",
COLUMN 76, hora
ELSE
IF ventas = 1 THEN
PRINT COLUMN 15, "Entrada de Diario Cobros Clientes LOCALES",
COLUMN 76, hora
ELSE
IF ventas = 3 THEN
PRINT COLUMN 15, "Entrada de Diario Cobros Clientes LOCALES USD$",
COLUMN 76, hora
END IF
END IF
END IF
} PRINT COLUMN 28, "Del ",fecha1 USING "dd/mm/yy", " Al ",fecha2
USING "dd/mm/yy"
# , negrillas_off
SKIP 1 LINE
PRINT COLUMN 01,"Entrada de Diario No.",
doble_on,entra,doble_off
SELECT a.descripcion INTO xtipoClientes FROM vetb00061 a WHERE a.ventas = ventas
PRINT COLUMN 1,
"Observaciones:",detalle_ent CLIPPED," ",xtipoClientes
PRINT COLUMN 1,
" _____________________________________"
PRINT COLUMN 1, "----------------------------------------",
"----------------------------------------"
PRINT COLUMN 2, "Cuenta ",
COLUMN 11, "Dpto",
COLUMN 18, "Concepto",
COLUMN 56, "Debe",
COLUMN 71, "Haber"
PRINT COLUMN 1, "----------------------------------------",
"----------------------------------------"
SKIP 1 LINE
ON EVERY ROW
IF afecta_act = "SI" THEN
UPDATE cctb00001 SET referenciaEntrada = entra,us_mod = usuarios,fech_mod = getdate()
WHERE num_Doc = pnumdoc AND tipo_doc = xtipodoc
END IF
IF debito is null THEN
LET debito = 0
END IF
IF credito is null THEN
LET credito = 0
END IF
IF total1 IS NULL THEN
LET total1 = 0
END IF
IF total2 IS NULL THEN
LET total2 = 0
END IF
IF total4 IS NULL THEN
LET total4 = 0
END IF
LET total1 = total1 + x.valor
LET total2 = total2 + x.monto_desc
LET debito = debito + x.valor
LET tdebito = 0
LET tcredito = 0
ON LAST ROW
LET nombre_cta = NULL
SELECT a.descripcion,ISNULL(a.depto,'N') INTO nombre_cta,tienedepto FROM cgtb00001 a
WHERE a.cuenta_no = xcuenta_no_ingreso
IF nombre_cta IS NULL THEN
LET nombre_cta = "CUENTA SIN DESCRIPCION"
END IF
# IF tienedepto ='N' THEN
# LET xdepartamento = NULL
# END IF
LET debito = 0
LET debito = SUM(x.valor+x.monto_desc)
IF debito IS NULL THEN
LET debito = 0
END IF
LET xdeptoAct = null
PRINT COLUMN 2, xcuenta_no_ingreso;
IF tienedepto = 'S' THEN
LET xdeptoAct = xdepartamento
PRINT 2 SPACES, xdepartamento USING "<<<<<";
END IF
PRINT COLUMN 18, nombre_cta CLIPPED,
COLUMN 50, debito using "###,###,##&.&&"
BEGIN WORK
IF afecta_act = "SI" THEN
CALL controlNumericoED(15,fecha2, usuarios) RETURNING entra
DISPLAY "entrada real: ", entra
DISPLAY BY NAME entra
INSERT INTO cgtb00004
(fecha,tipo,ref, cuenta_no, detalle_1, departamento, debito,credito,us_crea,fech_crea)
VALUES(fecha2,1, entra,xcuenta_no_ingreso,detalle_ent, xdeptoAct, debito,0, usuarios,GETDATE())
END IF
LET tdebito = tdebito + debito
IF xcuenta_no_prima_ingresos IS NOT NULL THEN
SELECT descripcion INTO nombre_cta FROM cgtb00001
WHERE cuenta_no = xcuenta_no_prima_ingresos
PRINT COLUMN 2, xcuenta_no_prima_ingresos,
COLUMN 18, nombre_cta CLIPPED,
COLUMN 50, debito*tasa using "###,###,##&.&&"
IF afecta_act = "SI" THEN
INSERT INTO cgtb00004
(fecha,tipo,ref, cuenta_no, detalle_1,debito, credito,us_crea, fech_crea)
VALUES(fecha2,1, entra,xcuenta_no_prima_ingresos,detalle1, debito*xtasa,0, usuarios,GETDATE())
END IF
LET tdebito = tdebito + debito*tasa
END IF
LET nombre_cta = NULL
SELECT a.descripcion,ISNULL(a.depto,'N') INTO nombre_cta, tienedepto FROM cgtb00001 a
WHERE a.cuenta_no = xcuenta_no_ventas
IF nombre_cta IS NULL THEN
LET nombre_cta = "CUENTA SIN DESCRIPCION"
END IF
# IF tienedepto ='N' THEN
# LET xdepartamento = NULL
# END IF
LET xdeptoAct = null
PRINT COLUMN 2, xcuenta_no_ventas;
IF tienedepto = 'S' THEN
LET xdeptoAct = xdepartamento
PRINT 2 SPACES, xdepartamento USING "<<<<<";
END IF
PRINT COLUMN 18, nombre_cta CLIPPED,
COLUMN 65, debito using "###,###,##&.&&"
IF afecta_act = "SI" THEN
INSERT INTO cgtb00004
(fecha,tipo,ref, cuenta_no, detalle_1, departamento, debito,credito, us_crea, fech_crea)
VALUES(fecha2,1, entra,xcuenta_no_ventas,detalle_ent, xdeptoAct, 0, debito,usuarios,GETDATE())
END IF
LET tcredito = tcredito + debito
IF xcuenta_no_prima IS NOT NULL THEN
LET nombre_cta = NULL
SELECT descripcion INTO nombre_cta FROM cgtb00001
WHERE cuenta_no = xcuenta_no_prima
IF nombre_cta IS NULL THEN
LET nombre_cta = "CUENTA SIN DESCRIPCION"
END IF
PRINT COLUMN 2, xcuenta_no_prima,
COLUMN 18, nombre_cta CLIPPED,
COLUMN 65, debito*tasa using "###,###,##&.&&"
IF afecta_act = "SI" THEN
INSERT INTO cgtb00004
(fecha,tipo,ref, cuenta_no, detalle_1,debito,credito, us_crea, fech_crea)
VALUES(fecha2,1, entra, xcuenta_no_prima,detalle_ent, 0, debito*tasa,usuarios,GETDATE())
END IF
LET tcredito = tcredito + debito*tasa
END IF
COMMIT WORK
###### Imprime total DEBITO y total CREDITO
SKIP 1 LINE
PRINT COLUMN 50,"--------------",
COLUMN 65,"--------------"
PRINT COLUMN 35,"Totales-->",
COLUMN 50,tdebito USING "###,###,##&.&&",
COLUMN 65,tcredito USING "###,###,##&.&&"
SKIP 2 LINE
PRINT COLUMN 1, detalle_ent
SKIP 30 LINE
PRINT COLUMN 10,"--------------",
COLUMN 35,"--------------",
COLUMN 60,"--------------"
PRINT COLUMN 10,"PREPARADO POR",
COLUMN 35," REVISADO POR ",
COLUMN 60,"AUTORIZADO POR"
SKIP 4 LINE
END REPORT