Modul formuláře za 1 s. Společné moduly

Co jsou to moduly a k čemu jsou přesně určeny? Modul obsahuje programový kód. Kromě toho stojí za zmínku, že na rozdíl od platformy 7.7, kde by kód mohl být umístěn jak ve vlastnostech prvků formuláře, tak v buňkách tabulek rozložení, musí být v platformě 8.x jakýkoli řádek kódu umístěn v modulu. Modul se obvykle skládá ze tří částí - jedná se o část popisující proměnné, část popisující postupy a funkce a také část hlavního programu. Tato struktura je typická pro téměř všechny moduly platformy, až na některé výjimky. Některé moduly nemají sekci deklarace proměnných a sekci hlavního programu. Například relační modul a jakýkoli společný modul.

Kontext provádění modulů je obecně rozdělen na klienta a server. Některé moduly lze navíc kompilovat na straně klienta i na straně serveru. A některé jsou čistě na straně serveru nebo na straně klienta. Tak:

Aplikační modul

Modul je navržen tak, aby zachytil okamžiky spuštění aplikace (načítání konfigurace) a jeho ukončení. A kontrolní postupy lze umístit do odpovídajících událostí. Když například aplikace začne fungovat, aktualizujte veškerá referenční konfigurační data, na konci práce se zeptejte, zda stojí za to ji vůbec opustit, možná pracovní den ještě neskončil. Kromě toho zachycuje události z externího zařízení, například z obchodního nebo fiskálního. Je třeba poznamenat, že aplikační modul zachycuje popsané události pouze v případě interaktivního spuštění. Ty. při vytvoření samotného okna programu. To se nestane, pokud je aplikace spuštěna v režimu com-connection.

V platformě 8.2 existují dva různé aplikační moduly. Jedná se o modul Common Application a modul Managed Application. Vystřelí při spuštění různých klientů... Takto se modul spravované aplikace aktivuje při spuštění webového klienta, tenkého klienta a tlustého klienta v režimu spravované aplikace. A normální aplikační modul se spustí, když je tlustý klient spuštěn v normálním aplikačním režimu.

Všechny sekce - popis proměnných, postupů a funkcí, stejně jako popis hlavního programu lze najít v aplikačním modulu. Aplikační modul je kompilován na straně klienta, takže nás to vážně omezuje v dostupnosti mnoha datových typů. Kontext aplikačního modulu můžete rozšířit pomocí metod běžných modulů, které mají nastavenou vlastnost „Volání serveru“. Všechny proměnné a metody, které jsou označeny jako export, budou k dispozici v libovolném konfiguračním modulu na straně klienta. Jakkoli to může být lákavé, neměli byste sem umisťovat velké množství metod. Čím více kódu je v něm, tím delší je čas kompilace a následně čas spuštění aplikace, což je pro uživatele velmi nepříjemné.

Jak je uvedeno výše, aplikační modul zpracovává události spuštění a ukončení aplikace. Ke zpracování každé z těchto událostí v aplikačním modulu existuje dvojice obslužných rutin Before ... a When ... Rozdíl mezi nimi je takový, že když je kód spuštěn v obslužném programu Before ..., akce ještě nebyla dokončena a můžeme ji odmítnout provést. Parametr Selhání je k tomu určen. V obslužných programech Když .. akce již proběhla a nemůžeme odmítnout spustit aplikaci nebo ji ukončit.

Externí připojovací modul

Účel modulu je podobný účelu aplikačního modulu. Zpracovává počáteční a koncový bod aplikace. Externí připojovací modul se aktivuje při spuštění aplikace v režimu com-connection. Samotný vnější proces připojení je neinteraktivní proces. V tomto režimu dochází k programové práci s infobází a neotevře se okno aplikace, což ukládá určitá omezení pro použití metod určených pro interaktivní práci. V tomto režimu nelze použít volání dialogových formulářů, varovných zpráv atd. Prostě nebudou fungovat.

Stejně jako v aplikačním modulu jsou zde k dispozici oddíly popisující proměnné, metody a část hlavního programu. Můžete také deklarovat proměnné a metody exportu. Rozdíl je v tom, že v režimu com-connection se veškerá práce s infobase odehrává na straně serveru, takže externí modul připojení je kompilován výhradně na serveru. Proto v něm nejsou k dispozici proměnné exportu a metody běžných klientských modulů.

Modul relace

Toto je vysoce specializovaný modul a je určen pouze pro inicializaci parametrů relace. Proč jste k tomu potřebovali vytvořit svůj vlastní modul? To je způsobeno skutečností, že proces inicializace může vyžadovat provedení nějakého kódu a kromě toho může být aplikace spuštěna pod různými klienty (což vede k provedení různých aplikačních modulů nebo externího modulu připojení) a parametry relace musí být inicializovány v jakémkoli režimu spuštění. Proto byl vyžadován další modul, který se provádí v jakémkoli režimu spouštění aplikace.

