Newsgroup: it.comp.appl.access
Titolo: Aprire sottomaschera con record filtrato in base a un valore di una altra maschera

salve,
da una maschera(con sottomaschera) lancio con un pulsante di comando
l'apertura di una altra maschera (con sottomaschera).
 
Vorrei che la sottomaschera di apertura si aprisse con filtro in base a record nella maschera di partenza. 
 
ho provato con questo codice ma non funziona (mi apre la maschera senza filtro)
 
COMANDO CLICK MASCHERA INIZIALE:
 
DoCmd.OpenForm "magazzino_carico_testata", acNormal, , "ID = " & Me.id_carico, acFormEdit, , 3
 
CODICE EVENTO OPEN/LOAD della maschera aperta con comando
Private Sub Form_Load()
 
If Me.OpenArgs = 3 Then
 
Dim lng_prodotto As Long
lng_prodotto = Forms!ordine!ordini_dettaglio.Form!ID.Value
 
Forms!magazzino_carico_testata!Sottomaschera_magazzino_carico_dettaglio.Form.FilterOn = True
Forms!magazzino_carico_testata!Sottomaschera_magazzino_carico_dettaglio.Form.Filter = "id_D_ordine =" & lng_prodotto 
 
 
End If
 
grazie


Qualche cosa di molto strano c'è in quello che hai scritto, come LOGICA.
Partiamo dal Parametro passato come OPENARGS che non si capisce a cosa lo usi... ma passiamo oltre...
 
Se la Maschera e la SottoMaschera sono legate da Campo Master/Secondario... puoi spiegarci perchè vai a forzare il Filtro con la stessa condizione che lega la Relazione MasterDetail...? Cosa ti aspetti di vedere che già non sia quello che vedi...?
 
@Alex


uso il parametro openargs perché la maschera la apro da altri posti, quindi mi serve per far partire il codice solo se se la apro da una certa maschera.
 
La condizione non è la stessa purtroppo. Mi spiego con uno schemino
(premetto ordini e carichi sono uguali)
 
MASCHERA INIZIALE ORDINE/DETTAGLIO 
ordine 50
albicocche id_ordine 50  id_dettaglio 3245
farina     id_ordine 50  id_dettaglio 3246
zucchero   id_ordine 50  id_dettaglio 3247
 
MASCHERA DA FILTRARE CARICO/DETTAGLIO
carico 40
 
albicocche id_carico 40  id_dettaglio 3245
farina     id_carico 40  id_dettaglio 3246
zucchero   id_carico 40  id_dettaglio 3247
 
ora, se mi posiziono su ordine/dettaglio "farina" e faccio click su pulsante
vorrei aprire la maschera carico/dettaglio con questo filtro:
 
farina     id_carico 40  id_dettaglio 3246
 
 


dimenticavo....il punto di comunione tra le due maschere/sottomaschere è id_dettaglio


Se il Campo Comunione è [id_dettaglio] non torna questo:
DoCmd.OpenForm "magazzino_carico_testata", acNormal, , "ID = " & Me.id_carico, acFormEdit, , 3 
 
ovvero dovrai passare come WHERE il Criterio basato su [id_dettaglio] altrimenti non è come dici perchè mi aspetto che nella 1° non ci sia un Id_Carico... 
Se invece c'è non è che basta CONCATENARE...?
 
DoCmd.OpenForm "magazzino_carico_testata", acNormal, , "ID = " & Me.id_carico & " AND id_dettaglio=" & me.id_dettaglio, acFormEdit, , 3 
 
P.S. per l'uso di OPENARGS, prova a leggere cosa restituisce CodeContextObject.Name
 
@Alex


Porca miseria  è sempre difficile spiegarsi in poche righe,senza dilungarsi e essere magari noiosi. Comq:
 non ti torna perché tu non sai che nella tabella ordini ho memorizzato anche l'id del carico abbinato all'ordine. Quindi me.id_carico è l'id del carico corrispettivo. Con la riga 
