Come configurare smartphone e PC. Portale informativo
  • casa
  • Sicurezza
  • 1s uv modulo di selezione aperto con selezione. Come impostare una selezione nel modulo elenco di ricerca? Selezione impostazione in modalità utente

1s uv modulo di selezione aperto con selezione. Come impostare una selezione nel modulo elenco di ricerca? Selezione impostazione in modalità utente

Questo codice ti consente di aprire un elenco di documenti con un filtro impostato, puoi anche aprire un elenco di elementi di directory con il filtro desiderato

Codice 1C v 8.2 UE Form = OpenForm("Document.Invoice.Form.ListForm"); //Apri il modulo
FilterOwner =Form.List.Filter.Items.Add(Type("DataCompositionFilterItem")); //Aggiungi selezione
SelectionOwner.ComparisonType = DataCompositionComparisonType.Equal; //Come ci confrontiamo
SelectionOwner.Use = vero; // Imposta la casella di controllo per utilizzare New DataCompositionField("Nomenclature")
SelectionOwner.LeftValue = Nuovo campo di composizione dati ("Account"); //In base a quali oggetti faremo una selezione
SelectionOwner.RightValue = Oggetto.Account; // E il valore di selezione stesso

In modo da aprire un modulo elenco con una selezione predefinita utilizzare i seguenti metodi:

Primo modo sta nel fatto che quando si apre il modulo, è possibile impostare il parametro del modulo Selezione e aprire il modulo dell'elenco con questo parametro.

Il parametro Selezione è una struttura. I nomi degli elementi corrispondono ai nomi dei campi con cui viene effettuata la selezione e i valori contengono i valori della selezione. Questa è un'opzione di estensione del modulo gestita dall'elenco dinamico. Vale a dire, esiste per i moduli il cui attributo principale è un attributo del tipo DynamicList, ad esempio, moduli elenco e moduli di selezione.

Ad esempio, l'esempio seguente apre un elenco di ricevute filtrate dal campo Numero, che è 333.

Codice 1C v 8.2 UE SelectionValue = Nuova struttura("Numero", "333");
SelectionParameters = Nuova struttura("Selection", SelectionValue);
OpenForm("Document.Invoice.ListForm",ChoiceParameters);

Secondo modo

È possibile aprire un modulo elenco senza parametri:

Codice 1C v 8.2 UE OpenForm("Document.Invoice.ListForm");

E poi, nell'event handler del form dell'elenco delle fatture in entrata Quando CreatedOn the Server, scrivi il codice che crea una selezione nell'elenco dinamico, che è l'attributo principale del form:

Codice 1C v 8.2 UE e su server
Procedura su CreationOnServer(Failure, StandardProcessing)
Elemento di selezione = Elenco. Selezione. Elementi. Aggiungi(Tipo("Elemento di selezione della composizione dei dati"));
SelectionElement.LeftValue = New DataCompositionField("Numero");
SelectionItem.ComparisonType = DataCompositionComparisonType.More;
SelectionItem.Use = vero;
SelectionItem.DisplayMode = ElementDisplayModeDataCompositionSettings.Unavailable;
SelectionItem.RightValue = "000000001";
EndProcedura

I vantaggi di questo metodo sono che il Tipo di confronto della selezione può essere impostato non solo Uguale, come nel primo caso, ma Maggiore, Minore, ecc.

Ma questo metodo ha uno svantaggio molto significativo: con questa selezione, il modulo si aprirà sempre. Ovunque sia stata chiamata. Pertanto, questo modulo non deve essere assegnato come principale. E se, tuttavia, è quello principale, prima di impostare la selezione, è necessario fornire una sorta di analisi da dove si apre questo modulo. Ad esempio, analizzando i parametri del modulo.

Terza via

Infine, la condizione di selezione può essere inserita in una query arbitraria che seleziona i dati per un elenco dinamico.

Ad esempio, dobbiamo aprire un elenco di fatture in entrata che contengono un elemento selezionato nell'elenco degli elementi.

Per fare ciò, sotto forma di elenco articoli, creeremo un comando e il pulsante corrispondente Fatture in entrata.

Compila il gestore di esecuzione per questo comando come segue:

Codice 1C v 8.2 UE &OnClient
Procedura di fatturazione (comando)
ChoiceParameters = Nuova struttura("FilterByItem", Items.List.CurrentLine);
OpenForm("Document.Invoice.ListForm",ChoiceParameters);
EndProcedura

In questo gestore, apriamo il modulo per l'elenco delle fatture in entrata, passando un collegamento all'elemento corrente nell'elenco degli elementi al parametro del modulo FilterByItem.