V modulu relace je jedna událost SessionParameterSetting, která se provede úplně první, dokonce před událostí aplikačního modulu BeforeSystemWorking. Sekce deklarace proměnných a hlavní sekce programu v ní nejsou k dispozici. A také nelze deklarovat metody exportu. Modul je kompilován na straně serveru.

Nenechte se zlákat, že je tento modul spuštěn při každém spuštění aplikace, a vložte do něj kód, který přímo nesouvisí s inicializací parametrů relace. To je způsobeno skutečností, že obslužnou rutinu SessionParameterSetting lze během operace systému opakovaně volat. Například k tomu dochází, když přistupujeme k neinicializovaným parametrům. A i když je možné zachytit okamžik prvního spuštění této události (RequiredParameters je typu Undefined), měli byste si uvědomit, že tento modul je kompilován v privilegovaném režimu, tj. nekontroluje přístupová práva. A druhým bodem si stále nemůžeme být stoprocentně jisti, že bude systém spuštěn. Najednou v aplikačním modulu dojde k chybě a snažíme se s databází provést některé akce.

Společné moduly

Moduly jsou určeny k popisu některých běžných algoritmů, které budou volány z jiných konfiguračních modulů. Obecný modul neobsahuje sekci deklarace proměnných a sekci hlavního programu. V něm můžete deklarovat metody exportu, jejichž kontext usnadnění bude určen příznaky kompilace. Vzhledem k tomu, že sekce deklarace proměnných není k dispozici, nemůžete definovat globální proměnné v běžných modulech. K tomu musíte použít funkce běžných modulů s návratovým ukládáním do mezipaměti nebo aplikačním modulem. Je třeba mít na paměti, že i když je vlastnost opětovného použití společného modulu nastavena na „Po dobu trvání relace“, pak v tomto případě životnost hodnot uložených v mezipaměti nepřesáhne 20 minut od okamžiku, kdy byly naposledy zpřístupněny.
Chování společného modulu závisí na nastavených parametrech (globální nebo jiné, různé příznaky kompilace, zda je k dispozici volání serveru atd.). V tomto článku nebudeme uvažovat o všech druzích nastavení, stejně jako o funkcích chování a úskalích, které vznikají při bezdůvodném nastavení příznaků vlastností. Toto je téma pro samostatný článek. Pojďme se zabývat jen několika body, které je třeba dodržovat při nastavování příznaků:

  • Dobrým pravidlem je nepoužívat globální příznak všude. Tím se zkrátí doba spuštění aplikace a zlepší se čitelnost kódu (samozřejmě, pokud má společný modul smysluplný název).
  • Není vhodné používat více než jeden příznak kompilace. Není tolik metod, které je třeba provést v různých kontextech, a pokud jsou takové metody stále vyžadovány, lze pro ně rozlišit samostatný společný modul.
  • Příznak „Server volání“ má smysl pouze v případě, že je modul kompilován „Na serveru“. Proto by všechny ostatní příznaky kompilace neměly být zaškrtnuté, aby se zabránilo různým problémům.
  • Pokud v metodách modulu dochází k masivnímu zpracování dat, čtení a zápisu do databáze, pak je pro zvýšení rychlosti práce lepší deaktivovat řízení přístupu nastavením příznaku „Privileged“. Tento režim je k dispozici pouze pro sdílené moduly kompilované na serveru.

Modul formuláře

Je určen ke zpracování akcí uživatelů, tj. různé události související se zadáváním údajů a zpracováním správnosti jejich zadávání. Modul pravidelná forma sestaveno zcela na straně klienta. Modul spravovaná forma je jasně vymezen kontextem provádění, proto všechny proměnné a metody musí mít kompilační směrnici. Pokud směrnice není explicitně zadána, bude tato proměnná nebo metoda kompilována na straně serveru. Modul formuláře obsahuje sekce pro popis proměnných a metod a také sekci pro hlavní program.

Modul objektu

Tento modul je typický pro mnoho konfiguračních objektů a je obecně určen ke zpracování událostí objektů. Například události záznamu a mazání objektů, událost zaúčtování dokumentu atd.

Některé události modulu objektu duplikují události modulu formuláře. Například záznam událostí. Mělo by však být zřejmé, že události modulu formuláře budou prováděny výhradně na konkrétní formě objektu. Obecně může existovat několik těchto forem. Události modulu objektu budou volány v každém případě, dokonce i v tuto chvíli programová práce s objektem. Proto pokud potřebujete ve všech případech spustit nějaký kód, je lepší použít k tomu události modulu objektu.

