1c modulio programinės įrangos sąsaja. Bendrieji moduliai

14.02.2024

Kas yra moduliai ir kam jie tiksliai skirti? Modulyje yra programos kodas. Be to, verta paminėti, kad skirtingai nei 7.7 platformoje, kur kodas galėtų būti formų elementų savybėse ir išdėstymo lentelių langeliuose, 8.x platformoje bet kokia kodo eilutė turi būti kokiame nors modulyje. Paprastai modulį sudaro trys skyriai – kintamiesiems aprašyti, procedūroms ir funkcijoms aprašyti ir pagrindinės programos skyriui. Ši struktūra būdinga beveik visiems platformos moduliams, išskyrus kai kurias išimtis. Kai kuriuose moduliuose nėra kintamojo aprašymo skyriaus arba pagrindinės programos dalies. Pavyzdžiui, seanso modulis ir bet kuris bendrasis modulis.

Modulių vykdymo kontekstas paprastai skirstomas į klientą ir serverį. Be to, kai kurie moduliai gali būti kompiliuojami tiek kliento, tiek serverio pusėje. Ir kai kurie yra išskirtinai serverio arba kliento pusėje. Taigi:

Taikymo modulis

Modulis skirtas pagauti programos paleidimo (konfigūracijos įkėlimo) ir jos veikimo nutraukimo momentus. Ir patikrinimo procedūros gali būti įtrauktos į atitinkamus įvykius. Pavyzdžiui, paleisdami programą atnaujinkite kai kuriuos referencinius konfigūracijos duomenis, o baigdami darbą paklauskite, ar verta išvis ją palikti, gal darbo diena dar nesibaigė. Be to, jis perima įvykius iš išorinės įrangos, pavyzdžiui, prekybos ar mokesčių. Verta paminėti, kad programos modulis perima aprašytus įvykius tik tada, kai jis paleidžiamas interaktyviai. Tie. kai sukuriamas pats programos langas. Tai neįvyksta, jei programa paleidžiama com ryšio režimu.

8.2 platformoje yra du skirtingi programų moduliai. Tai yra įprastinės programos modulis ir valdomos programos modulis. Jie suveikia, kai paleidžiami skirtingi klientai. Taip valdomas programos modulis suaktyvinamas, kai žiniatinklio klientas, plonasis klientas ir storasis klientas paleidžiami valdomos programos režimu. O įprastas programos modulis suveikia, kai storasis klientas paleidžiamas įprastu programos režimu.

Programos modulyje gali būti visi skyriai – kintamųjų, procedūrų ir funkcijų aprašymai, taip pat pagrindinės programos aprašymai. Programos modulis yra sudarytas kliento pusėje, todėl tai labai apriboja daugelio tipų duomenų prieinamumą. Programos modulio kontekstą galite išplėsti naudodami įprastų modulių, kurių ypatybių rinkinys „Server Call“, metodus. Visi kintamieji ir metodai, pažymėti kaip eksportuoti, bus pasiekiami bet kuriame konfigūracijos modulyje, veikiančiame kliento pusėje. Tačiau, kad ir kaip būtų viliojanti, neturėtumėte čia skelbti daugybės metodų. Kuo daugiau kodo jame, tuo ilgesnis kompiliavimo laikas, taigi ir programos paleidimo laikas, o tai labai erzina vartotojus.

Kaip minėta pirmiau, programos modulis tvarko programos paleidimo ir nutraukimo įvykius. Norint apdoroti kiekvieną iš šių įvykių programos modulyje, yra pora tvarkyklių Prieš... ir Kada... Skirtumai tarp jų yra tokie, kad vykdant kodą tvarkyklėje Prieš... veiksmas dar nėra įvyko ir mes galime atsisakyti jį vykdyti. Tam skirta parinktis Atmesti. Įjungimo tvarkytuvėse veiksmas jau atliktas, todėl negalime atsisakyti paleisti programos arba iš jos išeiti.

Išorinis prijungimo modulis

Modulio paskirtis yra panaši į programos modulio paskirtį. Jis apdoroja programos pradžios ir pabaigos taškus. Išorinio ryšio modulis suveikia, kai programa paleidžiama ryšio režimu. Pats išorinis sujungimo procesas yra neinteraktyvus procesas. Šiuo režimu vyksta programinis darbas su informacine baze ir neatsidaro programos langas, o tai nustato tam tikrus interaktyviam darbui skirtų metodų naudojimo apribojimus. Šiuo režimu negalima naudoti skambučių į dialogo formas, įspėjamuosius pranešimus ir pan. Jie tiesiog neveiks.

Kaip ir taikomosios programos modulyje, čia yra skyriai, kuriuose aprašomi kintamieji, metodai ir pagrindinės programos skyrius. Taip pat galite deklaruoti eksporto kintamuosius ir metodus. Skirtumas tas, kad com ryšio režime visas darbas su infobaze vyksta serverio pusėje, todėl išorinio ryšio modulis kompiliuojamas išskirtinai serveryje. Atitinkamai, įprastų kliento modulių eksporto kintamieji ir metodai jame nepasiekiami.

Sesijos modulis

Tai labai specializuotas modulis ir skirtas tik seanso parametrams inicijuoti. Kodėl jums reikėjo tam sukurti savo modulį? Taip yra dėl to, kad inicijavimo procese gali tekti vykdyti tam tikrą kodą, be to, programa gali būti paleista naudojant skirtingus klientus (dėl to vykdomi skirtingi programos moduliai arba išorinio ryšio modulis) ir inicijuoti seanso parametrai turi būti atlikti bet kuriuo paleidimo režimu. Todėl reikėjo papildomo modulio, kuris veiktų bet kuriuo programos paleidimo režimu.

