Kā programmatiski aizpildīt un atvērt jaunu dokumenta veidlapu? Kā atvērt esoša objekta formu? Programmatiski atvērt jauna dokumenta formu 1s 8.3

Programmatiska veidlapu atvēršana pārvaldītā 1C lietojumprogrammā ievērojami atšķiras no to atvēršanas parastajā lietojumprogrammā. Vispirms apskatīsim veco metodi. Tas sastāv no veidlapas saņemšanas un pēc tam tās atvēršanas parastajā vai modālajā režīmā (atverot modālā režīmā, veidlapa bloķē programmu).

GetForm() . Atvērt ()

Šī ir lēnākā veidlapu atvēršanas metode. Tomēr tas ļauj programmatiski apstrādāt veidlapu pirms tās atvēršanas. Lai apstrādātu kodu, jums ir nedaudz jāmaina:

Form = GetForm( "Dokuments. Preču un pakalpojumu saņemšana. Dokumenta veidlapa") ;
//Šeit veicam darbības ar formu
Veidlapa. Atvērt ();

Jāņem vērā, ka, saņemot veidlapu, tiks veikta cita pasākuma procedūra WhenCreatedOnServer.

Apskatīsim citas metodes, kas ļauj ātrāk un ērtāk atvērt veidlapas pārvaldītā 1C lietojumprogrammā. Atkarībā no konkrētās situācijas var izmantot dažādas metodes.

1. Kā atvērt objekta formu pārvaldītā lietojumprogrammā, ja ir saite uz to.

Šajā gadījumā viss ir ārkārtīgi vienkārši.

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

2. Kā atvērt atlases formu un pēc tam iegūt izvēlēto vērtību.

Tam ir funkcija EnterValue(). Funkcijai ir 3 parametri:

  • Mainīgais, kurā tiks ierakstīta izvēlētā vērtība;
  • Padoms, kas tiks parādīts atlases logā;
  • Atlasīto vērtību veidu apraksts. Var būt vairāki veidi, un tādā gadījumā jums tiks piedāvāts atlasīt veidu pirms konkrētas vērtības atlasīšanas.

Funkcijas izpildes rezultātā tiks atvērta noklusējuma atlases forma norādītā tipa objektam.

Mainīgā vērtība;
Masīvs= jauns Masīvs;
Masīvs. Add(type( "DirectoryLink.Nomenclature") ) ;
Masīvs. Add(type( "DirectoryLink. Darījuma partneri") ) ;

TypeDescription= new TypeDescription(Array) ;

Res = EnterValue(Vērtība, "Padoms" , TipaApraksts) ;

Iepriekšējās metodes ļāva atvērt tikai objektu noklusējuma formas (objekta formu vai atlases formu). Ja jums ir jāatver pielāgota veidlapa, varat izmantot funkciju OpenForm ().

Šai funkcijai ir diezgan daudz parametru. Apskatīsim dažus no tiem:

  • Veidlapas nosaukums— šeit varat izvēlēties kādu no standarta objektu formām, piemēram, Atlases forma vai Saraksta veidlapa. Vai arī īpaša veidlapa, ko izveidojuši izstrādātāji.
  • Iespējas— ļauj to pārsūtīt uz veidlapā esošo formu struktūras dažus parametrus pirms tā atvēršanas, tādējādi nosakot izejas datus. Parametri var būt jebkuri dati, ko var nodot no klienta uz serveri. Veidlapas atvēršanas laikā nodotos parametrus var apstrādāt procedūrā WhenCreatingOnServer() veidlapā, kas tiek atvērta.
  • Veidlapas atvēršanas režīms— ir 3 iespējas: neatkarīga, bloķēt visu interfeisu, bloķēt īpašnieka veidlapu.

Apskatīsim, kā funkcija tiek izmantota OpenForm() dažādās situācijās.

3. Kā atvērt esoša objekta formu

