Jak otevřít formulář seznamu s nějakým výběrem? Jak nastavit výběr ve formuláři seznamu adresářů? 1c otevřete formulář pro výběr adresáře s výběrem.

Tento kód umožňuje otevřít seznam dokumentů se zadaným výběrem, můžete také otevřít seznam prvků adresáře s požadovaným výběrem

Kód 1C v 8.2 UP Form = OpenForm("Document. Invoice.Form.ListForm"); //Otevřete formulář
SelectionOwner =Form.List.Selection.Elements.Add(Type("DataCompositionSelectionElement")); //Přidat výběr
SelectionOwner.ComparisonView = DataCompositionComparisonView.Equals; //Jak budeme porovnávat
SelectOwner.Use = True; // Zaškrtněte políčko pro použití NewDataCompositionField("Nomenclature")
SelectionOwner.LeftValue = NewDataCompositionField("Účet"); //Jaké podrobnosti použijeme při výběru?
SelectionOwner.RightValue = Object.Account; // A samotný význam výběru

V následujících situacích otevřete formulář seznamu s předdefinovaným výběrem použijte následující metody:

První způsob spočívá v tom, že když otevřete formulář, můžete nastavit parametr Výběrový formulář a otevřít formulář seznamu s tímto parametrem.

Parametr Výběr představuje strukturu. Názvy prvků odpovídají názvům polí, pomocí kterých se provádí výběr, a hodnoty obsahují hodnoty výběru. Toto je možnost rozšíření formuláře spravovaného dynamickým seznamem. To znamená, že existuje pro formuláře, jejichž hlavním atributem je atribut typu DynamicList, například formuláře seznamu a formuláře pro výběr.

Například v následujícím příkladu se otevře seznam faktur s výběrem podle pole Číslo rovné 333.

Kód 1C v 8.2 UE Selection Value = New Structure("Number", "333");
SelectionParameters = Nová struktura("Výběr", SelectionValue);
OpenForm("Dokument. Faktura o příjmu. Formulář seznamu", Možnosti výběru);

Druhý způsob

Můžete otevřít formulář seznamu bez parametrů:

Kód 1C v 8.2 UP OpenForm("Dokument. Faktura příjmu. Formulář seznamu");

A pak v obslužné rutině události formuláře pro seznam faktur When CreatedOnServer napište kód, který vytvoří výběr v dynamickém seznamu, což je hlavní atribut formuláře:

Kód 1C v 8.2 UP &OnServer
Postup při vytvoření na serveru (selhání, standardní zpracování)
Element výběru = List.Selection.Elements.Add(Type("Prvek výběru DataComposition"));
SelectionElement.LeftValue = NewDataCompositionField("Číslo");
SelectionElement.ComparisonView = DataCompositionComparisonView.More;
SelectionElement.Use = True;
SelectionElement.DisplayMode = ElementDisplayModeDataCompositionSettings.Inaccessible;
SelectionElement.RightValue = "000000001";
Konec procedury

Výhody této metody spočívají v tom, že Typ porovnání pro výběr lze nastavit nejen na Equal, jako v prvním případě, ale také na Více, Méně atd.

Ale tato metoda má také velmi významnou nevýhodu: s tímto výběrem se formulář vždy otevře. Kamkoli ji zavolali. Proto by tento formulář neměl být označen jako hlavní. A pokud je to přesto hlavní, pak je před instalací výběru nutné provést nějakou analýzu toho, odkud se tento formulář otevírá. Například analýza parametrů formuláře.

Třetí způsob

Nakonec lze podmínku výběru umístit do vlastního dotazu, který vybere data pro dynamický seznam.

Potřebujeme například otevřít seznam faktur, které obsahují položku zvýrazněnou v seznamu položek.

Chcete-li to provést, ve formě seznamu položek vytvořte příkaz a příslušné tlačítko Příjem faktur.

Vyplňte obslužnou rutinu provádění pro tento příkaz takto:

Kód 1C v 8.2 UP &OnClient
Postup Potvrzení Faktury (příkaz)
SelectionParameters = New Structure("FilterByProduct", Elements.List.CurrentRow);
OpenForm("Dokument. Faktura o příjmu. Formulář seznamu", Možnosti výběru);
Konec procedury

V tomto handleru otevřeme formulář pro seznam faktur a předáme odkaz na aktuální položku v seznamu položek do parametru formuláře FilterByProduct.

Poté vytvoříme formulář pro seznam dokladů: Příjem faktury a vytvoříme parametr formuláře FilterBy Product, kterým otevřeme formulář s požadovaným výběrem.