Seanso modulyje yra vienas įvykis „SettingSessionParameters“, kuris vykdomas pats pirmas, net prieš programos modulio įvykį BeforeSystemStartOperation. Jame nėra kintamųjų deklaravimo skyriaus ir pagrindinės programos skyriaus. Taip pat negalite deklaruoti eksporto metodų. Modulis sukompiliuotas serverio pusėje.

Neturėtumėte susigundyti tuo, kad šis modulis vykdomas kiekvieną kartą paleidus programą, ir neturėtumėte į jį įdėti kodo, kuris nėra tiesiogiai susijęs su seanso parametrų inicijavimu. Taip yra dėl to, kad sistemos veikimo metu SetSessionParameters tvarkytojas gali būti iškviestas pakartotinai. Pavyzdžiui, tai atsitinka tais atvejais, kai pasiekiame neinicijuotus parametrus. Ir nors galima pagauti pirmojo šio įvykio paleidimo momentą (RequiredParameters yra Undefined tipo), reikia atsižvelgti į tai, kad šis modulis kompiliuojamas privilegijuotu režimu, t.y. jis nekontroliuoja prieigos teisių. Ir antras dalykas – vis dar negalime būti šimtu procentų tikri, kad sistema bus paleista. Staiga programos modulyje įvyksta gedimas ir mes bandome atlikti kai kuriuos veiksmus su duomenų baze.

Bendrieji moduliai

Moduliai yra skirti aprašyti kai kuriuos bendrus algoritmus, kurie bus iškviesti iš kitų konfigūracijos modulių. Bendrajame modulyje nėra kintamojo aprašymo skyriaus ir pagrindinės programos dalies. Jame galite deklaruoti eksporto metodus, kurių pasiekiamumo kontekstą lems kompiliavimo vėliavėlės. Dėl to, kad kintamųjų aprašymo skyriaus nėra, bendruose moduliuose negalima apibrėžti visuotinių kintamųjų. Norėdami tai padaryti, turite naudoti įprastų modulių funkcijas su grąžinimo reikšmių kaupimu talpykloje arba programos modulį. Verta nepamiršti, kad net jei bendrinamo modulio pakartotinio naudojimo ypatybė nustatyta į „Seanso trukmei“, tokiu atveju talpykloje saugomų reikšmių tarnavimo laikas neviršija 20 minučių nuo paskutinės prieigos prie momento. juos.
Bendro modulio elgsena priklauso nuo nustatytų parametrų (visuotiniai ar ne, įvairios kompiliavimo vėliavėlės, ar galimas serverio iškvietimas ir pan.). Šiame straipsnyje mes nenagrinėsime visų tipų nustatymų, taip pat elgesio ypatybių ir spąstų, kurie atsiranda nepagrįstai nustatant nuosavybės vėliavėles. Tai atskiro straipsnio tema. Apsistokime tik prie kelių punktų, kurių reikėtų laikytis nustatant vėliavėles:

  • Gera nykščio taisyklė yra ne visur naudoti pasaulinę vėliavą. Tai sumažins programos paleidimo laiką, taip pat pagerins kodo skaitomumą (žinoma, jei bendras modulis turi visiškai prasmingą pavadinimą).
  • Nerekomenduojama naudoti daugiau nei vienos kompiliacijos vėliavėlės. Metodų, kuriuos reikia vykdyti skirtinguose kontekstuose, nėra daug, o jei tokių metodų vis dar reikia, tuomet jiems galima skirti atskirą bendrą modulį.
  • Žymė „Server Call“ yra prasminga tik tuo atveju, jei modulis yra sudarytas „Serveryje“. Todėl visos kitos kompiliavimo vėliavėlės turėtų būti pašalintos, kad būtų išvengta įvairių problemų.
  • Jei modulio metodai apima masinį duomenų apdorojimą, skaitymą ir įrašymą į duomenų bazę, tai norint pagreitinti darbą, geriau išjungti prieigos teisių valdymą, nustatant vėliavėlę „Privilegijuota“. Šis režimas galimas tik bendriems moduliams, sudarytiems serveryje.

Formos modulis

Jis skirtas vartotojo veiksmams apdoroti, t.y. įvairūs įvykiai, susiję su duomenų įvedimu ir jų įvedimo teisingumu. Įprastos formos modulis yra sudarytas tik pagal klientą. Valdomos formos modulis yra aiškiai atskirtas vykdymo konteksto, todėl visi kintamieji ir metodai turi turėti kompiliavimo direktyvą. Jei direktyva nėra aiškiai nurodyta, šis kintamasis arba metodas bus sudarytas serverio pusėje. Formos modulyje yra kintamųjų ir metodų aprašymų skyriai, taip pat pagrindinės programos skyrius.

Objektinis modulis

Šis modulis būdingas daugeliui konfigūracijos objektų ir paprastai yra skirtas objektų įvykiams apdoroti. Pavyzdžiui, objektų įrašymo ir trynimo įvykiai, dokumentų paskelbimo įvykiai ir kt.

Kai kurie objekto modulio įvykiai dubliuoja formos modulio įvykius. Pavyzdžiui, su įrašu susiję įvykiai. Tačiau supraskite, kad formos modulio įvykiai bus vykdomi tik konkrečioje objekto formoje. Apskritai šių formų gali būti kelios. O objekto modulio įvykiai bus iškviesti bet kokiu atveju, net ir programinio darbo su objektu momentu. Todėl, jei visais atvejais reikia vykdyti tam tikrą kodą, geriau tam naudoti objekto modulio įvykį.

Objekto modulis kompiliuojamas tik serveryje. Jame galite apibrėžti eksporto kintamuosius ir metodus, kurie bus prieinami kituose konfigūracijos moduliuose. Naudodami šias savybes ir metodus galime žymiai išplėsti objekto funkcionalumą.

