De ce este posibil ca stilul condiționat să nu funcționeze într-un formular gestionat. Proiectarea condiționată a formularelor controlate 1C Proiectarea condiționată a formularelor controlate ale părții tabelare

Stilul condiționat al formularelor gestionate.

Majoritatea celor care au lucrat cu sisteme de control al accesului și au creat rapoarte despre sistemele de control al accesului știu direct despre proiectarea condiționată. Modificarea fontului unui câmp, a culorii celulei sau a prezentării în funcție de valoarea dintr-un alt câmp este deja destul de obișnuită.

Dar întâlnim mai rar design condiționat de forme controlate. Deși acesta nu este un mecanism mai puțin puternic, funcțional și necesar.
Cum este el? Dar totul este la fel. În funcție de orice condiție, putem configura vizualizările sau proprietățile câmpurilor elementelor de formular tabelar și acestea se vor schimba imediat.

Vorbesc despre câmpurile de listă dinamice și câmpurile de tabel. Aici, din cod, putem accesa o coloană separată și putem stabili proprietăți pentru întreaga coloană odată, dar nu putem seta proprietățile unui câmp individual.

Citat

Important!!! Mulți oameni se luptă cu asta și își pierd timpul. Stilul condiționat nu funcționează pentru câmpurile de formular obișnuite (nu pentru câmpurile de tabel).

Unde poate fi folosit, în afară de câmpurile de colorare. Ei bine, un exemplu clasic este prezentarea vizualizărilor într-o secțiune tabelară. Pentru contabilitate, pot fi trei dintre ele ca standard. Și de obicei sunt aliniați pe un câmp, unul sub celălalt. Deoarece fiecare linie poate avea propriul cont, compoziția analizei poate diferi. Și, în general, dacă afișați 3 analize în fiecare linie, ocupă mult spațiu. De ce să facem asta dacă avem voie să avem un subconto undeva, sau două undeva.

Setarea proprietăților formularului

Să ne uităm la exemplul unei secțiuni de tabel pe care am creat-o în procesare.

Să creăm o procesare în care vom adăuga o parte tabelară cu trei detalii Subconto și, de asemenea, vom adăuga atributul Subconto Quantity, care va indica numărul de subcontos din linie.

Configurarea aspectului condiționat al formularului se află în proprietățile formularului din fila Aspect.

Acum sarcina noastră este să indicăm programului că, dacă valoarea din linia câmpului Cantitatea de subconto este 1, ar trebui să fie afișat doar Subconto1, cu o valoare de 2: Subconto1 și Subconto2, cu o valoare de 3: Subconto1, Subconto2 , Subconto3.

Pentru a face acest lucru, utilizați formularul de setări de aspect condiționat.

În coloana Câmpuri formatate, indicăm câmpurile Subconto1, Subconto2, Subconto3. Deoarece fiecare câmp va avea un design diferit, vom crea 3 linii.

Să indicăm că vom proiecta proprietatea de vizibilitate.

De asemenea, vom stabili o condiție în care vizibilitatea va fi dezactivată.

Să vedem ce s-a întâmplat în întreprindere. În același timp, vom adăuga rânduri la partea tabelară și vom aranja valorile numărului de subconturi.

După cum puteți vedea, un număr diferit de câmpuri sunt afișate în linii diferite.

Setare prin cod

Pe lângă setarea folosind proprietăți, această setare se poate face folosind codul programului.
Dacă utilizați o configurație construită pe , va arăta astfel (acest lucru se aplică tuturor celor standard):

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

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

ElementUO.Design.SetParameterValue(„Vizibilitate”, False);


Dacă nu este utilizat BSP, codul va fi puțin mai lung. Voi oferi doar proceduri standard de la același BSP.

Funcția AddDesignableField(Colecție de câmpuri Designable,FieldName) Export

ElementField = Colecția FormattedFields.Elements.Add();
ItemField.Field = NewDataCompositionField(FieldName);

returnItemField;

EndFunction


Funcția AddLayoutElement(AddArea,
valoare FieldName,
Tip de comparație de valori,
Valoare RightValue = nedefinit,
Reprezentarea valorii = nedefinit,
Utilizare valori = nedefinit,
valueDisplayMode = Nedefinit,
valueUserSettingsIdentifier = Nedefinit) Export

