1c în parametrii de selecție, specificați numele grupului. Setați opțiunile de selecție și linkurile opțiunilor de selecție pentru obiectele de metadate. ItemTypeDescription = New TypeDescription(Matrice)

Pentru a deschideți un formular de selecție cu selecție în 1s 8.2(forme obișnuite), trebuie să realizăm unele acțiuni. O vom primi mai întâi. După aceea, vom seta selecția și o vom deschide programatic, iată un exemplu de cod:

Selectare pe formular în câmpul de intrare 1C 8.2 cu mai multe valori

În exemplul de mai sus, am luat în considerare cum să setați selecția pe formularul de selecție după valoare specifică. Acum să luăm în considerare situația în care trebuie să înlocuiți mai multe valori, de exemplu, poate fi atât o matrice, cât și descărcarea dintr-un rezultat al unei interogări. Aceasta este o selecție în câmpul de intrare 1s cu sensuri multiple.

În primul rând, obținem formularul de selecție, trecem „Elementul” (proprietar) în parametri, setăm indicatorul modului de selecție. Apoi creăm o listă de valori și o matrice, observăm că, ca selecție, atunci când este setat tipul de comparație din listă, poate exista doar un obiect cu tipul Lista de valori. Adăugăm elemente la matrice, apoi încărcăm această matrice în Lista de valori, pe care, ca urmare, o setăm în selecție. De asemenea, nu uitați să activați indicatorul pentru utilizarea acestei selecții și să setați tipul de comparație.

Setarea selecției în câmpul de introducere pe formular în 1C 8.3, evenimentul StartChoice

Acum luați în considerare selectare în câmpul de intrare activat formă gestionatăîn 1C 8.3. Să găsim pe formular elementul care ne interesează, în care vom seta selecția, în cazul nostru acesta este câmpul „Organizare”. Găsim evenimentul „StartChoice”, facem clic pe lupă și ne regăsim în procedură. Vedem parametrul ChoiceData, acest parametru este de tip ValueList. Pentru a limita selecția la elementele necesare, trebuie să completăm Lista de valori. Putem selecta elemente doar pe server, așa că creăm o procedură cu directiva de compilare &AtServer. În această procedură, completăm datele de alegere.

/
Dezvoltatori /
Convențiile codului

Setarea parametrilor de selecție și a relațiilor dintre parametrii de selecție pentru obiectele metadate

1. De regulă, restricțiile de logica de afaceri precum restricțiile de selecție ar trebui să fie aceleași pentru toate formele în care este editat un obiect sau altul. Prin urmare, se recomandă setarea parametrilor de selecție și conectarea parametrilor de selecție în proprietățile obiectelor metadate - în detaliile directoarelor, documentelor etc.

2. Cu toate acestea, pot exista cazuri în care limitările alegerii pot depinde de scenariul specific de lucru. În astfel de cazuri, parametrii de selecție pot fi specificați local, într-o formă specifică.

De exemplu, configurația are

  • director Angajatii, care conține detalii OrganizareȘi TipAngajat(enumerare cu valori De bază/angajat cu jumatate de norma);
  • document ComandăDespreAdmitere, care are recuzită OrganizareȘi Angajat; în timp ce pentru recuzită Angajat document ComandăDespreAdmitere set de relații ale parametrilor de selecție Selectie.Organizare cu recuzită Organizare.

Este necesară implementarea capacității de a selecta doar angajații principali, în funcție de valoarea opțiunii funcționale Selectați Numai de la angajații de bază. Pentru aceasta este necesar

  • sub forma unui document ComandăDespreAdmitere implementați elemente de recuzită pentru formulare suplimentare Tipuri de angajați,
  • apoi pentru câmpul formular Angajat poate fi stabilită legătura cu parametrii de selecție Selectie.TypeEmployee cu recuzită de formă Tipuri de angajați,
  • în timp ce forma recuzită Tipuri de angajați se completează pe baza analizei opțiunii funcționale.

(În timp ce este pregătit pentru recuzită Angajat document ComandăDespreAdmitere link pentru parametrul de selecție Selectie.TypeEmployee nu există nicio posibilitate, pentru că recuzită TipAngajatîn document ComandăDespreAdmitere nu exista.)

Apoi setați conexiunea pentru parametru Selectie.Organizareîn proprietățile recuzitei Angajat document ComandăDespreAdmitereși link-uri pentru parametru Selectie.TypeEmployeeîn câmpul formularului de document ComandăDespreAdmitere va duce la faptul că în 1C: Întreprindere ambele legături ale parametrilor de selecție vor funcționa. Astfel, la selectarea unui angajat sub forma unui ordin de acceptare, selectia in lista de angajati va fi stabilita atat de organizatia completata in document cat si de tipul de angajat, care va fi determinat in functie de optiunea functionala.

Bună ziua.

Astăzi vom vorbi despre cum să deschideți în mod programatic formularele selectate în noua interfață gestionată.

Anterior, în „aplicația obișnuită” am scris astfel:

formular = Directory.nomenclature.GetSelectionForm();

Rezultat alegere = form.openModal();

Între aceste declarații, am putea schimba proprietățile formularului, de exemplu, să setăm o selecție. Am putea specifica un anumit formular după nume. L-ar putea schimba aspect, referindu-se la proprietățile elementului în formă prin numele lor separate printr-un punct (form.Button1.Visibility = False;)