Quindi creeremo un modulo per l'elenco dei documenti Fattura in entrata e creeremo un parametro del modulo FilterByProduct, che utilizzeremo per aprire il modulo con la selezione richiesta.

Ora apriamo la tavolozza delle proprietà dell'attributo principale del modulo Elenco. Imposta il flag CustomRequest e fai clic su Apri nella riga delle impostazioni dell'elenco.

Nel campo Richiesta, inserisci il seguente testo della richiesta:

Codice 1C v 8.2 UE SELECT
Numero fattura fattura documento,
DocumentoFattura in entrata.Data
DA
Documento.Fattura in entrata AS Documento in entrata
DOVE
DocumentReceipt Invoice.Goods.Item = &Articolo

Nella richiesta, utilizziamo il parametro Product, a cui verrà passato un collegamento alla riga corrente nell'elenco articoli contenuto nel parametro del modulo elenco fatture in entrata FilterByItem.

A tale scopo, nel gestore eventi del modulo elenco OnCreateAtServer, scrivere il codice per impostare il valore del parametro Richiesta prodotto:

Codice 1C v 8.2 UE &OnClient
Procedura all'apertura (fallimento)
List.Parameters.SetParameterValue("Prodotto", Parameters.FilterByProduct);
EndProcedura

Qui List.Parameters è un elenco di parametri di query dell'elenco dinamico per l'attributo List. Il valore del parametro Item è impostato uguale al valore del parametro del modulo FilterByItem.

Di conseguenza, premendo il pulsante Fatture nel modulo elenco articoli, riceveremo un elenco delle sole fatture in entrata che contengono l'articolo attualmente selezionato nell'elenco articoli.

Selezione su moduli gestiti in 1C 8.3

L'articolo prenderà in considerazione le opzioni per l'installazione della selezione nei moduli gestiti 1C 8.3. La selezione di una lista dinamica può essere impostata in modo statico o dinamico, nell'interfaccia utente o nel configuratore. Tutte le opzioni di selezione saranno discusse di seguito.

  • Impostazione della selezione nel configuratore

Selezione impostazione in modalità utente

Un elenco dinamico, a differenza di una tabella o di un albero di valori, è una soluzione più adatta per implementare moduli contenenti qualsiasi elenco, perché. elenco dinamico fornisce il più ampio set di strumenti per lavorare con la selezione, il raggruppamento dei campi e l'ordinamento. Questa selezione può essere impostata mentre si lavora in modalità utente o configuratore, il principio è lo stesso.

Per impostare la selezione in modalità aziendale, è necessario richiamare il comando "Imposta elenco".

Si aprirà una finestra.


La scheda "selezione" contiene un elenco di campi che si trova nell'elenco corrente. Seleziona i campi dell'elenco in base ai quali filtrare. Questo può essere fatto facendo doppio clic o usando il trascinamento della selezione.


Imposta il tipo di confronto e il valore, fai clic su "Termina modifica", la selezione è impostata.


Quando si imposta un filtro in modalità aziendale, i campi per i cosiddetti filtri rapidi vengono creati automaticamente nel modulo elenco.


Affinché la piattaforma 1C crei automaticamente campi di selezione rapida, quando si sviluppa un modulo nel configuratore, è necessario specificare un gruppo di impostazioni utente.


Questa selezione verrà salvata solo per l'utente corrente, il che consente una personalizzazione flessibile dell'elenco dinamico. Tuttavia, se il compito è quello di effettuare una selezione fissa per un elenco specifico per tutti gli utenti del sistema, possiamo risolverlo solo tramite il configuratore.

Impostazione della selezione nel configuratore

Agendo nel configuratore, possiamo impostare la selezione di un elenco dinamico di due tipi: fisso e dinamico. La selezione fissa è configurata una volta, dinamica o programmatica - può essere impostata in base a qualsiasi dato nel sistema.

Il principio dell'impostazione di una selezione fissa nel configuratore non differisce dall'impostazione nella modalità utente sopra descritta. Per impostare la selezione, dobbiamo aprire le impostazioni dell'elenco dinamico.


Si aprirà una finestra.


La selezione viene impostata allo stesso modo della modalità utente.

L'opzione “Includi nelle impostazioni utente” determina se la selezione impostata nel configuratore sarà disponibile in modalità utente tramite la voce di menu “Configura lista”.


Selezione dinamica (software).

Spesso è necessario impostare la selezione a livello di codice, ad esempio quando si apre un modulo di selezione, quando è necessario aprire un modulo gestito con una selezione. Un parametro viene passato al form e un filtro viene impostato su questo parametro. Un esempio comune è la selezione delle voci di directory in base al proprietario.

