Proč podmíněný styl nemusí fungovat na spravovaném formuláři. Podmíněný návrh řízených formulářů Podmíněný návrh dynamického seznamu 1c programově

V konfiguraci "Manufacturing Enterprise Management" verze 1.3 máme určitou formu seznamu například prvků plánu typu charakteristiky "Uživatelská práva".

Forma, jak vidíte, je zvládnutelná. musíme navrhnout seznam tak, aby všechny řádky skupin prvků byly zvýrazněny zeleně. Začněme!

Příklad

Prvky spravovaných formulářů jsou stylizovány pomocí podmíněného stylu formuláře:

Abychom vyřešili náš problém, přidejte prvek podmíněného návrhu s následujícím nastavením:


Při příštím otevření formuláře by měly být řádky skupiny charakteristických typových plánů zvýrazněny zeleně. Ale...to se nedělá!


Faktem je, že seznam prvků a skupin plánu charakteristických typů je zobrazen na formuláři pomocí objektu formuláře s typem "Dynamický seznam". Dynamické seznamy využívají možností systému skládání dat, včetně výběrů a podmíněného formátování. Ten určuje konečný návrh seznamu, ignoruje nastavení podmíněného návrhu samotného formuláře. Přidejme podobná nastavení podmíněného vzhledu pro dynamický seznam.


Jediný rozdíl je v tom, že musíte přidat všechna viditelná pole seznamu do seznamu polí, která mají být naformátována a na která se má podmíněný návrh vztahovat.

Závěr

Často jsem slyšel, že podmíněný styl na spravovaných formulářích ne vždy funguje. Nakonec se ukázalo, že jste prostě dělali nastavení pro formulář, a ne pro dynamický seznam.

Doufám, že tento článek někomu ušetří čas při řešení problémů s podmíněným formátováním.

V této publikaci se podíváme na příklad vybarvování řádků dokumentů po splatnosti v protokolu dokumentů (dynamický seznam) od aktuálního data a aktuálního času.

Naším úkolem je obarvit čáru růžovou, pokud je Cílové datum menší než Aktuální datum, přičemž bereme v úvahu, že aktuální datum se neustále mění. To znamená, že aktuální datum musí být načteno dynamicky a neurčeno při prvním otevření.

Naučíme se, jak kontrolovaným způsobem:

Použijte obsluhu čekání;

Programově nakonfigurujte podmíněný vzhled dynamického seznamu

Řekněme, že máme dokument „Inteligentní objednávka“ s atributem „Kontrolní datum“ a typem „Datum“ (složení data „Datum a čas“):

A deník dokumentů „SmartOrder“ se sloupcem „Kontrolní datum“ odpovídající tomuto detailu:

Naším úkolem je obarvit řádek růžově, pokud je Cílové datum menší než Aktuální datum, přičemž bereme v úvahu, že aktuální datum se neustále mění.

Vytvoříme spravovaný formulář:

Nyní při vytváření na serveru zavoláme proceduru pro vybarvování řádků „UpdatesDisplayOverdueOnServer“. A tento postup budeme nazývat s danou frekvencí.

Podmíněný styl spravovaných formulářů.

Většina z těch, kteří pracovali se systémy řízení přístupu a vytvářeli zprávy o systémech řízení přístupu, ví o podmíněném návrhu z první ruky. Změna písma, barvy buňky nebo prezentace pole v závislosti na hodnotě v jiném poli je již zcela běžná věc.

Méně často se ale setkáváme s podmíněným návrhem řízených formulářů. Ačkoli se nejedná o méně výkonný, funkční a nezbytný mechanismus.
Jaký je? Všechno je ale při starém. Na základě jakékoli podmínky můžeme nakonfigurovat pohledy nebo vlastnosti polí prvků tabulkového formuláře a budou se měnit přímo za běhu.

Mluvím o dynamických polích seznamu a polích tabulky. Zde z kódu můžeme přistupovat k samostatnému sloupci a nastavit vlastnosti pro celý sloupec najednou, ale nemůžeme nastavit vlastnosti jednotlivého pole.

Citát

Důležité!!! Mnoho lidí s tím bojuje a ztrácí čas. Podmíněný styl nefunguje pro běžná pole formuláře (nikoli pole tabulky).

