Si të hapni një formë të një objekti ekzistues? Si të plotësoni dhe hapni në mënyrë programore një formular të ri dokumenti? 1c hapni një dokument të paregjistruar.

14.12.2023
Ditën e mirë të gjithëve!
Unë mendoj se informacioni në këtë temë do të jetë shumë i dobishëm për shumë vizitorë në këtë forum.
Për një kohë të gjatë nuk mund ta zgjidhja problemin - si ta hap formularin e një dokumenti të ri në mënyrë që të hapet jo bosh, por tashmë i plotësuar pjesërisht në mënyrë programore, ndërsa vetë dokumenti ende nuk është regjistruar në bazën e të dhënave? Kam kaluar shumë kohë duke kërkuar një zgjidhje për këtë problem në internet, kam vizituar shumë forume ku është ngritur kjo çështje, por vetëm disa prej tyre kanë hasur në zgjidhje. Më e thjeshta prej tyre është që së pari të krijoni në mënyrë programore një dokument të ri, të plotësoni në mënyrë programore detajet e nevojshme, të shkruani dokumentin në bazën e të dhënave dhe më pas t'ia hapni përdoruesit. Po nëse përdoruesi nuk dëshiron ta ruajë atë? Po sikur të ndryshojë mendje dhe të mbyllë formularin e hapur? Në këtë rast, dokumenti tashmë i regjistruar do të mbetet në bazën e të dhënave. Dhe kush ka nevojë për dokumente shtesë në bazën e të dhënave?
Dhe nëse nuk e ruani dokumentin, atëherë opsioni më i popullarizuar është të përdorni metodën GetForm ("Dokumentet. Lloji i kërkuar i dokumentit. Forma e dokumentit"). Por në këtë rast, ju mund të merrni një formular dokumenti bosh dhe thjesht ta shfaqni atë duke përdorur metodën Open(). Ky nuk është gjithashtu një opsion ...
Pas ca kohësh, problemi u zgjidh duke përdorur funksionin e kontekstit global "Plotësoni vlerat e pronës".

Konteksti global
FillPropertyValues
Sintaksë:
Plotësoni vlerat e pronësisë (<Приемник>, <Источник>, <Список свойств>, <Исключая свойства>)
Përshkrim:
Kopjon vlerat e pronës<Источника>ndaj pronave<Приемника>. Përputhja bëhet sipas emrave të pronave.

Duke përdorur detyrën time si shembull, do të doja të shpjegoja se si mund ta përdorni këtë funksion për të plotësuar një formular për një dokument të ri. Detyra ishte si më poshtë: Ekziston një dokument (Urdhri i punës), kushti i pjesës tabelare të të cilit është një dokument tjetër (Ofrimi i shërbimeve). Pra, ishte e nevojshme të sigurohej që kur në pjesën tabelare të "Urdhrit të Punës" të shtohej një dokument i ri "Drejtimi i Shërbimeve", në ekran të shfaqej forma e dokumentit të ri "Dorëzimi i Shërbimeve" me detajet. tashmë e plotësuar, marrë nga porosia e punës nga është shkaktuar krijimi. Në të njëjtën kohë, vetë dokumenti i ri, në kohën kur forma e tij shfaqet në ekran, nuk është regjistruar ende në bazën e të dhënave. Kjo duhej të bëhej nëse përdoruesi papritmas vendos të mos plotësojë dokumentin dhe thjesht mbyll formularin.
Këtu është një fragment kodi me një zgjidhje për problemin:

&Për procedurën e klientit EnterRecord()RecordForm = GetForm("Dokumenti. Ofrimi i Shërbimeve Mjekësore.ObjectForm"); Plotëso PropertyValues(RecordForm.Object,Object,"Data,Specialist,Specialization,Infermiere,Statusi i Ekzekutimit",); // Plotësoni vlerat e detajeve, emrat e të cilëve janë të njëjtë në të dy dokumentet TextStr = Elements.Reception.CurrentData; //Të dhënat e linjës aktuale të dokumentit burimor Struktura e pronësisë = Struktura e re; // Struktura përmban vlerat e atyre detajeve që duhet të plotësohen në formularin e dokumentit të ri, por që nuk janë në dokumentin burimor StructureProperties.Insert("Urdhri i punës", Object.Link); PropertyStructure.Insert("ReceptionTime",TexStr.ReceptionTime); Plotëso PropertyValues ​​(RecordForm.Object,PropertyStructure,"RecordOrder,AppointmentTime",); EntryForm.Open(); Përfundimi i procedurës

