Files
MBS/PROYECTO/vedir/PUNTOVENTAS/veprmt022.4gl
T

856 lines
32 KiB
Plaintext

{
======================================================================
PROGRAMA : veprmt022
OBJETIVO : Administrar facturacion (PUNTO VENTAS CAFETERIA)
PROGRAMADOR : ING. JUAN SOTO
FECHA CREACION : 23/4/2014
======================================================================
}
SCHEMA smarmotech
GLOBALS
DEFINE usuarios,clave CHAR(80),
p_companias RECORD LIKE companias.*,
estado,guarde,pcredito VARCHAR(3),
hora CHAR(16),
nombre_cia VARCHAR(60),
limite_cr,balance DEC(12,2),
ruta_foto STRING
DEFINE encabezado RECORD
factura_no INT,
fecha_factura DATE,
cond_pago SMALLINT,
codigo_id INT,
nombre_cliente VARCHAR(90),
bruto DEC(12,2),
descuento DEC(12,2),
itbis DEC(12,2),
sub_total DEC(12,2),
neto DEC(12,2),
estado VARCHAR(30)
END RECORD
DEFINE detalle DYNAMIC ARRAY OF RECORD
codigo_prod CHAR(25),
descripcion VARCHAR(80),
cantidad DEC(12,2),
precio DEC(12,2),
ddescuento DEC(12,2),
valor_desc DEC(12,2),
pitbis DEC(12,2),
valor_itbis DEC(12,2),
valor DEC(12,2)
END RECORD,
idx,scr_l,idx1,Pdepartamento SMALLINT,
pfecha,fecha1,fecha2 DATE,
foto_empleado BYTE
DEFINE handler om.SaxDocumentHandler, -- return value from fgl_report_commitCurrentSettings()
r_filename STRING, -- filename of Report Design Document including .4rp extension
r_output STRING, -- output format option
preview INTEGER -- TRUE/FALSE, to set preview option
END GLOBALS
MAIN
DEFINE selec1 VARCHAR(200),
dias_credito SMALLINT
DEFER INTERRUPT
CALL STARTLOG("veprmt22.log")
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
LET usuarios = 'ptventas'
LET clave = 'Cafeteria'
CONNECT to "smarmotech" USER usuarios USING clave
LET selec1 = "SELECT a.nombre,a.limite_credito,a.dias_credito from puntoventas.dbo.companias a where a.cod_cia = 1"
PREPARE ciacomando FROM selec1
EXECUTE ciacomando INTO nombre_Cia,limite_cr,dias_credito
SELECT CONVERT(CHAR(10),MAX(a.fecha_cierre_nomina),103) INTO pfecha FROM notb00010 a
WHERE a.fecha_cierre_nomina < today
IF pfecha IS NULL THEN
CALL fgl_Winmessage("ERROR","NO PUEDES REALIZAR FACTURAS, NO EXISTE FECHA CIERRE NOMINA","INFO")
EXIT PROGRAM
END IF
SELECT CONVERT(char(10),MIN(a.fecha_cierre_nomina),103) INTO fecha1 FROM notb00010 a
WHERE a.fecha_cierre_nomina > pfecha
LET pfecha = pfecha + 1
CALL veprmt022()
END MAIN
FUNCTION veprmt022()
OPEN WINDOW fw1 WITH FORM "vepfmmt001"
DISPLAY BY NAME limite_cr,nombre_cia,pfecha,fecha1
MENU
ON ACTION nuevo
LET estado = "N"
CALL veprmtad22()
ON ACTION buscar
LET estado = "M"
CALL veprmtad22()
ON ACTION listado
CALL relacion()
ON ACTION salir
EXIT MENU
EXIT PROGRAM
END MENU
CLOSE WINDOW fw1
END FUNCTION
FUNCTION veprmtad22()
DEFINE nom1_emp,nom2_emp,apell1_emp,apell2_emp VARCHAR(30),
respuesta CHAR(3),
selec1,insert1 CHAR(500),
Pnivel_emp,Pcod_puesto INT,
ptipo CHAR(1)
DIALOG ATTRIBUTE (FIELD ORDER FORM, UNBUFFERED)
INPUT BY NAME encabezado.*,preview ATTRIBUTE(WITHOUT DEFAULTS)
BEFORE INPUT
CALL detalle.clear()
INITIALIZE encabezado.* TO NULL
LET encabezado.cond_pago=2
DISPLAY BY NAME encabezado.*
LET selec1 = "SELECT SUM(a.valor) FROM notb00008 a WHERE a.num_emp = ? ",
"AND a.cod_mov = 19 AND a.fecha between ? and ? and a.clase_mov ='F' and status_t is null "
PREPARE suma_facturas FROM selec1
LET selec1 = "UPDATE puntoventas.dbo.vetb00002 set status_t = 'E',us_mod = '",usuarios,"', fech_mod = getdate() ",
" WHERE factura = ? "
PREPARE upcomando1 FROM selec1
LET selec1 = "DELETE FROM notb00008 ",
" WHERE num_nomi = ? and cod_mov = 19 and clase_mov = 'F' AND fecha = ? "
PREPARE upcomando2 FROM selec1
LET selec1 = "UPDATE notb00011 set status_t = 'E',us_mod ='",usuarios CLIPPED,"',fech_mod = getdate() ",
" WHERE num_doc = ? and cod_mov = 19 AND num_emp = ? "
PREPARE upcomando3 FROM selec1
LET insert1 =
"INSERT INTO puntoventas.dbo.vetb00003 (factura,id_producto,descripcion,cantidad,precio,descuento,itbis,valor) ",
" VALUES (?,?,?,?,?,?,?,?) "
PREPARE inscomando FROM insert1
LET insert1 =
"INSERT INTO puntoventas.dbo.vetb00002 (factura,fecha_factura,fecha_nomina,codigo_id,cond_pago,nombre_cliente, ",
"bruto,descuento,itbis,sub_total,neto,us_crea,fech_crea) ",
"VALUES (?,?, ?,?,?, ?,?,?, ?,?,?, ?,getdate())"
PREPARE inscomando1 FROM insert1
LET selec1 = "SELECT MAX(a.factura) FROM puntoventas.dbo.vetb00002 a "
PREPARE comando2 FROM selec1
IF estado ='M' THEN
LET selec1 =
" SELECT a.factura,CONVERT(CHAR(10),a.fecha_factura,103),CONVERT(CHAR(10),a.fecha_nomina,103),a.cond_pago,a.codigo_id, ",
"a.nombre_cliente,a.bruto,a.descuento,a.itbis,a.sub_total, ",
"a.neto,CASE a.status_t WHEN 'E' THEN 'ANULADA' ELSE 'ACTIVA' END,b.departamento, ",
" b.nomina ",
"FROM puntoventas.dbo.vetb00002 a LEFT OUTER JOIN adtb00003 b ON a.codigo_id = b.num_emp ",
"WHERE a.factura = ? "
PREPARE comand1 FROM selec1
NEXT FIELD factura_no
ELSE
LET encabezado.fecha_factura= TODAY
DISPLAY BY NAME encabezado.fecha_factura
END IF
ON ACTION empleados
CALL busca_empleado() RETURNING encabezado.codigo_id,nom1_emp,
nom2_emp,apell1_emp,apell2_emp
LET encabezado.nombre_cliente=nom1_emp CLIPPED," ",nom2_emp CLIPPED," ",
apell1_emp CLIPPED," ",apell2_emp
DISPLAY BY NAME encabezado.nombre_cliente,encabezado.codigo_id
{ ON ACTION anular
IF estado = "M" THEN
LET respuesta= fgl_winquestion("ANULAR","ESTA SEGURO DE ANULAR FACTURA?","NO","YES|NO","QUESTION",0)
IF respuesta = 'YES' THEN
EXECUTE upcomando1 USING encabezado.factura_no
EXECUTE upcomando2 USING encabezado.factura_no,fecha1
EXECUTE upcomando3 USING encabezado.factura_no,encabezado.codigo_id
CALL err_mensajes(82)
DISPLAY "ANULADA" TO estado
ELSE
CONTINUE DIALOG
END IF
END IF}
ON ACTION imprime
CALL impresion_fact()
AFTER FIELD factura_no
IF encabezado.factura_no IS NOT NULL THEN
EXECUTE comand1 USING encabezado.factura_no INTO encabezado.factura_no,
encabezado.fecha_factura,
pfecha,
encabezado.cond_pago,
encabezado.codigo_id,
encabezado.nombre_cliente,
encabezado.bruto,
encabezado.descuento,
encabezado.itbis,
encabezado.sub_total,
encabezado.neto,
encabezado.estado,
pdepartamento,
ptipo
IF STATUS = NOTFOUND THEN
CALL err_mensajes(3)
NEXT FIELD factura_no
END IF
DISPLAY BY NAME encabezado.*,pfecha
IF estado = 'M' THEN
LET selec1 =
"SELECT a.id_producto,a.descripcion,a.cantidad,a.precio,a.descuento,'0',a.itbis, ",
" '0',a.valor ",
" FROM puntoventas.dbo.vetb00003 a ",
"WHERE a.factura = ",encabezado.factura_no
PREPARE comand2 FROM selec1
DECLARE busca_d CURSOR FOR comand2
LET idx1 = 1
FOREACH busca_d INTO detalle[idx1].*
LET idx1 = idx1 + 1
END FOREACH
CALL set_count(idx1-1)
DISPLAY ARRAY detalle TO record2.*
BEFORE DISPLAY
LET idx1=arr_curr()
LET detalle[idx1].valor_desc = (detalle[idx1].cantidad * detalle[idx1].precio)
* (detalle[idx1].ddescuento/100)
LET detalle[idx1].valor_itbis = ((detalle[idx1].cantidad * detalle[idx1].precio) -
detalle[idx1].valor_desc)
EXIT DISPLAY
END DISPLAY
END IF
END IF
AFTER FIELD codigo_id
IF encabezado.codigo_id IS NOT NULL THEN
LOCATE foto_empleado IN MEMORY
SELECT ISNULL(RTRIM(a.nom1_emp),' ')+' '+ISNULL(RTRIM(a.nom2_emp),' ')+
' '+ ISNULL(RTRIM(a.apell1_emp),' ')+' '+
ISNULL(RTRIM(a.apell2_emp),' '),a.departamento,a.nivel_emp,
a.cod_puesto,a.nomina,a.credito,a.foto_empleado
INTO encabezado.nombre_cliente,pdepartamento,pnivel_Emp,pcod_puesto,
ptipo,pcredito,foto_empleado
FROM adtb00003 a
WHERE num_emp = encabezado.codigo_id AND a.status_t IS NULL
IF STATUS = NOTFOUND THEN
CALL err_mensajes(3)
NEXT FIELD codigo_id
END IF
IF pcredito = "NO" THEN
CALL fgl_winmessage("ERROR","NO ES PERMITIDO FACTURAR A ESTE EMPLEADO, FAVOR DE COMUNICARSE CON NOMINA","INFO")
NEXT FIELD codigo_id
END IF
# '.\\TMP\\',
LET ruta_foto ='.\\TMP\\', encabezado.codigo_id USING "<<<<<",'.jpg'
DISPLAY "ruta ",ruta_foto
CALL foto_empleado.writeFile(ruta_foto)
DISPLAY ruta_foto TO foto
DISPLAY BY NAME encabezado.nombre_cliente
IF fecha1 IS NULL THEN
CALL fgl_Winmessage("ERROR","FECHA INICIAL DE LA NOMINA ESTA EN BLANCO, FAVOR COMUNICARSE EN NOMINA","INFO")
NEXT FIELD codigo_id
END IF
DISPLAY "fechas ",pfecha," ",fecha1
EXECUTE suma_facturas INTO balance USING encabezado.codigo_id,pfecha,fecha1
DISPLAY BY NAME balance
LET estado = 'N'
END IF
AFTER INPUT
IF encabezado.cond_pago= 2 THEN
IF encabezado.codigo_id IS NULL THEN
CALL err_mensajes(16)
NEXT FIELD codigo_id
END IF
END IF
IF pfecha IS NULL THEN
CALL err_mensajes(16)
NEXT FIELD codigo_id
END IF
END INPUT
# DETALLE PRODUCTOS
INPUT ARRAY detalle FROM record2.* ATTRIBUTE(WITHOUT DEFAULTS)
BEFORE INPUT
LET selec1 =
" SELECT a.descripcion,a.itbis ",
"FROM puntoventas.dbo.iptb00002 a ",
"WHERE a.id_producto = ? "
PREPARE comand3 FROM selec1
LET scr_l = scr_line()
LET detalle[1].cantidad = 1
LET detalle[1].codigo_prod=1
LET detalle[1].valor_desc=0
LET detalle[1].pitbis=0
IF detalle[1].codigo_prod IS NOT NULL THEN
EXECUTE comand3 USING detalle[1].codigo_prod INTO detalle[1].descripcion,
detalle[1].pitbis
IF STATUS = NOTFOUND THEN
CALL err_mensajes(3)
NEXT FIELD codigo_prod
ELSE
DISPLAY detalle[1].descripcion TO record2[scr_l].descripcion
DISPLAY detalle[1].pitbis TO record2[scr_l].pitbis
NEXT FIELD precio
END IF
END IF
NEXT FIELD precio
{ ON ACTION busca_tems
LET idx = arr_curr()
LET scr_l = scr_line()
CALL busca_articulos('N',' ') RETURNING detalle[idx].codigo_prod,detalle[idx].descripcion,
detalle[idx].pitbis
DISPLAY detalle[idx].codigo_prod TO record2[scr_l].codigo_prod
DISPLAY detalle[idx].descripcion TO record2[scr_l].descripcion
NEXT FIELD cantidad}
AFTER FIELD codigo_prod
LET idx = arr_curr()
LET scr_l = scr_line()
IF detalle[idx].codigo_prod IS NOT NULL THEN
EXECUTE comand3 USING detalle[idx].codigo_prod INTO detalle[idx].descripcion,
detalle[idx].pitbis
IF STATUS = NOTFOUND THEN
CALL err_mensajes(3)
NEXT FIELD codigo_prod
ELSE
DISPLAY detalle[idx].descripcion TO record2[scr_l].descripcion
DISPLAY detalle[idx].pitbis TO record2[scr_l].pitbis
NEXT FIELD cantidad
END IF
END IF
AFTER FIELD descripcion
IF detalle[idx].descripcion IS NOT NULL THEN
# WHENEVER ERROR CONTINUE
EXECUTE comand3 USING detalle[idx].descripcion INTO detalle[idx].descripcion,
detalle[idx].pitbis
IF STATUS < 0 THEN
CALL busca_articulos('A',detalle[idx].descripcion)RETURNING detalle[idx].codigo_prod,detalle[idx].descripcion,
detalle[idx].pitbis
ELSE
DISPLAY detalle[idx].descripcion TO record2[scr_l].descripcion
DISPLAY detalle[idx].pitbis TO record2[scr_l].pitbis
END IF
END IF
AFTER FIELD cantidad
NEXT FIELD precio
AFTER FIELD precio
CALL calcula_valor(arr_count())
NEXT FIELD ddescuento
AFTER ROW
LET idx = arr_curr()
LET scr_l = scr_line()
IF detalle[idx].valor_desc IS NULL THEN
LET detalle[idx].valor_desc=0
END IF
IF detalle[idx].valor_itbis IS NULL THEN
LET detalle[idx].valor_itbis=0
END IF
IF detalle[idx].cantidad IS NOT NULL THEN
LET detalle[idx].valor = detalle[idx].cantidad * detalle[idx].precio
IF detalle[idx].ddescuento IS NOT NULL THEN
LET detalle[idx].valor_desc = detalle[idx].valor * (detalle[idx].ddescuento/100)
LET detalle[idx].valor = detalle[idx].valor - detalle[idx].valor_desc
END IF
IF detalle[idx].pitbis > 0 THEN
LET detalle[idx].valor_itbis = (detalle[idx].cantidad * detalle[idx].precio) - detalle[idx].valor_desc
LET detalle[idx].valor_itbis =detalle[idx].valor_itbis * (detalle[idx].pitbis / 100)
END IF
LET detalle[idx].valor = detalle[idx].valor + detalle[idx].valor_itbis
DISPLAY detalle[idx].pitbis TO record2[scr_l].pitbis
DISPLAY detalle[idx].valor TO record2[scr_l].valor
DISPLAY detalle[idx].valor_itbis TO record2[scr_l].valor_itbis
DISPLAY detalle[idx].valor_desc TO record2[scr_l].valor_desc
END IF
LET encabezado.bruto=0
LET encabezado.descuento=0
LET encabezado.itbis=0
LET encabezado.neto=0
LET encabezado.sub_total=0
FOR idx1 =1 TO arr_count()
IF detalle[idx1].valor IS NOT NULL THEN
IF detalle[idx1].valor_desc IS NULL THEN
LET detalle[idx1].valor_desc = 0
END IF
IF detalle[idx1].valor_itbis IS NULL THEN
LET detalle[idx1].valor_itbis =0
END IF
LET encabezado.bruto = (detalle[idx1].cantidad * detalle[idx1].precio) + encabezado.bruto
LET encabezado.descuento =detalle[idx1].valor_desc + encabezado.descuento
LET encabezado.itbis = detalle[idx1].valor_itbis + encabezado.itbis
LET encabezado.sub_total = encabezado.bruto - encabezado.descuento
LET encabezado.neto = encabezado.sub_total +encabezado.itbis
ELSE
IF detalle[idx1].codigo_prod IS NOT NULL THEN
CALL err_mensajes(16)
NEXT FIELD codigo_prod
END IF
END IF
END FOR
DISPLAY BY NAME encabezado.bruto,encabezado.descuento,encabezado.itbis,
encabezado.neto,encabezado.descuento,encabezado.sub_total
BEFORE FIELD codigo_prod
IF estado <> "N" THEN
NEXT FIELD codigo_id
END IF
ON KEY (F12)
IF estado = 'N' THEN
EXECUTE suma_facturas INTO balance USING encabezado.codigo_id,pfecha,fecha1
DISPLAY BY NAME balance
IF balance+encabezado.neto > limite_cr THEN
CALL fgl_winmessage("ERROR","ESTE EMPLEADO TIENE SU LIMITE DE CREDITO AGOTADO, NO PUEDE REALIZAR FACTURA","INFO")
NEXT FIELD precio
END IF
EXECUTE comando2 INTO encabezado.factura_no
IF encabezado.factura_no IS NULL THEN
LET encabezado.factura_no = 0
END IF
LET encabezado.factura_no = encabezado.factura_no + 1
DISPLAY BY NAME encabezado.factura_no
#WHENEVER ERROR CONTINUE
BEGIN WORK
FOR idx1 = 1 TO arr_count()
IF detalle[idx1].codigo_prod IS NOT NULL THEN
IF detalle[idx1].valor IS NULL THEN
CALL err_mensajes(16)
NEXT FIELD cantidad
END IF
EXECUTE inscomando USING encabezado.factura_no,detalle[idx1].codigo_prod,detalle[idx1].descripcion,detalle[idx1].cantidad,detalle[idx1].precio,
detalle[idx1].ddescuento,detalle[idx1].pitbis,detalle[idx1].valor
IF STATUS < 0 THEN
ROLLBACK WORK
CALL err_mensajes(SQLCA.sqlcode)
EXIT FOR
RETURN
END IF
END IF
END FOR
IF encabezado.cond_pago = 2 THEN
INSERT INTO notb00008 (num_nomi,tipo_emp,clase_mov,fecha,num_emp,departamento,nivel_emp,cod_puesto,cod_mov,cantidad,valor,us_crea,fech_crea)
VALUES (encabezado.factura_no,ptipo,'F',fecha1,encabezado.codigo_id,pdepartamento,pnivel_emp,pcod_puesto,'19','0',encabezado.neto,usuarios,getdate())
IF STATUS < 0 THEN
ROLLBACK WORK
CALL err_mensajes(SQLCA.sqlcode)
RETURN
END IF
INSERT INTO notb00011 (num_doc,fecha,cod_mov,monto,num_emp,departamento,nivel_emp,cod_puesto,us_crea,fech_crea)
VALUES (encabezado.factura_no,encabezado.fecha_factura,'19',encabezado.neto,encabezado.codigo_id,
pdepartamento,pnivel_emp,pcod_puesto,usuarios,getdate())
IF STATUS < 0 THEN
ROLLBACK WORK
CALL err_mensajes(SQLCA.sqlcode)
RETURN
END IF
END IF
IF encabezado.nombre_cliente IS NULL THEN
CALL err_mensajes(16)
NEXT FIELD nombre_cliente
END IF
EXECUTE inscomando1 USING encabezado.factura_no,encabezado.fecha_factura,pfecha,
encabezado.codigo_id,encabezado.cond_pago,
encabezado.nombre_cliente,
encabezado.bruto,encabezado.descuento,
encabezado.itbis,encabezado.sub_total,encabezado.neto,
usuarios
IF STATUS < 0 THEN
ROLLBACK WORK
CALL err_mensajes(SQLCA.sqlcode)
RETURN
ELSE
COMMIT WORK
# REPORTE
LET balance = balance + encabezado.neto
CALL impresion_fact()
CALL impresion_fact()
CALL detalle.clear()
INITIALIZE encabezado.* TO NULL
LET encabezado.cond_pago=2
LET encabezado.fecha_factura=TODAY
DISPLAY BY NAME encabezado.*
NEXT FIELD codigo_id
END IF
END IF
CONTINUE DIALOG
AFTER INPUT
IF detalle[idx].descripcion IS NULL AND detalle[idx].codigo_prod IS NOT NULL THEN
CALL err_mensajes(16)
NEXT FIELD codigo_prod
END IF
IF detalle[idx].descripcion IS NOT NULL THEN
IF detalle[idx].cantidad IS NULL THEN
CALL err_mensajes(16)
NEXT FIELD cantidad
END IF
IF detalle[idx].precio IS NULL THEN
CALL err_mensajes(16)
NEXT FIELD precio
END IF
END IF
END INPUT
ON ACTION CANCEL
EXIT DIALOG
END DIALOG
IF INT_FLAG THEN
LET INT_FLAG = FALSE
RETURN
END IF
END FUNCTION
REPORT factura(x,z,xdepartamento)
DEFINE x RECORD
factura_no INT,
fecha_factura DATE,
cond_pago SMALLINT,
codigo_id INT,
nombre_cliente VARCHAR(90),
bruto DEC(12,2),
descuento DEC(12,2),
itbis DEC(12,2),
sub_total DEC(12,2),
neto DEC(12,2),
estado VARCHAR(30)
END RECORD,
xdepartamento SMALLINT
DEFINE z RECORD
codigo_prod CHAR(25),
descripcion VARCHAR(80),
cantidad DEC(12,2),
precio DEC(12,2),
ddescuento DEC(12,2),
valor_desc DEC(12,2),
pitbis DEC(12,2),
valor_itbis DEC(12,2),
valor DEC(12,2)
END RECORD,
hora VARCHAR(16),
descripcion_dpto CHAR(30)
FORMAT
FIRST PAGE HEADER
LET descripcion_dpto = NULL
SELECT a.nom_dpto INTO descripcion_dpto FROM adtb00001 a
WHERE a.departamento = xdepartamento
IF STATUS = NOTFOUND THEN
LET descripcion_dpto = "NO EXISTE"
LET STATUS = 0
END IF
LET hora =CURRENT YEAR TO MINUTE
PRINTX nombre_cia,hora,pfecha,x.factura_no,xdepartamento,descripcion_dpto
ON EVERY ROW
PRINTX x.fecha_factura,x.nombre_cliente,x.codigo_id,x.bruto,x.descuento,x.itbis,
x.sub_total,x.neto,z.*,balance
END REPORT
FUNCTION impresion_fact()
LET r_filename = "veprmt022.4rp"
# LET preview = 0
LET r_output = 'SVG'
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)
CALL fgl_report_configureSVGPreview("PrintOnNamedPrinter")
CALL fgl_report_setSVGPrinterName("EPSON TM-T20II Receipt")
CALL fgl_report_setSVGCopies(2)
ELSE
CALL fgl_report_selectPreview(preview)
END IF
LET handler = fgl_report_commitCurrentSettings() -- commit changes
START REPORT factura TO XML HANDLER HANDLER
FOR idx = 1 TO arr_count()
IF detalle[idx].codigo_prod IS NOT NULL THEN
OUTPUT TO REPORT factura(encabezado.*,detalle[idx].*,Pdepartamento)
END IF
END FOR
FINISH REPORT factura
END IF
END FUNCTION
FUNCTION relacion()
DEFINE fecha_inicial,fecha_final DATE,
criterio VARCHAR(100),
select2 VARCHAR(500),
registro RECORD
factura INT,
fecha_factura CHAR(10),
fecha_nomina CHAR(10),
codigo_id INT,
nombre_cliente VARCHAR(60),
bruto DEC(12,2),
descuento DEC(12,2),
itbis DEC(12,2),
sub_total DEC(12,2),
neto DEC(12,2),
estado CHAR(20),
condicion VARCHAR(30)
END RECORD,
primera CHAR(1),
impresion CHAR(2),
forma_reporte varchar(10)
OPEN WINDOW w2 WITH FORM "vepfmrp001"
DIALOG ATTRIBUTE (FIELD ORDER FORM, UNBUFFERED)
INPUT BY NAME fecha_inicial,fecha_final,preview,forma_reporte
BEFORE INPUT
LET fecha_final = TODAY
DISPLAY BY NAME fecha_final
AFTER INPUT
IF fecha_final IS NULL THEN
CALL err_mensajes(16)
NEXT FIELD fecha_final
END IF
IF fecha_inicial IS NULL THEN
CALL err_mensajes(16)
NEXT FIELD fecha_inicial
END IF
END INPUT
CONSTRUCT BY NAME criterio ON a.codigo_id,a.cond_pago
ON ACTION impresion
IF forma_reporte = "Detalle" THEN
LET select2 =
" SELECT a.factura,CONVERT(CHAR(10),a.fecha_factura,103),CONVERT(CHAR(10),a.fecha_nomina,103),",
" a.codigo_id,a.nombre_cliente,a.bruto,a.descuento,a.itbis,a.sub_total,a.neto,",
" a.status_t,
CASE a.cond_pago WHEN 1 THEN 'OTRAS FACTURAS' ELSE 'CREDITO EMPLEADOS' END ",
" FROM puntoventas.dbo.vetb00002 a WHERE ",
" a.fecha_factura between ? and ? AND ",criterio CLIPPED,
" ORDER BY a.cond_pago,a.factura"
ELSE
LET select2 =
" SELECT '0',' ',' ',",
" a.codigo_id,CAST(a.codigo_id as varchar)+'-'+a.nombre_cliente,SUM(a.bruto),SUM(a.descuento),SUM(a.itbis),SUM(a.sub_total),SUM(a.neto),",
" ' ',
' ' ",
" FROM puntoventas.dbo.vetb00002 a WHERE ",
" a.fecha_factura between ? and ? AND ",criterio CLIPPED,
" AND a.status_t IS NULL ",
" GROUP BY a.codigo_id,a.nombre_cliente ",
" ORDER BY a.codigo_id"
END IF
PREPARE relacion1 FROM select2
DECLARE busca_r CURSOR FOR relacion1
OPEN busca_r USING fecha_inicial,fecha_final
LET primera = 'S'
LET impresion = "NO"
FOREACH busca_r INTO registro.*
IF STATUS = NOTFOUND THEN
LET impresion = 'NO'
CALL err_mensajes(3)
EXIT FOREACH
END IF
LET impresion = 'SI'
IF primera = 'S' THEN
LET r_filename = "veprrp001.4rp"
# LET preview = 1
LET r_output = 'SVG'
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
START REPORT r_registros TO XML HANDLER HANDLER
END IF
LET primera = 'N'
IF registro.estado = 'E' THEN
LET registro.nombre_cliente = registro.nombre_cliente[1,15]," NULA"
END IF
OUTPUT TO REPORT r_registros(registro.*,fecha_inicial,fecha_final)
END FOREACH
IF impresion = "SI" THEN
FINISH REPORT r_registros
END IF
ON ACTION CANCEL
LET INT_FLAG = FALSE
EXIT DIALOG
EXIT DIALOG
END CONSTRUCT
END DIALOG
CLOSE WINDOW w2
END FUNCTION
REPORT r_registros(x,xfecha1,xfecha2)
DEFINE x RECORD
factura INT,
fecha_factura CHAR(10),
fecha_nomina CHAR(10),
codigo_id INT,
nombre_cliente VARCHAR(60),
bruto DEC(12,2),
descuento DEC(12,2),
itbis DEC(12,2),
sub_total DEC(12,2),
neto DEC(12,2),
estado CHAR(20),
condicion VARCHAR(30)
END RECORD,
hora CHAR(16),
total_condicion,total_venta DEC(12,2),
xfecha1 ,
xfecha2 CHAR(10)
ORDER BY x.condicion,x.factura
FORMAT
FIRST PAGE HEADER
LET hora = CURRENT YEAR TO MINUTE
#PRINTX nombre_cia,hora,x.fecha_inicial,x.fecha_final
LET total_venta = 0
BEFORE GROUP OF x.condicion
LET total_condicion = 0
ON EVERY ROW
IF x.estado IS NULL OR x.estado = ' ' THEN
LET total_venta = total_venta + x.neto
LET total_condicion = total_condicion + x.neto
END IF
PRINTX x.*,nombre_cia,hora,xfecha1,xfecha2
AFTER GROUP OF x.condicion
PRINTX total_condicion
ON LAST ROW
PRINTX total_venta
END REPORT
FUNCTION calcula_valor(cuenta_fila)
DEFINE cuenta_fila SMALLINT
LET encabezado.bruto=0
LET encabezado.descuento=0
LET encabezado.itbis=0
LET encabezado.neto=0
LET encabezado.sub_total=0
FOR idx1 =1 TO cuenta_fila
IF detalle[idx1].valor_desc IS NULL THEN
LET detalle[idx1].valor_desc=0
END IF
IF detalle[idx1].valor_itbis IS NULL THEN
LET detalle[idx1].valor_itbis=0
END IF
IF detalle[idx1].cantidad IS NOT NULL THEN
LET detalle[idx1].valor = detalle[idx1].cantidad * detalle[idx1].precio
IF detalle[idx1].ddescuento IS NOT NULL THEN
LET detalle[idx1].valor_desc = detalle[idx1].valor * (detalle[idx1].ddescuento/100)
LET detalle[idx1].valor = detalle[idx1].valor - detalle[idx1].valor_desc
END IF
IF detalle[idx1].pitbis > 0 THEN
LET detalle[idx1].valor_itbis = (detalle[idx1].cantidad * detalle[idx].precio) - detalle[idx1].valor_desc
LET detalle[idx1].valor_itbis =detalle[idx1].valor_itbis * (detalle[idx1].pitbis / 100)
END IF
LET detalle[idx1].valor = detalle[idx1].valor + detalle[idx1].valor_itbis
DISPLAY detalle[idx1].pitbis TO record2[scr_l].pitbis
DISPLAY detalle[idx1].valor TO record2[scr_l].valor
DISPLAY detalle[idx1].valor_itbis TO record2[scr_l].valor_itbis
DISPLAY detalle[idx1].valor_desc TO record2[scr_l].valor_desc
END IF
IF detalle[idx1].valor IS NOT NULL THEN
IF detalle[idx1].valor_desc IS NULL THEN
LET detalle[idx1].valor_desc = 0
END IF
IF detalle[idx1].valor_itbis IS NULL THEN
LET detalle[idx1].valor_itbis =0
END IF
LET encabezado.bruto = (detalle[idx1].cantidad * detalle[idx1].precio) + encabezado.bruto
LET encabezado.descuento =detalle[idx1].valor_desc + encabezado.descuento
LET encabezado.itbis = detalle[idx1].valor_itbis + encabezado.itbis
LET encabezado.sub_total = encabezado.bruto - encabezado.descuento
LET encabezado.neto = encabezado.sub_total +encabezado.itbis
END IF
END FOR
DISPLAY BY NAME encabezado.bruto,encabezado.itbis,
encabezado.neto,encabezado.descuento,encabezado.sub_total
END FUNCTION