Objektový modul je kompilován výhradně na serveru. V něm můžete definovat proměnné exportu a metody, které budou k dispozici v jiných konfiguračních modulech. S těmito vlastnostmi a metodami můžeme výrazně rozšířit funkčnost objektu.

Modul správce objektů

Tento modul existuje pro mnoho konfiguračních objektů. Hlavním účelem tohoto modulu je předefinovat standardní událost výběru, ke které dochází v době vstupu po řádku, a rozšířit funkčnost manažera. Modul je kompilován na straně serveru. Je možné definovat vlastnosti a metody exportu. Volání exportních metod správce nevyžaduje vytvoření samotného objektu.

Ke všem výše uvedeným můžete přidat obrázek některých konfiguračních modulů a způsobů volání vzájemných metod v režimu spravované aplikace. Šipka označuje směr, kterým můžete odkázat na volání odpovídající metody. Jak je patrné z diagramu, kontext serveru je zcela uzavřen. Ale z kontextu klienta je možné volat serverové metody.

Legenda na schématu: О.М. Klient - společný modul klienta; O. M. Server - společný modul serveru; M.F. Klient - Postupy klienta modulu formuláře; M.F. Server - Procedury serveru modulu formuláře.

Moduly platformy 1C: Enterprise 8.3, 8.2

Společné moduly

Funkce, které jsou v takovém modulu deklarovány s příznakem „export“, lze volat odkudkoli v konfiguraci. Volání se provádí pomocí CommonModuleName.FunctionName ().

V těchto modulech není žádná variabilní sekce.

Provedení společných modulů závisí na parametrech nastavených v jejich vlastnostech:

Označit „Globální“

Pokud je tento příznak nastaven, stane se kontext takového modulu globálním. To znamená, že při přístupu k jeho exportním funkcím nemusíte zadávat název modulu. Názvy jeho exportních funkcí však musí být v kontextu globální konfigurace jedinečné.

Příznak serveru

Funkce takového modulu lze provádět na serveru.

Příznak klienta (běžná aplikace)

Funkce takového modulu lze na klientovi provádět v normálním aplikačním režimu.

Příznak klienta (spravovaná aplikace)

Funkce takového modulu lze na klientovi provádět v režimu spravované aplikace.

Příznak volání serveru

Příznak je k dispozici pro moduly s nastaveným příznakem „Server“. Umožňuje volání klienta na exportní funkce tohoto modulu (prováděné na serveru).

Vlajka vnějšího spojení

Exportní funkce takového modulu lze volat při připojení z externího zdroje.

Označit „privilegovaný“

V modulu s takovýmto příznakem bude kontrola práv zakázána. Vhodné pro akce produktivity nebo správy.

Možnost opětovného použití

Pokud zahrnete tento parametr, pak se návratové hodnoty exportních funkcí uloží do mezipaměti ihned po prvním volání. Ukládání do mezipaměti je možné po dobu trvání hovoru (čas provedení určité procedury) nebo po dobu trvání relace uživatele.

Aplikační modul

Navrženo pro zpracování událostí spouštění a vypínání aplikací. Existují dva typy: pro běžné a spravované aplikace.

Nepřetěžujte jej, protože to ovlivní čas spuštění aplikace.

Modul relace

Speciální modul, který se používá k inicializaci parametrů relace. Je to nutné, abyste neduplikovali kód v různých aplikačních modulech.

Mělo by se používat opatrně, protože modul lze provést několikrát a také jej lze provést bez dalšího spuštění základny. Provedeno před aplikačními moduly.

S pozdravem (učitel a vývojář).

Tisk (Ctrl + P)