Objektų tvarkyklės modulis

Šis modulis egzistuoja daugeliui konfigūracijos objektų. Pagrindinis šio modulio tikslas – iš naujo apibrėžti standartinį pasirinkimo įvykį, kuris įvyksta įvedant eilutę, ir išplėsti tvarkyklės funkcionalumą. Modulis sukompiliuotas serverio pusėje. Tai leidžia apibrėžti eksporto ypatybes ir metodus. Vadybininko eksporto metodų iškvietimas nereikalauja sukurti paties objekto.

Prie visų aukščiau pateiktų dalykų galite pridėti kai kurių konfigūracijos modulių paveikslėlį ir būdų, kaip abipusiai iškviesti metodus valdomų programų režimu. Rodyklė rodo kryptį, kuria galite pasukti, kad iškviestumėte atitinkamą metodą. Kaip matyti iš diagramos, serverio kontekstas yra visiškai uždarytas. Tačiau iš kliento konteksto galima pasiekti serverio metodus.

Simboliai diagramoje: O.M. Klientas – Kliento bendras modulis; O.M. Serveris – serverio bendras modulis; M.F. Klientas – Kliento formos modulio procedūros; M.F. Serveris – formos modulio serverio procedūros.

Sveiki visi.
Šiandien pažiūrėsime 1C Enterprise 8.2 platformos moduliai, jų yra daugiau nei 8.1 versijoje ir kartais ne taip lengva tai suprasti.
Pavyzdys:

Jei pažvelgsite į 1C žinyną, pamatysite tokį modulio apibrėžimą:
Modulis yra programa, parašyta integruota 1C:Enterprise sistemos kalba.

O paprasčiau tariant: B 1C moduliai yra vykdomasis kodas, būtinas norint kažkaip reaguoti į sistemos ar vartotojo veiksmus, kai vaizdinių priemonių nepakanka objektų sąveikai konfigūruotoje apibūdinti. Savo metodus taip pat galite aprašyti programos moduliuose.

Bet kuri kodo eilutė yra tam tikrame modulyje, tai priešingai nei 1C7.7, kur programos kodas gali būti išdėstytas išdėstymo lentelių langeliuose ir formos elementų savybėse.

Išvardykime modulius, esančius 1C 8.2

Platformos moduliai 1C Enterprise 8.2:

Tvarkomas programos modulis
Reguliarus taikymo modulis
Išorinis prijungimo modulis
Sesijos modulis
Bendrieji moduliai
Objektinis modulis
Formos modulis
Objektų tvarkyklės modulis
Vertės vadybininko modulis
Įrašų rinkinio moduliai

Pagrindinės modulio dalys:
1. Skyriuje, kuriame aprašomi šio modulio vietiniai kintamieji, galite nurodyti kompiliavimo direktyvą (egzistuoja ne visiems moduliams).
2. Skyrius, kuriame aprašomos procedūros ir funkcijos. Jei nerašote kompiliavimo direktyvos, tai pagal numatytuosius nustatymus tai yra &OnServer, procedūrų ir funkcijų tvarka visai nesvarbu.
3. Modulio pagrindinės programos skyrius (yra keletas teiginių). Šis skyrius vykdomas prisijungiant prie modulio (egzistuoja ne visiems moduliams).

Ne visuose moduliuose yra kintamųjų aprašų skyriai ir pagrindinė programos dalis.
Pavyzdžiui: Bendrasis modulis arba Sesijos modulis.

Modulio sudarymo taisyklės:
1. Kai kurie moduliai yra visiškai sudaryti arba kliento, arba serverio pusėje. Visi metodai juose yra kliento arba serverio. Kliento modulio pavyzdys yra valdomos programos modulis.
2. Kai kurie moduliai gali sujungti kliento ir serverio metodus. Šiuo atveju kiekvienam metodui būtina nurodyti kompiliavimo direktyvas - &OnClient arba &OnServer. Pavyzdys yra valdomų formų moduliai.

Modulio klasifikacija:
1. Serveris. Sukompiliuota tik serverio pusėje – objekto modulis, tvarkyklės modulis, įrašų rinkinio modulis.
2. Klientas. Sudaryta tik kliente, pvz., valdomame programos modulyje.
3. Kombinuotas. Galima kompiliuoti tiek serveryje, tiek kliente – formos modulyje ir bendruosiuose moduliuose.

Modulio sudarymo vieta:
1. Plonas klientas (Suteikia galimybę naudotis interneto naršykle).
2. Serveris.
3. Storas klientas.

Kaip matote, modulių nėra tiek mažai, beveik kiekvienas konfigūracijos objektas turi modulį, kuris turi savo paskirtį.

Kiekvieno 1C 8.2 modulio paskirtis

Apsauga: Ar galvojate įsigyti 1C Enterprise ir nežinote, iš ko? LBS įmonė yra tarp 20 geriausių 1C: franšizės gavėjų. Užsiima apskaitos automatizavimu 1C produktų pagrindu. Pirkite 1C produktus iš LBS ir gaukite aukštos kokybės 1C palaikymą ir aptarnavimą.

P.S. Juokis iš Lukašenkos pokšto))

Bet kurią programą sudaro programos kodas, tai yra iš tikrųjų veiksmų seka, parašyta bet kuria kalba, kurią reikia atlikti.

Tačiau ši programa turi būti kažkur parašyta, tai yra, kažkur. Daugeliu atvejų programos kodas rašomas paprasto teksto failuose. Skirtumas tik tas, kad plėtinys juose yra ne .txt, o .cpp arba .php.

Kur parašyta 1C programa?

Kas yra 1C modulis?

