Kaip atidaryti esamo objekto formą? Kaip programiškai užpildyti ir atidaryti naują dokumento formą? 1c atidarykite esamo dokumento formą.

Programinis formų atidarymas valdomoje 1C programoje labai skiriasi nuo jų atidarymo įprastoje programoje. Pirmiausia pažvelkime į seną metodą. Jį sudaro formos gavimas ir jos atidarymas įprastu arba modalinis režimas(atidarius modaliniu režimu forma blokuoja programą).

GetForm() . Atviras()

Tai lėčiausias formų atidarymo būdas. Tačiau tai leidžia programiškai apdoroti formą prieš ją atidarant. Norėdami apdoroti kodą, turite šiek tiek pakeisti:

Form = GetForm( "Dokumentas. Prekių ir paslaugų gavimas. Dokumento forma") ;
//Čia atliekame veiksmus su forma
Forma. Atviras() ;

Reikia atsižvelgti į tai, kad gavus formą bus vykdoma kita renginio procedūra KadaCreatedOnServer.

Pažvelkime į kitus metodus, leidžiančius greičiau ir patogiau atidaryti formas valdomoje 1C programoje. Priklausomai nuo konkrečios situacijos, gali būti naudojami įvairūs metodai.

1. Kaip atidaryti objekto formą valdomoje programoje, jei yra nuoroda į ją.

Šiuo atveju viskas labai paprasta.

RefLink = Katalogai. Nomenklatūra. FindByCode("000000001" );
OpenValue(RefLink) ;

2. Kaip atidaryti pasirinkimo formą ir tada gauti pasirinktą reikšmę.

Tam yra funkcija EnterValue(). Funkcija turi 3 parametrus:

  • Kintamasis, į kurį bus įrašoma pasirinkta reikšmė;
  • Užuomina, kuri bus rodoma pasirinkimo lange;
  • Pasirinktų reikšmių tipų aprašymas. Gali būti keli tipai, tokiu atveju būsite paraginti pasirinkti tipą prieš pasirenkant konkrečią reikšmę.

Įvykdžius funkciją, atsidarys numatytoji nurodyto tipo objekto pasirinkimo forma.

Kintamoji vertė;
Masyvas= naujas Masyvas;
Masyvas. Add(Tipas( "DirectoryLink.Nomenclature") ) ;
Masyvas. Add(Tipas( "DirectoryLink. Sandorio šalys") ) ;

TypeDescription= new TypeDescription(Array) ;

Res = EnterValue(Vertė, "Užuomina" , TipoAprašymas) ;

Ankstesni metodai leido atidaryti tik numatytąsias objektų formas (objekto formą arba pasirinkimo formą). Jei reikia atidaryti laisva forma, tada galite naudoti funkciją OpenForm ().

Ši funkcija turi nemažai parametrų. Pažvelkime į kai kuriuos iš jų:

  • Formos pavadinimas- čia galite pasirinkti vieną iš standartinių objektų formų, pavyzdžiui, Atrankos forma arba Sąrašo forma. Arba tam tikra forma, kurią sukūrė kūrėjai.
  • Galimybės— leidžia perkelti jį į formą formoje struktūros kai kuriuos parametrus prieš jį atidarydami, taip nustatydami išvesties duomenis. Parametrai gali būti bet kokie duomenys, kurie gali būti perduodami iš kliento į serverį. Parametrai, perduoti atidarant formą, gali būti apdorojami procedūroje WhenCreatingOnServer() atidaromoje formoje.
  • Formos atidarymo režimas— turi 3 parinktis: nepriklausomas, blokuoti visą sąsają, blokuoti savininko formą.

Pažiūrėkime, kaip ši funkcija naudojama OpenForm()įvairiose situacijose.

3. Kaip atidaryti esamo objekto formą

Kiekviena forma turi vieną pagrindinį atributą. Formos detalių sąraše jis paryškinamas pusjuodžiu šriftu ir paprastai vadinamas Objektasžinynų ir dokumentų elementų formose. Kiti objektai gali turėti kitokį pavadinimą. Norėdami atidaryti esamo objekto formą, atidaromai formai turite perduoti parametrą Raktas su verte kaip nuoroda į objektą.