Element = AdditionArea.Elements.Add(Type("DataComposition Selection Element"));
Item.LeftValue = NewDataCompositionField(FieldName);
Element.ComparisonView = ComparisonType;

Dacă DisplayMode = Nedefinit, atunci
Element.DisplayMode = ElementDisplayModeDataCompositionSettings.Unavailable;
Altfel
Element.DisplayMode = DisplayMode;
endIf;

Dacă RightValue<>Nedefinit Atunci
Element.RightValue = RightValue;
endIf;

Dacă Reprezentarea<>Nedefinit Atunci
Item.View = Vizualizare;
endIf;

Dacă Folosiți<>Nedefinit Atunci
Item.Use = Utilizare;
endIf;

// Important: setarea ID-ului trebuie făcută
// la sfârșitul setării elementului, altfel acesta va fi copiat
// în setările utilizatorului completat parțial.
IfUserIdentifierSettings<>Nedefinit Atunci
Element.UserSettingsIdentifier = UserSettingsIdentifier;
ElseIf Element.DisplayMode<>ItemDisplayModeDataLayoutSettings.Unavailable Atunci
Item.UserSettingIdentifier = FieldName;
endIf;

Returnare articol;

În această publicație, vom analiza un exemplu de linii de colorare ale documentelor restante în jurnalul de documente (lista dinamică) de la data curentă și ora curentă.

Sarcina noastră este să colorăm linia roz dacă Data țintă este mai mică decât Data curentă, ținând cont de faptul că data curentă se schimbă constant. Adică, data curentă trebuie citită dinamic și nu determinată la prima deschidere.

Vom învăța cum, într-o manieră controlată:

Utilizați un operator de așteptare;

Configurați programatic aspectul condiționat al unei liste dinamice

Să presupunem că avem un document „Comandă inteligentă” cu atributul „Data de control” și tipul „Data” (compunerea datei „Date și ore”):

Și jurnalul de documente „SmartOrder” cu coloana „Data de control” corespunzătoare acestui detaliu:

Sarcina noastră este să colorăm rândul în roz dacă Data țintă este mai mică decât Data curentă, ținând cont de faptul că data curentă se schimbă constant.

Să creăm un formular gestionat:

Acum, când creăm pe server, vom apela procedura de colorare a liniilor „UpdatesDisplayOverdueOnServer”. Și vom numi această procedură cu o frecvență dată.

Avem o formă de listă, de exemplu, a elementelor de plan de tipul caracteristic „Drepturi utilizator” în configurația „Managementul întreprinderii de producție” versiunea 1.3.

Forma, după cum puteți vedea, este gestionabilă. trebuie să proiectăm lista în așa fel încât toate rândurile de grupuri de elemente să fie evidențiate în verde. Să începem!

Exemplu

Elementele formularelor gestionate sunt stilate folosind stilul de formular condiționat:

Pentru a ne rezolva problema, să adăugăm un element de design condiționat cu următoarele setări:


La următoarea deschidere a formularului, rândurile grupului de plan de tip caracteristic ar trebui să fie evidențiate cu verde. Dar... asta nu se întâmplă!


Cert este că lista de elemente și grupuri ale planului de tipuri caracteristice este afișată pe formular folosind un obiect formular cu tipul „Lista dinamică”. Listele dinamice profită de capacitățile sistemului de compunere a datelor, inclusiv de selecții și formatare condiționată. Acesta din urmă determină designul final al listei, ignorând setările designului condiționat al formularului în sine. Să adăugăm setări similare de aspect condiționat pentru lista dinamică.


Singura diferență este că trebuie să adăugați toate câmpurile vizibile ale listei la lista de câmpuri care urmează să fie formatate la care ar trebui să se aplice designul condiționat.

Concluzie

Am auzit adesea că stilul condiționat pentru formularele gestionate nu funcționează întotdeauna. În cele din urmă, s-a dovedit că pur și simplu făceai setări pentru formular, și nu pentru lista dinamică.

Sper că acest articol va economisi cuiva timp atunci când rezolvă problemele cu formatarea condiționată.