Žinoma, 1C kodas taip pat gali būti įrašytas į kokį nors tekstinį failą. Tačiau yra 1C konfigūracijos koncepcija – kuri apima ne tik nustatymų sąrašą, formų šablonus ir pan., bet ir 1C programos kodą. Todėl 1C kodas yra saugomas konfigūracijoje.

Konfigūraciją sudaro 1C objektai, kaip jau aptarėme ankstesnėse pamokose. Kiekviename 1C objekte yra įdėtų objektų, pavyzdžiui, katalogas turi keletą formų.

Kiekvienas 1C objektas, įskaitant kai kuriuos įdėtuosius, turi savo modulį - tekstinį failą, kuriame yra programos kodas.

Taip pat yra nuo objektų nepriklausomų modulių, kuriuose galima įrašyti programos kodą, kuris nepriklauso nuo konkretaus objekto.

Taigi 1C nėra „vienos“ programos. Kiekvienam 1C konfigūracijos objektui yra modulių rinkinys, skirtas rašyti programos kodą.

Kaip naudojami 1C moduliai?

Visą programą galima apytiksliai suskirstyti į du tipus:

  • Objektinis metodas
  • Reakcija į įvykius.

Metodai. Kaip minėjome anksčiau, 1C objektas yra vientisa struktūra, apimanti ir duomenis, ir jo apdorojimo metodus. Šie metodai yra veiksmų (metodų), kuriuos galima iškviesti duomenims apdoroti, rinkinys. Tokio veiksmo pavyzdys yra DirectoryObject.Write() – įrašo katalogo elementą į duomenų bazę.

Daugelio 1C objektų metodai gali būti standartiniai (t. y. užprogramuoti 1C platformoje) ir parašyti programuotojo 1C kalba. Antrojo pagalba galite išplėsti 1C objektų funkcionalumą, kaip norite.

Renginiai. Įvykiai pasiekiami daugelyje kitų kūrimo įrankių. Programos tikslas – ne tik ką nors apskaičiuoti paleidžiant, bet ir palaikyti vartotojo darbą.

Vartotojo įvykis – vartotojas paspaudė mygtuką. Atsakant į vartotojo veiksmus bus vykdoma tam tikra kodo dalis.

Sistemos įvykiai – duomenų bazėje įrašėme 1C objektą. Įvyko sistemos įvykis „Įrašyti objektą“. Galima sukonfigūruoti reakciją, kuri įvyks į įvykius, sukeltus ne vartotojo (paspaudusio mygtuką ar dar ką nors padariusio), o pačios sistemos. Ryškus tokio įvykio pavyzdys yra programos pradžia.

1C modulių vykdymo tvarka

Daugelis kalbų turi tokią sąvoką kaip „įėjimo taškas“. Tai pati pirmoji eilutė arba funkcija, kuri bus vykdoma paleidus programą.

1C yra keli tokie įėjimo taškai - kiekvienam kliento tipui. Tai yra, pradedant storą klientą, yra vienas įėjimo taškas, pradedant ploną klientą, kitas. Tai leidžia programuoti funkcijas, kurios skiriasi skirtingų tipų klientams.

Atitinkamo modulio įėjimo taškas yra atitinkamai sistemos įvykių tvarkyklės BeforeSystemStart() ir WhenSystemStart() (ty eilės tvarka). Šios funkcijos vykdomos pirmiausia, jos gali kažką paleisti automatiškai.

Jei niekas nebuvo paleistas automatiškai, tada 1C sąsaja atsidaro priešais vartotoją ir viskas priklauso nuo to. Jis paspaudžia mygtuką – paleidžiama mygtuko paspaudimo tvarkyklė (kuri savo ruožtu taip pat gali kažką paleisti automatiškai).

Darbas su 1C moduliais

Pagaminta konfigūratoriuje. Modulį galite atidaryti naudodami konfigūracijos langą.

Beveik visi konfigūracijos objektai turi tvarkyklės modulį, o daugumai objektų – objektų modulį. Dažnai pradedantieji programuotojai nesupranta šių dviejų modulių paskirties skirtumų.

Suprasdami jų paskirties skirtumą, galite parašyti teisingesnės struktūros programos kodą, o kai kuriais atvejais sutaupyti 1C serverio išteklius ir padidinti programos sprendimo našumą.

Straipsnyje apžvelgsime esminius šių modulių skirtumus tiek iš teorinės pusės, tiek pasitelkę konkretų praktinį pavyzdį.

teorija

Pažvelkime į objektinio programavimo (OOP) pagrindus ir nubrėžkime analogiją su mūsų pavyzdžiu. OOP objektų metodus galima suskirstyti į statiška ir paprasta. Paprasti metodai gali būti iškviesti tik konkrečiame objekte, prie kurio turime prieigą esamame kodo kontekste. Statiniai metodai neturi tiesioginės prieigos prie objekto duomenų. Norėdami pasiekti objektą, pirmiausia turite sukurti jo egzempliorių. Tas pats pasakytina ir apie 1C:Enterprise 8.x platformą.

Objekto modulyje platforma saugo procedūras ir funkcijas, kurias galima iškviesti tik dirbant su konkrečiu objektu, pavyzdžiui, su katalogo elemento „Nomenclature“ objektu. Valdytojo modulyje yra procedūros ir funkcijos, kurios gali būti taikomos visiems tam tikro tipo objektams, bet iš pradžių sukuriant to objekto egzempliorių. Tai yra, norėdami pakeisti šio modulio nomenklatūros elementą, pirmiausia paleiskite metodą „GetObject()“, kad būtų nuoroda į elementą, ir tada dirbkite su juo.

Pereikime nuo teorijos prie praktikos.

Praktika