Nyní otevřeme paletu vlastností hlavního atributu formuláře Seznam. Nastavte příznak Vlastní dotaz a na řádku Nastavení seznamu klikněte na Otevřít.

Do pole Žádost zadejte následující text žádosti:

Kód 1C v 8.2 UP SELECT
Číslo účtenky dokladu,
Dokument Příjem Invoice.Date
Z
Document.ReceiptInvoice AS DocumentReceiptInvoice
KDE
Doklad o příjmu Invoice.Products.Product = &Produkt

V požadavku použijeme parametr Položka, který obdrží odkaz na aktuální řádek v seznamu položek, obsažený v parametru formuláře seznamu faktur FilterBy Item.

Chcete-li to provést, v obslužné rutině události seznamu formuláře Při CreatedOnServer napíšeme kód pro nastavení hodnoty parametru požadavku na produkt:

Kód 1C v 8.2 UP &OnClient
Postup otevírání (selhání)
List.Parameters.SetParameterValue("Produkt", Parameters.FilterByProduct);
Konec procedury

Zde List.Parameters je seznam dynamických parametrů požadavku na seznam pro atribut List. Hodnota parametru Product je nastavena na stejnou hodnotu jako hodnota parametru formuláře FilterByProduct.

V důsledku toho kliknutím na tlačítko Příjem faktur ve formuláři seznamu položek obdržíme seznam pouze těch faktur, které obsahují aktuálně vybranou položku v seznamu položek.

Výběr na spravovaných formulářích v 1C 8.3

Článek pojednává o možnostech instalace výběru ve spravovaných formulářích 1C 8.3. Výběr pro dynamický seznam lze nastavit staticky nebo dynamicky v uživatelském rozhraní nebo v konfigurátoru. Níže zvážíme všechny možnosti výběru.

  • Výběr nastavení v konfigurátoru

Volba nastavení v uživatelském režimu

Dynamický seznam, na rozdíl od tabulky nebo stromu hodnot, je vhodnějším řešením pro implementaci formulářů obsahujících libovolné seznamy, protože Dynamický seznam poskytuje nejširší škálu nástrojů pro práci s výběrem, seskupováním polí a řazením. Tuto volbu lze nastavit při práci v uživatelském režimu nebo konfigurátoru, princip je stejný.

Chcete-li nastavit výběr v podnikovém režimu, musíte zavolat příkaz „Přizpůsobit seznam“.

Otevře se okno.


Záložka „výběr“ představuje seznam polí, která jsou v aktuálním seznamu. Vyberte pole seznamu, podle kterých budeme filtrovat. To lze provést dvojitým kliknutím nebo pomocí přetažení.


Nastavíme typ a hodnotu porovnání, klikneme na „Dokončit úpravy“, výběr je nastaven.


Když nastavíte výběr v podnikovém režimu, ve formuláři seznamu se automaticky vytvoří tzv. pole rychlého výběru.


Aby platforma 1C automaticky vytvořila pole rychlého výběru, musíte při vývoji formuláře v konfigurátoru zadat skupinu uživatelských nastavení.


Tento výběr bude uložen pouze pro aktuálního uživatele, což umožňuje flexibilní přizpůsobení dynamického seznamu. Pokud je však úkolem provést pevný výběr pro konkrétní seznam pro všechny uživatele systému, můžeme to vyřešit pouze přes konfigurátor.

Výběr nastavení v konfigurátoru

V konfigurátoru můžeme nastavit dva typy dynamického výběru seznamu – pevný a dynamický. Pevný výběr lze konfigurovat jednou, dynamický nebo programový lze nastavit v závislosti na jakýchkoli datech v systému.

Princip nastavení pevné volby v konfigurátoru se neliší od nastavení ve výše popsaném uživatelském režimu. Pro nastavení výběru musíme otevřít nastavení dynamického seznamu.


Otevře se okno.


Výběr se nastavuje stejným způsobem jako v uživatelském režimu.

Volba „Zahrnout do uživatelského nastavení“ určuje, zda bude výběr nastavený v konfigurátoru dostupný v uživatelském režimu prostřednictvím položky nabídky „Přizpůsobit seznam“.


Dynamický (softwarový) výběr

Často je potřeba nastavit výběr programově, například při otevírání výběrového formuláře, kdy potřebujeme otevřít řízený formulář s výběrem. Do formuláře se předá parametr a na základě tohoto parametru se nastaví výběr. Běžným příkladem je výběr položek adresáře podle vlastníka.