Metodi

Se la configurazione in fase di sviluppo contiene il sottosistema BSP "Funzionalità di base", la selezione del software nell'elenco dinamico può essere impostata utilizzando il metodo standard:

Uso genericoClientServer.SetDynamicListSelectionItem()

La firma di questo metodo è:

Elenco dinamico Digitare: DynamicList - L'elenco in cui si desidera impostare il filtro.

NomeCampo Digitare: String - Il campo su cui si desidera impostare il filtro.

Valore giusto Tipo: Arbitrario - Valore di selezione (Facoltativo. Valore predefinito: Undefined. Avviso! Se si supera Undefined, il valore non verrà modificato).

Gentile Confronto Tipo: DataCompositionComparisonType - Condizione di selezione.

Rappresentazione Tipo: Stringa - Rappresentazione dell'elemento della composizione dati (Facoltativo. Valore predefinito: Undefined. Se specificato, viene visualizzato solo il flag use con la rappresentazione specificata (nessun valore visualizzato). Per cancellare, in modo che il valore venga visualizzato di nuovo, passare una stringa vuota).

Utilizzo Digitare: Boolean - Flag per utilizzare questa selezione (Facoltativo. Valore predefinito: Non definito).

Modalità display Digitare: ItemDisplayModeDataCompositionSettings - Come questa selezione viene visualizzata all'utente. Possibili valori:

  • ElementDisplayModeDataCompositionSettings.QuickAccess – Nel gruppo delle impostazioni rapide sopra l'elenco.
  • ElementDisplayModeDataCompositionSettings.Normal – Per elencare le impostazioni (nel sottomenu Altro).
  • ElementDisplayModeDataCompositionSettings.Disabled: impedisce all'utente di modificare questa selezione.

IDUserSettings Tipo: String - L'identificatore univoco per questa selezione (Utilizzato per collegarsi alle impostazioni dell'utente).

Per rimuovere alcuni valori di selezione, è necessario utilizzare il metodo tipico:

Server client per uso generico. DeleteDynamicListSelectionGroupElements()

La firma di questo metodo è:

Elenco dinamico Digitare: DynamicList - attributo del modulo per il quale si desidera impostare il filtro.

NomeCampo Digitare: String - il nome del campo del layout (non utilizzato per i gruppi).

Rappresentazione Tipo: String - rappresentazione del campo di layout.

Se non è presente alcun BSP nel sistema, la selezione può essere impostata in modo indipendente utilizzando l'oggetto DataCompositionField.

Elemento di selezione = Elenco. Selezione. Elementi. Aggiungi(Tipo("Elemento di selezione della composizione dei dati")); SelectionElement.LeftValue = New DataCompositionField("Nome"); Selezione Element.ComparisonType = DataCompositionComparisonType.Equal; SelectionItem.DisplayMode = ElementDisplayModeDataCompositionSettings.QuickAccess; // OptionalSelectionElement.RightValue = "Ivanov";

Questa selezione selezionerà le righe in cui il valore "Nome" = "Ivanov".

Per utilizzare la logica "AND", "OR", "NOT", si intende il tipo di dati Gruppo di elementi di selezione della composizione dei dati

SelectionGroup = List.Filter.Elements.Add(Type("DataCompositionSelectionItemsGroup")); Selection Group.GroupType = GroupType di DataComposition Selection Elements.GroupOR; Elemento di selezione = Gruppo di selezione.Elements.Add(Type("Elemento di selezione di DataComposition")); SelectionElement.LeftValue = New DataCompositionField("Nome"); Selezione Element.ComparisonType = DataCompositionComparisonType.Equal; SelectionItem.RightValue = "Ivanov"; Elemento di selezione = Gruppo di selezione.Elements.Add(Type("Elemento di selezione di DataComposition")); SelectionElement.LeftValue = New DataCompositionField("Nome"); Selezione Element.ComparisonType = DataCompositionComparisonType.Equal; SelectionElement.RightValue = "Petrov";

Questa selezione selezionerà le righe in cui il valore "Nome" = "Ivanov" o "Petrov".

La selezione in un elenco dinamico può essere effettuata anche modificando il testo della query dell'elenco dinamico. Questa opzione funziona quando l'elenco dinamico viene creato tramite una "richiesta arbitraria".


Per fare ciò, aggiungiamo la condizione "WHERE is True" al testo della query ...