&OnClient
Procedūros komanda 1 (komanda)
Parametras = nauja struktūra;
Parametras. Insert("Raktas" , FindC() );
OpenForm(, parametras) ;
Procedūros pabaiga

&Serveryje
Funkcija FindC();
Grąžinti katalogus. Sandorio šalys. FindByRequisites ("TIN", "745107734623")
EndFunction

4. Kaip atidaryti naują objekto formą

Čia tiks paprasta funkcija OpenForm() be jokių parametrų.

&OnClient
Procedūros komanda 1 (komanda)
OpenForm( "Katalogas. Sandorio šalys. Objekto forma") ;
Procedūros pabaiga

5. Kaip atidaryti naują objekto formą ir ją užpildyti pagal ką nors

Turite perduoti parametrą Bazė, kurios reikšmė bus nuoroda į užpildymo pagrindinį objektą. Tai prasidės procedūra ProcessFill ().

&OnClient
Procedūros komanda 1 (komanda)
Parametras = nauja struktūra;
Parametras. Insert("Base", LinkToBuyerAccount) ;
OpenForm( "Dokumentas. Prekių ir paslaugų pardavimas. Objekto forma", Parametras) ;
Procedūros pabaiga

Šis pavyzdys sukurs dokumentą Prekių ir paslaugų pardavimas ir pildoma pagal apmokėjimo pirkėjui sąskaitą faktūrą, į kurią buvo perduota nuoroda.

6. Kaip atidaryti formą ir nustatyti joje pasirinkimą

1C formų pasirinkimas gali būti paprastas arba sudėtingas. Paprastas pasirinkimas apima tokius posakius kaip Organizacija = Horns and Hooves LLC. Kompleksinė atranka apima kitus palyginimo būdus, pvz. Sąraše. Šiame straipsnyje mes apsvarstysime paprastos atrankos organizavimą, o atskiras straipsnis bus skirtas sudėtingam atrankai.

Norėdami organizuoti paprastą pasirinkimą, atidaromos formos raktu turite perduoti parametrą Pasirinkimas, reikšmė bus struktūra, kurios raktas yra dinaminio sąrašo lauko pavadinimas, o reikšmė yra ieškomi duomenys.

Pavyzdžiui, atidarykime katalogų sąrašo formą GTD numeriai ir ten pasirinkite savininko katalogo elementą Nomenklatūra.

&OnClient
Procedūros komanda 1 (komanda)
Parametras = nauja struktūra;

atranka= nauja Struktūra;
Pasirinkimas. Insert("Savininkas", LinkToNomenclature) ;

Parametras. Insert("Pasirinkimas", Pasirinkimas) ;

OpenForm( "Katalogas. GTD numeriai. Sąrašo forma", Parametras) ;
Procedūros pabaiga

7. Kaip atsidaryti informacijos registro įvedimo formą

Norėdami tai padaryti, jums reikės informacijos registro įvedimo rakto.

Įrašymo raktas— tai visų matavimų ir laikotarpio reikšmės (jei registras periodiškas). Tai yra, įrašo raktas yra parametrai, pagal kuriuos įrašas gali būti unikaliai identifikuojamas.

Atidarymo algoritmas yra toks:

  1. Į struktūrą įvedame įrašo rakto duomenis su reikiamomis reikšmėmis.
  2. Gautą struktūrą dedame į masyvą.
  3. Iš masyvo sukuriame įrašo raktą.
  4. Atsidariusiai formai perduodame parametrą Raktas kaip reikšmę naudodami įrašymo raktą nuo 3 veiksmo.

&OnClient
Procedūros komanda 1 (komanda)
Parametras = nauja struktūra;