Metody

Pokud vyvíjená konfigurace obsahuje subsystém BSP „Basic Functionality“, lze výběr softwaru v dynamickém seznamu nainstalovat standardní metodou:

GeneralPurposeClientServer.SetDynamicListSelectionElement()

Podpis této metody:

DynamicList Typ: DynamicList – Seznam, ve kterém chcete nastavit výběr.

Název pole Typ: Řetězec – Pole, podle kterého chcete nastavit výběr.

RightValue Typ: Libovolný – Hodnota výběru (Volitelné. Výchozí hodnota: Nedefinováno. Poznámka: Pokud předáte hodnotu Nedefinováno, hodnota se nezmění).

Zobrazit srovnání Typ: DataComposition Typ porovnání – Podmínka výběru.

Výkon Typ: String – Reprezentace prvku kompozice dat (Volitelné. Výchozí hodnota: Nedefinováno. Pokud je zadán, vytiskne se pouze příznak použití se zadanou reprezentací (nevytiskne se žádná hodnota). Pro vymazání je nutné předat prázdný řetězec, aby se hodnota vytiskla znovu.)

Používání Typ: Boolean – Příznak pro použití tohoto výběru (Volitelné. Výchozí: Nedefinováno).

Zobrazovací mód Typ: ItemDisplayModeDataCompositionSettings – Jak se tento výběr zobrazí uživateli. Možné hodnoty:

  • Režim zobrazení prvku Nastavení rozvržení dat. Rychlý přístup – Ve skupině rychlých nastavení nad seznamem.
  • Prvek Režim zobrazení Nastavení rozložení dat Normální – V nastavení seznamu (v podnabídce Více).
  • ElementDisplayModeDataCompositionSettings.Inaccessible – zabrání uživateli ve změně tohoto výběru.

IdentifierUserSettings Typ: Řetězec – Jedinečný identifikátor pro tento výběr (Slouží ke komunikaci s uživatelským nastavením).

Chcete-li odebrat hodnotu výběru, musíte použít standardní metodu:

General PurposeClientServer. RemoveGroupElementsSelectionDynamicList()

Podpis této metody:

DynamicList Typ: DynamicList – atribut formuláře, pro který chcete nastavit výběr.

Název pole Typ: String – název pole rozvržení (nepoužívá se pro skupiny).

Výkon Typ: Řetězec – Reprezentace pole rozvržení.

Pokud v systému není žádný BSP, lze výběr nastavit nezávisle pomocí objektu DataComposition Field.

Element výběru = List.Selection.Elements.Add(Type("Prvek výběru DataComposition")); Selection Element.LeftValue = NewDataCompositionField("Name"); Selection Element.Comparison Type = DataComposition Comparison Type.Equal; Selection Element.DisplayMode = ElementDisplayModeDataCompositionSettings.QuickAccess; // Volitelný prvek výběru RightValue = "Ivanov";

Tento výběr vybere řádky, ve kterých je hodnota „Celé jméno“ = „Ivanov“.

Pro použití logického „AND“, „OR“, „NOT“ je určen datový typ DataCompositionSelectionElementGroup

Skupina výběru = List.Selection.Elements.Add(Type("Skupina prvků výběru DataComposition")); SelectionGroup.GroupType = DataCompositionSelectionElementGroupType.GroupOR; Prvek výběru = Prvky výběru. Selection Element.LeftValue = NewDataCompositionField("Name"); Selection Element.Comparison Type = DataComposition Comparison Type.Equal; Element výběru.RightValue = "Ivanov"; Prvek výběru = Prvky výběru. Selection Element.LeftValue = NewDataCompositionField("Name"); Selection Element.Comparison Type = DataComposition Comparison Type.Equal; SelectionElement.RightValue = "Petrov";

Tento výběr vybere řádky, ve kterých je hodnota „Celé jméno“ = „Ivanov“ nebo „Petrov“.

Výběr v dynamickém seznamu lze také provést změnou textu požadavku na dynamický seznam. Tato možnost funguje, když je dynamický seznam vytvořen prostřednictvím „vlastního požadavku“.


Chcete-li to provést, přidejte do textu dotazu podmínku „WHERE IS THE PRAVDA“...


