SCHEMA smarmotech GLOBALS DEFINE p_iptb01 RECORD LIKE iptb00001.*, p_companias RECORD LIKE companias.*, sucnombre VARCHAR(60), fecha_vencimiento DATE, pubicacion VARCHAR(80), cliente_bas RECORD LIKE vetb00004.*, condicion RECORD LIKE vetb00012.* END GLOBALS FUNCTION facturar(xcotizacion,xsucid,numero_orden,usuarios,clave,impresor,pcodigodgii,pcomprobante,pfecha_vence) DEFINE xcotizacion,numero_orden,xnumero_factura, kncf INT, xsucid,idx,cod_fact,impresor SMALLINT, archivo,imprime STRING, usuarios,clave VARCHAR(50), xdireccion_proyecto VARCHAR(100), xvalor_desc DEC(12,2), tot_porc DEC(12,5), p_bonifica DYNAMIC ARRAY OF DECIMAL(12,3), pcodigodgii CHAR(10), pfecha_vence DATE, pcomprobante VARCHAR(60) DEFINE fact_gral RECORD cod_cia LIKE vetb00002.cod_cia, ventas LIKE vetb00002.ventas, zona CHAR(3), factura LIKE vetb00002.factura, bodega SMALLINT, conduce LIKE vetb00002.conduce, fecha_conduce DATE, fecha_factura DATE, tipo_cliente LIKE vetb00002.tipo_cliente, sec_cliente LIKE vetb00002.sec_cliente, nombre CHAR(30), direccion CHAR(80), ciudad CHAR(20), prima_us LIKE vetb00002.prima_us, porc_desc LIKE vetb00002.porc_desc, cond_pago LIKE vetb00002.cond_pago, orden INT, fecha_orden DATE, porc_itbi LIKE vetb00002.porc_itbi, sec_vend LIKE vetb00002.sec_vend, nombre_vend CHAR(60), cod_transp LIKE iptb00006.cod_transp, sec_transp LIKE iptb00006.sec_transp, cod_tarifa LIKE iptb00006.cod_tarifa, nombre_tran CHAR(30), fecha_embarque DATE, placa_transp LIKE iptb00006.placa, sub_total DECIMAL(12,2), desc_valor DECIMAL(12,2), itbi DECIMAL(12,2), total_fact DECIMAL(12,2) END RECORD DEFINE fact_det DYNAMIC ARRAY OF RECORD area SMALLINT, cod_n INT, cod_grupo INT, cod_tipo INT, cod_sec INT, descrip_esp CHAR(50), unidad_med CHAR(5), cantidad DEC(12,5), precio LIKE vetb00003.precio, cantidad_2 LIKE vetb00003.cantidad_2, monto_fact DECIMAL(12,2), kit_id INT END RECORD, documento_refe,copia VARCHAR(50), negrilla_on,negrillas_of,doble_on,doble_off,comp_on,comp_off, doce,NORMAL char(3) CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,copia SELECT a.tipo_cliente,a.sec_cliente,a.nombre_cliente,a.direccion_cliente,a.direccion_proyecto, a.total_bruto,a.monto_desc,a.monto_itbi,a.porc_itbi,a.total_neto,a.telefono_o,b.nombre_file,b.num_oc, a.ventas,a.cod_provincia,CONVERT(CHAR(10),b.fecha_oc,103),a.sec_vend,a.cond_pago, a.prima,c.descrip,ISNULL(RTRIM(d.nom1_emp),' ')+' '+ISNULL(RTRIM(d.apell1_emp),' '), CONVERT(CHAR(10),a.fecha,103) INTO fact_gral.tipo_cliente,fact_gral.sec_cliente,fact_gral.nombre,fact_gral.direccion, xdireccion_proyecto, fact_gral.sub_total,fact_gral.desc_valor,fact_gral.itbi,fact_gral.porc_itbi,fact_gral.total_fact, cliente_bas.telefono,documento_refe,fact_gral.orden,fact_gral.ventas, fact_gral.zona,fact_gral.fecha_orden,fact_gral.sec_vend,fact_gral.cond_pago, fact_gral.prima_us,condicion.descrip,fact_gral.nombre_vend, fact_gral.fecha_factura FROM vetb00050 a LEFT OUTER JOIN prtb00012 b ON a.cotizacion_no = b.cotizacion_no AND b.status_t IS NULL INNER JOIN vetb00012 c ON a.cond_pago = c.cond_pago INNER JOIN adtb00003 d ON a.sec_vend = d.num_emp WHERE a.cotizacion_no = xcotizacion SELECT a.ult_factura INTO xnumero_factura FROM vetb00001 a WHERE a.sucid = xsucid IF xnumero_factura IS NULL THEN LET xnumero_factura = 0 END IF LET fact_gral.factura = xnumero_factura + 1 # SUMA EL VALOR EN EL DETALLE DE LA COTIZACION SELECT a.ncf INTO kncf FROM vetb00073 a WHERE a.tipo_doc = "FT" AND a.codigo_dgii = pcodigodgii LET kncf = kncf + 1 START REPORT imp_fact_ncf TO archivo BEGIN WORK UPDATE vetb00073 SET ncf = kncf WHERE tipo_doc = 'FT' AND codigo_dgii = pcodigodgii INSERT INTO vetb00002 (cod_cia,ventas,zona,factura,fecha_factura,tipo_cliente,sec_cliente,orden,documento,nombre_cliente, direccion_cliente,direccion_proyecto,sub_total,monto_desc,porc_itbi,monto_itbi,neto, us_crea,fech_crea,sucid,fecha_orden,sec_vend,cond_pago,prima_us) VALUES ('1',fact_gral.ventas,fact_gral.zona, fact_gral.factura,GETDATE(),fact_gral.tipo_cliente,fact_gral.sec_cliente,fact_gral.orden, xcotizacion, fact_gral.nombre,fact_gral.direccion, xdireccion_proyecto,fact_gral.sub_total,fact_gral.desc_valor,fact_gral.porc_itbi,fact_gral.itbi, fact_gral.total_fact,suser_sname(),getdate(),xsucid,fact_gral.fecha_orden, fact_gral.sec_vend,fact_gral.cond_pago,fact_gral.prima_us) # INSERTA EN LA TABLA COMPROBANTE FISCAL INSERT INTO vetb00072 (documento,tipo_Doc,codigo_dgii,ncf,us_crea,fech_crea,sucid) VALUES (xnumero_factura,'FT',pcodigodgii,kncf,suser_sname(),getdate(),xsucid) DECLARE busca_items CURSOR FOR SELECT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,a.cantidad,a.precio,a.porc_Desc, b.descrip_esp FROM vetb00051 a,iptb00002 b WHERE a.cotizacion_no = xcotizacion 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 LET xvalor_desc = 0 FOREACH busca_items INTO fact_det[idx].area,fact_det[idx].cod_n,fact_det[idx].cod_grupo, fact_det[idx].cod_tipo,fact_det[idx].cod_sec,fact_det[idx].cantidad, fact_det[idx].precio,fact_det[idx].cantidad_2,fact_det[idx].descrip_esp LET xvalor_desc = (fact_det[idx].cantidad*fact_det[idx].cantidad_2) * (fact_det[idx].cantidad_2/100) LET fact_det[idx].monto_fact = (fact_det[idx].precio* fact_det[idx].cantidad)- ((fact_det[idx].precio* fact_det[idx].cantidad)* (fact_det[idx].cantidad_2/100)) INSERT INTO vetb00003 (factura,area,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad,precio,cantidad_2,bonificacion, us_crea,fech_crea) VALUES (xnumero_factura,fact_det[idx].area,fact_det[idx].cod_n,fact_det[idx].cod_grupo, fact_det[idx].cod_tipo,fact_det[idx].cod_sec,fact_det[idx].cantidad, fact_det[idx].precio,fact_det[idx].cantidad_2,xvalor_desc, suser_sname(),getdate()) LET xvalor_desc = 0 LET idx = idx + 1 END FOREACH UPDATE vetb00001 SET ult_factura = fact_gral.factura,us_mod = usuarios,fech_mod = getdate() WHERE sucid = xsucid IF idx = 1 THEN ROLLBACK WORK ELSE COMMIT WORK END IF FOR idx = 1 TO fact_det.getLength() IF fact_det[idx].cod_sec IS NOT NULL THEN LET cod_fact = 1 OUTPUT TO REPORT imp_fact_ncf(fact_gral.*,fact_det[idx].*,tot_porc, p_bonifica[idx],cod_fact,kncf,pcodigodgii,xcotizacion,documento_refe,pcomprobante) END IF END FOR FINISH REPORT imp_fact_ncf RUN imprime # AFTER CUENTAS POR COBRAR INSERT INTO cctb00001 (cod_cia,tipo_doc,num_doc,tipo_cliente,sec_cliente,cod_emp_sec,fecha_orig, fecha_ven, aplica_a,valor,monto_desc,us_crea,fech_crea,bodega,sucid,cotizacion_no) VALUES (fact_gral.cod_cia,tipo_f,fact_gral.factura, fact_gral.tipo_cliente,fact_gral.sec_cliente, fact_gral.sec_vend,fact_gral.fecha_factura,fact_gral.fecha_factura, fact_gral.factura, fact_gral.total_fact,'0', usuarios,GETDATE(),fact_gral.bodega,xsucid,'0') # PARA LA REAPLICACION DE LOS AVANCES CALL busca_avance(fact_gral.tipo_cliente,fact_gral.sec_cliente,xcotizacion,fact_gral.total_fact,fact_gral.fecha_factura, fact_gral.sec_vend,xsucid,fact_gral.factura,usuarios) END FUNCTION REPORT imp_fact_ncf(x,z,porciento,bonifica,cod_f,pncf,Pcodigodgii,zcotizacion,zdocumento,descripcion) DEFINE x RECORD cod_cia LIKE vetb00002.cod_cia, ventas LIKE vetb00002.ventas, zona CHAR(3), factura LIKE vetb00002.factura, bodega SMALLINT, conduce LIKE vetb00002.conduce, fecha_conduce DATE, fecha_factura DATE, tipo_cliente LIKE vetb00002.tipo_cliente, sec_cliente LIKE vetb00002.sec_cliente, nombre CHAR(30), direccion CHAR(80), ciudad CHAR(20), prima_us LIKE vetb00002.prima_us, porc_desc LIKE vetb00002.porc_desc, cond_pago LIKE vetb00002.cond_pago, orden INT, fecha_orden DATE, porc_itbi LIKE vetb00002.porc_itbi, sec_vend LIKE vetb00002.sec_vend, nombre_vend CHAR(60), cod_transp LIKE iptb00006.cod_transp, sec_transp LIKE iptb00006.sec_transp, cod_tarifa LIKE iptb00006.cod_tarifa, nombre_tran CHAR(30), fecha_embarque DATE, placa_transp LIKE iptb00006.placa, sub_total DECIMAL(12,2), desc_valor DECIMAL(12,2), itbi DECIMAL(12,2), total_fact DECIMAL(12,2) END RECORD, zcotizacion INT, zdocumento varchar(50), descripcion VARCHAR(60) DEFINE z RECORD area SMALLINT, cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descrip_esp CHAR(50), unidad_med CHAR(5), cantidad DEC(12,5), precio LIKE vetb00003.precio, cantidad_2 LIKE vetb00003.cantidad_2, monto_fact DECIMAL(12,2), kit_id INT END RECORD, Pcodigodgii LIKE vetb00071.codigo_dgii DEFINE i,cod_f SMALLINT DEFINE bonifica,pncf INTEGER DEFINE tot_b,tot_n,tot_m DECIMAL(12,2), ch_fech CHAR(20) DEFINE porciento DECIMAL(8,3) DEFINE normal,doce,negras,negras_off,doble CHAR(2) DEFINE rnc CHAR(11) DEFINE comprimido,comprimido_of CHAR(1) DEFINE j,lj,h INTEGER OUTPUT TOP MARGIN 2 LEFT MARGIN 0 # PAGE LENGTH 65 BOTTOM MARGIN 3 ORDER BY x.factura,z.cod_n,z.cod_sec FORMAT PAGE HEADER LET comprimido = ASCII 15 LET comprimido_of = ASCII 18 LET negras = ASCII 27, ASCII 69 LET negras_off = ASCII 27, ASCII 70 LET doble = ASCII 14 LET doce = ASCII 27, ASCII 77 LET normal = ASCII 27, ASCII 80 SELECT a.nombre INTO p_companias.nombre FROM companias a LET lj = (80 - LENGTH(p_companias.nombre CLIPPED))/2 LET j = (80 - LENGTH(p_companias.direccion CLIPPED||", "||p_companias.direccion1 CLIPPED))/2 LET i = (80 - LENGTH("Tels : "||p_companias.telefono || " Fax : "||p_companias.fax CLIPPED))/2 LET h = (80 - LENGTH(p_companias.rnc CLIPPED))/2 #-------------------------------------------------------- PRINT COLUMN 1, normal,doble,p_companias.nombre CLIPPED PRINT COLUMN 1,doce, p_companias.direccion CLIPPED,", ", p_companias.direccion1 CLIPPED, COLUMN 61, descripcion[1,29] PRINT COLUMN 1, sucnombre, COLUMN 61,descripcion[30,60] PRINT COLUMN 1, "RNC : ",p_companias.rnc, COLUMN 60,"NCF: ",pcodigodgii CLIPPED,pncf USING "&&&&&&&&" PRINT COLUMN 1, "Tels : ",p_companias.telefono , " Fax : ",p_companias.fax; IF pcodigodgii <> 'B02' THEN PRINT COLUMN 61, "Valida Hasta: ",fecha_vencimiento USING "dd/mm/yyyy" ELSE PRINT COLUMN 61, ' ' END IF PRINT COLUMN 1, "Pag. ", pageno using "###" #PRINT normal,comprimido_of #-------------------------------------------------------- SELECT num_rnc INTO rnc FROM vetb00004 WHERE tipo_cliente = x.tipo_cliente AND sec_cliente = x.sec_cliente AND status_t IS NULL #PRINT normal,comprimido_of PRINT COLUMN 1,"----------------------------------------------------------------------------------------------" PRINT COLUMN 1, "RNC CLIENTE: ",rnc IF x.ventas = "1" THEN PRINT COLUMN 1, negras,"SENORES :" ELSE PRINT COLUMN 1, "SIR :" END IF PRINT COLUMN 1, x.nombre CLIPPED," COD.#",x.tipo_cliente using "&&","-", x.sec_cliente using "&&&&&&" PRINT COLUMN 1, x.direccion CLIPPED," ",cliente_bas.telefono PRINT COLUMN 1, x.ciudad CLIPPED PRINT COLUMN 1, pubicacion[1,70] PRINT COLUMN 1, pubicacion[71,80] PRINT COLUMN 60, doble,"FACTURA ",x.factura using "&&&&&" PRINT COLUMN 1,"--------------------------------------------------------------------------------------------" PRINT normal,comprimido PRINT "======================================================================================================", "=================================" PRINT COLUMN 1, "SALIDA", COLUMN 15, "ORDEN", COLUMN 35, "FECHA", COLUMN 60, "CONDICION", COLUMN 77, "VENDEDOR", COLUMN 100, "COTIZACION", COLUMN 111, "DOCUMENTO", COLUMN 123, "FECHA FACTURA" PRINT COLUMN 1, x.conduce using "&&&&&&", COLUMN 14, x.orden using "&&&&&&", COLUMN 34, x.fecha_orden using "dd/mm/yyyy", COLUMN 60, condicion.descrip CLIPPED, COLUMN 77, "(",x.sec_vend using "&&&&",") ",x.nombre_vend CLIPPED, COLUMN 100, zcotizacion using "&&&&&&", COLUMN 111, zdocumento, COLUMN 126, x.fecha_factura using "dd/mm/yyyy" PRINT "======================================================================================================", "=================================" LET tot_n = 0 LET tot_b = 0 LET tot_m = 0 PRINT COLUMN 5,"CODIGO", COLUMN 21, "CANTIDAD", COLUMN 37, "UNIDADES", COLUMN 50, "DESCRIPCION", COLUMN 102, "PRECIO", COLUMN 114, "DESC.", COLUMN 131, "TOTAL" PRINT "======================================================================================================", "=================================" ON EVERY ROW IF z.cantidad <> 0 THEN LET p_iptb01.factor_conv = 1 LET p_iptb01.unidad = z.unidad_med SELECT a.factor_conv,a.unidad INTO p_iptb01.factor_conv,p_iptb01.unidad FROM iptb00001 a WHERE a.cod_n = z.cod_n AND a.cod_grupo = z.cod_grupo AND a.cod_tipo = z.cod_tipo AND a.cod_sec = z.cod_sec IF p_iptb01.factor_conv IS NULL OR p_iptb01.factor_conv = 0 THEN LET p_iptb01.factor_conv = 1 LET p_iptb01.unidad = z.unidad_med END IF PRINT COLUMN 5, z.cod_n USING "&&&&","-",z.cod_grupo USING "&&&&","-", z.cod_tipo USING "&&&&","-",z.cod_sec USING "&&&&&&", COLUMN 13, z.cantidad USING "###,###.###"," ",z.unidad_med CLIPPED, COLUMN 32, z.cantidad/p_iptb01.factor_conv USING "###,###", COLUMN 50, z.descrip_esp CLIPPED, COLUMN 98, z.precio USING "###,###.###", COLUMN 114, z.cantidad_2 USING "##.&&", COLUMN 123, z.monto_fact USING "##,###,###.##" END IF AFTER GROUP OF x.factura # Impresion de informaciones que pertenecen a facturas de exportacion IF x.ventas = "2" or x.ventas = "4" THEN PRINT COLUMN 122,"--------------" PRINT COLUMN 78, "VALOR BRUTO ", COLUMN 122, x.sub_total using "###,###,###.##" IF x.desc_valor <> 0 THEN PRINT COLUMN 78,"DISCOUNT", COLUMN 122, x.desc_valor using "###,###,###.##" END IF PRINT COLUMN 122, "--------------" PRINT COLUMN 78, "TOTAL F.O.B. PLANT, D.R.", COLUMN 122, x.total_fact using "###,###,###.##" PRINT COLUMN 122, "______________" PRINT COLUMN 122, "--------------" LET ch_fech = x.fecha_embarque using "ddd, mmm. dd, yyyy" LET ch_fech = upshift(ch_fech) PRINT COLUMN 47, "INLAND FREIGHT : COLLECT" PRINT COLUMN 47, "INSURANCE : TO BE COVERED BY CUSTOMER" PRINT COLUMN 47, "TO BE SHIPPED : ", ch_fech #PRINT COLUMN 47, "EXCHANGE RATE : ", x.prima_us USING "###.##" END IF # Impresion de datos que concierne solamente a tipos de facturas locales IF x.ventas = "1" THEN #->PRINT COLUMN 122, "--------------" SKIP 1 LINE PRINT COLUMN 78, "VALOR BRUTO ", COLUMN 122, x.sub_total using "###,###,###.##" IF x.desc_valor <> 0 THEN PRINT COLUMN 78, "DESCUENTO", COLUMN 093, x.desc_valor using "###,###,###.##" #COLUMN 122, x.desc_valor using "###,###,###.##" END IF #-> PRINT COLUMN 122, "--------------" PRINT COLUMN 78, "SUB-TOTAL", COLUMN 119, x.sub_total-x.desc_valor using "RD$###,###,###.##" IF x.porc_itbi > 0 THEN PRINT COLUMN 78,x.porc_itbi using "###.##","%"," ITBIS", COLUMN 122, x.itbi using "###,###,###.##" END IF PRINT COLUMN 122, "--------------" PRINT COLUMN 78, "VALOR NETO ", COLUMN 119, x.total_fact using "RD$###,###,###.##" PRINT COLUMN 122, "==============" END IF IF x.ventas = "3" THEN #->PRINT COLUMN 122, "--------------" SKIP 1 LINE PRINT COLUMN 78, "VALOR BRUTO ", COLUMN 118, x.sub_total using "USD$###,###,###.##" IF x.desc_valor <> 0 THEN PRINT COLUMN 78, "DESCUENTO", COLUMN 122, x.desc_valor using "###,###,###.##" END IF #-> PRINT COLUMN 122, "--------------" PRINT COLUMN 78, "SUB-TOTAL", COLUMN 122, x.sub_total-x.desc_valor using "###,###,###.##" IF x.porc_itbi > 0 THEN PRINT COLUMN 78, x.porc_itbi using "###.##","%"," ITBIS", COLUMN 122, x.itbi using "###,###,###.##" END IF PRINT COLUMN 122, "--------------" PRINT COLUMN 78, "VALOR NETO ", COLUMN 118, x.total_fact using "USD$###,###,###.##" PRINT COLUMN 122, "==============" END IF PRINT comprimido_of #SKIP 8 LINE {PAGE TRAILER SKIP 1 LINE PRINT doce,comprimido_of LET obs1=observacion[1,50] LET obs2=observacion[51,101] LET obs3=observacion[102,152] LET obs4=observacion[152,180] PRINT COLUMN 3, "OBSERVACIONES: ",UPSHIFT(obs1) CLIPPED," ", UPSHIFT(obs2) CLIPPED PRINT COLUMN 3, " ",UPSHIFT(obs3) CLIPPED," ", UPSHIFT(obs4) CLIPPED # IF x.ventas = 3 THEN # PRINT COLUMN 3, "EXCHANGE RATE : ", x.prima_us USING "###.##" # ELSE # PRINT " " # END IF SKIP 2 LINES PRINT COLUMN 4, "NOMBRE TRANSPORTISTA: ",x.nombre_tran, " ", "CEDULA: ",p_cedula using "&&&&&&&&&", " SERIE: ",p_serie using "&&&" PRINT COLUMN 4, "PLACA DEL VEHICULO: ",x.placa_transp} { SKIP 10 LINES PRINT COLUMN 12, x.nombre CLIPPED CALL convierte(x.total_fact) PRINT COLUMN 05, valor_letras clipped, COLUMN 72, x.total_fact using "###,###,###.##" PRINT COLUMN 72, x.factura using "&&&&&" PRINT COLUMN 10, condicion.dias USING "&&" } { SKIP 3 LINES PRINT COLUMN 4,"-------------------------------",20 SPACES, "-------------------------------" PRINT COLUMN 4," FACTURADO POR ",20 SPACES, " REVISADO POR " } SKIP 2 LINES END REPORT