Katrai veidlapai ir viens atslēgas atribūts. Veidlapas informācijas sarakstā tas ir izcelts treknrakstā un parasti tiek saukts Objekts uzziņu grāmatu un dokumentu elementu formās. Citiem objektiem var būt cits nosaukums. Lai atvērtu esoša objekta formu, atveramajai formai ir jānodod parametrs Atslēga ar vērtību kā atsauci uz objektu.

&OnClient
Procedūras komanda 1 (komanda)
Parametrs = jauna struktūra;
Parametrs. Insert("Atslēga" , FindC() );
OpenForm(, Parametrs) ;
Procedūras beigas

&Serverī
Funkcija FindC();
Atgriezt direktorijus. Darījuma partneri. FindByRequisites ("TIN", "745107734623")
EndFunction

4. Kā atvērt jaunu objekta formu

Šeit noderēs vienkārša funkcija OpenForm() bez jebkādiem parametriem.

&OnClient
Procedūras komanda 1 (komanda)
OpenForm( "Katalogs. Darījuma partneri. Objekta veidlapa") ;
Procedūras beigas

5. Kā atvērt jaunu objekta formu un aizpildīt to, pamatojoties uz kaut ko

Jums ir jānodod parametrs Bāze, kuras vērtība būs atsauce uz aizpildījuma bāzes objektu. Tas sāks procedūru ProcessFill().

&OnClient
Procedūras komanda 1 (komanda)
Parametrs = jauna struktūra;
Parametrs. Insert("Bāze", LinkToBuyerAccount) ;
OpenForm( "Dokuments. Preču un pakalpojumu pārdošana. Objekta forma", Parametrs) ;
Procedūras beigas

Šis piemērs izveidos dokumentu Preču un pakalpojumu pārdošana un aizpildīta, pamatojoties uz rēķinu par samaksu pircējam, uz kuru tika nosūtīta saite.

6. Kā atvērt veidlapu un iestatīt tajā atlasi

1C veidlapu atlase var būt vienkārša vai sarežģīta. Vienkārša atlase ietver tādus izteicienus kā Organizācija = Horns and Hooves LLC. Sarežģītā atlase ietver citus salīdzināšanas veidus, piem. Sarakstā. Šajā rakstā mēs apsvērsim vienkāršas atlases organizēšanu, un atsevišķs raksts tiks veltīts sarežģītai atlasei.

Lai organizētu vienkāršu atlasi, atveramajai veidlapai ir jānodod parametrs ar atslēgu Atlase, vērtība būs struktūra, kurā atslēga ir dinamiskā saraksta lauka nosaukums, bet vērtība ir meklējamie dati.

Piemēram, atveram direktoriju saraksta formu GTD numuri un veiciet atlasi pēc īpašnieka - direktorija elementa Nomenklatūra.

&OnClient
Procedūras komanda 1 (komanda)
Parametrs = jauna struktūra;

atlase= jauna Struktūra;
Atlase. Insert("Īpašnieks", LinkToNomenclature) ;

Parametrs. Insert("Atlase", Atlase) ;

OpenForm( "Directory.GTD Numbers.List Form", Parametrs) ;
Procedūras beigas

7. Kā atvērt informācijas reģistra ieraksta veidlapu

Lai to izdarītu, jums būs nepieciešama informācijas reģistra ievades atslēga.

Ieraksta atslēga— tās ir visu mērījumu un perioda vērtības (ja reģistrs ir periodisks). Tas nozīmē, ka ieraksta atslēga ir parametri, pēc kuriem ierakstu var unikāli identificēt.

Atvēršanas algoritms ir šāds:

  1. Mēs ievadām ieraksta atslēgas datus ar nepieciešamajām vērtībām struktūrā.
  2. Iegūto struktūru ievietojam masīvā.
  3. Mēs izveidojam ieraksta atslēgu no masīva.
  4. Mēs nododam parametru atvērtajai formai Atslēga ar ierakstīšanas atslēgu no 3. darbības kā vērtību.

&OnClient
Procedūras komanda 1 (komanda)
Parametrs = jauna struktūra;