Kjo do të thotë, ne kryejmë të gjitha operacionet drejtpërdrejt në klient, pa kontaktuar serverin, brenda një procedure të krijuar në mënyrë të pavarur. Në fakt, në këtë mënyrë mund të plotësoni dhe hapni formularin e çdo dokumenti apo libri referimi. Fillimisht, plotësova detajet nga një formular në tjetrin duke përdorur objektet e formularit dhe më pas, duke përdorur objektin "Struktura", në të cilin futa detajet që mungojnë, plotësova disa detaje të tjera të formularit që hapej dhe më pas hapa formë.
Shpresoj që kjo temë do të kursejë kohë për shumë njerëz që përballen me një detyrë të ngjashme!

Hapja programatike e formularëve në një aplikacion të menaxhuar 1C është dukshëm i ndryshëm nga hapja e tyre në një aplikacion të rregullt. Le të shohim së pari metodën e vjetër. Ai konsiston në marrjen e një formulari dhe më pas hapjen e tij në modalitetin normal ose modal (kur hapet në modalitet, forma bllokon programin).

GetForm(). Hapur ()

Kjo është metoda më e ngadaltë e hapjes së formularëve. Megjithatë, ju lejon të përpunoni në mënyrë programore formularin përpara se ta hapni atë. Për të përpunuar kodin, duhet të ndryshoni pak:

Formulari = GetForm( "Dokument. Pranimi i Mallrave dhe Shërbimeve. Formulari i Dokumentit") ;
//Këtu kryejmë veprime me formularin
Forma. Open();

Duhet pasur parasysh se kur të merret formulari, do të ekzekutohet një procedurë tjetër e ngjarjes WhenCreatedOnServer.

Le të shohim metoda të tjera që ju lejojnë të hapni formularët në një aplikacion të menaxhuar 1C më shpejt dhe me lehtësi. Në varësi të situatës specifike, mund të përdoren metoda të ndryshme.

1. Si të hapni një formular objekti në një aplikacion të menaxhuar nëse ka një lidhje me të.

Në këtë rast, gjithçka është jashtëzakonisht e thjeshtë.

RefLink = Drejtoritë. Nomenklatura. FindByCode("000000001");
OpenValue (RefLink) ;

2. Si të hapni formularin e përzgjedhjes dhe më pas të merrni vlerën e zgjedhur.

Ekziston një funksion për këtë EnterValue (). Funksioni ka 3 parametra:

  • Variabla në të cilën do të shkruhet vlera e zgjedhur;
  • Një aluzion që do të shfaqet në dritaren e përzgjedhjes;
  • Përshkrimi i llojeve të vlerave të zgjedhura. Mund të ketë disa lloje, në të cilin rast do t'ju kërkohet të zgjidhni një lloj përpara se të zgjidhni një vlerë specifike.

Si rezultat i ekzekutimit të funksionit, do të hapet forma e përzgjedhjes së paracaktuar për një objekt të llojit të specifikuar.

Vlera e ndryshueshme;
Array= Array i ri;
Array. Shto(Lloji( "DirectoryLink.Nomenklatura") ) ;
Array. Shto(Lloji( "DirectoryLink. Kundërpartitë") ) ;

TypeDescription= new TypeDescription(Array) ;

Res = EnterValue(Vlera, "Hint" , TypeDescription) ;

Metodat e mëparshme ju lejonin vetëm të hapni format e paracaktuara për objektet (forma e objektit ose formulari i përzgjedhjes). Nëse keni nevojë të hapni një formular të personalizuar, mund të përdorni funksionin OpenForm().