Objekty umístěné ve větvi konfiguračního stromu Obecné moduly mají obsahovat texty funkcí a procedur, které lze volat z kteréhokoli jiného konfiguračního modulu.
POZORNOST! Společný modul může obsahovat pouze definice postupů a funkcí.
Běžné postupy a funkce modulu, pro které nadpisy označují klíčové slovo Export patří mezi součásti globální kontext. Více informací o postupech psaní v obecném modulu najdete v sekcích „Formát zdrojové texty Programové moduly “a„ Operátoři “nápovědy integrovaného jazyka.
Chcete-li upravit společný modul, klikněte v paletě vlastností objektu typu Typické moduly v okně Konfigurace ve vlastnosti Modul na odkaz Otevřít. Text obecného modulu bude vydán k úpravám v textovém editoru systému 1C: Enterprise v režimu úprav textu programového modulu.
Společný modul, který je součástí konfigurace, je uložen pouze jako součást konfigurace.
Vlastnost Global určuje, zda jsou exportované metody sdíleného modulu součástí globálního kontextu.
Pokud je vlastnost Global nastavena na hodnotu True, jsou exportované metody společného modulu dostupné jako metody globálního kontextu.
Pokud je Global vlastnost nastavena na False, pak je vytvořena vlastnost v globálním kontextu s názvem, který odpovídá názvu společného modulu v metadatech. Tato vlastnost je jen pro čtení. Hodnota této vlastnosti je objekt CommonModule. Exportované metody tohoto společného modulu jsou dostupné prostřednictvím tohoto objektu. Volání metod ne globálních společných modulů tedy vypadá jako XXXXX.YYYYY, kde XXXXX je název vlastnosti odpovídající kontextu společného modulu a YYYYY je název exportované metody společného modulu.
Příklad:

Práce s Trade Equipment.ConnectBarcode Scanner ();

Různé kontextové a společné moduly

Pomocí vlastností běžných modulů a pokynů preprocesoru můžete organizovat provádění různé metody společné moduly ve správném kontextu.
Každá vlastnost společného modulu je zodpovědná za kompilaci (a provedení) společného modulu v konkrétním kontextu.
K dispozici jsou následující vlastnosti, které jsou zodpovědné za kontext, ve kterém jsou k dispozici metody společného modulu:
Klient (běžná aplikace) - metody společného modulu budou tlustému klientovi k dispozici v normálním aplikačním režimu;
● - metody společného modulu budou k dispozici pro tenkého klienta, webového klienta a také pro tlustého klienta v
režim spravované aplikace;
● Server - na serveru budou k dispozici metody společného modulu;
Externí připojení - metody společného modulu budou k dispozici ve vnějším spojení.
Pokud je nastaveno několik vlastností současně, znamená to, že metody společného modulu budou k dispozici v několika kontextech.
Pokud má společný modul vlastnost Server a některou další sadu vlastností, znamená to, že společný modul bude k dispozici současně na serveru a ve vybraném klientovi. Mělo by být zřejmé, že ve skutečnosti to bude několik verzí kompilovaného kódu (podle počtu vybraných klientů a pro samotný server).
V tomto případě, pokud je metoda umístěná v takovém společném modulu volána ze strany klienta, bude použita kopie společného modulu klienta, a pokud ze serveru - kopie serveru. V tomto případě můžete pomocí direktivy preprocesoru (viz podrobnosti zde) „chránit“ server před kódem, který na něm nelze provést.
Podívejme se na příklad. Ve společném modulu (který lze spustit na tenký klient a na serveru) existuje metoda, která má mírně odlišné chování na straně tenkého klienta a na straně serveru. Podívejme se, jak to udělat:



# Pokud je tenký klient
// Zobrazit varování
Zobrazit upozornění uživatele(„Na straně klienta“);
#EndIf
Konec postupu
Potom na straně serveru vypadá kód takto:
Postup Metoda CommonModule () Vývozní
// Sem přichází různé důležité kódy
Konec postupu
Na straně tenkého klienta bude kód vypadat takto:
Postup Export metody CommonModule ()
// Sem přichází různé důležité kódy
// Zobrazit varování
ShowUserNotification („Na klientovi“);
Konec postupu

Existuje několik způsobů, jak přenést řízení z klienta na server:
● zavolat metodu společného modulu serveru;
● zavolat metodu ve formuláři nebo příkazovém modulu, kterému předcházejí direktivy kompilace & AtServer, & AtServerWithoutContext

