Velocizzare l'inserimento dati con maschera ausiliaria con codice VBA

di il
7 risposte

Velocizzare l'inserimento dati con maschera ausiliaria con codice VBA

Buongiorno,

In una maschera “Ordine di Acquisto” ho una sotto-maschera semplicissima costituita da una sola colonna (colonna “TAG”).

Il valore di TAG devo andarlo a prendere da una tabella (TabellaTAG costituita da 2500 TAG differenti con differente “Tipologia di Ordine di Acquisto” di riferimento).

Pertanto dovendo inserire per ogni “Ordine di Acquisto” un numero medio di 150 TAG vorrei velocizzare l'inserimento dati evitando la casella combinata collegata alla tabella TAG od ad una query, in quanto la sequenza CERCA TAG, SELEZIONE TAG, INVIO, NUOVO RECORD, CERCA TAG, SELEZIONE TAG , NUOVO RECOD … è lunga ed onerosa.

Molto meglio se mi venisse offerta a video la serie di TAG sparpagliati in una finestra, non incolonnati ma a matrice, ordinati con un certo criterio,  e potessi selezionarli ad uno ad uno (con un FLAG) per poi scrivere in un sol colpo tutti insieme con un controllo a pulsante.

Per questo sto pensando ad una maschera ausiliaria che si apra in automatico su evento click sul primo record della sotto-maschera.

Sotto-maschera ausiliaria che sia legata ad una tabella o query (per filtrare la “Tipologia di Ordine di acquisto” ) di tipo temporaneo, cioè basata sul valore presente nella maschera principale “Ordine di Acquisto” , generata con codice VBA ed eliminata alla fine della scrittura.

Per scrivere con un LOOP dovrei aprire questo recordset temporaneo e scrivere sulla tabella della sottomaschera.

Prima di provare vorrei un parere sulla strada scelta o consiglio su strade migliori anche perchè non essendo un programmatore devo ricercare la sintassi da utilizzare nei pochi testi di cui dispongo.

Grazie

Francesco Caliandro 