Pereikime prie praktinio pavyzdžio. Tarkime, kad turime išspręsti gaminių sąrašo spausdinimo problemą. Vartotojas spausdina produktą tiesiogiai iš katalogo elemento arba iš produktų sąrašo formos. Panagrinėkime du būdus, kaip atlikti užduotį.

Spausdinimo procedūra objekto modulyje

Katalogo objekto modulyje pridėkite šią funkciją:

// Perduokite funkcijai nuorodą į katalogo elementą Funkcija PrintSelectedProducts(Link) Export TabDoc = naujas lentelės dokumentas; Išdėstymas = Katalogai. Prekės. GetLayout("Išdėstymas"); Užklausa = nauja užklausa; Prašymas. Tekstas = " SELECT | Produktai . Prekės AS pristatymas,| Prekės . MarkDeletion,| Prekės . pardavėjo kodas |NUO| Katalogas . Produktai AS Produktai|KUR | Prekės . Nuoroda B (&produktų masyvas)" ; Užklausa. SetParameter(" Produktų masyvas ", Nuoroda); //Pasirinkite pagal nuorodą

Programos kodą visiškai sugeneruoja spausdinimo dizaineris. Vienintelis dalykas, į kurį verta atkreipti dėmesį, yra rodymas, nurodant užklausos katalogo elementą „Produktai“. Nuoroda perduodama kaip funkcijos parametras. Iškvietus funkciją „PrintSelectedProducts“, bus grąžintas skaičiuoklės dokumentas su užpildyta produkto pozicija.

Programos kodas, skirtas iškviesti objekto metodą „PrintSelectedProducts“, naudojant formos komandą „Spausdinti“, pateikiamas šiame sąraše:

&OnClient procedūros spausdinimas (komanda) // Susisiekite su serverio procedūra, kad gautumėte sugeneruotą skaičiuoklės dokumentą TabDoc = PrintServer(); // Rodyti sugeneruotą skaičiuoklės dokumentą TabDoc. Rodyti() ; EndProcedure ir OnServer funkcija PrintServer() // Konvertuokite formos objektą į katalogo objektą „Produktai“, kad iškviestumėte funkciją iš objekto modulio ObjectItem = FormAttributeValue("Objektas" ) ; // Iškvieskite objekto modulio procedūrą, perduodant nuorodą į dabartinį katalogo elementą. Rezultatas // grįžti į kliento pusę Grąžinti ObjectProduct. SpausdintiPasirinktus produktus(Object.Link) ; EndFunction

Taigi dabartinį katalogo elementą išspausdinome dirbdami su jo objektu. Tačiau užduotyje buvo nurodyta atspausdinti produktų sąrašą, kurį turi pasirinkti pats vartotojas. Dirbant su objektu vartotojui tokios galimybės paprastai suteikti neįmanoma. Teisingiausias būdas būtų spausdinti iš prekių sąrašo, esančio kataloge „Produktai“.

Spausdinimo procedūra tvarkyklės modulyje

Į katalogų tvarkyklės modulį įtraukime šią eksportavimo procedūrą:

// Perduokite nuorodų į produktus masyvą Funkcija PrintSelectedProducts(ArrayProducts) Eksportuoti TabDoc = naujas lentelės dokumentas; Išdėstymas = Katalogai. Prekės. GetLayout("Išdėstymas"); Užklausa = nauja užklausa; Prašymas. Tekstas = " SELECT | Produktai . Prekės AS pristatymas,| Prekės . MarkDeletion,| Prekės . pardavėjo kodas |NUO| Katalogas . Produktai AS Produktai|KUR | Prekės . Nuoroda B (&produktų masyvas)" ; Užklausa. SetParameter(" Produktų masyvas ", Produktų masyvas) ; // Nustatyti pasirinkimą pagal masyvą Rezultatas = užklausa. Vykdyti (); HeaderArea = Išdėstymas. GetArea ("Pavadinimas"); AreaFooter = Išdėstymas. GetArea (" Rūsys "); TableHeadArea = Išdėstymas. GetArea ("Lentelės antraštė"); TableFooterArea = Išdėstymas. GetArea ("Lentelės poraštė"); DetailRecordsArea = Išdėstymas . GetArea(" Išsami informacija "); TabDoc. Išvalyti () ; TabDoc. Išvestis(AreaTitle) ; TabDoc. Išvestis(TableHeadArea); TabDoc. StartAutoGroupingRows() ; SelectionDetailRecords = Rezultatas. Pasirinkite () ; Nors SelectionDetailedRecords. Kitas() LoopDetailRecordArea. Galimybės. Užpildyti(SelectionDetailRecords) ; TabDoc. Išvestis(Išsami įrašų sritis, Išsamūs įrašaiParinkimas.Lygis()) ; EndCycle ; TabDoc. FinishAutoGroupingRows() ; TabDoc. Išvestis(Table FooterArea); TabDoc. Išvestis(AreaFootground) ; Grąžinti TabDoc; EndFunction

Pagrindinis skirtumas nuo objekto modulio funkcijos yra funkcijos parametras. Dabar kaip parametras perduodamas masyvas su nuorodomis į produktus, kuriuos reikia spausdinti.

Formos komandų modulio „Spausdinti“ programos kodas atrodo taip:

& Kliento procedūroje Print(Command) TabDoc = PrintServer() ; TabDoc. Rodyti() ; EndProcedure ir OnServer funkcija PrintServer() // Katalogų sąraše perduokite pasirinktų produktų nuorodų masyvą // į tvarkyklės modulio funkciją "PrintSelectedProducts" Grąžinti katalogus. Prekės. SpausdintiSelectedItems(Items.List.SelectedRows) ; EndFunction

Tokiu atveju komandos vykdymo režimu 1C:Enterprise rezultatas bus toks:

Jei naudosime metodą iš tvarkyklės modulio, galime pasiekti duomenis kataloge „Produktai“, negaudami kiekvienos nuorodos objekto. Kadangi gauti objektą reiškia gauti visus duomenis iš duomenų bazės katalogo elementui ir gautus duomenis patalpinti į RAM, užduoties įgyvendinimas antruoju būdu turės teigiamos įtakos našumui. Juk tokiu atveju naudosime minimalius serverio mašinos resursus (RAM).

Ką naudoti?

Kaip visada, viskas priklauso nuo konkrečios užduoties. Jei reikia atspausdinti dokumentą, geriausia yra naudoti tvarkyklės modulį. Jei reikia užpildyti objektą, pavyzdžiui, išoriškai apdorojant užpildant lentelės dalis, tokiu atveju geriau procedūras ir funkcijas patalpinti objekto modulyje, nes jos veikia būtent su objektu.

Standartinėje „Prekybos valdymo“ 11 versijos konfigūracijoje tvarkyklės modulis visur naudojamas dokumentams spausdinti. Jei pažvelgsite į „Gamybos įmonės valdymo“ konfigūraciją, vadybininko modulis praktiškai nenaudojamas, nes konfigūracija buvo parašyta senesnėse platformos versijose, kur nebuvo visiško šio mechanizmo palaikymo.

Konfigūracija su pavyzdžiais iš straipsnio.

Programinės įrangos moduliuose yra vykdomasis kodas 1C kalba, reikalingas tam tikru būdu reaguoti į sistemos ar vartotojo veiksmus, kai nepakanka vizualinio kūrimo priemonių. Savo metodus (procedūras ir funkcijas) galime aprašyti ir programinės įrangos moduliuose.

Paprastai programinės įrangos modulį sudaro trys skyriai:

  • kintamoji deklaravimo sritis;
  • procedūrų ir funkcijų aprašymo sritis;
  • pagrindinis programos tekstas.

Programinės įrangos modulio struktūros pavyzdys:

//******************** KINTAMAI DEKLARAVIMO SRITIS **************************

Perem pavardė eksportuoti; / /tai globalus kintamasis
Keisti vardą, patronimą; //tai modulio kintamasis
Perem pilnas vardas; //tai taip pat yra modulio kintamasis ir jį galima pasiekti

//iš bet kokios mūsų modulio procedūros ir funkcijos

//*************** PROCEDŪRŲ IR FUNKCIJŲ APRAŠAS ****************

Procedūra Procedūra1 ()
Kintamasis Iš viso ; / /Rezultatas yra vietinis kintamasis (procedūros kintamasis)

Iš viso = Pavardė + " "+ Vardas + " "+ Vidurinis vardas;

Procedūros pabaiga

Funkcija Funkcija 1()

// funkcijų operatoriai

Return(Pavardė + " "+ Vardas);

EndFunction

//******************** PAGRINDINIS PROGRAMOS TEKSTAS ***********************

Pavardė = "Ivanovas";
Vardas = "Ivanas";
Patronimas = "Ivanovičius";

//******************************************************************************

Tam tikrame programinės įrangos modulyje gali trūkti bet kurios srities.
Kintamoji deklaravimo sritis patalpintas nuo modulio teksto pradžios iki pirmojo procedūros arba funkcijos sakinio arba bet kurio vykdomojo sakinio. Šiame skyriuje gali būti tik kintamojo kintamojo deklaracijos teiginiai.

Sritis procedūroms ir funkcijoms aprašyti patalpintas nuo pirmojo procedūros ar funkcijos sakinio į bet kurį vykdomąjį sakinį, esantį už procedūros ar funkcijos aprašo ribų.

Pagrindinė programos teksto sritis yra patalpintas nuo pirmojo vykdomojo sakinio už procedūrų ar funkcijų korpuso ribų iki modulio pabaigos. Šiame skyriuje gali būti tik vykdomieji teiginiai. Pagrindinė programos teksto sritis vykdoma modulio inicijavimo momentu. Paprastai pagrindinės programos skiltyje tikslinga įdėti operatorius, skirtus inicijuoti kintamuosius su bet kokiomis konkrečiomis reikšmėmis, kurios turi būti priskirtos prieš pirmąjį iškvietimą į modulio procedūras ar funkcijas.

Programinės įrangos moduliai yra tose konfigūracijos vietose, kuriose gali reikėti aprašyti konkrečius veikimo algoritmus. Šie algoritmai turėtų būti formalizuoti procedūrų ar funkcijų forma, kurias pati sistema iškvies iš anksto nustatytose situacijose (pavyzdžiui, atidarant katalogo formą, paspaudus mygtuką dialogo lange, keičiant objektą ir pan.) .

Kiekvieną atskirą programinės įrangos modulį sistema suvokia kaip vientisą visumą, todėl visos programinės įrangos modulio procedūros ir funkcijos atliekamos viename kontekste.

Modulio vykdymo kontekstas yra padalintas į klientą ir serverį. Be to, kai kurie programinės įrangos moduliai gali būti kompiliuojami tiek kliento, tiek serverio pusėje.

Programos modulis (valdomas arba įprastas)

