{ -------------------------------------------------------------------------- PROGRAMA : VEPRMT022 OBJETIVO : Este programa captura la factura comercial PUNTO DE VENTAS REALIZADO POR : Ing. Juan Fco. Soto. FECHA : Septiembre 1, 2014. -------------------------------------------------------------------------- } GLOBALS "veprgb000.4gl" DEFINE localidad,mes_chequeo SMALLINT, p_nombre_tipo CHAR(50) DEFINE porce,valor_desc,cant_prod,cant_vend,itbis_o DECIMAL (8,2), descrip_ventas CHAR(30), att dynamic array of record col1 string, col2 string, col3 string, col4 string, col5 string, col6 string, col7 string, col8 string, col9 string end record DEFINE codigo_provincia,t_arr, pubicacion LIKE prtb00012.ubicacion, aplaca_transp CHAR(20), documento_ref CHAR(15), codigodgii CHAR(14), descripcion_ncf CHAR(80), kncf,otro_num INTEGER, porcentaje_n DEC(8,2), sucnombre,xnombre_proyecto VARCHAR(50) DEFINE lleva_parcial,ch_itbi,ch_encabeza CHAR(1), pcotizacion,cuenta_arr INTEGER, observacion CHAR(180) , obs1,obs2,obs3 CHAR(50),obs4 CHAR(30), chexistencia CHAR(2), vexistencia DEC(12,4) DEFINE prtb09 RECORD LIKE prtb00009.* #-> Monitoreo de la orden de produccion MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(4) RETURNING impresor CONNECT to "exterior" AS "IFMX" CONNECT TO "smarmotech" AS "MSSQL" USER usuarios USING clave OPTIONS FORM LINE 2, ERROR LINE 24, COMMENT LINE 23, PROMPT LINE 22 CLEAR SCREEN OPEN FORM vefmmt001 FROM "vefmmt022" DISPLAY FORM vefmmt001 MENU ON ACTION nuevo CALL inicializa() CALL veprmt022() ON ACTION buscar CALL inicializa() call veprmf022() ON ACTION salir exit menu END MENU END MAIN FUNCTION veprmt022() DEFINE t_valor,credito DECIMAL(12,2) DEFINE tipo_fact,p_bonif,ano_act,ano_fe, cod_fact,pcod_transp,psec_transp SMALLINT DEFINE hoy DATE DEFINE hice,primera CHAR(1), opt1,opt CHAR(7) DEFINE pfacturar,tipo_f CHAR(2) DEFINE tot_porc1,porc_desc,tot_porc DECIMAL(8,3) DIALOG ATTRIBUTE(UNBUFFERED,FIELD ORDER FORM) INPUT BY NAME fact_gral1.*,factura_e ATTRIBUTE(WITHOUT DEFAULTS) BEFORE INPUT LET codigodgii = NULL LET descripcion_ncf=NULL LET fact_gral1.fecha_factura = TODAY INITIALIZE fact_gral1.*,primera TO NULL LET porc_desc = 0 LET descrip1 = NULL LET descrip2 = NULL LET p_bonif = NULL LET fact_gral1.cod_cia = 1 LET ch_fecha = TODAY USING "dd/mm/yyyy" LET fact_gral1.fecha_factura = ch_fecha LET tot_porc1 = 0 LET fact_gral1.itbi = 0 LET fact_gral1.sub_total = 0 LET fact_gral1.total_fact = 0 LET fact_gral1.desc_valor = 0 LET tot_porc = 0 DISPLAY BY NAME descrip1 CALL fact_det1.clear() LET descrip1 = NULL LET descrip2 = NULL LET descrip3 = NULL LET p_bonif = NULL LET tot_porc1 = 0 LET t_valor = 0 LET fact_gral1.cond_pago = 4 LET fact_gral1.porc_itbi = NULL LET fact_gral1.prima_us = NULL DISPLAY BY NAME fact_gral1.porc_itbi,fact_gral1.prima_us,descrip1,fact_gral1.tipo_cliente,fact_gral1.sec_cliente, fact_gral1.fecha_conduce,fact_gral1.ciudad LET hice = "S" LET h = 1 INITIALIZE detalle TO NULL LET fact_gral1.itbi = 0 LET fact_gral1.sub_total = 0 LET fact_gral1.total_fact = 0 LET fact_gral1.desc_valor = 0 LET pcondicion = ui.combobox.forname("formonly.cond_pago") CALL ccondicion() ON ACTION F8 LET mes_chequeo = MONTH(TODAY) SET CONNECTION "MSSQL" CALL anular() ON ACTION bncf IF fact_gral1.tipo_cliente IS NOT NULL THEN SELECT UNIQUE a.ncf INTO xncf FROM vetb00060 a WHERE a.tipo_cliente = fact_gral1.tipo_cliente IF xncf ='S' THEN CALL btipo_fact(localidad) RETURNING codigodgii,descripcion_ncf ELSE CALL fgl_Winmessage("ERROR","CLIENTE NO ES ELEJIBLE PARDA NCF","STOP") END IF END IF DISPLAY BY NAME codigodgii,descripcion_ncf NEXT FIELD orden BEFORE FIELD cod_transp LET fact_gral1.cod_transp = pcod_transp LET fact_gral1.sec_transp = psec_transp LET fact_gral1.nombre_tran = NULL LET p_cedula = NULL LET p_serie = NULL IF fact_gral1.cond_pago = 1 or fact_gral1.ventas = "2" THEN IF fact_gral1.ventas = "2" THEN NEXT FIELD fecha_embarque END IF END IF DISPLAY BY NAME fact_gral1.cod_transp,fact_gral1.sec_transp AFTER FIELD cod_transp IF fact_gral1.cod_transp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) # NEXT FIELD cod_transp END IF AFTER FIELD sec_transp IF fact_gral1.sec_transp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) #NEXT FIELD sec_transp ELSE LET fact_gral1.nombre_tran = NULL LET p_cedula = NULL LET p_serie = NULL SELECT a.nombre,a.cedula,a.serie INTO fact_gral1.nombre_tran,p_cedula,p_serie FROM vetb00015 a WHERE a.cod_transp = fact_gral1.cod_transp AND a.sec_transp = fact_gral1.sec_transp AND a.status_t IS NULL IF STATUS < 0 THEN CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF ELSE IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_transp END IF END IF DISPLAY BY NAME fact_gral1.nombre_tran ATTRIBUTE (blue) END IF LET pcod_transp = fact_gral1.cod_transp LET psec_transp = fact_gral1.sec_transp AFTER FIELD cod_tarifa IF fact_gral1.cod_tarifa IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) #NEXT FIELD cod_tarifa ELSE LET descrip6 = NULL SELECT descrip INTO descrip6 FROM vetb00023 WHERE cod_tarifa = fact_gral1.cod_tarifa AND status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_tarifa END IF LET descrip5 = descrip6[1,15] clipped LET descrip6 = descrip6[16,30] clipped DISPLAY BY NAME descrip5,descrip6 ATTRIBUTE (BOLD) END IF AFTER FIELD fecha_embarque IF fact_gral1.ventas = "2" THEN IF fact_gral1.fecha_embarque IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_embarque END IF END IF # No permite que el usuario introduzca un ano que no corresponda al actual LET ano_act = year(today) LET ano_fe = year(fact_gral1.fecha_embarque) IF fact_gral1.fecha_embarque > fact_gral1.fecha_factura THEN LET numero_msg = 100 CALL msg(numero_msg) NEXT FIELD fecha_embarque END IF {POR EL ASUNTO DE LA FACTURA COMERCIAL IF fact_gral1.ventas = "2" THEN EXIT INPUT END IF } AFTER FIELD num_req IF fact_gral1.num_req IS NULL THEN CALL msg(16) NEXT FIELD num_req END IF LET pubicacion = NULL LET documento_ref = NULL SELECT UNIQUE CONVERT(char(10),a.fecha_oc,103),a.ubicacion,a.nombre_file, b.descrip,b.dias,a.cotizacion_no,a.tipo_cliente, a.sec_cliente,a.sec_vend,c.ventas,c.cond_pago,c.ventas INTO fact_gral1.fecha_orden,pubicacion,documento_ref, condicion.descrip,condicion.dias, pcotizacion,fact_gral1.tipo_cliente,fact_gral1.sec_cliente,fact_gral1.sec_vend,fact_gral1.ventas, fact_gral1.cond_pago,fact_gral1.ventas FROM cctb00026 d,prtb00012 a,vetb00012 b,vetb00050 c WHERE d.num_req = fact_gral1.num_req AND a.num_oc = d.num_oc AND c.cond_pago = b.cond_pago AND d.cotizacion_no = c.cotizacion_no AND a.cotizacion_no = c.cotizacion_no AND d.estado = "AUTORIZADA" AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD orden END IF SELECT UNIQUE a.num_req FROM vetb00002 a WHERE a.num_req = fact_gral1.num_req AND a.status_t IS NULL IF STATUS <> NOTFOUND THEN CALL msg(12) NEXT FIELD num_req END IF LET pcotizacion = documento_ref LET porcentaje_n = 0 SELECT a.porc_negocio INTO porcentaje_n FROM vetb00086 a WHERE a.cotizacion_no = pcotizacion IF STATUS = NOTFOUND THEN LET porcentaje_n = 0 END IF SELECT prima,@itbi,porciento INTO fact_gral1.prima_us,fact_gral1.porc_itbi,porce FROM vetb00019 WHERE disponible = "S" LET itbis_o = fact_gral1.itbi IF porcentaje_n > 0 THEN LET fact_gral1.porc_itbi = fact_gral1.porc_itbi * (porcentaje_n /100) END IF SELECT a.nom1_emp||' '||a.apell1_emp INTO fact_gral1.nombre_vend FROM adtb00003 a WHERE a.num_emp = fact_gral1.sec_vend SELECT a.nombre,a.limite_credito,a.cod_zona,a.cod_provincia,a.telefono INTO fact_gral1.nombre,credito,fact_gral1.zona,codigo_provincia, cliente_bas.telefono FROM vetb00004 a WHERE a.tipo_cliente = fact_gral1.tipo_cliente AND a.sec_cliente = fact_gral1.sec_cliente AND a.status_t IS NULL SELECT b.calle,b.casa_num,b.barrio INTO descrip1,descrip2,descrip3 FROM vetb00005 b WHERE b.tipo_cliente = fact_gral1.tipo_cliente AND b.sec_cliente = fact_gral1.sec_cliente SELECT d.nombre_provincia INTO fact_gral1.ciudad FROM vetb00020 d WHERE d.cod_provincia = codigo_provincia LET fact_gral1.direccion = descrip1 clipped,descrip2 clipped,", ", descrip3 clipped IF fact_gral1.ventas = "1" THEN LET tipo_f = "FT" END IF IF fact_gral1.ventas = "2" THEN LET tipo_f = "FE" END IF IF fact_gral1.ventas = "3" THEN LET tipo_f = "FE" END IF IF fact_gral1.ventas = "4" THEN LET tipo_f = "FE" END IF #CONTROL TIPO DE CLIENTES MONEDA SELECT UNIQUE a.ncf,b.descripcion,a.facturar_punto_ventas INTO xncf,descrip_ventas,pfacturar FROM vetb00060 a,vetb00061 b WHERE a.ventas = fact_gral1.ventas AND a.ventas = b.ventas AND a.tipo_cliente = fact_gral1.tipo_cliente IF STATUS = NOTFOUND THEN LET numero_msg = 386 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF IF pfacturar = "NO" THEN CALL fgl_winmessage("ERROR","ESTE TIPO DE CLIENTE NO SE PUEDE FACTURAR EN EL PUNTO DE VENTAS","INFO") NEXT FIELD orden END IF SELECT unique descrip INTO descrip1 FROM vetb00008 WHERE cod_zona = CAST(fact_gral1.zona as smallint) IF xncf ='S' THEN IF codigodgii IS NULL THEN CALL btipo_fact(localidad) RETURNING codigodgii,descripcion_ncf DISPLAY BY NAME codigodgii,descripcion_ncf END IF END IF LET fact_gral1.cod_transp = NULL LET fact_gral1.sec_transp = NULL DISPLAY BY NAME fact_gral1.zona,fact_gral1.direccion,fact_gral1.nombre,fact_gral1.ciudad,descrip1, fact_gral1.direccion,fact_gral1.nombre_vend, pcotizacion,descrip_ventas,fact_gral1.tipo_cliente,fact_gral1.sec_cliente, fact_gral1.cond_pago,fact_gral1.sec_vend,pcotizacion, fact_gral1.ventas SET CONNECTION "MSSQL" SELECT a.dias INTO condicion.dias FROM vetb00012 a WHERE a.cond_pago = fact_gral1.cond_pago LET p_fecha_ven = fact_gral1.fecha_factura + condicion.dias DISPLAY BY NAME p_fecha_ven ATTRIBUTE(RED) DISPLAY BY NAME fact_gral1.fecha_orden,documento_ref, fact_gral1.cond_pago LET porcentaje_n = 0 SELECT a.porc_negocio INTO porcentaje_n FROM vetb00086 a WHERE a.cotizacion_no = pcotizacion IF STATUS = NOTFOUND THEN LET porcentaje_n = 0 END IF BEFORE FIELD placa_transp LET fact_gral1.placa_transp = aplaca_transp LET p_fecha_ven = fact_gral1.fecha_factura + condicion.dias DISPLAY BY NAME fact_gral1.placa_transp DISPLAY BY NAME p_fecha_ven ATTRIBUTE(RED) AFTER FIELD placa_transp IF fact_gral1.placa_transp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) END IF LET aplaca_transp = fact_gral1.placa_transp AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false DELETE FROM vetb00042 WHERE factura = fact_gral1.factura AND cod_mov = p_codigo RETURN END IF IF fact_gral1.fecha_factura IS NULL THEN LET fact_gral1.fecha_factura = TODAY DISPLAY BY NAME fact_gral1.fecha_factura END IF LET p_fechas = fact_gral1.fecha_factura LET hoy = fact_gral1.fecha_factura IF xncf = 'S' AND codigodgii IS NULL THEN CALL msg(391) NEXT FIELD conduce END IF CALL prd(fact_gral1.fecha_factura,usuarios) RETURNING bandera IF bandera = 1 THEN LET bandera = 0 NEXT FIELD fecha_factura END IF IF fact_gral1.ventas IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD ventas END IF IF fact_gral1.ventas = "1" THEN IF fact_gral1.porc_itbi IS NULL THEN LET fact_gral1.porc_itbi = 0 END IF LET tipo_fact = 30 LET tipo_f = "FT" LET fact_gral1.prima_us = NULL ELSE IF fact_gral1.ventas = "3" THEN LET fact_gral1.prima_us = NULL ELSE LET fact_gral1.porc_itbi = NULL IF fact_gral1.prima_us IS NULL THEN LET fact_gral1.prima_us = 1 END IF LET tipo_fact = 31 LET tipo_f = "FE" END IF END IF DISPLAY BY NAME fact_gral1.prima_us,fact_gral1.porc_itbi ATTRIBUTE(BOLD) DISPLAY BY NAME descrip1 ATTRIBUTE (BOLD) IF fact_gral1.sec_cliente IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF IF fact_gral1.cond_pago IS NULL THEN CALL msg(16) NEXT FIELD cond_pago END IF LET fact_gral1.itbi = 0 LET fact_gral1.sub_total = 0 LET fact_gral1.total_fact = 0 LET fact_gral1.desc_valor = 0 LET tot_porc = 0 LET vexistencia = 0 DECLARE buscame CURSOR FOR SELECT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,b.descrip_esp,a.cantidad, c.precio,c.porc_desc FROM cctb00026 AS a INNER JOIN iptb00002 b ON 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 inner JOIN vetb00051 as c on c.cotizacion_no = a.cotizacion_no and a.cod_n = c.cod_n AND a.area = c.area AND a.cod_grupo = c.cod_grupo and a.cod_tipo = c.cod_tipo and a.cod_Sec = c.cod_Sec WHERE a.num_req = fact_gral1.num_req ORDER BY a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec LET idx = 1 FOREACH buscame INTO fact_det1[idx].area, fact_det1[idx].cod_n, fact_det1[idx].cod_grupo, fact_det1[idx].cod_tipo, fact_det1[idx].cod_sec, fact_det1[idx].descrip_esp, fact_det1[idx].cantidad, fact_det1[idx].precio, fact_det1[idx].cantidad_2 IF fact_det1[idx].cantidad < 0 THEN LET fact_det1[idx].cantidad = fact_det1[idx].cantidad * -1 END IF LET fact_det1[idx].bodega=pbodega LET vexistencia = 0 { CONTROL EXISTENCIA SELECT a.control_existencia INTO chexistencia FROM iptb00002 a WHERE a.cod_n = fact_det1[idx].cod_n AND a.cod_grupo = fact_det1[idx].cod_grupo AND a.cod_tipo = fact_det1[idx].cod_tipo AND a.cod_sec = fact_det1[idx].cod_sec IF chexistencia = "SI" THEN CALL existencia(fact_det1[idx].cod_n,fact_det1[idx].cod_grupo, fact_det1[idx].cod_tipo,fact_det1[idx].cod_sec,fact_det1[idx].cantidad, idx,fact_det1[idx].bodega) RETURNING vexistencia LET fact_det1[idx].existencia=vexistencia END IF } LET fact_gral1.sub_total = (fact_det1[idx].cantidad * fact_det1[idx].precio)+fact_gral1.sub_total LET fact_gral1.desc_valor = ((fact_det1[idx].cantidad * fact_det1[idx].precio) * (fact_det1[idx].cantidad_2/100)) + fact_gral1.desc_valor LET fact_gral1.itbi = (fact_gral1.sub_total - fact_gral1.desc_valor)*(fact_gral1.porc_itbi/100) LET fact_gral1.total_fact = fact_gral1.sub_total - fact_gral1.desc_valor + fact_gral1.itbi LET idx = idx + 1 END FOREACH # CALL detalles() DISPLAY BY NAME fact_gral1.sub_total,fact_gral1.desc_valor,fact_gral1.total_fact,fact_gral1.itbi DISPLAY ARRAY fact_det1 TO s_fact.* ON ACTION guardar { CONTROL EXISTENCIA FOR idx = 1 TO fact_det1.getLength() IF fact_det1[idx].cantidad > fact_det1[idx].existencia THEN DISPLAY fact_det1[idx].descrip_esp TO s_fact[SCR_LINE()].descrip_esp ATTRIBUTE(RED) CALL fgl_winmessage("ERROR","EXISTE UN ARTICULO QUE NO TIENE EXISTENCIA EN ESTA BODEGA","INFO") RETURN END IF END FOR } LET opt = FGL_WINQUESTION("PREGUNTA","La Informacion Esta Correcta?","yes","yes|no","question",0) LET cuenta_arr = arr_count() LET opt = UPSHIFT(opt) IF opt = "YES" THEN LET verdad = "S" IF fact_gral1.ventas = "1" THEN LET fact_gral1.prima_us = 1 END IF LET lleva_parcial = "N" #----------------------------------------------------------------------------------------- # CONSOLIDADO SET CONNECTION "MSSQL" SELECT MAX(a.ncf) INTO kncf FROM vetb00072 a WHERE a.tipo_doc = "FT" AND a.codigo_dgii = codigodgii AND a.sucid = localidad IF kncf IS NULL THEN LET kncf = 0 END IF LET kncf = kncf + 1 # NCF DISPLAY BY NAME kncf SELECT UNIQUE a.itbis INTO ch_itbi FROM vetb00071 a WHERE kncf BETWEEN a.ncf_inicial AND a.ncf_final AND a.tipo_doc = "FT" and a.codigo_dgii = codigodgii AND a.sucid = localidad IF STATUS = NOTFOUND THEN LET numero_msg =391 CALL msg(numero_msg) CONTINUE DIALOG END IF SELECT ult_factura INTO fact_gral1.factura FROM vetb00001 IF fact_gral1.factura IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) RETURN END IF LET fact_gral1.factura = fact_gral1.factura + 1 DISPLAY fact_gral1.factura UPDATE vetb00001 SET ult_factura = fact_gral1.factura, us_mod = usuarios, fech_mod = getdate() WHERE sucid = localidad INSERT INTO vetb00072 (documento,tipo_doc,codigo_dgii,ncf,us_crea,fech_crea,sucid) VALUES (fact_gral1.factura,'FT',codigodgii,kncf,usuarios,getdate(),localidad) # Actualiza la tabla de datos generales de la factura INSERT INTO vetb00002 (cod_cia,factura,fecha_factura,ventas,zona,orden, fecha_orden,conduce,fecha_conduce,tipo_cliente, sec_cliente,cod_vend,sec_vend,cond_pago,porc_itbi, porc_desc,prima_us,sub_total,monto_desc,monto_itbi, neto,fecha_embarque,status_impresion,status_t,us_crea, fech_crea, us_mod, fech_mod,documento,placa_transporte,sucid,num_req) VALUES (fact_gral1.cod_cia, fact_gral1.factura, fact_gral1.fecha_factura, fact_gral1.ventas,fact_gral1.zona,fact_gral1.orden, fact_gral1.fecha_orden,fact_gral1.conduce,fact_gral1.fecha_conduce, fact_gral1.tipo_cliente,fact_gral1.sec_cliente,factura_e,fact_gral1.sec_vend, fact_gral1.cond_pago,fact_gral1.porc_itbi,fact_gral1.porc_desc, fact_gral1.prima_us,fact_gral1.sub_total,fact_gral1.desc_valor, fact_gral1.itbi,fact_gral1.total_fact,fact_gral1.fecha_embarque, impresion,NULL,SUSER_SNAME(),GETDATE(),NULL,NULL,documento_ref,fact_gral1.placa_transp, localidad,fact_gral1.num_req) # Actualizacion de la tabla de cuentas por cobrar IF fact_gral1.cond_pago > 1 THEN INSERT INTO cctb00001 VALUES (NULL,fact_gral1.cod_cia,tipo_f,fact_gral1.factura, fact_gral1.tipo_cliente,fact_gral1.sec_cliente,NULL, fact_gral1.sec_vend,fact_gral1.fecha_factura,p_fecha_ven, fact_gral1.factura, NULL,NULL,fact_gral1.total_fact,NULL,NULL, t_costos,0, NULL, SUSER_SNAME(),GETDATE(), NULL, NULL,localidad) END IF #-> Actulizacion de la tabla de monitoreo de la orden de produccion vg Wednesday, 17 January, 2001 09:33:21 AM LET prtb09.num_oc = fact_gral1.orden LET prtb09.fecha = fact_gral1.fecha_factura IF cant_vend <> cant_prod THEN LET prtb09.pendiente = "S" LET prtb09.detalle = "DESPACHO DE MERCANCIA SEGUN FACT. # ",fact_gral1.factura USING "<<<<<<<", " DE FECHA : ",fact_gral1.fecha_factura USING "dd/mm/yyyy" END IF FOR idx = 1 TO cuenta_arr IF fact_det1[idx].cantidad_2 IS NULL THEN LET fact_det1[idx].cantidad_2 = 0 END IF IF fact_det1[idx].cod_n IS NOT NULL THEN INSERT INTO vetb00003 VALUES (fact_gral1.cod_cia,fact_gral1.factura,fact_det1[idx].area,fact_det1[idx].cod_n, fact_det1[idx].cod_grupo,fact_det1[idx].cod_tipo, fact_det1[idx].cod_sec,fact_det1[idx].cantidad,fact_det1[idx].cantidad_2, valor_desc,fact_det1[idx].precio,NULL,SUSER_SNAME(),GETDATE(),NULL,NULL,localidad) # Actualizando la tabla de movimientos de inventario cuando la factura es # normal o Tiene Cantidad a despachar { FACTURA NO AFECTA INVENTARIO EN FECHA :23/04/2008 POR JUAN SOTO LA FACTURA VOLVIO AFECTAR EL INVENTARIO EN ESTE PROGRAMA FECHA 3/09/2014 LET fact_det1[idx].cantidad = fact_det1[idx].cantidad * -1 INSERT INTO iptb00006 (cod_cia,num_doc,fact_no,fecha,cod_transp,sec_transp, cod_sp,cod_sp_sec,placa,cod_tarifa,cod_mov,cod_n, cod_grupo,cod_tipo,cod_sec,cantidad_2, bodega,us_crea,fech_crea) VALUES (fact_gral1.cod_cia,fact_gral1.factura,fact_gral1.factura, fact_gral1.fecha_factura,fact_gral1.cod_transp,fact_gral1.sec_transp, fact_gral1.tipo_cliente,fact_gral1.sec_cliente,fact_gral1.placa_transp, fact_gral1.cod_tarifa,tipo_fact,fact_det1[idx].cod_n, fact_det1[idx].cod_grupo,fact_det1[idx].cod_tipo, fact_det1[idx].cod_sec,fact_det1[idx].cantidad,1,SUSER_SNAME(),GETDATE()) } LET fact_det1[idx].cantidad = fact_det1[idx].cantidad * -1 LET cant_pend[idx] = cant_pend[idx] * -1 # Actualiza el campo placa cuando la factura es de exportacion IF fact_gral1.ventas = 2 THEN UPDATE iptb00006 SET placa = fact_gral1.placa_transp WHERE num_doc = fact_gral1.conduce AND cod_mov = 31 END IF IF p_bonifica[idx] IS NULL THEN LET p_bonifica[idx] = 0 END IF IF opt4 = "N" or opt4 = "n" THEN LET p_bonifica[idx] = 0 END IF # END IF END IF # cod_n IS NULL END FOR ### ============================== IMPRESION CONSOLIDADO============================= 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 imp_fact TO archivo FOR idx = 1 TO cuenta_arr IF fact_det1[idx].cod_n IS NOT NULL AND fact_det1[idx].cod_grupo IS NOT NULL AND fact_det1[idx].cod_tipo IS NOT NULL AND fact_det1[idx].cod_sec IS NOT NULL AND fact_det1[idx].cantidad IS NOT NULL AND fact_det1[idx].cantidad > 0 THEN LET cod_fact = 1 OUTPUT TO REPORT imp_fact(fact_gral1.*,fact_det1[idx].*,tot_porc, p_bonifica[idx],cod_fact) END IF END FOR FINISH REPORT imp_fact RUN imprime LET impresion = "S" END IF LET opt1 = fgl_winquestion("RECIBO","DESEA EMITIR RECIBIO INGRESO?","YES","YES|NO|","QUESTION",0) IF opt1 = "YES" THEN CALL veprfu001() END IF IF xncf = 'S' THEN CALL exterior(localidad,fact_det1,usuarios,opt1) END IF CALL msg(1) END DISPLAY END INPUT ON ACTION CANCEL LET INT_FLAG = FALSE CALL msg(2) EXIT DIALOG RETURN END DIALOG END FUNCTION FUNCTION repite_codigo() LET verdad = NULL LET ant_art.area = fact_det1[curr].area LET ant_art.cod_n = fact_det1[curr].cod_n LET ant_art.cod_grupo = fact_det1[curr].cod_grupo LET ant_art.cod_tipo = fact_det1[curr].cod_tipo LET ant_art.cod_sec = fact_det1[curr].cod_sec LET ant_art.cantidad = fact_det1[curr].cantidad LET ant_art.precio = fact_det1[curr].precio FOR idx = 1 TO arr_count() IF idx != curr THEN IF fact_det1[idx].cod_n IS NOT NULL AND fact_det1[idx].cod_grupo IS NOT NULL AND fact_det1[idx].cod_tipo IS NOT NULL AND fact_det1[idx].cod_sec IS NOT NULL THEN IF fact_det1[idx].area = ant_art.area AND fact_det1[idx].cod_n = ant_art.cod_n AND fact_det1[idx].cod_grupo = ant_art.cod_grupo AND fact_det1[idx].cod_tipo = ant_art.cod_tipo AND fact_det1[idx].cod_sec = ant_art.cod_sec THEN LET numero_msg = 21 CALL msg(numero_msg) LET verdad = "S" ELSE IF verdad != "S" THEN LET verdad = "N" END IF END IF END IF END IF END FOR END FUNCTION FUNCTION tarifas() OPEN WINDOW busqueda AT 7,12 WITH FORM "vefmwd014" ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST,MESSAGE LINE LAST) LET int_flag = false CONSTRUCT criterio ON a.descrip FROM descrip LET selec2 = "SELECT a.cod_tarifa,a.descrip,a.tarifa_pago FROM vetb00023 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_tarifa END IF PREPARE busca_tarifa FROM selec2 IF STATUS >= 0 THEN IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) END IF ELSE CALL integridad() IF bandera = 1 THEN LET bandera = 0 END IF END IF DECLARE buscar_tarifa CURSOR FOR busca_tarifa LET idx = 1 FOREACH buscar_tarifa INTO arr_tarifa[idx].* LET idx = idx + 1 END FOREACH CALL set_count(idx-1) MESSAGE " Selecciona Tarifa del Transportista Donde Esta el cursor" DISPLAY ARRAY arr_tarifa TO s_datos.* LET curr1 = arr_curr() LET fact_gral1.cod_tarifa = arr_tarifa[curr1].cod_tarifa LET descrip6 = arr_tarifa[curr1].descrip LABEL salir_tarifa: CLOSE WINDOW busqueda END FUNCTION FUNCTION cons_transp() OPEN WINDOW busqueda AT 7,12 WITH FORM "vefmwd012" ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST,MESSAGE LINE LAST) LET int_flag = false CONSTRUCT criterio ON a.nombre FROM descrip6 LET selec2 = "SELECT a.cod_transp,a.sec_transp, a.nombre FROM vetb00015 a ", "WHERE a.status_t IS NULL AND ",criterio clipped," ORDER BY 1,2" IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) GO TO salir_consulta_e END IF PREPARE busca_transp1 FROM selec2 IF STATUS >= 0 THEN IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) END IF ELSE CALL integridad() IF bandera = 1 THEN LET bandera = 0 END IF END IF DECLARE buscar_transp CURSOR FOR busca_transp1 LET idx = 1 FOREACH buscar_transp INTO arr_transp[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 idx = idx + 1 END FOREACH CALL set_count(idx-1) MESSAGE " Selecciona Empleado donde esta el cursor" DISPLAY ARRAY arr_transp TO s_transp.* LET curr1 = arr_curr() LET fact_gral1.cod_transp = arr_transp[curr1].cod_transp LET fact_gral1.sec_transp = arr_transp[curr1].sec_transp LET fact_gral1.nombre_tran = arr_transp[curr1].nombre LABEL salir_consulta_e: CLOSE WINDOW busqueda END FUNCTION REPORT imp_fact(x,z,porciento,bonifica,cod_f) DEFINE x RECORD cod_cia LIKE vetb00002.cod_cia, ventas LIKE vetb00002.ventas, zona LIKE vetb00002.zona, factura LIKE vetb00002.factura, conduce LIKE vetb00002.conduce, fecha_conduce LIKE vetb00002.fecha_conduce, fecha_factura LIKE vetb00002.fecha_factura, 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, num_req INT, orden INT, fecha_orden LIKE vetb00002.fecha_orden, porc_itbi LIKE vetb00002.porc_itbi, sec_vend LIKE vetb00002.sec_vend, nombre_vend CHAR(30), cod_transp LIKE iptb00006.cod_transp, sec_transp LIKE iptb00006.sec_transp, cod_tarifa LIKE iptb00006.cod_tarifa, nombre_tran CHAR(30), fecha_embarque LIKE vetb00002.fecha_embarque, 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 z RECORD area SMALLINT, cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descrip_esp CHAR(50), unidad_med CHAR(4), bodega SMALLINT, cantidad DECIMAL(12,5), precio DECIMAL(12,3), cantidad_2 DEC(3,0), monto_fact DECIMAL(12,3), existencia BOOLEAN END RECORD, Pcodigodgii LIKE vetb00071.codigo_dgii DEFINE c_cajas,bonifica,cantidad_p INTEGER, i,cod_f SMALLINT, plado1,plado2,plado3,pcantidad,pmedida,total_unidades DEC(12,5) DEFINE tot_b,tot_n,tot_m,peso_n,medida,peso_b DECIMAL(12,2), ch_fech CHAR(20), descripcion_area CHAR(30) DEFINE porciento DECIMAL(8,3) DEFINE valor_porc DECIMAL (12,2) DEFINE normal,doce,negras,negras_off,doble CHAR(2) DEFINE rnc CHAR(11) DEFINE nombre_vend,apellido_vend CHAR(15) DEFINE comprimido,comprimido_of CHAR(1) DEFINE j,lj,h INTEGER, etiqueta CHAR(30) OUTPUT TOP MARGIN 2 LEFT MARGIN 0 PAGE LENGTH 65 BOTTOM MARGIN 3 ORDER BY z.area,z.cod_n,z.cod_grupo,z.cod_tipo,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 LET lj = (80 - LENGTH(p_companias.nombre CLIPPED))/2 LET j = (90 - LENGTH(p_companias.direccion CLIPPED))/2 LET i = (90 - LENGTH(p_companias.telefono CLIPPED))/2 LET h = (90 - LENGTH(p_companias.rnc CLIPPED))/2 # IF ch_encabeza = "S" THEN # PRINT COLUMN lj, normal,doble,p_companias.nombre CLIPPED # PRINT COLUMN j+3, p_companias.direccion #PRINT COLUMN i-9, "Tels : ",p_companias.telefono , # " Fax : ",p_companias.fax #PRINT COLUMN h-1, "RNC : ",p_companias.rnc CLIPPED, # COLUMN 100, "Pag. ", pageno using "###" # ELSE # PRINT # PRINT # END IF IF ch_encabeza = "S" THEN PRINT COLUMN 4, normal,doble,"MARMOTECH, S. A." ELSE PRINT END IF SKIP 1 LINE 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 IF x.ventas = "1" THEN PRINT COLUMN 4,normal,comprimido_of, negras,"SENORES :" ELSE PRINT COLUMN 4, "SIR :" END IF PRINT COLUMN 4, x.nombre CLIPPED," COD.#",x.tipo_cliente using "&&","-", x.sec_cliente using "&&&&" PRINT COLUMN 4, x.direccion CLIPPED," ",cliente_bas.telefono PRINT COLUMN 4, x.ciudad CLIPPED," RNC #",rnc, COLUMN 50, doble,"CONDUCE ",x.factura using "&&&&&" PRINT COLUMN 4, pubicacion, COLUMN 50, "PAGINA NO. ",pageno USING "<<<" PRINT comprimido SELECT a.nom1_emp,a.apell1_emp INTO p_adtb03.nom1_emp,p_adtb03.apell1_emp FROM adtb00003 a WHERE a.num_emp = fact_gral1.sec_vend IF x.cond_pago > 1 AND x.ventas = "1" THEN LET nombre_vend = p_adtb03.nom1_emp CLIPPED LET apellido_vend = p_adtb03.apell1_emp CLIPPED END IF IF x.ventas = "2" THEN LET nombre_vend = p_adtb03.nom1_emp LET apellido_vend = NULL END IF PRINT "======================================================================================================", "=================================" PRINT COLUMN 1, "SALIDA", COLUMN 15, "ORDEN", COLUMN 25, "FECHA", COLUMN 38, "COTIZACION", COLUMN 52, "FACTURA E", COLUMN 65, "CONDICION", COLUMN 80, "VENDEDOR", COLUMN 113,"DOC.", COLUMN 123, "FECHA FACTURA" PRINT COLUMN 1, x.conduce USING "<<<<<", COLUMN 14, x.orden using "&&&&&&", COLUMN 25, x.fecha_orden using "dd/mm/yyyy", COLUMN 38, pcotizacion USING "&&&&&&", COLUMN 50, factura_e USING "&&&&&&", # COLUMN 65, pcondicion.getitemtext(x.cond_pago) CLIPPED, COLUMN 65, condicion.descrip[1,14], COLUMN 80, "(",x.sec_vend using "&&&&",") ",x.nombre_vend[1,20], COLUMN 113, documento_ref[1,10], COLUMN 126, x.fecha_factura using "dd/mm/yyyy" PRINT COLUMN 65, condicion.descrip[15,30] 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 "======================================================================================================", "=================================" BEFORE GROUP OF z.area SELECT a.nombre_area INTO descripcion_area FROM prtb00016 a WHERE a.area_num=Z.area PRINT "AREA: (",z.area USING "<<<",")",descripcion_area SKIP 1 LINE 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 DECLARE busca_d1 CURSOR FOR SELECT a.etiqueta,a.lado_1,a.lado_2,a.lado_3,a.cantidad,a.medida FROM iptb00025 a WHERE a.area = z.area AND 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 AND a.cod_mov = p_codigo AND a.num_Doc = x.conduce LET total_unidades = 0 FOREACH busca_d1 INTO etiqueta,plado1,plado2,plado3,pcantidad,pmedida PRINT COLUMN 53,pcantidad USING "<<<,<<<"," ",etiqueta clipped," DE ",plado1 USING "<<.#####"," X ", plado2 USING "<<.#####"," X ",plado3 USING "<<.#####"," = ",pmedida USING "<<<.#####" LET total_unidades = total_unidades + pcantidad END FOREACH # IF total_unidades > 0 THEN # PRINT COLUMN 53, "TOTAL UNIDADES ",total_unidades USING "<,<<<" #END IF ON LAST ROW # Impresion de informaciones que pertenecen a facturas de exportacion IF x.ventas = "2" THEN IF x.desc_valor <> 0 THEN PRINT COLUMN 77, x.porc_desc using "<<<.##"," %DISCOUNT", COLUMN 122, x.desc_valor using "###,###,###.##" END IF PRINT COLUMN 122, "--------------" PRINT COLUMN 78, "TOTAL F.O.B. PLANT, D.R.", COLUMN 119, x.total_fact using "USD$###,###,###.##" 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 END IF # Impresion de datos que concierne solamente a tipos de facturas locales IF x.ventas = "1" THEN IF x.ventas = "1" THEN IF x.desc_valor <> 0 THEN SKIP 1 LINE PRINT COLUMN 78, "VALOR BRUTO ", COLUMN 122, x.sub_total using "###,###,###.##" PRINT COLUMN 77, x.porc_desc using "##"," %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 122, x.total_fact using "###,###,###.##" PRINT COLUMN 122, "==============" END IF END IF IF x.ventas = "3" THEN SKIP 1 LINE PRINT COLUMN 78, "VALOR BRUTO ", COLUMN 122, x.sub_total using "###,###,###.##" IF x.desc_valor <> 0 THEN PRINT COLUMN 77, x.porc_desc using "##"," %DESCUENTO", COLUMN 093, x.desc_valor using "###,###,###.##" #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 61, porcentaje_n USING "###.##","%/ ",itbis_o USING "###.##","% ", x.porc_itbi using "###.##","%"," ITBI", 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 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 PRINT COLUMN 3, " ",UPSHIFT(obs2) CLIPPED PRINT COLUMN 3, " ",UPSHIFT(obs3) CLIPPED PRINT COLUMN 3, " ",UPSHIFT(obs4) CLIPPED SKIP 3 LINES PRINT COLUMN 4, "NOMBRE TRANSPORTISTA: ",x.nombre_tran, " ", "CEDULA: ",p_cedula using "&&&&&&&&&", " SERIE: ",p_serie using "&&&" IF x.ventas = "2" THEN PRINT COLUMN 4, "FACTURA COMERCIAL: ",x.placa_transp ELSE PRINT COLUMN 4, "PLACA DEL VEHICULO: ",x.placa_transp END IF SKIP 3 LINES PRINT COLUMN 4,"-------------------------------",20 SPACES, "-------------------------------" PRINT COLUMN 4," FACTURADO POR ",20 SPACES, " REVISADO POR " #SKIP 4 LINES END REPORT ##========================== REPORTE EXTERIOR ================================== REPORT imp_fact1(x,z,porciento,bonifica,cod_f) DEFINE x RECORD cod_cia LIKE vetb00002.cod_cia, ventas LIKE vetb00002.ventas, zona LIKE vetb00002.zona, factura LIKE vetb00002.factura, conduce LIKE vetb00002.conduce, fecha_conduce LIKE vetb00002.fecha_conduce, fecha_factura LIKE vetb00002.fecha_factura, tipo_cliente LIKE vetb00002.tipo_cliente, sec_cliente LIKE vetb00002.sec_cliente, nombre CHAR(30), direccion CHAR(50), 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 LIKE vetb00002.fecha_orden, porc_itbi LIKE vetb00002.porc_itbi, sec_vend LIKE vetb00002.sec_vend, nombre_vend CHAR(30), cod_transp LIKE iptb00006.cod_transp, sec_transp LIKE iptb00006.sec_transp, cod_tarifa LIKE iptb00006.cod_tarifa, nombre_tran CHAR(30), fecha_embarque LIKE vetb00002.fecha_embarque, 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 z RECORD area SMALLINT, cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descrip_esp CHAR(50), unidad_med CHAR(4), cantidad DECIMAL(12,5), precio DECIMAL(12,3), cantidad_2 DEC(3,0), monto_fact DECIMAL(12,3) END RECORD, Pcodigodgii LIKE vetb00071.codigo_dgii DEFINE c_cajas,bonifica,cantidad_p INTEGER, i,cod_f SMALLINT, plado1,plado2,plado3,pcantidad,pmedida,total_unidades DEC(12,5), descripcion_Area CHAR(30) DEFINE tot_b,tot_n,tot_m,peso_n,medida,peso_b DECIMAL(12,2), ch_fech CHAR(20) DEFINE porciento DECIMAL(8,3) DEFINE valor_porc DECIMAL (12,2) DEFINE normal,doce,negras,negras_off,doble CHAR(2) DEFINE rnc CHAR(11) DEFINE nombre_vend,apellido_vend CHAR(15) DEFINE comprimido,comprimido_of CHAR(1) DEFINE j,lj,h,pncf INTEGER OUTPUT TOP MARGIN 2 LEFT MARGIN 0 PAGE LENGTH 65 BOTTOM MARGIN 3 ORDER BY z.area,z.cod_n,z.cod_grupo,z.cod_tipo,z.cod_Sec FORMAT PAGE HEADER BEFORE GROUP OF x.factura 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 LET lj = (80 - LENGTH(p_companias.nombre CLIPPED))/2 LET j = (90 - LENGTH(p_companias.direccion CLIPPED))/2 LET i = (90 - LENGTH(p_companias.telefono CLIPPED))/2 LET h = (90 - LENGTH(p_companias.rnc CLIPPED))/2 PRINT COLUMN lj, normal,doble,p_companias.nombre CLIPPED PRINT COLUMN j+3, p_companias.direccion PRINT COLUMN i-9, "Tels : ",p_companias.telefono , " Fax : ",p_companias.fax PRINT COLUMN h-1, "RNC : ",p_companias.rnc CLIPPED, COLUMN 100, "Pag. ", pageno using "###" 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 IF x.ventas = "1" THEN PRINT COLUMN 4,normal,comprimido_of, negras,"SENORES :" ELSE PRINT COLUMN 4, "SIR :" END IF PRINT COLUMN 4, x.nombre CLIPPED," COD.#",x.tipo_cliente using "&&","-", x.sec_cliente using "&&&&" PRINT COLUMN 4, x.direccion CLIPPED," ",cliente_bas.telefono PRINT COLUMN 4, x.ciudad CLIPPED," RNC #",rnc, COLUMN 50, doble,"FACTURA ",x.factura using "&&&&&" PRINT COLUMN 4, pubicacion PRINT COLUMN 4, "NCF: ",pcodigodgii CLIPPED,pncf USING "&&&&&&&&" PRINT COLUMN 4, descripcion PRINT comprimido SELECT a.nom1_emp,a.apell1_emp INTO p_adtb03.nom1_emp,p_adtb03.apell1_emp FROM adtb00003 a WHERE a.num_emp = fact_gral1.sec_vend IF x.cond_pago > 1 AND x.ventas = "1" THEN LET nombre_vend = p_adtb03.nom1_emp CLIPPED LET apellido_vend = p_adtb03.apell1_emp CLIPPED END IF IF x.cond_pago > 1 AND x.ventas = "1" THEN LET nombre_vend = p_adtb03.nom1_emp CLIPPED LET apellido_vend = p_adtb03.apell1_emp CLIPPED END IF IF x.ventas = "2" THEN LET nombre_vend = p_adtb03.nom1_emp LET apellido_vend = NULL END IF PRINT "======================================================================================================", "=================================" PRINT COLUMN 15, "ORDEN", COLUMN 35, "FECHA", COLUMN 60, "CONDICION", COLUMN 80, "VENDEDOR", COLUMN 98, "COTIZACION", COLUMN 123, "FECHA FACTURA" PRINT COLUMN 14, x.orden using "&&&&&&", COLUMN 34, x.fecha_orden using "dd/mm/yyyy", COLUMN 60, condicion.descrip CLIPPED, COLUMN 80, "(",x.sec_vend using "&&&&",") ",x.nombre_vend CLIPPED, COLUMN 98, x.conduce using "&&&&&&", 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 "======================================================================================================", "=================================" BEFORE GROUP OF z.area SELECT a.nombre_area INTO descripcion_area FROM prtb00016 a WHERE a.area_num=Z.area PRINT "AREA: (",z.area USING "<<<",")",descripcion_area SKIP 1 LINE 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 77, x.porc_desc using "<<<.##"," %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 77, x.porc_desc using "##"," %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 "###.##","%"," ITBI", 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 77, x.porc_desc using "##"," %DESCUENTO", COLUMN 093, x.desc_valor using "###,###,###.##" #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 "###.##","%"," ITBI", 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 3 LINES PRINT COLUMN 4,"-------------------------------",20 SPACES, "-------------------------------" PRINT COLUMN 4," FACTURADO POR ",20 SPACES, " REVISADO POR " SKIP 4 LINES END REPORT FUNCTION veprfu001() DEFINE pagos RECORD documento LIKE vetb00002.factura, detalle CHAR(30), factura LIKE vetb00002.factura, cheque_no CHAR(30), banco CHAR(30), valor_efectivo DECIMAL (12,2) END RECORD OPEN WINDOW captura AT 7,12 WITH FORM "vefmwd013" ATTRIBUTE (BORDER,FORM LINE FIRST + 1,COMMENT LINE LAST) INPUT BY NAME pagos.* BEFORE INPUT LET pagos.factura = fact_gral1.factura LET pagos.detalle = fact_gral1.nombre LET pagos.valor_efectivo = fact_gral1.total_fact DISPLAY fact_gral1.nombre TO detalle DISPLAY BY NAME fact_gral1.factura,pagos.valor_efectivo AFTER INPUT IF int_flag THEN LET int_flag = FALSE RETURN END IF LET fact_gral1.total_fact = fact_gral1.total_fact * -1 IF fact_gral1.total_fact IS NULL THEN CALL msg(16) NEXT FIELD valor_efectivo END IF LET p_fecha_ven = "01/01/01" SELECT ult_recibo INTO pagos.documento FROM cctb00003 WHERE tipo_doc = "PG" IF pagos.documento IS NULL THEN INSERT INTO cctb00003 (ult_recibo,tipo_doc,sucid) VALUES (1,'PG',localidad) END IF LET pagos.documento = pagos.documento + 1 UPDATE cctb00003 SET ult_recibo = pagos.documento WHERE tipo_doc = "PG" DISPLAY BY NAME pagos.documento END INPUT IF fact_gral1.total_fact <> 0 THEN INSERT INTO vetb00021 (num_doc,fecha,tipo_cliente,sec_cliente,nombre,factura,referencia_pago,banco,ventas,sucid, us_crea,fech_crea) VALUES (pagos.documento,fact_gral1.fecha_factura,fact_gral1.tipo_cliente,fact_gral1.sec_cliente, fact_gral1.nombre,fact_gral1.factura,pagos.cheque_no,pagos.banco,fact_gral1.ventas,localidad,usuarios,getdate()) INSERT INTO cctb00001 VALUES (NULL,fact_gral1.cod_cia,"PG",pagos.documento, fact_gral1.tipo_cliente,fact_gral1.sec_cliente,NULL, fact_gral1.sec_vend,fact_gral1.fecha_factura,p_fecha_ven, fact_gral1.factura,pagos.cheque_no,pagos.banco, fact_gral1.total_fact,pagos.valor_efectivo,0, 0,0,NULL,SUSER_SNAME(),GETDATE(),NULL, NULL) LET fact_gral1.total_fact = fact_gral1.total_fact * -1 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 {OUTPUT TO REPORT volante(pagos.documento,fact_gral1.orden,fact_gral1.tipo_cliente,fact_gral1.sec_cliente, fact_gral1.sec_vend,fact_gral1.fecha_factura,fact_gral1.total_fact)} LET p_nombre_tipo = 'RECIBO INGRESO' OUTPUT TO REPORT cctb01 (fact_gral1.tipo_cliente,fact_gral1.sec_cliente, fact_gral1.fecha_factura,pagos.documento,fact_gral1.sec_vend, 'PG',' ',pagos.banco,fact_gral1.factura,fact_gral1.desc_valor, fact_gral1.total_fact,fact_gral1.nombre,fact_gral1.nombre_vend,' ', observacion) FINISH REPORT cctb01 RUN imprime CLOSE WINDOW captura END IF 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_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_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, pitbis DEC(12,2) define hora char(5), l smallint, p_nombre LIKE vetb00004.nombre, p_comentario CHAR(120), #LIKE cctb00011.comentario, ditbis DEC(12,2) output top margin 0 bottom margin 5 left margin 0 page length 33 ORDER BY p_sec_cliente,p_num_doc format page header LET hora = time LET lj = (80 - LENGTH(p_companias.nombre CLIPPED))/2 print column 2, "ccprmt001", column 15, negrilla_on, column lj, p_companias.nombre, negrillas_of, column 40, "NO. DOC.: ",p_num_doc using "<<<<<<<" LET lj = (80 - LENGTH(p_companias.direccion CLIPPED))/2 print column 1, negrilla_on,TODAY USING "DD/MM/YYYY", column lj, p_companias.direccion, negrillas_of, column 73, p_fecha_orig USING "dd/mm/yyyy" IF p_tipo_doc = 'PG' THEN LET lj = (80 - LENGTH(p_nombre_tipo))/2 print column 1, negrilla_on, column lj, "RECIBO INGRESOS",negrillas_of, column 73, hora ELSE LET lj = (80 - LENGTH("DOCUMENTOS"))/2 PRINT COLUMN l,"DOCUMENTOS" END IF SKIP 1 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 :",sucnombre PRINT COLUMN 5, "CUENTA :",p_cuenta_no CLIPPED," - ",p_nombre_cta CLIPPED, COLUMN 50,"DEPOSITO :", p_banco PRINT COLUMN 5, "CLIENTE :",p_nombre CLIPPED,"(", p_tipo_cliente USING "<<","-", p_sec_cliente USING "<<<<<",")" PRINT COLUMN 5, "VENDEDOR :",p_cod_emp_sec USING "<<<<"," - ",p_nomb_emp CLIPPED PRINT COLUMN 5, "TIPO PAGO :",p_tipo_doc CLIPPED," - ",p_nombre_tipo CLIPPED PRINT doce print column 1, "===============================================================", "================================" print column 5, "Aplica Factura ", column 23, " Descuento", column 37, " Valor ", # column 54, " ITBIS", column 70, " TOTAL" #print column 37, " S/ITBIS" print column 1, "===============================================================", "================================" on every row {IF p_tipo_Doc = "NC" THEN IF ncr = "S" THEN LET ditbis =p_valor * (pitbis/100) ELSE LET ditbis = 0 END IF UPDATE cctb00001 SET valor_efectivo = p_valor, valor_cheque = ditbis, valor = p_valor+ditbis 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 } print column 5, p_aplica_a USING "#######", column 23, p_monto_desc USING "#,###,###.##", column 37, p_valor USING "##,###,###.##", column 54, ditbis USING "##,###,###.##", column 70, p_valor USING "###,###,###.##" let l = 12 {QUITE LA SUMATORIA DE P_VALOR + DITBIS PORQUE PARA ESTA EMPRESA NO NECESITA ESE CALCULO, SE INSTALO EL PROGRAM DE NOTAS DE CREDITOS POR VENTAS} AFTER GROUP OF p_sec_cliente PRINT COLUMN 5, "Total----> ", COLUMN 23, GROUP SUM(p_monto_desc) USING "#,###,###.##", COLUMN 37, GROUP SUM(p_valor) USING "##,###,###.##" { 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 IF ncr = "S" THEN LET ditbis =GROUP SUM(p_valor)* (pitbis/100) ELSE LET ditbis = 0 END IF SKIP 1 LINE PRINT COLUMN 37, pitbis USING "###.##","% ITBIS", COLUMN 54, ditbis USING "##,###,###.##" PRINT COLUMN 39, "TOTAL ", COLUMN 54, GROUP SUM(p_valor) USING "##,###,###.##" END IF} on last row 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 normal END REPORT { REPORT volante (x) DEFINE x RECORD num_doc INTEGER, num_orden INTEGER, tipo_cliente INTEGER, sec_cliente INTEGER, cod_emp_sec INTEGER, fecha DATE, avance DECIMAL(12,2) END RECORD DEFINE doble CHAR(1), psimbolo,pmoneda CHAR(20) DEFINE comp_off,negras,negras_of,italic,italic_of CHAR(2) OUTPUT TOP MARGIN 0 LEFT MARGIN 0 PAGE LENGTH 33 FORMAT PAGE HEADER LET negras = ASCII 27, ASCII 69 LET negras_of = ASCII 27, ASCII 70 LET doble = ASCII 14 LET italic = ASCII 27, ASCII 52 LET italic_of = ASCII 27, ASCII 53 LET comp_off = ASCII 18 SELECT unique a.sucnombre,a.telefono,a.direccion INTO p_companias.nombre,p_companias.telefono,p_companias.direccion FROM sucursales a,seg0001 b WHERE b.usuario = usuarios AND b.sucid = a.sucid PRINT COLUMN 70,comp_off, ASCII 27, ASCII 80 PRINT COLUMN 68,doble, x.num_doc using "&&&&&&" IF NOT verdad THEN PRINT " " PRINT " " ELSE PRINT COLUMN 5, negras,p_companias.nombre CLIPPED,negras_of, COLUMN 74, today using "dd/mm/yyyy" PRINT COLUMN 5, p_companias.direccion CLIPPED," TEL.",p_companias.telefono CLIPPED END IF PRINT COLUMN 15, italic,"RECIBO DE INGRESO" PRINT COLUMN 15, italic,"AVANCE A COTIZACION" SKIP 1 LINE LET valor_orig = x.avance LET valor_letras = NULL SELECT a.simbolo,a.descripcion_moneda INTO psimbolo,pmoneda FROM vetb00061 a,vetb00060 b WHERE a.ventas = b.ventas AND b.tipo_cliente = x.tipo_cliente CALL convierte(x.avance) # BUSCA TIPO DE VENTAS PRINT COLUMN 5, "RECIBIMOS DE :",negras,fact_gral1.nombre clipped,"(",x.tipo_cliente USING "&&","-",x.sec_cliente USING "&&&&&&",")",negras_of PRINT COLUMN 5, "DIRECCION :",negras,fact_gral1.direccion,negras_of PRINT COLUMN 5, "PROVINCIA :",negras,fact_gral1.ciudad CLIPPED,negras_of PRINT COLUMN 5, "VENDEDOR :",fact_gral1.sec_vend USING "<<<<"," ",fact_gral1.nombre_vend PRINT COLUMN 5, "PROYECTO :",negras,xnombre_proyecto CLIPPED,negras_of PRINT COLUMN 5, "LA SUMA DE :", negras,valor_letras clipped,negras_of PRINT COLUMN 5, "VALOR RECIBIDO:", negras,psimbolo CLIPPED,x.avance using "<<<,<<<,<<<.##",negras_of SKIP 1 LINE PRINT COLUMN 1, "------------------------------------------------------------------------------" PRINT COLUMN 5, "FECHA", COLUMN 40, "COTIZACION NO.", COLUMN 60, "NETO COBRADO" PRINT COLUMN 1, "------------------------------------------------------------------------------" SKIP 1 LINE PRINT COLUMN 5, x.fecha using "dd/mm/yyyy", COLUMN 40, x.num_orden using "&&&&&&" , COLUMN 58,psimbolo CLIPPED, x.avance using "<<<,<<<,<##.##" PAGE TRAILER SKIP 1 LINE PRINT COLUMN 5, "_______________________________", COLUMN 45,"_______________________________" PRINT COLUMN 10, " Preparado Por ", COLUMN 45, " Autorizado Por" PRINT italic_of END REPORT } 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 fact_gral1.cod_cia,p_fact_no AFTER FIELD p_fact_no SELECT UNIQUE CONVERT(CHAR(10),a.fecha_factura,103),a.orden,a.tipo_cliente,a.sec_cliente,neto INTO fact_gral1.fecha_factura,fact_gral1.orden,fact_gral1.tipo_cliente, fact_gral1.sec_cliente,fact_gral1.total_fact FROM vetb00002 a WHERE a.factura = p_fact_no AND a.status_t IS NULL AND a.fech_crea >'01/01/2009' and a.cod_cia = fact_gral1.cod_cia IF STATUS = NOTFOUND THEN LET numero_msg = 102 CALL msg(numero_msg) NEXT FIELD p_fact_no END IF SELECT a.nombre INTO fact_gral1.nombre FROM vetb00004 a WHERE a.tipo_cliente = fact_gral1.tipo_cliente AND a.sec_cliente = fact_gral1.sec_cliente DISPLAY BY NAME fact_gral1.tipo_cliente,fact_gral1.sec_cliente, fact_gral1.total_fact,fact_gral1.nombre, fact_gral1.fecha_factura ATTRIBUTE(blue) #CONTROL DEVOLUCIONES SELECT DISTINCT a.fact_no FROM iptb00006 a # WHERE a.cod_mov in (12,13) and CONVERT(int,a.fact_no) = p_fact_no AND WHERE a.cod_mov in (12,13) and a.fact_no = p_fact_no AND a.fecha > '01/01/2009' and a.status_t IS NULL IF STATUS != NOTFOUND THEN LET numero_msg =138 CALL msg(numero_msg) NEXT FIELD p_fact_no END IF LET p_fechas = fact_gral1.fecha_factura { SELECT UNIQUE a.usuario INTO p_usuario FROM seg0001 a WHERE a.usuario = SUSER_SNAME() IF p_usuario = "rsierra" THEN IF fact_gral1.fecha_factura != TODAY THEN ERROR "NO PUEDE ANULAR FACTURA QUE NO SEAN DEL DIA DE HOY" RETURN END IF END IF } CALL prd(fact_gral1.fecha_factura,usuarios) RETURNING bandera AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) EXIT INPUT END IF LET opt3 = FGL_WINQUESTION("PREGUNTA","Esta seguro de Anular Esta Factura?","yes","Yes|no","question",0) LET opt3 = UPSHIFT(opt3) IF opt3 = "YES" THEN UPDATE vetb00002 SET status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE factura = p_fact_no AND fech_crea > '01/01/2009' and cod_cia = fact_gral1.cod_cia { EN COMENTARIO PORQUE ESTE PROGRAMA NO ACTUALIZA INVENTARIO UPDATE iptb00006 SET status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE num_doc = p_fact_no AND cod_mov IN (30,31,32,55) AND fech_crea > datetime (2006-03-31 08:00) year to minute and cod_cia = fact_gral1.cod_cia } UPDATE vetb00003 SET status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE factura = p_fact_no AND fech_crea > '01/01/2009' and cod_cia = fact_gral1.cod_cia UPDATE cctb00001 SET status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE num_doc = p_fact_no AND (tipo_doc = "FT" or tipo_doc = "FE") AND fech_crea > '01/01/2009' and cod_cia = fact_gral1.cod_cia UPDATE cctb00001 SET status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE aplica_a = p_fact_no AND tipo_doc = "PC" and fech_crea > '01/01/2009' and cod_cia = fact_gral1.cod_cia # ANULACION DE LAS SERIES IF fact_gral1.ventas = "1" THEN LET p_codigo = 30 ELSE LET p_codigo = 31 END IF UPDATE vetb00042 set status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE factura = p_fact_no AND cod_mov = p_codigo SELECT UNIQUE a.ncf INTO xncf FROM vetb00060 a WHERE a.tipo_cliente = fact_gral1.tipo_cliente IF xncf ='S' THEN LET otro_num = p_fact_no SELECT a.num_trans INTO p_fact_no FROM cctb00020 a WHERE a.tipo_doc IN ("FT","FE") AND a.num_oc =otro_num SET CONNECTION "IFMX" UPDATE vetb00002 SET status_t = "E", us_mod = 'lpinales', fech_mod = CURRENT WHERE factura = p_fact_no AND fech_crea > '01/01/2009' and cod_cia = fact_gral1.cod_cia UPDATE vetb00072 SET status_t = "E", us_mod = 'lpinales', fech_mod = CURRENT WHERE documento = p_fact_no AND tipo_doc IN ("FT","FE") and cod_cia = fact_gral1.cod_cia UPDATE iptb00006 SET status_t = "E", us_mod = 'lpinales', fech_mod = CURRENT WHERE num_doc = p_fact_no AND cod_mov IN (30,31,32,55) AND fech_crea > datetime (2006-03-31 08:00) year to minute and cod_cia = fact_gral1.cod_cia UPDATE vetb00003 SET status_t = "E", us_mod = 'lpinales', fech_mod = current WHERE factura = p_fact_no and cod_cia = fact_gral1.cod_cia UPDATE cctb00001 SET status_t = "E", us_mod = 'lpinales', fech_mod = current WHERE num_doc = p_fact_no AND (tipo_doc = "FT" or tipo_doc = "FE") and cod_cia = fact_gral1.cod_cia AND fech_crea > datetime (2006-03-31 08:00) year to minute UPDATE cctb00001 SET status_t = "E", us_mod = 'lpinales', fech_mod = current WHERE aplica_a = p_fact_no AND tipo_doc = "PC" and cod_cia = fact_gral1.cod_cia END IF LET numero_msg = 82 CALL msg(numero_msg) EXIT INPUT ELSE CONTINUE INPUT END IF EXIT INPUT END INPUT # Este Int_flag es porque tuve que salir del input con el int_flag verdadero # y asi poder salir del window sin problemas LET fact_gral1.fecha_factura = TODAY CLOSE WINDOW anula END FUNCTION FUNCTION precios() # AQUI HAY QUE BUSCAR EL PRECIO PARA CALCULAR POR CLIENTE LET p_costos1 = 0 SELECT precio INTO p_costos1 FROM vetb00025 WHERE ventas = fact_gral1.ventas AND tipo_cliente = fact_gral1.tipo_cliente AND sec_cliente = fact_gral1.sec_cliente AND cod_n=fact_det1[curr].cod_n AND cod_grupo=fact_det1[curr].cod_grupo AND cod_tipo=fact_det1[curr].cod_tipo AND cod_sec = fact_det1[curr].cod_sec AND status_t IS NULL IF STATUS = NOTFOUND THEN SELECT precio INTO p_costos1 FROM vetb00025 WHERE ventas = fact_gral1.ventas AND tipo_cliente IS NULL AND sec_cliente IS NULL AND cod_n = fact_det1[curr].cod_n AND cod_grupo = fact_det1[curr].cod_grupo AND cod_tipo = fact_det1[curr].cod_tipo AND cod_sec = fact_det1[curr].cod_sec AND status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 85 CALL msg(numero_msg) LET verdad = "N" END IF {IF fact_det1[curr].cod_n = 2 THEN LET verdad = "N" END IF} END IF LET fact_det1[curr].precio = p_costos1 END FUNCTION FUNCTION ver_desc() OPEN WINDOW descuentos AT 10,5 WITH FORM "vefmwd007" ATTRIBUTE (BORDER,FORM LINE FIRST +1,COMMENT LINE LAST -1,MESSAGE LINE LAST) CALL set_count(h-1) DISPLAY ARRAY descuenta TO s_desc.* CLOSE WINDOW descuentos END FUNCTION FUNCTION detalles() OPEN WINDOW wdetalle AT 12,2 WITH FORM "vefmwd075" ATTRIBUTE(BORDER,FORM LINE FIRST +1) INPUT BY NAME observacion WITHOUT DEFAULTS CLOSE WINDOW wdetalle END FUNCTION FUNCTION cantidad_desp(forden,fcod_n,fcod_tipo,fcod_grupo,fcod_sec) DEFINE forden INTEGER, fcod_n,fcod_tipo,fcod_grupo,fcod_sec SMALLINT SELECT SUM(b.cantidad) INTO cant_vend FROM vetb00002 a, vetb00003 b WHERE a.orden = forden AND a.fecha_factura > "31122006" AND a.factura = b.factura AND b.cod_n = fcod_n AND b.cod_tipo = fcod_tipo AND b.cod_grupo = fcod_grupo AND b.cod_sec = fcod_sec AND a.status_t IS NULL and b.status_t is NULL IF STATUS = NOTFOUND THEN LET cant_vend = 0 END IF END FUNCTION FUNCTION actualiza_st(forden) DEFINE forden INTEGER, prod_total,vent_total DEC(8,2) SELECT SUM(a.cantidad) INTO prod_total FROM prtb00013 a WHERE a.num_oc = forden IF STATUS = NOTFOUND THEN LET prod_total = 0 END IF SELECT SUM(b.cantidad) INTO vent_total FROM vetb00002 a, vetb00003 b WHERE a.orden = forden AND a.fecha_factura > "31122000" AND a.factura = b.factura AND a.tipo_cliente = fact_gral1.tipo_cliente AND a.sec_cliente = fact_gral1.sec_cliente AND a.status_t IS NULL AND b.status_t IS NULL IF STATUS = NOTFOUND THEN LET vent_total = 0 END IF #-> display "Vendido : ",vent_total," ","Prod : ",prod_total at 2,15 sleep 3 #-> Actualiza la fecha de cierre de la orden de corte vg Wednesday, 17 January, 200112:42:33 PM IF vent_total = prod_total THEN UPDATE prtb00012 SET fecha_cierre = fact_gral1.fecha_factura WHERE @num_oc = forden AND @tipo_cliente = fact_gral1.tipo_cliente AND @sec_cliente = fact_gral1.sec_cliente LET prtb09.num_oc = forden LET prtb09.fecha = fact_gral1.fecha_factura LET prtb09.pendiente = "N" LET prtb09.detalle = "CIERRE DE ORDEN DE PRODUCCION SEGUN FACT. # ",fact_gral1.factura USING "<<<<<<<", " DE FECHA : ",fact_gral1.fecha_factura USING "dd/mm/yyyy" INSERT INTO prtb00009 VALUES (prtb09.num_oc,prtb09.fecha,null,prtb09.pendiente, prtb09.detalle,NULL,SUSER_SNAME(),GETDATE(),NULL,NULL) END IF END FUNCTION FUNCTION convierte(valor_origen) # Funcion para convertir de valor a letras DEFINE valor_origen DECIMAL(12,2) 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_origen LET cheles = (valor_origen - 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 LET valor_letras = valor_letras clipped," ",centenas[k] clipped LET unid_c = c - (k * 100) IF unid_c >= 20 THEN LET unid_c = unid_c - 19 LET valor_letras = valor_letras clipped," ",decenas[unid_c] clipped 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 THEN LET a = unidades_m LET valor_letras = valor_letras clipped, " ",unidades1[a] clipped { ELSE LET a = unidades_m - 19 LET valor_letras = valor_letras clipped, " ",unidades1[a] clipped} 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 IF b > 100 THEN LET b = b / 100 LET valor_letras = valor_letras clipped," ",centenas[b] clipped 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 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 IF unidades_mi > 0 and unidades_mi < 19 THEN LET m = unidades_mi LET valor_letras = valor_letras clipped, " ",unidades1[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," ","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] = "DIESISEIS" LET unidades1[17] = "DIESISIETE" LET unidades1[18] = "DIESIOCHO" LET unidades1[19] = "DIESINUEVE" 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 after_all() # Calculo del sub-total de la factura LET fact_gral1.itbi = 0 LET fact_gral1.sub_total = 0 LET fact_gral1.total_fact = 0 LET fact_gral1.desc_valor = 0 FOR idx = 1 to t_arr IF fact_det1[idx].cantidad IS NOT NULL THEN LET fact_gral1.sub_total = fact_gral1.sub_total + (fact_det1[idx].cantidad * fact_det1[idx].precio) END IF END FOR DISPLAY BY NAME fact_gral1.sub_total FOR idx = 1 to arr_count() IF fact_det1[idx].cantidad IS NOT NULL THEN LET fact_det1[idx].monto_fact = fact_det1[idx].cantidad * fact_det1[idx].precio IF fact_det1[idx].cantidad_2 > 0 THEN #-> calcula el valor en descuento para cada articulo vg LET valor_desc = 0 LET valor_desc = fact_det1[idx].monto_fact * (fact_det1[idx].cantidad_2 / 100) LET fact_gral1.desc_valor = fact_gral1.desc_valor + valor_desc LET fact_det1[idx].monto_fact = fact_det1[idx].monto_fact - valor_desc END IF END IF END FOR DISPLAY BY NAME fact_gral1.desc_valor # Calcula el porciento de ITBIS de la factura dependiendo del porciento # especificado por el usuario IF fact_gral1.porc_itbi IS NOT NULL THEN LET fact_gral1.itbi=((fact_gral1.sub_total - fact_gral1.desc_valor)* fact_gral1.porc_itbi/100) #- LET fact_gral1.itbi=(fact_gral1.sub_total * fact_gral1.porc_itbi/100) ELSE LET fact_gral1.itbi=0 END IF LET itbi = fact_gral1.itbi using "###,###,###.##" DISPLAY BY NAME fact_gral1.itbi ATTRIBUTE (BOLD) # Calculo total de la factura LET fact_gral1.total_fact = (fact_gral1.sub_total - fact_gral1.desc_valor)+ fact_gral1.itbi DISPLAY BY NAME fact_gral1.total_fact ATTRIBUTE (BOLD) END FUNCTION { FUNCTION despiece() OPEN WINDOW despieza AT 15,5 WITH FORM "vefmwd017" END FUNCTION FUNCTION despiecerow() DEFINE plado1,plado2,plado3,pcantidad,pmedida DEC(15,4) DECLARE despiecer CURSOR FOR SELECT a.etiqueta,a.lado_1,a.lado_2,a.lado_3,a.cantidad,a.medida FROM iptb00025 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 AND a.cod_mov = p_codigo AND a.num_Doc = x.conduce LET total_unidades = 0 FOREACH despiecer INTO etiqueta,plado1,plado2,plado3,pcantidad,pmedida } FUNCTION veprmf022() DEFINE tot_porc dec(8,2), cod_fact smallint CONSTRUCT criterio ON a.factura,a.fecha_factura,a.tipo_cliente,a.sec_cliente,a.orden, a.cod_vend FROM factura,fecha_factura,tipo_cliente,sec_cliente,orden, factura_e LET selec = " SELECT a.cod_cia,a.ventas,a.zona,a.factura,a.conduce,convert(char(10),a.fecha_conduce,103),convert(char(10),a.fecha_factura,103),a.tipo_cliente, ", " a.sec_cliente,g.nombre,RTRIM(b.calle) + ' ' + RTRIM(b.casa_num) + ' ' + RTRIM(b.barrio), ", " l.nombre_provincia,a.prima_us,a.porc_Desc,a.cond_pago,a.num_req,a.orden,convert(char(10),a.fecha_orden,103),a.porc_itbi,a.sec_vend, ", " RTRIM(d.nom1_emp) + ' ' + RTRIM(d.apell1_emp),' ', ' ',' ',' ', ", " convert(char(10),a.fecha_embarque,103),' ',a.sub_total,a.monto_Desc, ", " a.monto_itbi,a.neto,a.cod_vend,a.documento ", " FROM vetb00002 a left outer join ", " vetb00005 b on a.tipo_cliente = b.tipo_cliente and a.sec_cliente = b.sec_cliente , ", " vetb00004 g, adtb00003 d,vetb00060 k,vetb00020 l ", " WHERE a.ventas = k.ventas and a.tipo_cliente = k.tipo_cliente and ", " a.tipo_cliente = g.tipo_cliente and ", criterio CLIPPED," and ", " a.sec_cliente = g.sec_cliente and ", " g.cod_provincia =l.cod_provincia and ", " a.sec_vend = d.num_emp and a.status_t IS NULL ", " ORDER BY a.factura " PREPARE comando FROM selec DECLARE consulta SCROLL CURSOR FOR comando OPEN consulta FETCH FIRST consulta INTO fact_gral1.*,factura_e,documento_ref IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF CALL informacion(fact_gral1.conduce,fact_gral1.ventas) DISPLAY BY NAME fact_gral1.*,factura_e,documento_ref MENU "NAVEGACION:" COMMAND "Siguiente" FETCH NEXT consulta iNTO fact_gral1.*,factura_e IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF CALL informacion(fact_gral1.conduce,fact_gral1.ventas) DISPLAY BY NAME fact_gral1.*,factura_e,documento_ref COMMAND "Anterior" FETCH PREVIOUS consulta iNTO fact_gral1.*,factura_e IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF CALL informacion(fact_gral1.conduce,fact_gral1.ventas) LET pcondicion = ui.ComboBox.forName("formonly.cond_pago") CALL ccondicion() DISPLAY BY NAME fact_gral1.*,factura_e,documento_ref COMMAND "Primero" FETCH FIRST consulta iNTO fact_gral1.*,factura_e IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF CALL informacion(fact_gral1.conduce,fact_gral1.ventas) LET pcondicion = ui.ComboBox.forName("formonly.cond_pago") CALL ccondicion() DISPLAY BY NAME fact_gral1.*,factura_e,documento_ref COMMAND "Ultimo" FETCH LAST consulta iNTO fact_gral1.*,factura_e IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF CALL informacion(fact_gral1.conduce,fact_gral1.ventas) LET pcondicion = ui.ComboBox.forName("formonly.cond_pago") CALL ccondicion() DISPLAY BY NAME fact_gral1.*,factura_e,documento_ref COMMAND "ITEMS" LET ch_encabeza ="S" 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 imp_fact TO archivo LET selec = "SELECT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,b.descrip_esp,b.unidad_med, ", " a.cantidad,a.precio,a.cantidad_2,(a.cantidad*a.precio)*(a.cantidad_2/100), ", " (a.cantidad*a.precio) -(a.cantidad*a.precio)*(a.cantidad_2/100) ", " FROM vetb00003 a,iptb00002 b ", " WHERE a.factura = ? 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 " {" UNION ", "SELECT a.area,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,b.descrip_esp,b.unidad_med, ", " a.cantidad,a.precio,a.cantidad_2,(a.cantidad*a.precio)*(a.cantidad_2/100), ", " (a.cantidad*a.precio) -(a.cantidad*a.precio)*(a.cantidad_2/100) ", " FROM historicomtech.dbo.vetb00003 a,historicomtech.dbo.iptb00002 b ", " WHERE a.factura = ? 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 cmdfact FROM selec DECLARE busca_items CURSOR FOR cmdfact OPEN busca_items USING fact_gral1.factura,fact_gral1.factura LET idx = 1 FOREACH busca_items INTO fact_det1[idx].* LET valor_Desc = (fact_det1[idx].cantidad * fact_det1[idx].precio) * (fact_det1[idx].cantidad_2 / 100) IF valor_desc IS NULL THEN LET valor_desc = 0 END IF LET fact_det1[idx].monto_fact = (fact_det1[idx].precio * fact_det1[idx].cantidad)- valor_desc LET cod_fact = 1 LET p_bonifica[idx] = 0 OUTPUT TO REPORT imp_fact(fact_gral1.*,fact_det1[idx].*,tot_porc, p_bonifica[idx],cod_fact) LET idx = idx + 1 END FOREACH CALL set_count(idx-1) DISPLAY ARRAY fact_det1 TO s_fact.* FINISH REPORT imp_fact IF int_flag THEN LET numero_msg = 3 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF RUN imprime COMMAND "Retornar" CLEAR FORM EXIT MENU END MENU END FUNCTION FUNCTION inicializa() CLEAR FORM SELECT a.nombre,a.logo_file INTO p_companias.nombre,p_companias.logo_file FROM companias a SELECT a.sucid,b.sucnombre, a.bodega INTO localidad,sucnombre,pbodega FROM seg0001 a,sucursales b WHERE a.usuario = usuarios AND a.sucid = b.sucid SELECT a.descripcion INTO descrip_bodega FROM intb00009 a WHERE a.cod_bodega = pbodega DISPLAY p_companias.logo_file TO logo_cia DISPLAY p_companias.nombre TO compania DISPLAY BY NAME sucnombre DISPLAY BY NAME descrip_bodega END FUNCTION