KeyParameters= jauna struktūra;
Galvenie parametri. Insert("Nomenklatūra", LinkToNomenklatūra) ;
Galvenie parametri. Insert("Cenas veids", LinkToCenas veids) ;
Galvenie parametri. Insert("Periods", Datums) ;

KeyArray = jauns masīvs;
KeyArray. Pievienot(KeyParameters) ;

EntryKey = New( "Informācijas reģistrsRecord Key.Cenu nomenklatūra", KeyArray) ;

Parametrs. Insert("Atslēga", Ieraksta atslēga) ;

OpenForm( "Informācijas reģistrs. Nomenklatūras cenas. Ieraksta veidlapa", Parametrs) ;
Procedūras beigas

mājas Iesācējiem izstrādātājiem Mācīties programmēt

Kā atvērt esoša objekta formu?

Atverot esoša objekta formu, papildus formas nosaukumam jānorāda arī objekts, kura forma ir jāatver. Lai to izdarītu, izmantojiet atslēgas formas parametru un saiti uz mūs interesējošo objektu.

Piemēram, ja no organizāciju saraksta veidlapas ir jāatver tās organizācijas forma, uz kuras atrodas kursors, to var izdarīt šādi:

Veidlapas parametrus nododam struktūras formā, kur struktūras elementa nosaukums atbilst formas parametra nosaukumam, bet vērtība ir vērtība, kurai vēlamies iestatīt formas parametru.

Ja vēlaties atvērt nevis galveno, bet patvaļīgu konfiguratorā izveidotā objekta formu, nevis galvenās formas standarta nosaukumu (ObjectForm), norādiet vārdu Form, kam seko punkts - izveidotās formas nosaukums. konfigurators.

Piemēram:

ReferenceToDirectoryElement = Elements.List.CurrentRow; FormParameters = New Structure("Atslēga", ReferenceToDirectoryElement); OpenForm("Directory.Organizations.Form.UniversalObjectForm",FormParameters);

Jāņem vērā, ka gadījumā, ja papildus saitei uz objektu atveramajai formai nav jānodod nekādi parametri un ir nepieciešama esošā objekta galvenā forma, var izmantot vienkāršāku metodi. - atveriet veidlapu, izmantojot procedūru OpenValue():

OpenValue(Items.List.CurrentRow);

Šī metode ir mazāk universāla, taču dažos gadījumos tā ietaupa laiku un pūles. Piemēram, aplūkotajā gadījumā viena šāda rinda var aizstāt visu trīs rindu procedūru, ko mēs rakstījām iepriekš.

Tomēr, izmantojot šo procedūru, jābūt uzmanīgiem. Dažos gadījumos tas var izraisīt papildu izsaukumus serverim, piemēram, ja ir jāatver hierarhiskā direktorija vienuma forma. Izmantojot šo procedūru, platforma veiks papildu zvanu serverim, lai noteiktu, vai elements ir grupa vai nē, jo elementam un grupai ir jāatver dažādas formas.

Tajā pašā laikā šī informācija izstrādātājam var būt zināma iepriekš viņa algoritma ietvaros, un, izmantojot funkciju OpenForm(), izstrādātājs var atvērt vajadzīgo formu bez papildu izsaukumiem uz serveri, nekavējoties norādot galvenā standarta nosaukumu. formā.