Programos modulis aprašo įvykių, kurie inicijuojami sistemos pradžioje ir pabaigoje, procedūras (tvarkytojus). Pavyzdžiui, kai programa pradeda veikti, galite atnaujinti kai kuriuos konfigūracijos duomenis, o išėjus iš programos galite paklausti, ar verta apskritai išeiti iš programos. Be to, šis modulis perima įvykius iš išorinės įrangos, pavyzdžiui, prekybos ar mokesčių. Verta paminėti, kad programos modulis vykdomas tik tada, kai programa paleidžiama interaktyviai, tai yra, kai paleidžiamas programos langas. Tai neįvyksta, jei programa paleidžiama com ryšio režimu.
1C 8 platformoje yra du skirtingi programų moduliai. Tai yra įprastinės programos modulis ir valdomos programos modulis. Jie suveikia, kai paleidžiami skirtingi klientai. Taigi valdomos programos modulis suaktyvinamas, kai žiniatinklio klientas, plonasis klientas ir storasis klientas paleidžiami valdomos programos režimu. O įprastas programos modulis suveikia, kai storasis klientas paleidžiamas įprastu programos režimu. Programos paleidimo režimo nustatymas nurodytas konfigūracijos ypatybėje „Pagrindinis paleidimo režimas“.

Programos modulyje gali būti visos 3 dalys – kintamųjų deklaracijos, procedūrų ir funkcijų aprašymai, taip pat pagrindinis programos tekstas. Programos modulis yra sudarytas kliento pusėje, o tai labai riboja daugelio duomenų tipų naudojimą. Programos modulio kontekstą galite išplėsti naudodami įprastų modulių, kurių ypatybių rinkinys „Server Call“, metodus. Visi programos modulio kintamieji ir metodai, pažymėti kaip eksportuoti, bus pasiekiami bet kuriame kliento pusėje veikiančiame konfigūracijos modulyje. Tačiau, kad ir kaip būtų viliojanti, čia nereikėtų talpinti daugybės procedūrų ir funkcijų. Kuo daugiau kodo yra tam tikrame modulyje, tuo ilgesnis kompiliavimo laikas, taigi ir programos paleidimo laikas.

Kaip minėta pirmiau, programos modulis tvarko programos paleidimo ir nutraukimo įvykius. Norint apdoroti kiekvieną iš šių įvykių programos modulyje, yra pora tvarkyklių Prieš... ir Kada... Skirtumai tarp jų yra tokie: vykdant kodą tvarkyklėje Prieš... veiksmas dar nėra įvyko ir mes galime atsisakyti jį vykdyti. Tam skirta parinktis Atmesti. Įjungimo tvarkytuvėse veiksmas jau atliktas, todėl negalime atsisakyti paleisti programos arba iš jos išeiti.

Išorinis prijungimo modulis

  • gali apimti visas 3 sritis
  • esančiame pagrindiniame konfigūracijos skyriuje

Modulio paskirtis yra panaši į programos modulio paskirtį. Jis apdoroja programos pradžios ir pabaigos įvykius. Išorinio ryšio modulis suveikia, kai programa paleidžiama ryšio režimu. Pats išorinis sujungimo procesas nėra interaktyvus procesas. Šiuo režimu vyksta programinis darbas su informacine baze ir neatsidaro programos langas, o tai nustato tam tikrus interaktyviam darbui skirtų metodų naudojimo apribojimus. Šiuo režimu negalima naudoti dialogo formų skambučių, įspėjimų ir pranešimų vartotojui ir kt. Jie tiesiog nebus įvykdyti.

Kaip ir taikomųjų programų modulyje, čia yra visos trys sritys: kintamųjų deklaracijos, procedūrų ir funkcijų aprašymai bei pagrindinis programos tekstas. Pagrindinis skirtumas nuo taikomosios programos modulio yra tas, kad com-connection režimu visas darbas su infobaze vyksta serverio pusėje, todėl išorinio ryšio modulis kompiliuojamas serverio pusėje. Atitinkamai, įprastų kliento modulių eksporto kintamieji ir metodai jame nepasiekiami.

Sesijos modulis

  • veikia serverio pusėje
  • esančiame pagrindiniame konfigūracijos skyriuje

Tai labai specializuotas modulis, skirtas išskirtinai seanso parametrams inicijuoti. Kodėl jums reikėjo tam sukurti savo modulį? Jis naudojamas dėl to, kad pati programa gali būti paleidžiama skirtingais režimais (dėl to bus vykdomas valdomas programos modulis, įprastas programos modulis arba išorinio ryšio modulis), o seanso parametrų inicijavimas turi būti atliekamas neatsižvelgiant į paleidimo režimo. Kad visuose trijuose moduliuose nebūtų rašomas tas pats programos kodas, mums reikėjo papildomo modulio, kuris veiktų nepriklausomai nuo programos paleidimo režimo.

Seanso modulyje yra vienas atskiras įvykis „SettingSessionParameters“, kuris vykdomas pats pirmas, net prieš programos modulio įvykį BeforeSystemStartOperation. Jame nėra kintamųjų deklaravimo skyriaus ir pagrindinės programos skyriaus. Taip pat negalite deklaruoti eksporto metodų. Modulis sukompiliuotas serverio pusėje.

Bendrieji moduliai

  • gali būti sritis, kurioje aprašomos procedūros ir funkcijos
  • vykdoma serverio arba kliento pusėje (priklausomai nuo modulio nustatymų)
  • yra konfigūracijos objektų medžio šakoje „Bendra“ - „Bendrieji moduliai“

Bendrieji moduliai yra skirti aprašyti kai kuriuos bendrus algoritmus, kurie bus iškviesti iš kitų konfigūracijos modulių. Bendrajame modulyje nėra kintamųjų deklaravimo sričių ir pagrindinio programos teksto. Jame galite deklaruoti eksporto metodus, kurių prieinamumą lems modulio nustatymai (kurioje pusėje jis vykdomas: serverio ar kliento pusėje). Dėl to, kad kintamųjų aprašymo skyriaus nėra, bendruose moduliuose negalima apibrėžti visuotinių kintamųjų. Tam galite naudoti programos modulį.