Současně je nemožné volat procedury běžných modulů klienta (pro které není nastavena vlastnost Server) a metody klienta modulu formuláře nebo příkazového modulu z procedur serveru. Ovládací prvek se vrátí klientovi po dokončení nejvzdálenějšího volání metody serveru.
Výjimkou jsou metody modulu formuláře a modulu příkazů, kterým předcházejí direktivy kompilace & OnClientOnServer, & OnClientOnServerWithout Kontext
Je třeba zmínit také následující body:
● Pokud je společný modul k dispozici pro více než jednoho klienta, měli byste zvážit maximální omezení, která mohou klienti ukládat při psaní kódu, nebo použít pokyny preprocesoru k „izolaci“ kódu specifického pro klienta.
● Pokyny preprocesoru mají také smysl, když má jeden společný modul několik kontextů provádění, například externí připojení a tenký klient nebo (což je mnohem častější) klient a server. V tomto případě pokyny preprocesoru uzavřou interaktivní kód, který nelze použít na serveru, ale je možný na straně klienta (viz příklad výše).
Další informace o pokynech preprocesoru a kompilačních směrnicích najdete v části Prováděcí procedury a funkce v nápovědě pro vložený jazyk.
Vlastnost Call server se používá k řízení schopnosti volat exportované metody společného modulu serveru z kódu klienta.
Pokud je vlastnost nastavena, jsou exportované metody společného modulu serveru k dispozici pro volání od klienta. Pokud vlastnost není nastavena, lze takové exportované metody volat pouze z metod na straně serveru (obě metody společných modulů na straně serveru a metody na straně serveru modulů formuláře a příkazových modulů).
Rada. Vlastnost Call server se doporučuje nastavit na False v případech, kdy společný modul serveru obsahuje metody, které nechcete volat od klienta (například z bezpečnostních důvodů).
Poznámka... Pokud jsou vlastnosti nastaveny současně Klient (běžná aplikace), Klient (spravovaná aplikace), Externí připojení, pak se vlastnost Server Call automaticky vymaže. Pokud je nastavena vlastnost Call server, vlastnosti se automaticky resetují Klient (běžná aplikace), Klient (spravovaná aplikace) a Externí připojenípokud byly tyto vlastnosti nastaveny současně.
Vlastnictví Výsadní je určen k deaktivaci řízení přístupu při provádění metod společného modulu.
POZNÁMKA. Pokud je vlastnost Výsadní je nastavena, pak se vlastnost Server automaticky nastaví na společný modul a zbytek vlastností se resetuje ( Klient (běžná aplikace), Klient (spravovaná aplikace) a v externí připojení). Privilegovaný sdílený modul lze spustit pouze na serveru.

Opakované použití návratových hodnot

Pokud společný modul není globální, bude vlastnost k dispozici Znovu použít návratové hodnoty. Tato vlastnost může nabývat následujících hodnot:
● Nepoužívat - Opětovné použití návratových hodnot se nepoužívá pro funkce tohoto společného modulu.
● V době hovoru a v době relace - pro společný modul se používá metoda určování opětovného použití dat. Podstata této metody spočívá v tom, že si systém během provádění kódu pamatuje parametry a výsledek funkce po prvním volání funkce. Když je funkce volána znovu se stejnými parametry, je vrácena uložená hodnota (od prvního volání) bez provedení samotné funkce. Pokud funkce během svého provádění mění hodnoty parametrů, opakované volání funkce to neudělá.
Lze rozlišit následující funkce ukládání výsledků volání:
● pokud je funkce spuštěna na serveru a volána z kódu serveru, jsou hodnoty parametrů a výsledek volání uloženy pro aktuální relaci na straně serveru;
● pokud je funkce prováděna na tlustém nebo tenkém klientovi, hodnoty parametrů a výsledky volání se ukládají na straně klienta;
● pokud je funkce prováděna na straně serveru, ale je volána z kódu klienta, jsou hodnoty parametrů volání uloženy jak na straně klienta, tak na straně serveru (pro aktuální relaci).
Uložené hodnoty jsou odstraněny:
● pokud je vlastnost nastavena na V době volání:
● na straně serveru - při vrácení kontroly ze serveru;
● na straně klienta - když se ukončí procedura nebo funkce vloženého jazyka na vysoké úrovni (volané systémem z rozhraní, a nikoli z jiného postupu nebo funkce vloženého jazyka);
● pokud je vlastnost společného modulu nastavena na Po dobu trvání relace:
● na straně serveru - na konci relace;
● na straně klienta - při zavření klientské aplikace.
Uložené hodnoty budou smazány:
● na serveru, v tlustém klientovi, v externím připojení, v tenkém klientovi a ve webovém klientovi při normální rychlosti připojení - 20 minut po výpočtu uložené hodnoty nebo 6 minut po posledním použití.
● u tenkého klienta a webového klienta s nízkou rychlostí připojení - 20 minut po výpočtu uložené hodnoty;
● v případě nedostatku paměť s náhodným přístupem v pracovním toku serveru;
● při restartování pracovního postupu;
● když klient přepne na jiný pracovní postup.
Po odstranění hodnot se provede volání exportované funkce jako v prvním volání.
Tato vlastnost společných modulů nemá vliv na provádění procedur - procedury jsou prováděny vždy.