Ky funksion ka mjaft parametra. Le të shohim disa prej tyre:

  • Emri i formularit— këtu mund të zgjidhni një nga format standarde të objektit, për shembull, Formulari i përzgjedhjes ose Formulari i listës. Ose një formë specifike e krijuar nga zhvilluesit.
  • Opsione— ju lejon ta transferoni atë në formularin në formular strukturat disa parametra para hapjes së tij, duke përcaktuar kështu të dhënat dalëse. Parametrat mund të jenë çdo e dhënë që mund të kalohet nga klienti në server. Parametrat e kaluar gjatë hapjes së formularit mund të përpunohen në procedurë WhenCreatingOnServer() në formularin që hapet.
  • Mënyra e hapjes së formularit— ka 3 opsione: i pavarur, bllokimi i të gjithë ndërfaqes, bllokimi i formularit të pronarit.

Le të shohim se si përdoret funksioni OpenForm() në situata të ndryshme.

3. Si të hapet forma e një objekti ekzistues

Çdo formë ka një atribut kyç. Në listën e detajeve të formularit theksohet me shkronja të zeza dhe zakonisht quhet Nje objekt në trajtat e elementeve të librave referues dhe dokumenteve. Objektet e tjera mund të kenë një emër tjetër. Për të hapur një formë të një objekti ekzistues, duhet të kaloni një parametër në formularin që hapet Celës me vlerën si referencë për një objekt.

&OnClient
Komanda e procedurës 1 (Komanda)
Parametri= strukturë e re;
Parametri. Insert("Key" , FindC() );
OpenForm(, Parametri);
Përfundimi i procedurës

&Në server
Funksioni FindC();
Drejtoritë e Kthimit. Kundërpalët. FindByRequisites ("TIN", "745107734623")
Funksioni i Fundit

4. Si të hapni një formular të ri objekti

Një funksion i thjeshtë do të bëhet këtu OpenForm() pa asnjë parametër.

&OnClient
Komanda e procedurës 1 (Komanda)
OpenForm( "Drejtoria. Kundërpalët. Formulari i objektit") ;
Përfundimi i procedurës

5. Si të hapni një formular të ri objekti dhe ta plotësoni atë bazuar në diçka

Ju duhet të kaloni një parametër Baza, vlera e së cilës do të jetë një referencë për objektin bazë të mbushjes. Kjo do të fillojë procedurën ProcessFill().

&OnClient
Komanda e procedurës 1 (Komanda)
Parametri= strukturë e re;
Parametri. Insert ("Baza", LinkToBuyerAccount) ;
OpenForm( "Dokument. Shitjet e Mallrave dhe Shërbimeve. Formulari i Objektit", Parametri);
Përfundimi i procedurës

Ky shembull do të krijojë një dokument Shitjet e mallrave dhe shërbimeve dhe plotësohet në bazë të një faturë për pagesë ndaj blerësit, lidhja në të cilën është transmetuar.

6. Si të hapni një formular dhe të vendosni një përzgjedhje në të

Përzgjedhja në format 1C mund të jetë e thjeshtë ose komplekse. Përzgjedhja e thjeshtë përfshin shprehje si Organizata = Horns and Hooves LLC. Përzgjedhja komplekse përfshin lloje të tjera krahasimi, p.sh. Në listë. Në këtë artikull do të shqyrtojmë organizimin e përzgjedhjes së thjeshtë, dhe një artikull i veçantë do t'i kushtohet përzgjedhjes komplekse.

Për të organizuar një përzgjedhje të thjeshtë, duhet të kaloni një parametër me një çelës në formularin që hapet Përzgjedhja, vlera do të jetë një strukturë në të cilën çelësi është emri i fushës së listës dinamike dhe vlera është të dhënat që kërkohen.

Për shembull, le të hapim formularin e listës së drejtorive Numrat GTD dhe bëni një përzgjedhje atje nga elementi i pronarit - drejtorisë Nomenklatura.

&OnClient
Komanda e procedurës 1 (Komanda)
Parametri= strukturë e re;

përzgjedhja= Struktura e re;
Përzgjedhja. Insert("Owner", LinkToNomenklature) ;

Parametri. Insert("Zgjedhja", Përzgjedhja) ;

OpenForm( "Direktori. Numrat GTD. Formulari i listës", Parametri);
Përfundimi i procedurës

7. Si të hapet formulari i regjistrimit të regjistrit të informacionit

Për ta bërë këtë, do t'ju duhet çelësi i regjistrimit të regjistrit të informacionit.