Bendro modulio elgsena priklauso nuo nustatytų parametrų (visuotiniai ar ne, įvairios kompiliavimo vėliavėlės, ar galimas serverio iškvietimas ir pan.). Štai keletas bendrų modulių nustatymo patarimų:

Gera praktika ne visur naudoti pasaulinės vėliavos. Tai sumažins programos paleidimo laiką, taip pat pagerins kodo skaitomumą (žinoma, jei bendras modulis turi visiškai prasmingą pavadinimą);
- Nepatartina naudoti daugiau nei vienos kompiliacijos vėliavėlės. Metodų, kuriuos reikia vykdyti skirtinguose kontekstuose, nėra tiek daug, o jei tokių metodų dar reikia, tuomet jiems galima skirti atskirą bendrą modulį;
- vėliavėlė „Skambučių serveris“ yra prasminga tik tuo atveju, jei modulis yra sudarytas „Serveryje“. Todėl visos kitos kompiliavimo vėliavėlės turėtų būti pašalintos, kad būtų išvengta įvairių problemų;
- jei modulio metodai apima masinį duomenų apdorojimą, skaitymą ir įrašymą į duomenų bazę, tada norint padidinti darbo greitį, geriau išjungti prieigos kontrolę nustatant vėliavėlę „Privilegijuota“. Šis režimas galimas tik bendriems moduliams, sudarytiems serveryje.

Formos modulis

  • gali apimti visas 3 sritis
  • vykdoma serverio ir kliento pusėse

Formos modulis skirtas apdoroti vartotojo veiksmus su šia forma (mygtuko paspaudimo įvykio apdorojimas, formos atributų keitimas ir pan.). Taip pat yra įvykių, tiesiogiai susijusių su pačia forma (pavyzdžiui, jos atidarymas ar uždarymas). Valdomos ir įprastos formos moduliai skiriasi pirmiausia tuo, kad valdomos formos modulis yra aiškiai suskirstytas į kontekstą. Kiekviena procedūra ar funkcija turi turėti kompiliavimo direktyvą. Jei kompiliavimo direktyva nenurodyta, ši procedūra arba funkcija vykdoma serverio pusėje. Įprasta forma visas kodas vykdomas kliento pusėje.

Valdomos formos struktūroje yra skyrius, skirtas kintamųjų deklaracijoms, procedūrų ir funkcijų aprašymams bei pagrindinis programos tekstas (vykdomas formos inicijavimo metu). Standartinės formos įvykius galime pasiekti per laukiamų formos procedūrų ir funkcijų sąrašą (Ctrl + Alt + P), arba per pačios formos savybių paletę.

Jei formai priskirtas pagrindinis atributas, programos objekto, naudojamo kaip pagrindinis atributas, savybės ir metodai tampa prieinami formos modulyje.

Objektinis modulis

  • gali apimti visas 3 sritis
  • veikia serverio pusėje

Šis modulis yra prieinamas daugeliui konfigūracijos objektų ir paprastai yra skirtas tiesiogiai su objektu susijusiems įvykiams apdoroti. Pavyzdžiui, objektų įrašymo ir ištrynimo įvykiai, objekto detalių užpildymo tikrinimas, dokumento patalpinimas ir kt.

Kai kurie objekto modulio įvykiai dubliuoja formos modulio įvykius. Pavyzdžiui, su įrašu susiję įvykiai. Tačiau reikia suprasti, kad formos modulio įvykiai bus vykdomi tik konkrečioje objekto formoje, tai yra, kai bus atidaryta konkreti forma. O objekto modulio įvykiai bus iškviesti bet kokiu atveju, net ir programinio darbo su objektu momentu. Todėl, jei jums reikia metodų, susietų su objektu, nesusietiems su konkrečia objekto forma, geriau tam naudoti objekto modulį.

Objektų tvarkyklės modulis

  • gali apimti visas 3 sritis
  • veikia serverio pusėje

Objektų tvarkyklės modulis pasirodė tik nuo 1C 8.2 versijos. Tvarkyklės modulis egzistuoja visiems programos objektams ir yra skirtas valdyti šį objektą kaip konfigūracijos objektą. Valdytojo modulis leidžia išplėsti objekto funkcionalumą įvedant (rašymo) procedūras ir funkcijas, kurios yra susijusios ne su konkrečiu duomenų bazės objekto egzemplioriumi, o su pačiu konfigūracijos objektu. Objektų tvarkyklės modulis leidžia išdėstyti bendrąsias tam tikro objekto procedūras ir funkcijas bei pasiekti jas iš išorės, pavyzdžiui, iš apdorojimo (žinoma, jei ši procedūra ar funkcija turi raktinį žodį Eksportuoti). Ką naujo tai mums suteikia? Apskritai nieko, išskyrus procedūrų organizavimą pagal objektus ir jų saugojimą atskirose vietose – objektų tvarkyklės moduliuose. Lygiai taip pat sėkmingai šias procedūras ir funkcijas galime patalpinti į bendruosius modulius, tačiau 1C rekomenduoja objektų tvarkytuvės modulyje talpinti bendras objektų procedūras ir funkcijas. Objektų valdytojų modulio procedūrų ir funkcijų panaudojimo pavyzdžiai: pradinis atskirų žinyno ar dokumento rekvizitų pildymas tam tikromis sąlygomis, žinyno ar dokumento rekvizitų užpildymo tikrinimas tam tikromis sąlygomis ir kt.

Komandų modulis

  • gali būti skyrius, kuriame aprašomos procedūros ir funkcijos
  • vykdoma kliento pusėje

Komandos yra objektai, pavaldūs programos objektams arba visai konfigūracijai. Kiekviena komanda turi komandų modulį, kuriame gali būti aprašyta iš anksto nustatyta CommandProcess() procedūra, skirta tai komandai vykdyti.