Pokud je společný modul nastaven na opětovné použití návratových hodnot, je na typy parametrů exportovaných funkcí uvalena řada omezení. Typy parametrů mohou být pouze:
● Primitivní typy ( Nedefinováno, NULL, Boolean, Číslo, Řetězec, Datum).
● Jakékoli odkazy na databázové objekty.
● Struktury s hodnotami vlastností výše uvedených typů. V tomto případě je identita parametrů řízena „obsahem“ struktur.
Pokud exportovaná funkce vrátí jakýkoli objekt, ve skutečnosti vrátí odkaz na objekt uložený v mezipaměti. Pokud po přijetí tohoto odkazu dojde ke změně stavu objektu, pak následné volání stejné funkce bude mít za následek vrácení odkazu na již změněný objekt, aniž by byla funkce skutečně provedena. Toto chování bude pokračovat, dokud nebude uložená hodnota odstraněna (z jakéhokoli důvodu). Jinými slovy, změna stavu objektu vyplývající z volání funkce ze společného modulu s opětovným použitím návratových hodnot není důvodem pro skutečné volání funkce. Mělo by se také pamatovat na to, že cache vrácených objektů je lhostejná
stav privilegovaného režimu v době volání funkce s opětovným použitím návratových hodnot. Tato funkce může vést k následujícímu chování:
● Skutečné provedení volání funkce s opětovným použitím návratových hodnot (první volání) bylo provedeno s povoleným privilegovaným režimem.
● Při provádění funkce byl přijat objekt, který nelze přijmout se zakázaným privilegovaným režimem.
● Následná volání funkcí byla provedena bez nastavení privilegovaného režimu.
● Dokud však nebude vymazána mezipaměť vrácených objektů nebo nebude opakováno skutečné volání, funkce vrátí formálně nepřístupný objekt.
● Opačné chování je také pravdivé, když je provedeno první volání bez nastavení privilegovaného režimu a v privilegovaném režimu není vrácen objekt, který by bylo možné získat v privilegovaném režimu.

Pokud má společný modul tuto vlastnost Opakované použití návratových hodnot je nastavena na Po dobu trvání relace, pak hodnoty typu Správce dočasné tabulky.
Pokud je funkce společného modulu s opětovným použitím sady volána ze stejného společného modulu (například s názvem CommonModule), pamatujte na následující funkci: pokud je funkce volána názvem MyFunction (), bude funkce spuštěna při každém volání funkce ... Aby bylo možné použít uložené hodnoty, měla by být funkce volána celým jménem:
CommonModule.MyFunction ().
Metoda globálního kontextu odstraní všechny opakovaně použitelné hodnoty, na straně serveru i klienta, bez ohledu na to, kde je metoda volána. Po provedení metody RefreshReuseValues \u200b\u200b() první volání funkce bude provedeno úplně.

V nových verzích konfigurací systému 1C: Enterprise bylo mnoho funkcí a postupů přesunuto z modulů objektů (dokumenty, příručky atd.) Do modulů správce. Pojďme se podívat na rozdíly mezi těmito dvěma moduly.

Podle teorie objektově orientovaného programování jsou metody objektů rozděleny do dvou skupin: statické a jednoduché. Jednoduché metody mají přístup pouze ke konkrétní instanci třídy. Statické metody nemají přístup k objektovým datům, ale pracují s třídou jako celkem.

Přeložíme-li to všechno do podmínek systému 1C: Enterprise, pak Modul objektu obsahuje jednoduché metody. Abyste je mohli použít, musíte nejprve získat konkrétní objekt: prvek adresáře, dokumentu atd. Modul správceobsahuje statické metody. Chcete-li jej použít, není třeba samostatně získávat každý konkrétní objekt, umožňuje vám pracovat s celou kolekcí najednou.

Modul objektu může mít postupy a funkce, které lze použít externě. K tomu je takový postup nebo funkce označen slovem Vývozní.

Funkce Nová funkce () Export

Chcete-li použít takovou funkci z modulu objektu, musíte nejprve získat odkaz na požadovaný objekt pomocí funkce GetObject ().



Per \u003d Objekt. NewFunction ();

Podobně můžete vytvořit nové proměnné, které lze použít z různých konfiguračních objektů.

Proměnná Export nového proměnného

DirectoryElement \u003d Adresáře. Nomenklatura. FindByCode ("000000001");
Object \u003d DirectoryElement. GetObject ();
Objekt. NewVariable \u003d);

Tímto způsobem můžete doplňovat standardní postupy, funkce a vlastnosti (proměnné) objektů. Takové proměnné jsou dynamické, nejsou v nich uloženy informační základna a existují pouze při práci s přijatým objektem.

Modul správce má všechny stejné schopnosti, jediný rozdíl spočívá v tom, že pro jeho použití nepotřebujete získat konkrétní objekt, modul správce vám umožní pracovat s celou kolekcí objektů určitého typu.

Postup Nový postup () Export

DirectoryElement \u003d Adresáře. Nomenklatura. NewProcedure ();

Nebo pro proměnnou:

Proměnná Export nového proměnného

