{ ====================================================================== 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