Come puoi vedere, questo approccio è più compatto in termini di scrittura del codice. Più complesse sono le condizioni di selezione nella sezione tabulare che vogliamo impostare, più ingombrante sarà l'opzione che utilizza la selezione tramite DataCompositionSelectionElement. Tuttavia, l'esempio con la modifica del testo della richiesta ha i suoi svantaggi: questa implementazione non è resistente alle modifiche al codice. Ad esempio, hai fatto una tale implementazione e l'hai dimenticato, ma se in futuro vuoi modificare il testo della query aggiungendo qualsiasi operatore dopo WHERE (ORDINE, GRUPPO), devi ricordare che il codice del programma contiene:

List.QueryText = List.QueryText + " And DirectoryUsers.Name V(""Ivanov"",""Petrov"")";

Se questo non viene preso in considerazione, si verificherà un errore, ma per evitarlo, puoi ripetere l'operazione in un'altra implementazione. Aggiungi la seguente condizione al testo della richiesta:

WHERE (NON &SelectionSet OR DirectoryUsers.Name IN (&AllowedName))

List.Parameters.SetParameterValue("SelectionSet", Name.Quantity() > 0); List.Parameters.SetParameterValue("AllowedName", FullName);

Qui FIO è un array.

Come puoi vedere, 2 righe di codice contro 10. Quale metodo scegliere dipende dall'attività specifica dell'applicazione.

Codice 1C v 8.x DirectoryList.Selection.Reset();
DirectoryList.Selection.status.ComparisonType=ComparisonType.Contains;
DirectoryList.Selection.Status.Value="Accettato";
DirectoryList.Selection.Status.Set();

Per 1C 8.2:
Esistono diversi modi per aprire un modulo elenco con alcune selezioni predefinite. Consideriamoli in ordine:

1. Il primo modo è che quando si apre il modulo, è possibile impostare il parametro del modulo Selezione e aprire il modulo elenco con questo parametro. Il parametro Selezione è una struttura. I nomi degli elementi corrispondono ai nomi dei campi con cui viene effettuata la selezione e i valori contengono i valori della selezione. Questa è un'opzione di estensione del modulo gestita dall'elenco dinamico. Vale a dire, esiste per i moduli il cui attributo principale è un attributo del tipo Elenco dinamico, ad esempio, per i moduli elenco e i moduli di selezione.

Durante il processo di apertura del modulo, il filtro verrà impostato per il campo specificato.
Codice 1C v 8.2 UE // Ad esempio, nell'esempio seguente viene aperta una lista di fatture in entrata con selezione dal campo Numero pari a 333.
ValoreSelezione = Nuova struttura("Numero", "333");
SelectionParameters = Nuova struttura("Selection", SelectionValue);

OpenForm("Document.Invoice.ListForm",ChoiceParameters);

// Ad esempio, l'esempio seguente apre un elenco di fatture
// con selezione dal campo Controparte, pari a "JSC Horns and Hooves".
SelectionValue \u003d Nuova struttura ("Counterparty", "JSC Horns and Hooves");
SelectionParameters = Nuova struttura("Selection", SelectionValue);
OpenForm("Document.Invoice.ListForm",Scelta parametri);

2. È possibile aprire il modulo elenco senza parametri:
Codice 1C v 8.2 UE OpenForm("Document.Invoice.ListForm");

E poi, nell'event handler del form dell'elenco delle fatture in entrata Quando CreatedOn the Server, scrivi il codice che crea una selezione nell'elenco dinamico, che è l'attributo principale del form:
Codice 1C v 8.2 UE e su server

Elemento di selezione = Elenco. Selezione. Elementi. Aggiungi(Tipo("Elemento di selezione della composizione dei dati"));
SelectionElement.LeftValue = New DataCompositionField("Numero");


SelectionItem.DisplayMode = ElementDisplayModeDataCompositionSettings.Unavailable;
SelectionItem.RightValue = "000000001";
EndProcedura