DirectoryElement \u003d Adresáře. Nomenklatura. NewVariable;

Zvažme rozdíly v používání modulu objektu a modulu správce na příkladu postupu vytváření tištěná forma dokument.

Při použití modulu objektu bude kód vypadat takto:

Funkce Tisk dokumentu (propojení) Export
// Této funkci musí být předán odkaz na konkrétní dokument
Návrat TabDoc;
EndFunction

Ve formuláři dokumentu musíte vytvořit postup, který by předal odkaz na dokument funkci tisku.

& Na klientovi
Tisk procedur (příkaz)
TabDoc \u003d PrintOnServer ();
TabDoc. Ukázat ();
Konec postupu
& Na serveru
Funkce PrintOnServer ()
Dock \u003d FormInValue ("Objekt");
Zpět Doc. Tisk dokumentů (Object. Link);
EndFunction

Nevýhodou této metody je, že tiskne pouze jeden objekt. Pokud potřebujete vytisknout několik dokumentů najednou, musíte si každý z nich stáhnout a poté zavolat funkci z modulu objektu. To vyžaduje významné systémové prostředky, protože když je objekt přijat, zcela se vejde do RAM.

Z hlediska výkonu je mnohem lepší používat modul správce, kdykoli je to možné. V našem příkladu bude řešení problému vypadat takto.
Funkce PrintOnServer ()
Vrátit dokumenty. Náš dokument. PrintDocument (ArrayLinks);
EndFunction

V případě použití modulu správce lze proceduru tisku vyvolat jak z formuláře dokumentu, tak ze seznamu, přičemž se předají odkazy na pole na několik dokumentů. V tomto případě systém nemusí přijímat každý dokument z pole, což výrazně šetří systémové prostředky.

Kdy tedy použít modul objektu a kdy modul správce?

Vše záleží na úkolu. Pokud pro jeho provedení postačuje odkaz na objekt (například tisková úloha), je lepší použít modul správce. Pokud je úkolem změnit data, například vyplnit dokument, musíte jej získat a použít modul objektu.

Společné moduly jsou zodpovědné za ukládání procedur a funkcí, které jsou volány z jiných míst v systému 1C. Osvědčeným postupem je umístit kód, který se několikrát volá v proceduře, do společného modulu. Toto pravidlo je univerzální pro všechny konfigurace, takže každý vývojář 1C by měl být schopen pracovat s těmito konfiguračními objekty. Chcete-li to provést, musíte pochopit všechny nuance a být schopni správně využívat příležitosti poskytované platformou.

Vytvoření společného modulu v 1C

Po vytvoření funkce v jednom z modulů objektů byla potřeba použít podobný algoritmus jinde. Nejsprávnější věcí, kterou zde můžete udělat, je přesunout kód do společného modulu, ale předtím ho musíte vytvořit. Chcete-li to provést, musíme jít do konfigurátoru a najít kartu Obecné ve stromu konfigurace. Poté vyberte „Sdílené moduly“ a použijte tlačítko v podobě bílého plusu na zeleném kruhu.

Vlastnosti přidaného společného modulu se otevřou vpravo a my musíme přijít na to, co který z nich znamená. Mohou mít různé směry, a proto je vhodné se před založením nového objektu rozhodnout, co tam budeme ukládat. Pokud vůbec, v budoucnu bude možné změnit vlastnosti v souladu s úkoly:

  • "Globální". Tento příznak je nastaven, pokud je modul navržen tak, aby ukládal procedury a funkce, které by měly být volány bez zadání názvu modulu. Přirozeně musí být exportovatelné a jejich názvy musí být jedinečné v kontextu celého globálního kontextu. Pokud jde o použití, nebudou se lišit od standardních funkcí platformy;
  • "Zákazník". Závisí na nastavení systému a reguluje, zda lze procedury modulu provádět na straně klienta;
  • "Server". Jsou označeny společné moduly, ve kterých se plánuje umístění algoritmů pro provedení na serveru;
  • "Externí připojení". Procedury modulu s aktivací této vlastnosti lze provést připojením externího zdroje;
  • Volání serveru. Odpovědný za umožnění procedur z modulu volat server při provádění na klientovi;
  • "Výsadní". Povolení tohoto nastavení vám umožní nekontrolovat přístupová práva, když je spuštěn kód procedury modulu. Společný modul s tímto nastavením můžete volat pouze na serveru. Obnoví se nastavení klienta a externího připojení;
  • „Opakované použití“. Může nabývat hodnot: „Nepoužívat“, „Během relace“, „Během hovoru“. Pokud je jedna procedura volána vícekrát, může systém použít dříve vypočítaná data v rámci procedury (volání) nebo životnost celé relace (spuštění 1C). S tímto nastavením byste měli být velmi opatrní, protože by mohlo dojít k chybám v důsledku nesprávného použití těchto modulů.