Çelësi i regjistrimit- këto janë vlerat e të gjitha matjeve dhe periudha (nëse regjistri është periodik). Kjo do të thotë, një çelës regjistrimi është parametri me të cilin një rekord mund të identifikohet në mënyrë unike.

Algoritmi i hapjes është si më poshtë:

  1. Ne futim të dhënat kryesore të regjistrimit me vlerat e nevojshme në strukturë.
  2. Ne vendosim strukturën që rezulton në një grup.
  3. Ne krijojmë një çelës regjistrimi nga grupi.
  4. Ne kalojmë një parametër në formularin që hapet Celës me çelësin e regjistrimit nga hapi 3 si vlerë.

&OnClient
Komanda e procedurës 1 (Komanda)
Parametri= strukturë e re;

KeyParameters= Struktura e re;
Parametrat kyç. Insert("Nomenklatura", LinkToNomenklatura) ;
Parametrat kyç. Insert("PriceType", LinkToPriceType) ;
Parametrat kyç. Insert("Periudha", Data);

KeyArray = Array i ri;
KeyArray. Shto (Parametrat kyçe) ;

EntryKey = E re( "Çelësi i regjistrimit të informacionit. Nomenklatura e çmimeve", KeyArray);

Parametri. Insert("Key", Record Key) ;

OpenForm( "Regjistri i informacionit. Çmimet e nomenklaturës. Formulari i regjistrimit", Parametri);
Përfundimi i procedurës

shtëpi Për zhvilluesit fillestarë Mësoni të programoni

Si të hapni një formë të një objekti ekzistues?

Kur hapni një formular të një objekti ekzistues, përveç emrit të formularit, duhet të tregoni edhe objektin, forma e të cilit duhet të hapet. Për ta bërë këtë, përdorni parametrin e formës kryesore dhe një lidhje me objektin me interes për ne.

Për shembull, nëse nga forma e listës së organizatave duhet të hapni formën e organizatës në të cilën ndodhet kursori, mund ta bëni këtë në mënyrën e mëposhtme:

Parametrat e formularit i kalojmë në formën e një strukture, ku emri i elementit të strukturës korrespondon me emrin e parametrit të formës, dhe vlera është vlera në të cilën duam të vendosim parametrin e formës.

Nëse dëshironi të hapni jo formën kryesore, por një formë arbitrare të një objekti të krijuar në konfigurues, në vend të emrit standard të formës kryesore (ObjectForm), tregoni fjalën Forma e ndjekur nga një pikë - emri i formës së krijuar në konfiguruesin.

Për shembull:

ReferenceToDirectoryElement = Elements.List.CurrentRow; FormParameters = Struktura e re ("Key", ReferenceToDirectoryElement); OpenForm("Directory.Organizations.Form.UniversalObjectForm",FormParameters);

Duhet të theksohet se në rastin kur, përveç një lidhjeje me një objekt, nuk duhet të kalohen parametra në formularin që hapet dhe është forma kryesore e objektit ekzistues që nevojitet, mund të përdorni një metodë më të thjeshtë. - hapni formularin duke përdorur procedurën OpenValue ():

OpenValue (Items.List.CurrentRow);

Kjo metodë është më pak e gjithanshme, por në disa raste kursen kohë dhe përpjekje. Për shembull, në rastin e shqyrtuar, një rresht i tillë mund të zëvendësojë të gjithë procedurën me tre rreshta që kemi shkruar më parë.

Sidoqoftë, duhet pasur kujdes kur përdorni këtë procedurë. Në disa raste, mund të shkaktojë thirrje shtesë në server, për shembull, kur ju duhet të hapni një formular artikulli të drejtorisë hierarkike. Kur përdorni këtë procedurë, platforma do të bëjë një thirrje shtesë në server për të përcaktuar nëse një element është grup apo jo, pasi duhet të hapen forma të ndryshme për elementin dhe për grupin.

Në të njëjtën kohë, ky informacion mund t'i njihet paraprakisht zhvilluesit brenda algoritmit të tij dhe, duke përdorur funksionin OpenForm(), zhvilluesi mund të hapë formularin e dëshiruar pa thirrje shtesë në server, duke specifikuar menjëherë emrin standard të kryesorit. formë.