Jak vidíte, tento přístup je kompaktnější, pokud jde o psaní kódu. Čím složitější jsou podmínky výběru v tabulkové části, kterou chceme nastavit, tím těžkopádnější bude možnost pomocí výběru pomocí prvku výběru kompozice dat. Příklad se změnou textu požadavku má však své nevýhody - tato implementace není odolná vůči změnám kódu. Například jste provedli takovou implementaci a zapomněli jste, ale pokud v budoucnu budete chtít upravit text požadavku přidáním nějakého operátoru za WHERE (ORDER, GROUP), musíte si pamatovat, že programový kód obsahuje:

List.QueryText = List.QueryText + " And DirectoryUsers.Celé jméno V(""Ivanov"",""Petrov"")";

Pokud to nebude bráno v úvahu, dojde k chybě, ale abyste tomu zabránili, můžete ji změnit na jinou implementaci. K textu požadavku přidáváme následující podmínku:

WHERE (NOT &SelectionInstalled OR DirectoryUsers.Name IN (&PermittedName))

List.Parameters.SetParameterValue("SelectionSet", Celé jméno.Quantity() > 0); List.Parameters.SetParameterValue("Povolené celé jméno", Celé jméno);

Zde je celé jméno pole.

Jak vidíte, 2 řádky kódu versus 10. Kterou metodu zvolit, závisí na konkrétním aplikačním úkolu.

V následujících situacích otevřít výběrový formulář s výběrem v 1s 8.2(běžné formy), musíme provést nějaké akce. Dostaneme to jako první. Poté nastavíme výběr a otevřeme jej programově, zde je příklad kódu:

Výběr na formuláři ve vstupním poli 1C 8.2 s několika hodnotami

Ve výše uvedeném příkladu jsme se podívali jak nastavit výběr na výběrovém formuláři podle konkrétní hodnoty. Nyní se podíváme na situaci, kdy potřebujete nahradit několik hodnot, může to být například pole nebo uvolněné z výsledku dotazu. Toto je výběr ve vstupním poli 1c s více významy.

Nejprve získáme formulář výběru, v parametrech předáme „Prvek“ (vlastník), nastavíme příznak režimu výběru. Poté vytvoříme seznam hodnot a pole, všimneme si, že jako výběr při nastavování typu porovnání v seznamu může být objekt přítomen pouze s typem ListValues. Do pole přidáme prvky, toto pole pak načteme do Seznamu hodnot, který následně nastavíme ve výběru. Nezapomeňte také povolit příznak pro použití tohoto výběru a nastavit typ porovnání.

Nastavení výběru ve vstupním poli na formuláři v 1C 8.3, Začátek výběru události

Nyní uvažujme výběr ve vstupním poli na spravovaném formuláři v 1C 8.3. Najdeme ve formuláři prvek, který nás zajímá, ve kterém nastavíme výběr, v našem případě je to pole „Organizace“. Najdeme událost “Start výběru”, klikneme na lupu a ocitneme se v postupu. Vidíme parametr Data výběru, tento parametr je typu ValueList. Abychom výběr omezili na potřebné prvky, musíme vyplnit Seznam hodnot. Prvky můžeme vybírat pouze na serveru, proto vytvoříme proceduru s direktivou kompilace &OnServer. V tomto postupu vyplňte Údaje o výběru.

Kód 1C v 8.x DirectoryList.Selection.Reset();
DirectoryList.Selection.status.ComparisonType=ComparisonType.Contains;
DirectoryList.Selection.Status.Value="Přijato";
DirectoryList.Selection.Status.Set();

Pro 1C 8.2:
Existuje několik způsobů, jak otevřít formulář seznamu s přednastaveným výběrem. Podívejme se na ně v pořadí:

1. První metodou je, že při otevírání formuláře můžete nastavit parametr Výběrový formulář a otevřít formulář seznamu s tímto parametrem. Parametr Výběr představuje strukturu. Názvy prvků odpovídají názvům polí, pomocí kterých se provádí výběr, a hodnoty obsahují hodnoty výběru. Toto je možnost rozšíření formuláře spravovaného dynamickým seznamem. To znamená, že existuje pro formuláře, jejichž hlavním atributem je atribut typu Dynamický seznam, například formuláře seznamu a formuláře pro výběr.

Při otevření formuláře se provede výběr na základě zadaného pole.
Kód 1C v 8.2 UP // Například v následujícím příkladu se otevře seznam faktur s výběrem podle pole Číslo rovným 333.
Hodnota výběru = Nová struktura("Číslo", "333");
SelectionParameters = Nová struktura("Výběr", SelectionValue);

OpenForm("Dokument. Faktura o příjmu. Formulář seznamu", Možnosti výběru);