Existují situace, kdy potřebujete vytvořit společný modul s voláním procedury na serveru a klientovi s rozdíly v algoritmu. K oddělení kódu se používají ověřené direktivy preprocesoru. Ve výsledku to bude jeden kód pro volání serveru a druhý pro volání klienta.
Procedura AlgorithmServerClient () Export # If ThinClient Then // kód se provede, pokud volání procedury přišlo od klienta ShowUserNotification ("Na straně klienta"); ElseIf Server Then // kód se provede, pokud volání procedury přišlo ze serveru ServerVariable \u003d "Volání serveru"; #EndIf EndProcedure

Příklad přenosu kódu do společného modulu 1C

Zvažte situaci, kdy máme ve formuláři dokumentu dvě události, které zahrnují jeden postup pro vynásobení množství a ceny v tabulkové části. Jedná se o poměrně běžný algoritmus, který se nachází v mnoha zadávacích a prodejních dokumentech. Přenesme kód procedury do obecného modulu, který musí být dříve vytvořen, aby bylo možné tento kód použít v jiných dokumentech.

& Procedura AtClient GoodsPriceOnChange (položka) Přepočítat částku (); Procedura EndProcedure & AtClient ItemsQuantityOnChange (položka) Přepočítat částku (); Procedura EndProcedure & OnClient RecalculateSum () StringPT \u003d Items.Goods.CurrentData; StringPT.Sum \u003d StringPT.Number * StringPT.Price; Konec postupu

Protože pro náš úkol nám stačí volání od klienta a nepotřebujeme data z databáze, nastavíme pouze příznak „Klient“. Pokud chcete v budoucnu použít stejný modul pro složitější výpočty, označte ve vlastnostech také „Server“. Přípravná fáze je dokončena a můžeme pokračovat v psaní kódu.


Vytvoříme v modulu proceduru exportu a přeneseme tam algoritmus pro výpočet částky z procedury v modulu formuláře. Řádek v tabulkové části bude použit jako parametr postupu u vchodu. V modulu formuláře dokumentu změníme volání procedur ve stejném modulu na volání procedur z obecného modulu.


Procedura CalculateRow (řádek TabularSection) Export TabularSectionRow.Sum \u003d TabularSectionRow.Quantity * TabularSectionRow.Price; Konec postupu

Fragment 1

& Procedura AtClient GoodsPriceOnChange (Item) // volání procedury z obecného modulu CalculationVSystem.CalculateString (Items.Products.CurrentData); // RecalculateSum (); Procedura EndProcedure & AtClient ItemsQuantityOnChange (Item) // volání procedury z obecného modulu CalculationVSystem.CalculateString (Items.Products.CurrentData); // RecalculateSum (); Procedura EndProcedure & OnClient RecalculateSum () StringPT \u003d Items.Goods.CurrentData; StringPT.Sum \u003d StringPT.Number * StringPT.Price; Konec postupu

Fragment 2

Když se systém spustí, nevšimneme si rozdílu, ale tato struktura kódu je mnohem pohodlnější číst a udržovat. Samozřejmě v tento příklad množství kódu nemusí ukazovat všechny výhody. V případě složitého algoritmu pro desítky konfiguračních objektů bude mít na množství systému a jeho strukturu vliv také rychlost systému. Zkušení vývojáři 1C navíc doporučují nepopisovat algoritmy ve formových modulech, ale umisťovat je do správně nakonfigurovaných společných modulů.

Při vývoji společných modulů je třeba vzít v úvahu obecně přijímaná pravidla pro jejich tvorbu:

  • Umístěte postupy a funkce související s podobnými funkcemi do samostatného společného modulu;
  • V názvu modulu uveďte jeho příslušnost k kontextu (Klient, Server) a vyhněte se běžným slovům (obslužné rutiny, postupy atd.);
  • Oddělte interní logiku aplikace na straně serveru a logiku na straně klienta pro rozhraní;
  • Při vytváření globálního sdíleného modulu buďte opatrní. To, že nemusíte odkazovat na postup prostřednictvím názvu modulu, může být matoucí, zvláště pokud je systém podporován několika vývojovými týmy.

Správně vytvořené moduly vám pomohou orientovat se v konfigurační struktuře a provádět vylepšení mnohem rychleji. Pokud vidíte příležitost udělat užitečná funkce univerzální a vložte jej do společného modulu, pak to udělejte. V budoucnu budete vy a vaši kolegové vděční za toto rozhodnutí.