&Sul server
Procedura su CreationOnServer(Failure, StandardProcessing)
ElementFilter = List.Filter.Items.Add(Tipo
("DataCompositionSelectionElement");
SelectionElement.LeftValue = New DataCompositionField ("DocumentAmount");
SelectionItem.ComparisonType = DataCompositionComparisonType.More;
SelectionItem.Use = vero;
Selezione Element.RightValue = 150000;
EndProcedura

Il vantaggio di questo metodo è che ComparisonType la selezione può essere impostata non solo Uguale, come nel primo caso, ma anche Più, Meno, ecc.

Ma questo metodo ha uno svantaggio molto significativo: con questa selezione, il modulo si aprirà sempre. Ovunque sia stata chiamata. Pertanto, questo modulo non deve essere assegnato come principale. E se, tuttavia, è quello principale, prima di impostare la selezione, è necessario fornire una sorta di analisi da dove si apre questo modulo. Ad esempio, analizzando i parametri del modulo.

3. Infine, la condizione di selezione può essere inserita in una query arbitraria che seleziona i dati per un elenco dinamico. Ad esempio, dobbiamo aprire un elenco di fatture in entrata che contengono un elemento selezionato nell'elenco degli elementi.

Per fare ciò, sotto forma di elenco articoli, creeremo un comando e il pulsante corrispondente Fatture in entrata.

Compila il gestore di esecuzione per questo comando come segue:
Codice 1C v 8.2 UE &OnClient
Procedura di fatturazione (comando)

ListForm = GetForm("Document.Invoice.ListForm");
ListForm.FilterByItem = Items.List.CurrentRow;
ListForm.Open();

EndProcedura

In questo gestore, riceviamo il modulo dell'elenco delle fatture in entrata e passiamo un collegamento all'elemento corrente nell'elenco degli articoli al parametro del modulo FilterByItem e apriamo il modulo con questo parametro.

Quindi creeremo un elenco di documenti nel modulo Fattura in entrata e creeremo un attributo del modulo FilterByProduct, che utilizzeremo come parametro del modulo quando verrà aperto. Ora apriamo la tavolozza delle proprietà dell'attributo principale del modulo Elenco. Imposta il flag Richiesta Arbitraria e nella riga Impostazioni elenco, fare clic su Aprire.

Nel campo Richiesta, inserisci il seguente testo della richiesta:
Codice 1C v 8.2 UE SELECT
Numero fattura fattura documento,
DocumentoFattura in entrata.Data
DA
Documento.Fattura in entrata AS Documento in entrata
DOVE
DocumentReceipt Invoice.Goods.Item = &Articolo

Nella richiesta, utilizziamo il parametro Product, a cui verrà passato un collegamento alla riga corrente nell'elenco articoli contenuto nel parametro del modulo elenco fatture in entrata FilterByItem. Per fare ciò, nel gestore di eventi del modulo Elenco OnOpening, scrivere il codice per impostare il valore del parametro Richiesta prodotto:
Codice 1C v 8.2 SU
&AtCliente
Procedura all'apertura (fallimento)

List.Parameters.SetParameterValue("Elemento", FilterByItem);

EndProcedura

Qui Elenco.Parametriè un elenco di parametri di query dell'elenco dinamico per l'attributo List. Il valore del parametro Item è impostato uguale al valore del parametro del modulo FilterByItem.

Di conseguenza, premendo il pulsante Fatture nel modulo elenco articoli, riceveremo un elenco delle sole fatture in entrata che contengono l'articolo attualmente selezionato nell'elenco articoli.

In modo da aprire un modulo di selezione con selezione in 1s 8.2(moduli regolari), dobbiamo eseguire alcune azioni. Lo prenderemo prima. Successivamente, imposteremo la selezione e la apriremo a livello di codice, ecco un codice di esempio:

Selezione sul modulo nel campo di input 1C 8.2 con più valori

Nell'esempio sopra, abbiamo considerato come impostare la selezione sul modulo di selezione per valore specifico. Ora esaminiamo la situazione in cui è necessario sostituire più valori, ad esempio, può essere sia un array che lo scaricamento da un risultato di query. Questa è una selezione nel campo di input 1s con molteplici significati.

Innanzitutto, otteniamo il modulo di selezione, passiamo "Element" (proprietario) nei parametri, impostiamo il flag della modalità di selezione. Quindi creiamo un elenco di valori e un array, notiamo che come selezione quando è impostato il tipo di confronto nell'elenco, può esserci solo un oggetto con il tipo Elenco di valori. Aggiungiamo elementi all'array, quindi carichiamo questo array nell'elenco dei valori, che, di conseguenza, impostiamo nella selezione. Inoltre, non dimenticare di abilitare il flag per utilizzare questa selezione e impostare il Tipo di confronto.

Impostando la selezione nel campo di input del form in 1C 8.3, l'evento StartChoice

Ora considera selezione nel campo di input su un modulo gestito in 1C 8.3. Troviamo sul form l'elemento di nostro interesse, in cui imposteremo la selezione, nel nostro caso questo è il campo "Organizzazione". Troviamo l'evento "StartChoice", clicchiamo sulla lente di ingrandimento e ci troviamo nella procedura. Vediamo il parametro ChoiceData, questo parametro è di tipo ValueList. Per limitare la selezione agli elementi necessari, è necessario compilare l'Elenco dei valori. Possiamo selezionare elementi solo sul server, quindi creiamo una procedura con la direttiva di compilazione &AtServer. In questa procedura, compileremo i dati di scelta.

Articoli correlati in alto