DoCmd.OpenForm "magazzino_carico_testata", acNormal, , "ID = " & Me.id_carico
apro il carico corrispettivo.
 
Come pure tu non sai che ho copiato nei carichi anche l'ID dei singoli prodotti (ID_D_ordine), quindi sia nei record dettaglio ordini che nei record dettaglio carichi io ho un identificativo uguale.
 
la tua contatenazione non può funzionare
DoCmd.OpenForm "magazzino_carico_testata", acNormal, , "ID = " & Me.id_carico & " AND id_dettaglio=" & me.id_dettaglio, acFormEdit, , 3 
 
perché gli id_dettaglio si trovano nella sottomaschera.
 
 
ho letto del CodeContextObject.Name in un tuo vecchio post
http://forum.masterdrive.it/access-79/access-2003-vba-gestione-info-errori-53350/
 
in Microsoft
https://docs.microsoft.com/en-us/office/vba/api/access.application.codecontextobject
 
più o meno ho capito....identifica il nome di un oggetto che ha causato l'errore

No è l'oggetto che chiama l'apertura...
 
Di fatto non si spalmando le PK ovunque per comodità... non funziona così una struttura NORMALE, intesa come affine alla normalizzazione.
 
Quindi fatico a razionalizzare la necessità di tutti quei criteri legati a Indici esterni, ma è vero prima di tutto che non vedo la struttura ER quindi non posso esprimere altri concetti.
Sta di fatto che non capisco se il dettaglio sia da applicare solo alla SubForm a questo punto...
 
Me!NomeSubform.Filter="Id=" & lngValore
Me!NomeSubForm.FilterOn=True
 
Guarda bene che è alla rovescia di come hai fatto tu.
 
Qui però mi fermo.
@Alex


forse mi sto incartando un poco ma ho fatto uno schema a colori
come immagine se vuoi dare una occhiata
 
https://ibb.co/Yp2jcQM
 

Io sono dell'idea che non è adeguatamente normalizzata.
È assurdo avere nella tabella dettagli gli indici di IdCarico ed IdOrdine che hai nella tabella precedente... come è assurdo avere il NOME(Farina), l'unità ingegneristica e le quantità...
Insomma quella tabella a me sembra inutile, oltre che concettualmente errata nella struttura.
 
@Alex


si si lo so che non è il massimo ma a volte non è facile e a volte è le assurdità sono comode, ti chiedo per curiosità:
che sistema avresti usato tu per tenere agganciati ordine e carico tenendo presente che il carico in sostanza è una copia dell'ordine?
 
un minimo di normalizzazione l'ho fatta,per semplicità tu leggi farina ma vi è id prodotto presente nel listino come pure le misure sono del listino.
 
ciao e grazie per l'attenzione e le conversazioni
Vito


Quindi quelle che si vedono nell'immagine sono Queries...?
In ogni caso se è una copia dell'Ordine, mi chiedo perchè serva una copia dell'ordine... eventualmente comprendo una TempTable, ma a quel punto non hai la PK differente che non serve ma solo Campi indicizzati di REPLICA della Tabella Madre...
 
Come ti dicevo non comprendo assolutamente l'esigenza, ma per aprire la Maschera basata su quella tabella devi passare alla WHERE il parametro Id_Dettaglio ovviamente...
 
@Alex


Grazie ok,
ultima cosa poi terminiamo altrimenti ti tengo attaccato a questa questione.
Non sono esperto di regole statali sulla gestione magazzino anzi non ne so nulla.
So che ci devono essere i carichi come registrazione della merce che entra in casa, so che devono essere uguali agli ordini.
Una volta erano cartacei quindi ora in file e quindi tabella-db, ma in una tabella differente? Se sono uguali dove sta la differenza? forse nella intestazione? una la chiamo ordine e l'altra la chiamo carico? Boh. Indagherò a scuola.
Di nuovo grazie infinite. (intanto ci sono riuscito........)
Vito