Acum avem o interfață gestionată și totul este diferit aici. Ambuscada este în împărțirea codului în partea server și partea client. Putem accesa obiectele și metadatele acestora doar pe server și trebuie să deschidem formulare pe client.

Asadar, haideti sa începem.

1. Cel mai simplu caz este atunci când nu trebuie să gestionăm selecția (configurați selecții, treceți parametri în formularul de selecție care se deschide).

Deoarece formularele pot fi deschise numai pe client, aceasta va fi codul clientului. Vom folosi funcția EnterValue(<Значение>, <Подсказка>, <Тип>) . De fapt, totul este clar din descrierea ei. Returnează un steag dacă selecția a fost făcută de utilizator, în primul parametru trecem containerul în care va fi returnată valoarea selecției, în al doilea text, care va fi afișat în titlul ferestrei de selecție, în a treia gamă de tipuri.

Iată un exemplu de utilizare:

Variabil Select TMC;

ArrayTypes = Matrice nouă;

ItemTypeDescription = New TypeDescription(Array);

Dacă IntroducețiValoare(Bunuri și materiale selectate, „Selectați articol”, Descrierea bunurilor și a tipurilor de materiale) atunci

//Se procesează valoarea selectată

EndIf;

Voi adăuga că dacă atribuim o valoare variabilei noastre container înainte de a alege, atunci aceasta va fi valoarea implicită. În acest caz, nu puteți forma o matrice de tipuri, tipul va fi luat din valoarea din container.

2. Uneori, înainte de a alege o valoare, trebuie să setăm niște filtre și parametri de selecție. De exemplu, trebuie să selectăm un acord de contrapartidă. Prima modalitate ne va deschide toate contractele, dar trebuie să selectăm după proprietar.

Există două metode de deschidere a formularelor: OpenFormȘi OpenFormModal. În prima metodă, vom deschide formularul și bucata de cod din care am deschis formularul va continua să ruleze fără a primi rezultatul selecției. Rezultatul selecției, în funcție de metoda apelului, va fi plasat fie în câmpul de intrare, fie primit în procedura predefinită „Processing the Choice”.

În cazul nostru, trebuie să introducem valoarea selectată într-o variabilă și să continuăm procesarea, ținând cont de valoarea selectată, fără a transfera controlul către alte proceduri. Prin urmare, ni se potrivește OpenFormModal.

Voi face imediat o rezervare că aceasta este o modalitate proastă pentru o interfață web, deoarece ferestrele modale se deschid într-o nouă fereastră de browser care este în mod normal blocată. Dar dacă utilizatorului i se explică în prealabil ce este, atunci cred că va face față acestei probleme))

Deci, ne uităm la descrierea procedurii, are 4 parametri. În primul, specificăm un șir cu calea completă către formularul „Director. Contracte de contrapărți. Formular de alegere”. În al doilea, precizăm parametrii de selecție, despre ei mai jos. În al treilea - proprietarul, acesta este un formular sau un câmp de selecție care va primi rezultatul selecției, nu îl completăm. Nici cel de-al patrulea parametru nu este utilizat în cazul nostru.

Deci, pentru o selecție simplă, linia ne va potrivi:

&AtClient

Procedură Comanda 1 (Comandă)

cut = OpenFormModally("Directory.Contracts of Counterparties.ChoiceForm");

EndProcedure

Dar acesta este un analog complet al metodei #1 și vom vedea formularul pentru selectarea tuturor contractelor, fără a selecta de către proprietar. Acestea. putem face acest lucru numai dacă dorim să specificăm numele formularului de selectare.

Pentru a seta selecția, al doilea parametru ne va ajuta.

Al doilea parametru este de tip „Structură”. Ca elemente de structură, puteți specifica parametrii de formular adăugați în fila „parametri” a formularului de selecție. Manipularea lor trebuie descrisă în procedură OnCreateOnServerîn modulul de selectare a formularului. Acest lucru nu este bine pentru noi, pentru că. trebuie să modificați configurația. De asemenea, puteți trece o structură de selecție cu tasta „selectare” în structura parametrilor. Apoi toate câmpurile din structura de selecție vor fi utilizate în selectarea listei de elemente și nu sunt disponibile utilizatorului nici pentru vizualizare, nici pentru editare.

În exemplul meu, am desenat un câmp selectat în procesare, referindu-se la prop. formularul de procesare "contractant" cu tipul de date " DirectoryLink.Contractanti". și a scris următorul cod:

&AtClient

Procedură Comanda 1 (Comandă)

Selections = New Structure(„Proprietar”, Contraparte);

SelectionParameters = New Structure("Selectie", Selectii);

cut = OpenFormModally("Directory.Agreements of Counterparties.ChoiceForm",ChoiceParameters);

EndProcedure

Acest lucru este de obicei suficient pentru a rezolva majoritatea problemelor și nu necesită intervenție de configurare. Cu toate acestea, în formularul de selecție din procedura „OnCreateOnServer”, selecția dvs. poate fi greșită. Prin urmare, înainte de a utiliza această metodă, revizuiți această procedură în formularul de selecție pe care îl deschideți. Dezvoltatorii strâmbi de acolo își pot seta cu ușurință selecția „în mod implicit”, uitând să verifice dacă selecția este trecută în parametrii de deschidere.

Asta e tot pentru astăzi, mulțumesc pentru atenție.




Top