Kde to lze použít, kromě barevných polí. No, klasickým příkladem je prezentace pohledů v tabulkové části. Pro účetnictví mohou být standardně tři. A většinou jsou seřazené v jednom poli, pod sebou. Protože každý řádek může mít svůj vlastní účet, může se složení analýzy lišit. A obecně, pokud v každém řádku zobrazíte 3 analýzy, zabere to hodně místa. Proč to dělat, když někde smíme mít jednu subconto nebo dvě.

Nastavení vlastností formuláře

Podívejme se na příklad části tabulky, kterou jsme vytvořili při zpracování.

Vytvořme zpracování, kde přidáme tabulkovou část se třemi detaily Subconto a také přidáme atribut Subconto Quantity, který bude udávat počet subcontos v řádku.

Nastavení podmíněného vzhledu formuláře se nachází ve vlastnostech formuláře na kartě Vzhled.

Nyní je naším úkolem naznačit programu, že pokud je hodnota v řádku množství pole 1, mělo by být zobrazeno pouze subkonto1 s hodnotou 2: Subconto1 a Subconto2, s hodnotou 3: Subconto1, Subconto2 , Subconto3.

K tomu použijte formulář nastavení podmíněného vzhledu.

Ve sloupci Formátovaná pole označujeme pole Subconto1, Subconto2, Subconto3. Protože každé pole bude mít jiný design, vytvoříme 3 řádky.

Označme, že navrhneme vlastnost viditelnosti.

Nastavíme také podmínku, za které bude viditelnost vypnuta.

Podívejme se, co se v podniku stalo. Zároveň do tabulkové části přidáme řádky a uspořádáme hodnoty počtu dílčích položek.

Jak vidíte, na různých řádcích se zobrazuje různý počet polí.

Nastavení kódu

Kromě nastavení pomocí vlastností lze toto nastavení provést pomocí programového kódu.
Pokud použijete konfiguraci postavenou na , bude vypadat takto (to platí pro všechny standardní):

ElementUO = ConditionalDesign.Elements.Add();
DataCompositionClientServer.AddDesignField(ElementUO.Fields, "TabularPartSubconto2");

GeneralPurposeClientServer.AddLayoutElement(ElementUO.Selection,
"TabularPartQuantitySubconto", DataCompositionComparisonType.Less, 2);

ElementUO.Design.SetParameterValue("Visibility", False);


Pokud se BSP nepoužívá, kód bude o něco delší. Uvedu pouze standardní postupy ze stejného BSP.

Funkce AddDesignableField(CollectionofDesignableFields,FieldName) Export

ElementField = Kolekce FormattedFields.Elements.Add();
ItemField.Field = NewDataCompositionField(FieldName);

returnItemField;

EndFunction


Funkce AddLayoutElement(AddArea,
Hodnota FieldName,
Typ porovnání hodnot,
Hodnota RightValue = Nedefinováno,
Zastoupení hodnoty = nedefinováno,
Využití hodnoty = nedefinováno,
valueDisplayMode = Nedefinováno,
valueUserSettingsIdentifier = Nedefinováno) Export

Element = AdditionArea.Elements.Add(Type("Prvek výběru DataComposition"));
Item.LeftValue = NewDataCompositionField(FieldName);
Element.ComparisonView = ComparisonType;

Pokud DisplayMode = Undefined Then
Element.DisplayMode = ElementDisplayModeDataCompositionSettings.Unavailable;
v opačném případě
Element.DisplayMode = DisplayMode;
endIf;

Pokud RightValue<>Nedefinováno Potom
Element.RightValue = RightValue;
endIf;

Pokud Zastoupení<>Nedefinováno Potom
Item.View = View;
endIf;

Pokud Use<>Nedefinováno Potom
Item.Use = Použití;
endIf;

// Důležité: Je nutné provést nastavení ID
// na konci nastavení prvku, jinak se zkopíruje
// v uživatelském nastavení částečně vyplněno.
IfUserIdentifierSettings<>Nedefinováno Potom
Element.UserSettingsIdentifier = UserSettingsIdentifier;
ElseIf Element.DisplayMode<>ItemDisplayModeDataLayoutSettings.Unavailable Then
Item.UserSettingIdentifier = NázevPole;
endIf;

Vrátit položku;