Laba diena visiem!
Es domāju, ka informācija šajā tēmā būs ļoti noderīga daudziem šī foruma apmeklētājiem.
Ilgu laiku nevarēju atrisināt problēmu - kā atvērt jauna dokumenta formu tā, lai tā atvērtos nevis tukša, bet gan jau daļēji aizpildīta programmatiski, kamēr pats dokuments vēl nav ierakstīts datu bāzē? Es pavadīju daudz laika, meklējot risinājumu šai problēmai internetā, apmeklēju daudzus forumus, kur šī problēma tika izvirzīta, taču tikai daži no tiem atrada risinājumus. Vienkāršākais no tiem ir vispirms programmatiski izveidot jaunu dokumentu, programmatiski aizpildīt nepieciešamos datus, ierakstīt dokumentu datu bāzē un pēc tam atvērt to lietotājam. Ko darīt, ja lietotājs nevēlas to saglabāt? Ko darīt, ja viņš pārdomā un aizver atvērto formu? Šajā gadījumā jau ierakstītais dokuments paliks datu bāzē. Un kam ir vajadzīgi papildu dokumenti datu bāzē?
Un, ja dokumentu nesaglabājat, tad populārākā iespēja ir izmantot GetForm metodi (“Dokumenti. Nepieciešamais dokumenta veids. Dokumenta veidlapa”). Bet šajā gadījumā jūs varat iegūt tukšu dokumenta veidlapu un vienkārši parādīt to, izmantojot Open() metodi. Tas arī nav risinājums...
Pēc kāda laika problēma tika atrisināta, izmantojot globālā konteksta funkciju “Aizpildīt īpašuma vērtības”.

Globālais konteksts
FillPropertyValues
Sintakse:
Aizpildiet PropertyValues(<Приемник>, <Источник>, <Список свойств>, <Исключая свойства>)
Apraksts:
Kopē īpašuma vērtības<Источника>uz īpašumiem<Приемника>. Atbilstība tiek veikta pēc īpašumu nosaukumiem.

Izmantojot savu uzdevumu kā piemēru, es vēlētos paskaidrot, kā jūs varat izmantot šo funkciju, lai aizpildītu jauna dokumenta veidlapu. Uzdevums bija šāds: Ir viens dokuments (Darba pasūtījums), kura tabulas daļas rekvizīts ir cits dokuments (Pakalpojumu sniegšana). Tātad, bija jāpārliecinās, ka, pievienojot jaunu dokumentu "Pakalpojumu sniegšana" "Darba pasūtījuma" tabulas daļai, ekrānā tika parādīta jaunā dokumenta "Pakalpojumu sniegšana" forma ar detaļām. jau aizpildīts, ņemts no darba pasūtījuma, no kura tika izveidota izveide. Tajā pašā laikā pats jaunais dokuments brīdī, kad tā forma parādās ekrānā, datu bāzē vēl nav ierakstīts. Tas bija jādara, ja lietotājs pēkšņi nolemj neaizpildīt dokumentu un vienkārši aizver veidlapu.
Šeit ir koda fragments ar problēmas risinājumu:

&Klienta procedūrā EnterRecord()RecordForm = GetForm("Dokuments.Medicīnisko pakalpojumu sniegšana.Objekta veidlapa"); Fill inPropertyValues(RecordForm.Object,Object,"Datums,Speciālists,Specializācija,Māsa,Izpildes statuss",); // Ievadiet to detaļu vērtības, kuru nosaukumi ir vienādi abos dokumentos TextStr = Elements.Reception.CurrentData; //Avota dokumenta pašreizējās rindas datiProperty Structure = New Structure; // Struktūra satur to detaļu vērtības, kuras jāaizpilda jaunā dokumenta formā, bet kuras nav avota dokumentā StructureProperties.Insert("Darba pasūtījums", Object.Link); PropertyStructure.Insert("ReceptionTime",TexStr.ReceptionTime); Aizpildiet inPropertyValues(RecordForm.Object,PropertyStructure,"RecordOrder,AppointmentTime",); EntryForm.Open(); Procedūras beigas

Tas ir, visas darbības veicam tieši uz klienta, nesazinoties ar serveri, vienas neatkarīgi izveidotas procedūras ietvaros. Faktiski šādā veidā jūs varat aizpildīt un atvērt jebkura dokumenta vai uzziņu grāmatas veidlapu. Vispirms es aizpildīju detaļas no vienas veidlapas uz otru, izmantojot veidlapas objektus, un pēc tam, izmantojot objektu “Struktūra”, kurā ievietoju trūkstošās detaļas, aizpildīju vēl dažas atveramās veidlapas detaļas un pēc tam atvēru formā.
Ceru, ka šī tēma ietaupīs laiku daudziem, kas saskaras ar līdzīgu uzdevumu!