7 Risposte

  • Re: Velocizzare l'inserimento dati con maschera ausiliaria con codice VBA

    15/10/2024 - fcaliandro ha scritto:


    TabellaTAG costituita da 2500 TAG differenti con differente “Tipologia di Ordine di Acquisto” di riferimento

    intanto la lista, considerato che prima selezioni il tipo di ordine che stai facendo, la crei da query:

    select * from tag where tipoordine=[tuocriteriodifiltro]

    così piuttosto che scegliere tra 2500 tag ne hai solo 500 (tiro a indovinare)

    i tag cosa sono? che valore hanno? il dato è parlante? nel senso che dal valore che ha riesco a capire cosa inserire? un esempio banale di cosa sto dicendo è:

    supponiamo che tag sia iva, supponiamo che sto vendendo automobili, supponiamo che arriva un cliente con iva agevolata, non devo cercare il cod. 3457789 se l'iva è al 4% ma semplicemente memorizzo il valore del tag (iva in questo caso) come codice 04. se ho una iva al 22% con detraibilità al 50% il codice parlante sarà 22-50.

    questo permette già di evitare il popup e scrivere nel campo direttamente 22-50 o 04. molto più rapido e senza tendine o popup (nulla vietando di aprire in ogni caso una tendina o un popup).

    15/10/2024 - fcaliandro ha scritto:


    in quanto la sequenza CERCA TAG, SELEZIONE TAG, INVIO, NUOVO RECORD, CERCA TAG, SELEZIONE TAG , NUOVO RECOD … è lunga ed onerosa.

    puoi fare una ricerca contestuale: scrivi 0 e ti propone i tag che iniziano con 0, continui premendo 4 e propone i tag che iniziano con 04 e così via…

    15/10/2024 - fcaliandro ha scritto:


    Per scrivere con un LOOP dovrei aprire questo recordset temporaneo e scrivere sulla tabella della sottomaschera.

    questa non l'ho capita… tutti gli altri record hanno lo stesso tag? se si, scritto il primo ti propone sempre quello scelto rendendo inutile il popup.

    15/10/2024 - fcaliandro ha scritto:


    Molto meglio se mi venisse offerta a video la serie di TAG sparpagliati in una finestra,

    uhm… 500 caselle ordinati in base a quale criterio? fai prima a trovare l'ago nel pagliaio.

    tuttavia, sarebbero 2500 ma, se vuoi visualizzare solo quelli in base al tipo di ordine, ti serve sempre la sql di cui sopra.

    fatta la query, devi popolare la griglia con un ciclo che va dal primo record all'ultimo. se poi i successivi record hanno lo stesso tag, hai fatto un lavoro inutile, basta trovare il primo in 5 secondi e inserirlo negli altri record prima che arrivi ad inserire l'ultimo valore del campo del record corrente. ergo, pazzia allo stato puro per l'utente e per le risorse del pc.

    magari ho capito male io…

  • Re: Velocizzare l'inserimento dati con maschera ausiliaria con codice VBA

    Ciao Andrea,

    ti ringrazio per la tua risposta. Vedi sotto altre info per capire il mio caso.

    1. La query di selezione per filtrare l'ordina da considerare è in corso di preparazione. L'avevo individuata anche io questa convenienza.
    2. I TAG sono molto astrusi , non parlanti assolutamente ed anche abbastanza scomodi da digitare a mano,. Di sotto alcuni esempi:
      Extracted TAG list:
      963-STCK0807
      975-SRYK9456A
      963-SRYK0901A
      962-SRAK0413B
      962-SRAK0615
      963-SRAK0615
      962-STCK0807
      962-SRAK0618
      963-SRAK0618
      962-SRYK0901A
      essi presentano tuttavia una parte di stringa che li raggruppa. Per esempio i due sopra in giallo, cambia solo la parte iniziale (devo tenere conto di questo nel posizionamento ordinato in maschera ausiliaria, ovvero raggruppamento alfabetico della parte di stringa comune dal 4° carattere al 8° carattere o qualcosa del genere)
    3. Il lavoro di inserimento dati avviene vedendo a video il documento di circa 30 pagine che contiene 8 TAG per pagina. Circa 7 Documenti al giorno per darti un'idea del carico di lavoro per la vista. Vedere il TAG sul monitor di sinistra e selezionare il TAG sulla maschera access a destra.
    4. Circa il LOOP che non ho spiegato bene intendo dire che vorrei creare un codice che scorra sui record di un recordset creato ad hoc per poi scrivere tali dati sulla tabella della sotto-maschera.
    5. Circa la mole di TAG presenti nella tabella principale ho 2415 TAG tutti diversi non parlanti.
  • Re: Velocizzare l'inserimento dati con maschera ausiliaria con codice VBA

    Non sono certo di aver compreso a pieno il problema, ma:

    1. Aggiungi alla tabella TAG un campo di tipo Sì/No che ti serve appunto per la spunta che volevi tu. Poi dovrai prenderti cura di impostare tutti a No (una semplice query di aggiornamento e/o codice VBA può fare questo).
    2.  

    15/10/2024 - fcaliandro ha scritto:


    Extracted TAG list:
    963-STCK0807
    975-SRYK9456A
    963-SRYK0901A
    962-SRAK0413B
    962-SRAK0615
    963-SRAK0615
    962-STCK0807
    962-SRAK0618
    963-SRAK0618
    962-SRYK0901A
    essi presentano tuttavia una parte di stringa che li raggruppa. Per esempio i due sopra in giallo, cambia solo la parte iniziale (devo tenere conto di questo nel posizionamento ordinato in maschera ausiliaria, ovvero raggruppamento alfabetico della parte di stringa comune dal 4° carattere al 8° carattere o qualcosa del genere)

    Che succede se imposti la tabella TAG con più campi, in modo tale che separi le parti SINISTRA (3 caratteri/cifre) e DESTRA (8 o più caratteri)? In questo modo potresti raggruppare come meglio vuoi tu.

  • Re: Velocizzare l'inserimento dati con maschera ausiliaria con codice VBA

    15/10/2024 - OsvaldoLaviosa ha scritto:


    Non sono certo di aver compreso a pieno il problema, ma:

    1. Aggiungi alla tabella TAG un campo di tipo Sì/No che ti serve appunto per la spunta che volevi tu. Poi dovrai prenderti cura di impostare tutti a No (una semplice query di aggiornamento e/o codice VBA può fare questo).

    Grazie Osvaldo. Prima di impostare la parte complicata (il codice per immettere i dati in modo veloce - scrittura con codice VBA) sto preparando gli oggetti di partenza. La tabella TAG me la ritrovo come query di raggruppamento poichè ci sono tanti duplicati nella tabella TAG ordinati. In questa query di raggruppamento posso fare come dici tu: “separare la string in due parti per ordinare i dati nel modo più agevole per chi deve cercarli”.

    Sto pensando di creare una tabella con il campo si/no e legarla con una relazione alla query di raggruppamento TAG. Non so se alla fine funzionerà..

    Vedrò

  • Re: Velocizzare l'inserimento dati con maschera ausiliaria con codice VBA

    Supposto chel'utente sappia cosa cercare in quel tag:

    Select * from tabellatag where tag like [parametro] and [parametro]<>''

    Nell'evento keypress se preme invio lanci la query

    Nell'edit di ricerca l'utente scrive “987%xyz%” e troed sva l'elenco conzd tag chconstine 987 e xyz

  • Re: Velocizzare l'inserimento dati con maschera ausiliaria con codice VBA

    15/10/2024 - sihsandrea ha scritto:


    Supposto chel'utente sappia cosa cercare in quel tag:

    Select * from tabellatag where tag like [parametro] and [parametro]<>''

    Nell'evento keypress se preme invio lanci la query

    Nell'edit di ricerca l'utente scrive “987%xyz%” e troed sva l'elenco conzd tag chconstine 987 e xyz

    Grazie Andrea, il tuo suggerimento quindi è di lavorare sulla casella combinata collegata ad una query parametrica. Mi sembra semplice e molto utile. Ma vorrei applicarla ad una maschera con selezione multipla che poi scriva in una sola volta tutti i TAG che ho selezionato filtrati nel modo che hai suggerito.

  • Re: Velocizzare l'inserimento dati con maschera ausiliaria con codice VBA

    No. Non una combo ma un edit…

    In base a cosa scrivi nell'edit (es. 945%abc%) alla pressione del tasto invio lanci la sql con like [edit.value] (o come lo vede access).

    La sql popola la tabella che rendi visibile, fai la multiselect e in base ai criteri, che non ho capito quali sono, aggiorni con un pulsantino (visibile insieme alla tabella che hai fatto apparire) lanci la sql di update (sempre con i tuoi criteri) per poi sparire e riapparire in caso di modifica (che non ho capito come avviene il tutto).

    Non so se il tag va per riga e a quale condizione (si potrebbe automatizzare direttamente in fase di inserimento senza la scocciatura del multiselect).

    Rioeto, non ho chiari il meccanismo di assegnazione di questi tag, ti ho solo suggerito un modo di filtrare quei 2500 tag per ridurli a qualche decina.

Devi accedere o registrarti per scrivere nel forum
7 risposte