KeyParameters= nauja struktūra;
Pagrindiniai parametrai. Insert("Nomenklatūra", NuorodaToNomenklatūra) ;
Pagrindiniai parametrai. Insert("Kainos tipas", NuorodaKainos tipas) ;
Pagrindiniai parametrai. Insert("Laikotarpis", Data) ;

KeyArray = naujas masyvas;
KeyArray. Add(KeyParameters) ;

EntryKey = Naujas( „Informacijos registro įrašo raktas.Kainų nomenklatūra“, KeyArray);

Parametras. Insert("Key", RecordKey) ;

OpenForm( "Informacijos registras. Nomenklatūros kainos. Įrašo forma", Parametras) ;
Procedūros pabaiga

Laba diena visiems!
Manau, kad informacija šioje temoje bus labai naudinga daugeliui šio forumo lankytojų.
Ilgą laiką negalėjau išspręsti problemos – kaip atidaryti naujo dokumento formą, kad ji atsidarytų ne tuščia, o jau iš dalies užpildyta programiškai, o pats dokumentas dar neįrašytas į duomenų bazę? Daug laiko praleidau ieškodamas šios problemos sprendimo internete, lankiausi ne viename forume, kur buvo iškelta ši problema, tačiau tik keli iš jų rado sprendimus. Paprasčiausias iš jų – iš pradžių programiškai sukurti naują dokumentą, programiškai užpildyti reikiamus duomenis, įrašyti dokumentą į duomenų bazę ir tada jį atidaryti vartotojui. Ką daryti, jei vartotojas nenori jo išsaugoti? O jei persigalvos ir užsidarys atvira forma? Tokiu atveju jau įrašytas dokumentas liks duomenų bazėje. O kam reikia papildomų dokumentų duomenų bazėje?
O jei dokumento neišsaugosite, tuomet populiariausias variantas yra GetForm metodas ("Dokumentai. Reikalingas dokumento tipas. Dokumento forma"). Tačiau šiuo atveju galite gauti tuščią dokumento formą ir tiesiog parodyti ją naudodami Open() metodą. Tai irgi ne išeitis...
Po kurio laiko problema buvo išspręsta naudojant globalaus konteksto funkciją „Įrašyti nuosavybės vertes“.

Pasaulinis kontekstas
FillPropertyValues
Sintaksė:
Užpildykite PropertyValues(<Приемник>, <Источник>, <Список свойств>, <Исключая свойства>)
Apibūdinimas:
Kopijuoja nuosavybės vertes<Источника>į nuosavybes<Приемника>. Suderinimas atliekamas pagal nuosavybės pavadinimus.

Naudodamas savo užduotį kaip pavyzdį, norėčiau paaiškinti, kaip galite naudoti šią funkciją naujo dokumento formai užpildyti. Užduotis buvo tokia: Yra vienas dokumentas (Darbo užsakymas), kurio lentelinės dalies rekvizitas yra kitas dokumentas (Paslaugų teikimas). Taigi, reikėjo tuo įsitikinti pridedant prie lentelės dalis Naujo dokumento „Paslaugų teikimas“ „Darbo tvarka“, ekrane buvo rodoma naujojo dokumento „Paslaugų teikimas“ forma su jau užpildytais rekvizitais, paimtais iš darbo užsakymo, iš kurio buvo iškviesta kurti. Tuo pačiu metu pats naujas dokumentas, jo forma pasirodo ekrane, dar nebuvo įrašytas į duomenų bazę. Tai reikėjo padaryti, jei vartotojas staiga nusprendžia nepildyti dokumento ir tiesiog uždaro formą.
Čia yra kodo fragmentas su problemos sprendimu:

&Kliento procedūroje EnterRecord()RecordForm = GetForm("Dokumentas.Medicininių paslaugų teikimas.Objekto forma"); UžpildykitePropertyValues(Įrašoforma.Objektas,Objektas,Data,Specialistas,Specializacija,Slaugytoja,Vykdymo būsena"); // Įveskite detalių, kurių pavadinimai yra vienodi abiejuose dokumentuose, reikšmes TextStr = Elements.Reception.CurrentData; //Dabartinės šaltinio dokumento eilutės duomenysProperty Structure = Nauja struktūra; // Struktūroje yra tų detalių reikšmės, kurias reikia užpildyti naujojo dokumento formoje, bet kurių nėra pirminiame dokumente StructureProperties.Insert("Darbo užsakymas", Object.Link); PropertyStructure.Insert("ReceptionTime",TexStr.ReceptionTime); Užpildykite PropertyValues(Įrašoforma.Objektas,Nuosavybės struktūra,"Įrašymo tvarka,Paskyrimo laikas"); EntryForm.Open(); Procedūros pabaiga

Tai reiškia, kad visas operacijas atliekame tiesiogiai kliente, nesusisiekdami su serveriu, per vieną savarankiškai sukurtą procedūrą. Tiesą sakant, tokiu būdu galite užpildyti ir atidaryti bet kurio dokumento ar žinyno formą. Pirmiausia užpildžiau duomenis iš vienos formos į kitą, naudodamas formos objektus, o tada, naudodamas objektą „Struktūra“, į kurį įterpiau trūkstamus duomenis, užpildžiau dar keletą atidaromos formos detalių, o tada atidariau forma.
Tikiuosi, kad ši tema sutaupys laiko daugeliui, kurie susiduria su panašia užduotimi!

Pradžia Pradedantiesiems kūrėjams Mokymasis programuoti

Kaip atidaryti esamo objekto formą?

Atidarydami esamo objekto formą, be formos pavadinimo, turite nurodyti ir objektą, kurio forma turi būti atidaryta. Norėdami tai padaryti, naudokite rakto formos parametrą ir nuorodą į mus dominantį objektą.

Pavyzdžiui, jei iš organizacijų sąrašo formos reikia atidaryti organizacijos, kurioje yra žymeklis, formą, tai galite padaryti tokiu būdu:

Formos parametrus perduodame struktūros pavidalu, kur struktūros elemento pavadinimas atitinka formos parametro pavadinimą, o reikšmė yra reikšmė, kuriai norime nustatyti formos parametrą.

Jei norite atidaryti ne pagrindinę, o savavališką konfigūravimo priemonėje sukurto objekto formą, o ne standartinį pagrindinės formos pavadinimą (ObjectForm), nurodykite žodį Form, po kurio eina taškas - formos, sukurtos konfigūratorius.

Pavyzdžiui:

ReferenceToDirectoryElement = Elements.List.CurrentRow; FormParameters = New Structure("Raktas", ReferenceToDirectoryElement); OpenForm("Katalogas.Organizacijos.Forma.UniversalObjectForm",FormParameters);

Pažymėtina, kad tuo atveju, kai, be nuorodos į objektą, atidaromai formai nereikia perduoti parametrų, o reikalinga pagrindinė esamo objekto forma, galite naudoti paprastesnį būdą - atidarykite formą naudodami procedūrą OpenValue():

OpenValue(Items.List.CurrentRow);

Šis metodas yra mažiau universalus, tačiau kai kuriais atvejais sutaupo laiko ir pastangų. Pavyzdžiui, nagrinėjamu atveju viena tokia eilutė gali pakeisti visą trijų eilučių procedūrą, kurią rašėme anksčiau.

Tačiau naudojant šią procedūrą reikia būti atsargiems. Kai kuriais atvejais tai gali sukelti papildomų skambučių į serverį, pavyzdžiui, kai reikia atidaryti hierarchinio katalogo elemento formą. Naudodama šią procedūrą, platforma atliks papildomą skambutį serveriui, kad nustatytų, ar elementas yra grupė, ar ne, nes elementui ir grupei turi būti atidarytos skirtingos formos.

Tuo pačiu metu ši informacija gali būti iš anksto žinoma kūrėjui pagal jo algoritmą, o naudojant OpenForm() funkciją, kūrėjas gali atidaryti norimą formą be papildomų skambučių į serverį, iš karto nurodydamas standartinį pagrindinio pavadinimo pavadinimą. forma.

mob_info