// Například následující příklad otevře seznam faktur
// s výběrem polem Dodavatel rovným „OJSC Rohy a kopyta“.
Hodnota výběru = Nová struktura("Protistrana", "OJSC Rohy a kopyta");
SelectionParameters = Nová struktura("Výběr", SelectionValue);
OpenForm("Dokument. Faktura o příjmu. Formulář seznamu", Možnosti výběru);

2. Můžete otevřít formulář seznamu bez parametrů:
Kód 1C v 8.2 UP OpenForm("Dokument. Faktura příjmu. Formulář seznamu");

A pak v obslužné rutině události formuláře pro seznam faktur When CreatedOnServer napište kód, který vytvoří výběr v dynamickém seznamu, což je hlavní atribut formuláře:
Kód 1C v 8.2 UP &OnServer

Element výběru = List.Selection.Elements.Add(Type("Prvek výběru DataComposition"));
SelectionElement.LeftValue = NewDataCompositionField("Číslo");


SelectionElement.DisplayMode = ElementDisplayModeDataCompositionSettings.Inaccessible;
SelectionElement.RightValue = "000000001";
Konec procedury

&Na serveru
Postup při vytvoření na serveru (selhání, standardní zpracování)
Element výběru = List.Selection.Elements.Add(Type
(„DataCompositionSelectionElement“));
SelectionElement.LeftValue = NewDataCompositionField("DocumentAmount");
SelectionElement.ComparisonView = DataCompositionComparisonView.More;
SelectionElement.Use = True;
SelectionElement.RightValue = 150000;
Konec procedury

Výhodou této metody je srovnávací pohled pro výběr můžete nastavit nejen Equal, jako v prvním případě, ale také Více, Méně atd.

Ale tato metoda má také velmi významnou nevýhodu: s tímto výběrem se formulář vždy otevře. Kamkoli ji zavolali. Proto by tento formulář neměl být označen jako hlavní. A pokud je to přesto hlavní, pak je před instalací výběru nutné provést nějakou analýzu toho, odkud se tento formulář otevírá. Například analýza parametrů formuláře.

3. Nakonec lze podmínku výběru umístit do vlastního dotazu, který vybírá data pro dynamický seznam. Potřebujeme například otevřít seznam faktur, které obsahují položku zvýrazněnou v seznamu položek.

Chcete-li to provést, ve formě seznamu položek vytvořte příkaz a příslušné tlačítko Příjem faktur.

Vyplňte obslužnou rutinu provádění pro tento příkaz takto:
Kód 1C v 8.2 UP &OnClient
Postup Potvrzení Faktury (příkaz)

ListForm = GetForm("Document.Invoice.ListForm");
ListForm.FilterByProduct = Elements.List.CurrentRow;
ListForm.Open();

Konec procedury

V tomto handleru obdržíme formulář pro seznam faktur a předáme odkaz na aktuální položku v seznamu položek do parametru formuláře FilterByProduct a otevřeme formulář s tímto parametrem.

Poté vytvoříme formulář pro seznam dokladů: Příjem faktury a vytvoříme atribut formuláře FilterBy Product, který použijeme jako parametr formuláře při jeho otevření. Nyní otevřeme paletu vlastností hlavního atributu formuláře Seznam. Nastavte příznak ArbitraryRequest a v řádku Nastavení seznamu klikněte na OTEVŘENO.

Do pole Žádost zadejte následující text žádosti:
Kód 1C v 8.2 UP SELECT
Číslo účtenky dokladu,
Dokument Příjem Invoice.Date
Z
Document.ReceiptInvoice AS DocumentReceiptInvoice
KDE
Doklad o příjmu Invoice.Products.Product = &Produkt

V požadavku použijeme parametr Položka, který obdrží odkaz na aktuální řádek v seznamu položek, obsažený v parametru formuláře seznamu faktur FilterBy Item. Za tímto účelem napíšeme v obslužné rutině události formuláře seznamu OnOpen kód pro nastavení hodnoty parametru Product request:
Kód 1C v 8.2 UP
&OnClient
Postup otevírání (selhání)

List.Parameters.SetParameterValue("Produkt", FilterByProduct);

Konec procedury

Tady Seznam.Možnosti je seznam parametrů požadavku dynamického seznamu pro atribut List. Hodnota parametru Product je nastavena na stejnou hodnotu jako hodnota parametru formuláře FilterByProduct.

V důsledku toho kliknutím na tlačítko Příjem faktur ve formuláři seznamu položek obdržíme seznam pouze těch faktur, které obsahují aktuálně vybranou položku v seznamu položek.