1c opětovné použití návratových hodnot. Obecné moduly. Příznak vnějšího odkazu


   Tisk (Ctrl + P)

Objekty umístěné ve větvích konfiguračního stromu obecných modulů jsou určeny k umístění textů funkcí a procedur, které lze vyvolat z jakéhokoli jiného konfiguračního modulu, do nich.
POZOR! Společný modul může obsahovat pouze definice procedur a funkcí.
  Postupy a funkce obecného modulu, pro které je v záhlaví uvedeno klíčové slovo Export, jsou součástí globálního kontextu. Více informací o procedurách psaní se můžete dozvědět v obecném modulu v oddílech „Zdrojový kód formátu softwarových modulů“ a „Operátoři“ v integrované jazykové nápovědě.
  Chcete-li upravit obecný modul, v paletě vlastností objektu typu Obecné moduly okna Konfigurace klikněte ve vlastnosti Modul na odkaz Otevřít. Text obecného modulu bude vydán pro úpravy v textovém editoru systému 1C: Enterprise v režimu úpravy textu softwarového modulu.
  Společný modul, který je součástí konfigurace, je uložen pouze jako součást konfigurace.
  Globální vlastnost určuje, zda exportované metody obecného modulu jsou 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 vlastnost Global nastavena na False, pak se v globálním kontextu vytvoří vlastnost s názvem odpovídajícím názvu společného modulu v metadatech. Tato vlastnost je pouze pro čtení. Hodnota této vlastnosti je objekt GeneralModule. Exportované metody tohoto obecného modulu jsou k dispozici prostřednictvím tohoto objektu. Volání na metody ne globálních společných modulů tedy vypadá jako XXXXX.YYYYY, kde XXXXX je název vlastnosti, která odpovídá kontextu společného modulu, a YYYYY je název exportované metody společného modulu.
  Příklad:

Práce s obchodním zařízením. Připojte čárové kódy skeneru ();

Různé kontextové a obecné moduly

Pomocí vlastností společných modulů a instrukcí preprocesoru můžete organizovat provádění různých metod společných modulů ve správném kontextu.
  Každá vlastnost společného modulu je zodpovědná za schopnost kompilovat (a provádět) společný modul v konkrétním kontextu.
  K dispozici jsou následující vlastnosti, které jsou zodpovědné za kontext, ve kterém jsou dostupné společné metody modulu:
Klient (běžná aplikace) - metody obecného modulu budou k dispozici pro silného klienta v režimu běžné aplikace;
  ● - běžné metody modulů budou dostupné pro tenkého klienta, webového klienta i pro silného klienta v systému Windows XP
  režim řízené aplikace;
  ● Server - na serveru budou dostupné metody obecného modulu;
Externí připojení   - Při externím připojení budou k dispozici běžné metody modulů.
  Pokud je nastaveno více vlastností současně, znamená to, že metody společného modulu budou dostupné v několika kontextech.
  Pokud má obecný modul vlastnost Server a jinou sadu vlastností, znamená to, že obecný modul bude k dispozici současně na serveru i ve vybraném klientovi. Je nutné pochopit, že ve skutečnosti se jedná o několik verzí kompilovaného kódu (podle počtu vybraných klientů a vlastně pro server).
  Navíc, pokud je metoda umístěná v takovém společném modulu vyvolána z klienta, bude použita kopie klienta společného modulu, a pokud je ze serveru, serverová. V tomto případě můžete pomocí směrnic preprocesoru (podrobnosti viz zde) server „chránit“ před kódem, který na něm nelze provést.
  Zvažte příklad. Obecný modul (který lze spustit na tenkém klientovi a na serveru) má metodu, která má mírně odlišné chování na straně tenkého klienta a na straně serveru. Uvidíme, jak toho lze dosáhnout:



#Pokud tenčí zákazník
// Zobrazit varování
ShowUser Alert(„O klientovi“);
#EndIf
EndProcedures
  Na straně serveru bude mít kód následující podobu:
Postup Obecná metoda modulu ()   Exportovat
// Zde je umístěn různý důležitý kód
EndProcedures
  A na straně tenkého klienta bude kód vypadat takto:
Metoda exportu GeneralModule ()
// Zde je umístěn různý důležitý kód
// Zobrazit varování
  ShowUser Alert („On Client“);
EndProcedures

Existuje několik způsobů, jak přenést kontrolu z klienta na server:
  ● volání metody společného modulu serveru;
  ● ve formuláři nebo příkazovém modulu volejte metodu, které předcházejí direktivy kompilace & OnServer, & OnServerWithout Context

Současně je nemožné volat metody klientských společných modulů (pro které není nastavena vlastnost Server) a klientských metod formulářového modulu nebo příkazového modulu ze serverových procedur. Správa se vrátí klientovi po dokončení volání metody externího serveru.
  Výjimkou jsou metody modulu formulář a příkazový modul, kterým předcházejí direktivy kompilace & Na klientovi na serveru, & Na klientovi na serveru bez kontextu
Je třeba zmínit také následující body:
  ● Je-li společný modul k dispozici pro více než jednoho klienta, měli byste při psaní programového kódu vzít v úvahu maximální omezení, která mohou být uložena klienty, nebo použít instrukce preprocesoru k „izolování“ kódu specifického pro konkrétního klienta.
  ● Pokyny preprocesoru mají také smysl, když jeden společný modul má několik kontextů provádění, například externí připojení a tenkého klienta nebo (což je mnohem běžnější) nějaký klient a server. V tomto případě instrukce preprocesoru rámují interaktivní kód, který nelze použít na serveru, ale možná na klientovi (viz příklad výše).
  Další informace o instrukcích pro preprocesor a směrnicích o kompilaci naleznete v části „Provádění procedur a funkcí“ v integrované jazykové nápovědě.
  Vlastnost volání serveru se používá k řízení schopnosti volat exportované metody společného modulu serveru z kódu klienta.
  Pokud je vlastnost nastavena, jsou pro volání z klienta k dispozici exportované metody společného modulu na straně serveru. Pokud vlastnost není nastavena, lze takové exportované metody volat pouze ze serverových metod (jak běžné metody modulu serveru, tak metody serveru modulu formuláře a příkazových modulů).
Tip. Doporučujeme nastavit vlastnost Call server na False v případech, kdy společný modul serveru obsahuje metody, které je nežádoucí volat z 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 automaticky obnoví vlastnost volání serveru. Pokud je nastavena vlastnost volání serveru, vlastnosti se automaticky resetují Klient (běžná aplikace), Klient (spravovaná aplikace)   a Externí připojenípokud byly tyto vlastnosti nastaveny současně.
  Vlastnost Privileged   navrženo tak, aby zakázalo řízení přístupu při provádění metod obecného modulu.
  POZNÁMKA Pokud je vlastnost Privileged   nainstalován, pak je vlastnost Server automaticky nastavena na obecný modul a zbývající vlastnosti jsou resetovány ( Klient (běžná aplikace), Klient (spravovaná aplikace)   a B 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í, je k dispozici vlastnost Opakované použití návratových hodnot. Tato vlastnost může nabývat následujících hodnot:
  ● Nepoužívat - opětovné použití návratových hodnot pro funkce tohoto obecného modulu se nepoužívá.
● V době hovoru a v době relace - metoda pro určení opakovaného použití dat se používá pro obecný modul. Podstatou této metody je to, že během provádění kódu si systém pamatuje parametry a výsledek funkcí po prvním vyvolání funkce. Když je funkce vyvolána znovu se stejnými parametry, uložená hodnota je vrácena (od prvního volání) bez provedení samotné funkce. Pokud funkce změní hodnoty parametrů během jejího provádění, volání této funkce znovu neudělá.
  Lze rozlišit následující vlastnosti ukládání výsledků volání:
  ● pokud je funkce vykonána na serveru a vyvolána z kódu serveru, hodnoty parametrů a výsledek hovoru se zapamatují pro aktuální relaci na straně serveru;
  ● pokud je funkce prováděna na silném nebo tenkém klientovi, jsou hodnoty parametrů a výsledky hovoru uloženy na straně klienta;
  ● pokud je funkce prováděna na straně serveru a je vyvolána z klientského kódu, pak se parametry volání zapamatují na straně klienta i na straně serveru (pro aktuální relaci).
  Uložené hodnoty jsou vymazány:
  ● pokud je vlastnost nastavena na Po dobu hovoru:
  ● na straně serveru - při vrácení kontroly ze serveru;
  ● na straně klienta - po dokončení procedury nebo funkce vestavěného jazyka nejvyšší úrovně (vyvoláno systémem z rozhraní, nikoli z jiné procedury nebo funkce vestavěného jazyka);
  ● pokud je společná vlastnost modulu nastavena na Session Time:
  ● na straně serveru - na konci relace;
  ● na straně klienta - při uzavření klientské aplikace.
  Uložené hodnoty budou smazány:
  ● na serveru, u silného klienta, v externím připojení, v tenkém klientovi a ve webovém klientovi s obvyklou rychlostí 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;
  ● s nedostatkem paměti RAM v pracovním postupu serveru;
  ● při restartování pracovního postupu;
  ● Při přepínání klienta do jiného pracovního postupu.
  Po smazání hodnot se uskuteční volání exportované funkce jako u prvního hovoru.
  Tato vlastnost společných modulů neovlivňuje provádění procedur - procedury jsou vždy prováděny.

Pokud obecný modul nastavil opakované použití návratových hodnot, podléhají typy parametrů exportovaných funkcí řadě omezení. Typy parametrů mohou být pouze:
  ● Primitivní typy ( Nedefinováno, NULL, Booleovské čí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 „podle obsahu“ struktur.
  Pokud exportovaná funkce vrátí objekt, je ve skutečnosti vrácen odkaz na objekt uložený v mezipaměti. Pokud se po přijetí tohoto odkazu změní stav objektu, následné volání stejné funkce vrátí odkaz na již modifikovaný objekt bez skutečného provedení funkce. Toto chování bude sledováno, dokud nebude uložená hodnota odstraněna (z jakéhokoli důvodu). Jinými slovy, změna stavu objektu získaná v důsledku volání funkce ze společného modulu s opakovaným použitím vrácených hodnot není základem pro skutečné volání funkce. Také byste si měli pamatovat, že mezipaměť vrácených objektů je lhostejná
  stav privilegovaného režimu v okamžiku vyvolání funkce s opakovaným použitím vrácených hodnot. Tato funkce může vést k následujícímu chování:
  ● Při aktivaci privilegovaného režimu bylo provedeno skutečné provedení volání funkce s opakovaným použitím návratových hodnot (první volání).
  ● Při provádění funkce byl přijat objekt, který nelze získat s deaktivovaným privilegovaným režimem.
  ● Následná volání funkcí byla provedena bez nastavení privilegovaného režimu.
  ● Dokud však nebude zrušena mezipaměť vrácených objektů nebo dokud nebude opakováno skutečné volání, funkce vrátí formálně nepřístupný objekt.
  ● Zpětné chování platí také při prvním volání bez nastavení privilegovaného režimu a v privilegovaném režimu se objekt, který by mohl být přijat v privilegovaném režimu, nevrací.

Pokud má společný modul vlastnost Opakované použití návratových hodnot   nastaveno na Po dobu trvání relace nelze hodnoty typu použít v hodnotách vrácených funkcemi takového modulu Správce dočasných tabulek.
Pokud je funkce společného modulu se sadou opakovaného použití volána ze stejného obecného modulu (například s názvem CommonModule), měli byste si pamatovat následující funkci: pokud je funkce nazývána jménem MyFunction (), bude funkce provedena při každém vyvolání funkce . Aby bylo možné použít uložené hodnoty, měla by být funkce volána svým celým jménem:
CommonModule.MoyFunction ().
  Metoda globálního kontextu odstraní všechny opakovaně použitelné hodnoty na straně serveru i na straně klienta, bez ohledu na to, kde je metoda volána. Po provedení metody RefreshValues \u200b\u200b()   první volání funkce bude plně provedeno.

Obecné moduly 1C   - konfigurační objekt metadat 1C 8.3 a 8.2, který ukládá programový kód, který se v konfiguraci často nazývá. Funkce / procedura může být vyvolána odkudkoli v konfiguraci (pokud je exportována).

Jak používat společný modul

Doporučujeme umístit postup nebo funkci do společného modulu, pokud je zavolán na více než jednom místě. Zaprvé, pokud je postup upraven, měl by být opraven pouze na jednom místě. Za druhé, to dosáhne většího pořadí v kódu.

Typickým příkladem obecného modulu je zpracování transakce v některém registru, získání výše rozdílu v pracovních dnech, převod měnových kurzů, převod množství / cena / částka v tabulkové sekci a další funkce.

Společné vlastnosti modulu

Jednou z hlavních vlastností společných modulů z jiných modulů je, že nelze deklarovat sdílené proměnné.

Získejte 267 1C video lekcí zdarma:

Podívejme se na paletu vlastností obecného modulu podrobněji:

  • Globální   - je-li nastaven příznak, budou funkce a postupy z tohoto modulu dostupné v globálním kontextu. I.e. lze je vyvolat kdekoli v konfiguraci a přistupovat bez názvu společného modulu. Je však přidána podmínka - název procedur a funkcí v tomto obecném modulu musí být v globálním kontextu jedinečný.
  • Server   - Procedury a funkce tohoto obecného modulu lze provádět na serveru.
  • Externí připojení   - programové kódy tohoto obecného modulu lze provádět po připojení k externímu zdroji (například COM).
  • Klient (spravovaná aplikace)   - postupy a funkce tohoto obecného modulu lze použít u silného klienta v režimu spravované aplikace.
  • Klient (běžná aplikace)   - programové kódy tohoto obecného modulu lze použít u silného klienta v běžném aplikačním režimu.
  • Volání serveru   - příznak umožňující klientovi používat postupy a funkce z tohoto obecného modulu.
  • - Pokud je nastavena hodnota True, bude v tomto obecném modulu kontrola autorizace deaktivována.
  • Opětovné použití   - určuje nastavení vrácených hodnot, je-li volba povolena, pak si systém po prvním spuštění zapamatuje hodnotu zadaných vstupních parametrů a vrátí konečnou hodnotu. Může nabývat následujících hodnot: nepoužito   - odstavení, během hovoru   - po dobu určitého postupu, po dobu trvání relace   - dokud uživatel relaci (program) neuzavře.

Pokud se začnete učit 1C programování, doporučujeme náš bezplatný kurz (nezapomeňte

Článek pokračuje v cyklu „První kroky ve vývoji na 1C“, podrobně se zabývá následujícími otázkami:

  • Co je softwarový modul a z čeho se skládá?
  • K čemu je aplikační modul? Proč jsou dva? Kdy běží Jaké jsou jemnosti práce?
  • Jaké události jsou spojeny se spuštěním systému, jak a kde je zpracovat?
  • Na co je modul pro externí připojení? Kdy a jak jej použít?
  • Kdy se používá modul relace?
  • Co jsou obecné moduly? Jaké jsou jeho vlastnosti a pravidla práce? Proč používat vlastnost „Opakované použití návratových hodnot“?
  • Kdy se modul formuláře používá a jaké události v něm lze zpracovat?
  • Na co je objektový modul určen? Z jakých částí se skládá? Jak zobrazit dostupné události modulu?
  • Jaké jemnosti práce existují u modulů Správce hodnot (pro konstanty) a modulů záznamů (pro registry)?
  • Jaké jsou rozdíly mezi modulem objektu a modulem správce? Kdy použít poslední?

Použitelnost

Článek pojednává o platformě 1C: Enterprise 8.3.4.496. Materiál je relevantní pro aktuální verze platformy.

Moduly v 1C: Enterprise 8.3

Moduly jsou ty objekty, kde je obsažen programový kód.

V platformě je poměrně velké množství typů modulů, z nichž každý má svůj vlastní účel a vlastnosti.

Jakýkoli řádek kódu by měl být v nějakém modulu. Existují univerzální moduly a objektové moduly. Některé moduly lze kompilovat jak na klientovi, tak na serveru a některé pouze na serveru.

Modul se může skládat z několika sekcí. Sekce popisu proměnných popisuje lokální proměnné tohoto modulu, které lze následně použít v libovolném postupu.

V rámci každého postupu máte přístup k proměnné modulu. Kromě toho může uvnitř samotné procedury existovat další proměnná deklarace se stejným názvem. Bude to lokální proměnná tohoto postupu.

Navzdory stejnému jménu se jedná o dvě různé proměnné: jedna se používá uvnitř konkrétního postupu a druhá mimo ni.

V některých modulech lze pro proměnné označit umístění kompilace (dostupnost) na serveru nebo na klientovi. Například:

Za oddílem pro popis proměnných následuje oddíl postupů a funkcí, kde jsou uvedeny místní metody tohoto modulu. Některé moduly by měly uvádět, kde bude procedura nebo funkce zkompilována.

V zásadě lze směrnici o kompilaci vynechat. V tomto případě je výchozí kompilační direktiva Server. Pro usnadnění analýzy programového kódu se však doporučuje výslovně uvést, kde bude tento postup kompilován. Nezáleží na pořadí, ve kterém jsou postupy popsány.

Na konci modulu, po popisu všech postupů a funkcí, je část hlavního programu, kde mohou být obsaženy některé operátory a inicializovány lokální proměnné modulu formuláře. Tato sekce se provádí při přístupu k modulu.

Tak například při otevření formy prvku se nejprve provede sekce hlavního programu modulu formuláře.

Je třeba poznamenat, že sekce deklarace proměnných a hlavní sekce programu neexistují pro všechny moduly (tj. V některých modulech tyto sekce nejsou povoleny). Sekce popisující procedury a funkce může existovat v naprosto libovolném modulu.

Aplikační modul

Tento modul je navržen pro zpracování událostí spuštění a dokončení aplikace. Například při spuštění aplikace si můžete stáhnout směnné kurzy z internetu. Na konci aplikace si můžete s uživatelem ověřit jeho úmysl dokončit práci.

V aplikačním modulu jsou také speciální obslužné programy, které vám umožňují zachytit externí události ze zařízení.

Mohou to být události od čtečky magnetických karet, fiskálního registrátora. A tyto události lze také nějakým způsobem řešit.

Je třeba poznamenat, že v aplikačním modulu je monitorováno spuštění interaktivního systému.

Aplikační modul nebude fungovat, pokud je spuštěn program 1C, například v režimu kom-připojení. V tomto případě se nevytvoří okno programu.

Je třeba poznamenat, že v platformě 8.3 existují dva různé aplikační moduly: spravovaný aplikační modul a normální aplikační modul. Události modulu spravované aplikace jsou zpracovávány při spuštění tenkého a tlustého klienta spravované aplikace a webového klienta.

Modul Pravidelná aplikace   funguje při spuštění Silného klienta v režimu Pravidelná aplikaceve kterém existuje pravidelné příkazové rozhraní ve formuláři Hlavní menu.

Pokud je aplikace spuštěna Podařilo sea v Pravidelná aplikace, je nutné popsat postupy obsluhy jako u modulu Spravovaná aplikacetak pro modul Pravidelná aplikace.

Modul Spravovaná aplikace   lze vybrat z místní nabídky kořenového konfiguračního uzlu.

Tento modul můžete také otevřít z palety vlastností kořenové položky konfigurace.

Otevření modulu Pravidelná aplikace, měli byste se podívat na nastavení konfigurace (příkaz Parametryv nabídce Služba).

Otevře se formulář Parametry. Na záložce Generálemusí být zadán režim úprav konfigurace Spravovaná aplikace   a Pravidelná aplikace.

V tomto případě modul Pravidelná aplikace   lze také otevřít z vlastností kořenového uzlu.

Seznam událostí, které lze zpracovat Podařilo sea Pravidelná aplikace   stejné.

V tomto modulu můžete umístit sekci pro deklarování proměnných, sekci pro popis libovolných procedur a funkcí a sekci pro hlavní program. Ale kromě libovolných procedur a funkcí mohou být v modulu umístěny obsluhy speciálních událostí.

Seznam dostupných obsluhovačů můžete vidět, pokud vyvoláte seznam procedur a funkcí aktuálního modulu, když je modul otevřený.

Otevře se okno Procedury a funkce, které zobrazuje všechny procedury a funkce tohoto modulu, jakož i události, pro které obsluhy ještě nebyly vytvořeny.

Existují dvě události související se spuštěním systému („před“ a „kdy“). Dvě události se týkaly vypnutí systému („před“ a „kdy“). Stejně jako zpracování externích událostí (například událostí obchodního vybavení).

Po spuštění obsluhy události „před“ se má za to, že akce ještě nebyla dokončena. Když je spuštěn obslužný program události „When“, akce již byla dokončena.

Událost Než začneteSystémyvzniká v okamžiku spuštění Enterprise 8.3, ale samotná aplikace se dosud na obrazovce neobjevila. Tato událost má například parametr Selhání.

Pokud se tento parametr stane Pravda, pak se aplikace nespustí. Událost ZAČÍNÁMESystémypředpokládá, že akce již byla dokončena, okno již bylo vytvořeno, a v tomto případě můžeme například zobrazit nějaký speciální formulář. Již není možné odmítnout spuštění.

Podobně před vypnutím systému je aplikace stále otevřená a můžete ji odmítnout dokončit. Když se systém vypne, okno aplikace se již zavřelo. Je možné provádět pouze další akce, například odstranit některé soubory nebo odeslat e-mail.

V modulu Spravovaná aplikace   směrnice pro kompilaci procedur a funkcí nejsou uvedeny, protože modul je kompletně kompilován na straně klienta. To znamená, že v postupech a funkcích modulu nebudeme mít přímý přístup například k referenčním knihám.

Pokud z modulu Spravovaná aplikace   musíte uskutečnit serverové volání, pak pro něj budete muset vytvořit speciální   označeno .

V modulu Pravidelná aplikace   Neexistují žádná taková omezení, protože tento modul se kompiluje po načtení Silného klienta. V aplikaci Fat Client jsou k dispozici téměř všechny typy dat.

Procedury, funkce a proměnné aplikačního modulu lze označit jako exportované.

Protože modul byl kompilován výhradně na klientovi, znamená to, že v klientských procedurách můžeme odkazovat na tuto metodu a tuto vlastnost.

Například z modulu formuláře objektu můžete volat proceduru nebo funkci aplikačního modulu. Doporučujeme však použít k popisu běžných algoritmů běžné moduly. Hlavním účelem aplikačního modulu je zpracování počátečního a koncového bodu.

Analogicky s aplikačním modulem je tento modul navržen tak, aby zpracovával událost otevření programu a vypnutí.

Na rozdíl od aplikačního modulu, který je inicializován v okamžiku interaktivního spuštění aplikace, externí připojovací modul pracuje v režimu kom-připojení, tj. při vytvoření objektu 1C: Enterprise 8 a navázání spojení s konkrétní základnou.

V tomto modulu jsou události: ZAČÍNÁMESystémya Po dokončení systému.

Externí připojovací modul lze otevřít pomocí kontextové nabídky na úrovni kořenového konfiguračního objektu nebo pomocí palety vlastností kořenového uzlu.

Proces externího připojení je proces programové práce s informační základnou, nikoli interaktivní. V této chvíli tedy nemůžete používat dialogové formuláře ani zobrazovat varovné zprávy, protože neexistuje uživatelské rozhraní.

V modulu External Connection Module je možné popsat exportní proměnné a metody exportu, které budou k dispozici na straně, kde se uskutečňuje externí volání 1C: Enterprise 8.3.

Protože v externím připojení není žádné uživatelské rozhraní, modul External Connection Module je kompilován výhradně na serveru.

Modul relace

Tento modul je potřebný k inicializaci parametrů relace. Parametry relace jsou rychlé globální proměnné, jejichž hodnoty jsou dostupné kdekoli v konfiguraci.

Modul relace můžete otevřít buď prostřednictvím místní nabídky, nebo prostřednictvím palety vlastností kořenového uzlu.

Modul relace poskytuje událost Nastavení nastavení relace.

Při spuštění aplikace se tento postup nazývá úplně první. Parametry relace jsou nutné během jakékoli operace aplikace: během interaktivního spuštění i při spuštění v režimu externího připojení.

Modul relace popisuje různé akce pro inicializaci parametrů relace v závislosti na různých podmínkách.

Tento modul zpravidla popisuje několik procedur, které jsou vyvolány z procedury Nastavení nastavení relace. Proto jsou všechny tyto postupy přiděleny v samostatném modulu.

Modul relace je vždy spuštěn v privilegovaném režimu. To znamená, že při přístupu do databáze nebude provedena kontrola přístupu. Modul relace je kompilován na serveru, tj. je možné přistupovat k libovolným metodám serveru (včetně čtení hodnot z databáze).

V modulu relace je možné definovat pouze procedury a funkce, tj. neexistuje žádná sekce popisující proměnné a žádná část hlavního programu. Metody exportu nelze popsat v modulu relace.

Je-li při spuštění systému nutné provést některé akce na serveru, například vytvořit prvek nějakého adresáře, pak je možné jako možnost použít modul relace, protože je kompilován na serveru a je vždy spolehlivě proveden při spuštění systému. Je však třeba vzít v úvahu následující body:

  • postup Nastavení nastavení relaceprovádí se nejen při spuštění systému, ale také při přístupu k neinicializovaným parametrům relace. I.e. popisovač nastavení parametrů relace lze během operace aplikace volat opakovaně;
  • pokud počet prvků v poli parametrů relace je nula (pole požadovaných parametrů má typ dat nedefinováno), je to okamžik spuštění aplikace;
  • protože modul relace pracuje v privilegovaném režimu a nedojde k žádné kontrole přístupu, měli byste velmi pečlivě pracovat s databázovými objekty, protože uživatel může získat přístup k datům, která by mu neměla být poskytována;
  • při spuštění systému není dosud jisté, zda bude aplikace spuštěna. Ve zpracovateli událostí pro nastavení parametrů relace mohou být současně provedeny zbytečné akce.

Tyto moduly jsou popisem některých běžných algoritmů, tj. postupy a funkce, které lze volat z různých míst.

Logicky související metody mohou být seskupeny do různých obecných modulů. Tyto moduly jsou vytvářeny uvnitř větev General.

Můžete přidat libovolný počet běžných modulů. Aby byly metody modulů Obecné dostupné na jiných místech v konfiguraci, musíte je definovat pomocí klíčového slova Export. Klientské procedury obecných modulů budou k dispozici na Klientovi a serverové procedury na Serveru.

V modulech Obecné je k dispozici pouze část popisující postupy a funkce. I.e. v modulu Obecné nelze popsat proměnné a nelze popsat část hlavního programu.

Pokud je potřeba globální proměnná, mohou být použity parametry relace nebo exportní proměnné aplikačního modulu.

U modulů Obecné můžete nastavit některé parametry, které ovlivní chování tohoto modulu. Pokud je vlastnost Global nastavena pro modul General, budou exportní metody deklarované v tomto modulu dostupné přímo zvnějšku bez jakýchkoli dalších pokynů.

I.e. daný Obecný modul   se bude podílet na tvorbě kontextu globální konfigurace.

Vlastnost Globálnípro obecné moduly mohou být užitečné. Neměli byste jej však používat univerzálně pro všechny běžné moduly.

Ty označené Globálníbude kompilován při spuštění systému. Čím více takových modulů, tím pomaleji se program spustí.

Pokud je vlajka Globálnípro Obecný modulnení-li uvedeno, bude kompilace tohoto modulu provedena v okamžiku prvního volání na něj (tj. po spuštění systému).

Použití globálních společných modulů navíc ovlivňuje porozumění kódu. Nekontinentální metody obecných modulů se nazývají pomocí názvu Obecný modul   a název metody, například:
Modul Costing Distribute nepřímé náklady ();

Názvy obecných modulů by měly odrážet obsah postupů popsaných v nich. Určení názvu modulu General při vyvolání procedury přispívá k lepšímu porozumění kódu.

Pro Obecný modul   v Paleta vlastností   může nastavit vlastnost Privileged.

Privilegovaný modul nekontroluje přístupová práva. To je nutné, pokud Společný modul   Je nutné provádět hromadné zpracování dat, přijímat data z databáze.

Řízení přístupu zvyšuje čas potřebný pro přístup k databázi a hromadné algoritmy často potřebují pracovat co nejrychleji.

Například operace náročná na zdroje je výplatní listina. Musí být vyplněna co nejrychleji. Za tímto účelem jsou algoritmy, které vypočítávají mzdy, zařazeny do privilegovaných .

Kromě toho jsou všechny postupy, které zajišťují vyplnění mzdových dokladů, mimo tyto postupy Společné moduly. V těchto postupech je prováděna kontrola přístupu.

Tímto způsobem lze dosáhnout významného zvýšení výkonu. To platí zejména pro případ použití mechanismu řízení přístupu z jednoho řádku na položky tabulky.

Pokud je modul General privilegován, mohou být postupy tohoto modulu kompilovány pouze na serveru.

Existují situace, kdy některý objekt musí být pro uživatele nepřístupný, například konkrétní adresář. Při provádění jediného dokumentu je však nutný odkaz na tento adresář.

I.e. je třeba dočasně rozšířit práva uživatele a vrátit je do původního stavu. Tento efekt lze získat pomocí privilegovaných Společné moduly.

Za to v privilegovaném stavu Společný modul   měl by být vypracován postup, který se bude zabývat nezbytnými údaji.

Tento postup bude vyvolán z odpovídajícího dokumentu. I.e. v okamžiku vyvolání tohoto postupu je uživateli skutečně uděleno rozšířené právo.

Pro Společné moduly   Je možné uvést místo kompilace. Pomocí příznaků se nastavuje: zda bude modul General k dispozici na Klientovi (spravovaná aplikace), na Serveru, v provozním režimu Externího připojení.

Kromě toho, pokud přepnete režim úprav konfigurace na spravovanou aplikaci a běžnou aplikaci, bude možný další kontext kompilace - Klient (běžná aplikace).

Pro fungování programu tedy existují čtyři možnosti. V závislosti na spuštěné aplikaci, v závislosti na práci na klientovi nebo na serveru, budou některé obecné moduly dostupné nebo nepřístupné.

Kromě možnosti specifikovat příznaky kompilace je možné určit direktivy kompilace pro procedury a funkce umístěné v modulu Obecné.

Pokud je pro metodu zadána direktiva kompilace, ačkoli je modul General k dispozici ve všech zadaných kontextech, dostupnost konkrétní metody bude omezena kompilační směrnicí.

Postup však nemusí být k dispozici v kontextu, který není obecně dostupný pro celý modul.

Pokud není zadána direktiva pro kompilaci procedury (funkce), bude zkompilována ve všech kontextech definovaných pro modul.

I.e. ve skutečnosti bude vytvořeno několik kopií postupu. Výběr konkrétní kompilované instance závisí na umístění volání procedury (podle pravidla nejbližšího volání). Je třeba mít na paměti, že kód takového postupu by měl být napsán s přihlédnutím k jeho dostupnosti ve všech kontextech definovaných pro modul.

Obecné moduly, které jsou současně k dispozici v několika různých kontextech, jsou určeny především k vytvoření postupů, které jsou k dispozici v několika kontextech.

Při vytváření modulu Obecné se považuje za dobrý postup nespecifikovat direktivy kompilace. I.e. dostupnost postupů a funkcí by měla být určena vlastnostmi samotného modulu.

Při tomto přístupu budou klientské procedury umístěny v samostatných obecných modulech a serverové procedury v samostatných obecných modulech.

Moduly se sadou několika příznaků kompilace se v praxi používají jen zřídka. Toto jsou některé běžné akce dostupné jak na Klientovi, tak na Serveru. Obvykle se jedná o jednoduché výpočty.

Důležité! Je možné přistupovat k metodám exportního serveru modulu General z klienta, ale pouze pokud je tento modul General kompilován pouze na serveru. Současně je poskytován zvláštní příznak, který poskytuje přístup od klienta .

U jiných než globálních modulů General je možné ukládat hodnoty vrácené funkcemi do mezipaměti. I.e. po prvním volání funkce si systém může zapamatovat výsledek jeho provedení. Pokud je tato funkce vyvolána znovu se stejnými parametry, systém vrátí hodnotu již z mezipaměti.

Cílem tohoto mechanismu je urychlit opakovaná volání. Chcete-li toto chování nakonfigurovat, musíte Paleta vlastností   modul pro nastavení příslušné hodnoty pro vlastnost Opakované použití návratových hodnot.

Ve výchozím nastavení je tato vlastnost nastavena na Nepoužívat. Další možné hodnoty: cache Během hovorubuď Po dobu trvání relace.

Má smysl používat tuto vlastnost pouze pro ty funkce, jejichž výsledek závisí výhradně na vstupních parametrech. Tento mechanismus je k dispozici pouze pro neinvestiční obecné moduly.

Pokud je vybrána hodnota odpovídajícího parametru V době volání, zůstane mezipaměť aktivní, dokud nebude proveden postup, od kterého bylo provedeno volání metody obecného modulu. Pokud je vybrána hodnota Během relace, pak se předpokládá, že mezipaměť bude fungovat, zatímco uživatel pracuje.

Existují však určité lhůty. Vymazání mezipaměti nastane automaticky 20 minut poté, co hodnota zasáhne mezipaměť.

Modul formuláře

Tento modul je určen ke zpracování uživatelských akcí. Například popište algoritmus reakce programu po stisknutí tlačítka. Nebo například v okamžiku zadání hodnoty do pole okamžitě zkontrolujte správnost.

Kromě událostí spojených s ovládacími prvky formuláře (tlačítka, vstupní pole) existují i \u200b\u200budálosti související přímo se samotným formulářem.

Můžete například zpracovat událost otevření formuláře a provést počáteční inicializaci. Můžete také zpracovat událost uzavření formuláře a zkontrolovat, zda uživatel vše zadal správně.

Existují kontrolovatelné a běžné formy. Moduly těchto forem se liší především tím, že modul spravované formy je jasně rozdělen do kontextu. Každý postup (funkce) musí mít kompilační směrnici. V obvyklém formuláři je veškerý kód použit na Klientovi.

V modulu spravovaného formuláře můžete deklarovat procedury a funkce, můžete deklarovat proměnné a popisovat část hlavního programu.

Programový kód hlavního programu bude proveden v okamžiku inicializace formuláře, tj. když ji uživatel otevře. Obrázek ukazuje seznam standardních událostí pro spravovaný formulář.

Seznam spravovaných událostí formuláře je také viditelný v seznamu vlastností přímo pro samotný formulář. Tento seznam se nazývá v editoru spravovaných formulářů.

Ve spravované formě můžete zpracovat událost zápisu položky. Tato událost je k dispozici pouze pro formy objektů (adresáře, dokumenty a některé další). Pokud formulář není připojen k určitému objektu, pak neexistuje žádná událost záznamu.

U modulu s běžným formulářem je seznam standardních událostí poněkud menší, protože ve spravované podobě je spárováno mnoho událostí (jedna se provádí na klientovi a druhá na serveru). V obvyklé podobě se veškerý kód provádí na Klientovi.

Modul objektu

Tyto moduly jsou typické pro adresáře, dokumenty, plány typů vypořádání, plány účtů a mnoho dalších objektů. Objektový modul je navržen pro zpracování standardních událostí. Například událost pro zadání položky adresáře, událost pro zaznamenání položky, odstranění, držení dokumentu atd.

V zásadě existuje také událost záznamu v modulu Form. Událost záznamu v modulu Formulář však probíhá v procesu interaktivního záznamu, když pracujete s konkrétním formulářem.

Událost záznamu v modulu Object se provede po každém záznamu z jakékoli formy tohoto objektu. Navíc, pokud je objekt zaznamenán programově, bude v tomto případě spuštěna událost modulu objektu.

V případě záznamu objektového modulu můžete vložit všechny kontroly správnosti zaznamenaných dat, protože tento postup bude fungovat v okamžiku naprosto jakéhokoli záznamu.

Modul tohoto objektu lze vyvolat prostřednictvím místní nabídky, z palety Vlastnosti objektu az okna pro úpravy objektu.

Obrázek níže ukazuje seznam dostupných událostí adresářového modulu.

V modulu Object můžete umístit sekci pro popis proměnných, popsat libovolné funkce, které nemusí být spojeny s událostí, jakož i část hlavního programu.

Například v hlavní části programu můžete inicializovat lokální proměnné daného modulu. Tento programový kód bude spuštěn při přístupu k tomuto modulu objektu.

Je třeba poznamenat, že všechny procedury objektového modulu jsou kompilovány na serveru. V souladu s tím nejsou vyžadovány kompilační směrnice pro procedury a funkce objektového modulu. Některé konfigurační objekty nemají Object Modules.

Je to kvůli vlastnostem samotných objektů. Mezi takové objekty patří Konstantya Registry. Pro Konstantyneexistuje žádný objektový modul, ale existuje velmi podobný modul nazvaný Modul Správce hodnot.

V Modul Správce hodnot   je možné zpracovat záznamové události Konstantya zpracování kontroly plnění.

Celý kontext modulu se provádí na serveru.

Pro registry existuje modul záznamů.

Tento modul má také schopnost zpracovávat záznamové události a provádět kontrolu výplně.

V modulech objektů, modulech Správce hodnot (pro konstanty) a modulech sady záznamů (pro registry) můžete popsat metody, které lze exportovat, a tyto metody budou přístupné zvenčí.

I.e. Kromě použití pevných metod třídy objektů můžete v objektu Object Module vytvářet další metody pro objekt. Tento modul by měl popsat odpovídající postup s klíčovým slovem Exportovat.

Poté bude možné přistupovat k této proceduře zvenčí. Tato metoda bude navíc zobrazena v kontextové nápovědě. Nové metody v kontextové nápovědě jsou zvýrazněny modrou barvou (modrá ikona p ()   pro postupy a f ()pro funkce).

Podobně můžete vytvořit novou vlastnost deklarací proměnné pomocí klíčového slova Exportovat. Tato nemovitost je přístupná také zvenku.

Je tedy možné rozšířit funkčnost objektů (definovat nové metody a nové vlastnosti). Vlastnosti jsou však dynamické a nejsou uloženy v databázi.

Pokud chcete použít vlastnost, která bude uložena v databázi objektu, musíte vytvořit vlastnost objektu.

Modul správce

Tento modul existuje pro mnoho objektů (adresáře, dokumenty, registry atd.). Modul se otevírá buď prostřednictvím místní nabídky objektu, nebo prostřednictvím Paleta vlastnostínebo skrz editační okno.

V modulu Správce můžete přepsat některé standardní události Zpracování příjmu datpokud je položka vybrána z adresáře, můžete provést další filtrování nebo ověření.

Kromě toho můžete v modulu Správce vytvořit další metody a označit jejich export. V tomto případě je možné získat přístup k těmto metodám zvenčí.

Pro provedení tohoto hovoru je nutné získat datový typ DirectoryManager.

Rozdíl mezi metodami exportu modulu Manager a Object Module je v tom, že pro přístup k metodě Object Module musíte nejprve získat samotný objekt (tj. Nějakým způsobem získat odkaz a poté tento odkaz převést na objekt).

Poté budou k dispozici exportní proměnné a metody objektového modulu. Pro modul Manager je odvolání jednodušší, například:
Adresáře, protistrany, název metody

Jedná se o dvě různé výzvy. Převést z odkazu na objekt (metoda GetObject) - jedná se o poměrně závažnou akci systému, protože při příjmu objektu se načtou absolutně všechna data tohoto objektu, což může být poměrně dlouhé.

Druhým rozdílem je to Objektový modulnazýváno v kontextu konkrétního prvku. Lze tedy předpokládat, že je použitelný pro tento prvek (ve většině případů je taková logika stanovena).

Pokud jde o modul Manager, popisuje některé obecné akce pro skupinu nebo pro všechny prvky adresáře nebo nějakého dokumentu. Pokud například chcete vytisknout položku adresáře, můžete použít modul Object.

V modulu Správce je však možné vytvořit univerzálnější mechanismus, který bude tisknout, včetně skupiny prvků.

Kromě toho je přístup k objektovému modulu stále delší akcí. Proto je výhodnější vyřešit tento problém v modulu správce.

Tím se uzavírá naše seznámení s moduly v konfiguraci systému 1C: Enterprise. Pokud shrnete výše uvedené shrnutí, pak se ve spodním řádku nacházejí následující závěry:

  • Softwarový modul je součástí konfigurace, která může obsahovat pouze text v zabudovaném jazyce 1C
  • Softwarové moduly jsou klasifikovány podle typů, které jsme zkoumali v tomto článku. Každý pohled je určen umístěním a dostupným kontextem programu.
  • Struktura modulu se skládá z některých sekcí, které jsou uspořádány v určité sekvenci. Složení sekcí je určeno typem modulu.

Také jsme si všimli, že jsme záměrně vynechali jeden druh modulu, jmenovitě příkazový modul. Nepředstavuje nic pozoruhodného a doporučujeme vám, abyste se samostatně seznámili s jeho funkčností.

Doposud jsme celý programový kód zkoumali fragmentárně z aplikovaného řešení a zpravidla jsme jej napsali v nějaké malé testovací konfiguraci. Víte, že „nemůžete to vzít“ a začít upravovat standardní konfigurační kód? Ne? Poté v dalším článku to vše vysvětlíme!

V průběhu provádění programu musíme často získat hodnoty, které jsou uloženy v databázi a nemění se roky. Živým příkladem je hodnota konstant. Částečně je zde možné klasifikovat hledání prvku adresáře nebo uzlu výměnného plánu podle kódu, přičemž se získají hodnoty detailů objektů odkazem.

Bez přemýšlení „za chodu“ jsou takové úkoly řešeny konstrukcemi tvaru:

Pokud je datum dokumentu\u003e Constants.Start DateApplicationsResults1137.Get () Then

Výsledkem je, že při každém spuštění tohoto kódu databáze „trhne“.

Programátoři, kteří jsou více svědomí ohledně svého kódu, provádějí jeden dotaz do databáze, přičemž ukládají všechna potřebná data do mezipaměti, ale tento přístup nevede vždy k požadovanému uvolnění databáze:

  1. Cyklus provádění kódu může být implicitní (například skupinové přepisování)
  2. Získání přísného souboru údajů (nic víc a méně), který bude vyžadován později, je někdy obtížné nebo dokonce nemožné.
  3. Hodnoty v mezipaměti je třeba použít v různých hovorech / formách

Modul pro opětovné použití návratové hodnoty

K vyřešení popsaných problémů má platforma moduly s opakovaným využitím návratových hodnot. Ve skutečnosti se jedná o společný společný modul (klient nebo server), ve kterém je opětovné použití návratových hodnot nastaveno na „v době hovoru“ nebo „v době relace“. V samotném modulu jsou postupy a funkce popsány jako obvykle.

Celé je, že když opakovaně voláte exportní funkce takových modulů, první volání je skutečně provedeno tak, jak očekáváme, a všechna následná volání vedou k návratu hodnoty v mezipaměti, aniž by skutečně provedla funkční kód. Tento účinek lze pozorovat při měření výkonnosti.

Vrácené hodnoty jsou přirozeně ukládány do mezipaměti hodnotami předaných parametrů, tj. při provádění kódu

Node1 \u003d OurModule.GetNode účetnictví ExchangeWith ("0001"); Node2 \u003d OurModule.GetNode účetnictví ExchangeWith ("0002");

Obě volání ve skutečnosti povedou k provedení příslušné procedury a vrátí různé odkazy a v následných pokusech získat uzel s kódem 0001 nebo 0002 budou odpovídající uzly vráceny bez vyvolání procedury a v důsledku toho databáze.

Hodnoty jsou ukládány do mezipaměti samostatně pro každou relaci na klientovi nebo serveru (v závislosti na tom, zda klient nebo serverový modul). I.e. pokud existují funkce nastavení přístupových práv nebo jiná závislost přijaté hodnoty na aktuálním uživateli, bude vše fungovat správně.

Co nelze udělat

Existuje jedno omezení. Jako parametry funkce lze zadat pouze jednoduché typy. Nedefinováno, Null, Boolean, Datum, Řetězec, Číslo, Odkaz. Žádné struktury, hodnotové tabulky, objekty atd. Pokud se pokusíte předat například strukturu jako parametr, vše bude fungovat, ale můžete zapomenout na opětovné použití výsledné hodnoty.

Návratová hodnota může být jakéhokoli typu.

Dbejte také na velikost dat, která ukládáte do mezipaměti. Je nepravděpodobné, že zabijete veškerou paměť serveru, ale stojí za to si uvědomit, že zdroje nejsou nekonečné.

Chyba nebo funkce od 1C

Opětovně použitelné hodnoty mají zajímavou vlastnost. Tato chyba nebo funkce není jasná, ale vědět o ní nebude bolet. Pokud provedete následující kód:

ValueStructure1 \u003d OurModule.GetStructure ofValues \u200b\u200bof Requisites (LinkOnObject); Struktura hodnot 1. Jméno \u003d "Nové jméno"; ValueStructure2 \u003d OurModule.GetStructureValues \u200b\u200bof Requisites (LinkOnObject);

To, že v ValueStructure2.Name bude přesně ležet „Nové jméno“. To lze v zásadě použít k aktualizaci hodnot, které byly v databázi skutečně změněny, ale když je zavřená a zda je lavice zavřená, není to jasné. Při vývoji standardních řešení je to zakázáno.

Co dělat při změně dat v mezipaměti

Existuje pouze jedna „legitimní“ metoda k řešení situace se změnou hodnoty v mezipaměti v databázi. Toto je metoda RefreshValues \u200b\u200b(). Hodnoty všech funkcí pro všechny parametry všech modulů budou resetovány. Aktualizace podle konkrétních hodnot parametrů / funkcí / modulů není možná.

Proto je z důvodu tohoto dobrovolného přístupu nutné tuto funkci používat velmi opatrně: celý systém bude po použití po nějakou dobu výrazně pomalejší.

Porušujeme posvátné: píšeme žádost ve smyčce

Kromě zřejmých možností pro použití funkcí s opakovaným použitím návratových hodnot existuje mnoho zajímavých, univerzálních, nestandardních přístupů, včetně:

  • Psaní univerzálních postupů, které vracejí podrobnosti o libovolných odkazech (k dispozici v BSP)
  • Zápisové procedury, které vracejí hodnoty konstant podle jména konstanty (jsou typické)
  • Vrácení "mírně většího" množství dat, než je nutné ke snížení počtu hovorů (například pokud chcete získat sazby několika měn najednou, má smysl zavolat funkci podle data bez výběru měny, získat sazby všech měn a poté "třídit", v které měně současný okamžik je potřebný)
  • Zápis procedury, která provede dotaz s uložením výsledku do mezipaměti (vstupními parametry bude text dotazu a několik názvů a hodnot parametrů)

Ale je tu další přístup, o kterém se chci podrobně zabývat. Toto je použití funkce obsahující volání DB, s opakovaným použitím návratové hodnoty ve smyčce. I.e. to je vlastně požadavek ve smyčce. Obecně jsme se učili, abychom to nedělali, ale jsou chvíle, kdy taková konstrukce kódu povede k lepšímu výkonu, pokud:

  1. Počet různých hodnot vstupních parametrů, které se vyskytují v cyklu, je malý a drtivá většina kombinací s vysokou pravděpodobností byla získána dříve v této relaci.
  2. Je obtížné získat předem přesnou sadu kombinací hodnot vstupních parametrů v cyklu a získání hodnot pro všechny možné kombinace hodnot vstupních parametrů povede ke čtení velkého množství dat z databáze.

Jak vidíte, formulace nejsou přesné a jsou spíše jako dělící slova než pravidla. Proto vždy mějte na paměti kontext, vyhodnoťte aktuální obrázek, zvažte podmínky, za kterých bude váš kód fungovat.

Článek poskytuje stručný přehled a funkce takových funkcí, jako je opětovné použití návratových hodnot běžných modulů.

Problémy při práci s 1C

Při práci s programem 1C je často nutné získat hodnoty uložené v databázi, které se roky nemění. Příkladem by byla hodnota konstant. Do této skupiny hodnot lze podmíněně zařadit hledání jednoho z prvků adresáře nebo hledání uzlu plánu výměny pomocí kódu, jakož i potřebu získat hodnotu podrobností o vlastnosti.

Tyto úkoly jsou řešeny rychle a jednoduše pomocí konstrukcí následujícího typu:

Pokud je datum dokumentu\u003e Constants.Start DateApplicationsResults1137.Get () Then

Ale pokaždé, když je tento kód spuštěn, je přístupná databáze.

Mnoho programátorů používá následující metodu k uvolnění databáze. Vyplňují pouze jeden dotaz do KB a ukládají data, která mohou potřebovat, do mezipaměti. Tato metoda však nezatěžuje databázi na požadovanou hodnotu. Důvody mohou být následující:

· Ne zcela jasný cyklus provádění kódu (například v případě skupinového opakovaného přenosu dokumentů);

· Získání striktního souboru dat, který v tuto chvíli není nutný, je někdy nemožné nebo obtížné;

· Použití již uložených dat v mezipaměti v různých formách / hovorech.

Modul pro opětovné použití návratové hodnoty

Řešení výše popsaných problémů pomůže použít modely s opakovaným použitím návratových hodnot. Co je to? Toto je obecný modul klienta nebo serveru, ve kterém by mělo být ve funkcích „Pro dobu hovoru“ nebo „Pro dobu relace“ nastaveno „Opětovné použití návratových hodnot“. Všechny operace a funkce přímo v modulu jsou popsány jako dříve.

Nepochybnou výhodou této metody je, že k návratu hodnoty v mezipaměti dochází bez skutečného provedení funkčního kódu. K tomu dochází u všech následných volání funkcí exportu těchto modulů. Stejný účinek lze pozorovat při měření výkonu.

Při spuštění kódu jsou vrácené hodnoty uloženy do mezipaměti prostřednictvím hodnot předaných parametrů. To se děje přímo během provádění kódu.

Node1 \u003d OurModule.GetNode účetnictví ExchangeWith ("0001");

   Node2 \u003d OurModule.GetNode účetnictví ExchangeWith ("0002");

Jeden i druhý hovor vedou k odpovídající operaci a vracejí různé reference. Již při příštím volání se však uzly s kódem 0001 nebo 0002 vrátí, aniž by způsobily druhou operaci, a tedy bez přístupu do databáze.

Hodnoty budou ukládány do mezipaměti během každé relace jak na klientovi, tak na serveru (záleží na tom, zda byl hovor proveden z modulu klienta nebo serveru). Vše bude bezchybně fungovat, pokud budou v nastavení přístupových práv nebo jakékoli jiné závislosti na získané hodnotě nějaké funkce.

Několik VUT v Brně

Stejně jako u každého pravidla platí výjimka z této metody. Složité typy by neměly být specifikovány v parametrech funkcí, spíše jednoduché typy jako datum, číslo, nejistota atd. Nepokoušejte se určit jako parametry, například strukturu, objekt nebo tabulku hodnot. Výsledek dostanete poprvé, ale podruhé se neobjeví nic rozumného.

Návratová hodnota může být jakéhokoli typu.

Nezapomeňte také věnovat pozornost velikosti dat, která ukládáte do mezipaměti, protože paměť serveru, i když obrovská, není neomezená.

Funkce nebo chyba od 1C

Opětovně použité hodnoty mají zajímavou funkci. Lze předpokládat, že se jedná o funkci nebo chybu, ale v každém případě je třeba věnovat pozornost.

Zadáním následujícího kódu:

ValueStructure1 \u003d OurModule.GetStructure ofValues \u200b\u200bof Requisites (LinkOnObject);
   Struktura hodnot 1. Jméno \u003d "Nové jméno";
   ValueStructure2 \u003d OurModule.GetStructureValues \u200b\u200bof Requisites (LinkOnObject);

v ValueStructure2.Name přesně se objeví Nový název. To lze použít k aktualizaci hodnot, které byly ve skutečnosti změněny v databázi, ale není známo, jak dlouho to lze udělat. Protože při vytváření standardních řešení to nelze provést.

Pokud byla data v mezipaměti změněna

Pokud byly hodnoty v mezipaměti v databázi změněny, existuje pouze jeden způsob, jak je použít - metoda RefreshValues. V tomto případě se nastavení všech funkcí vynuluje ve všech modulech. Neexistuje možnost aktualizace jednou z některých hodnot parametrů, funkcí nebo modulů.

Jak je požadavek učiněn ve smyčce

Pokud nechcete používat funkci s opakovaným použitím vrácených hodnot, nabízíme vám několik kreativnějších přístupů k vyřešení problému.

· Univerzální postupy, které vracejí podrobnosti o libovolných vazbách.

· Vytváření procedur, které vracejí konstantní hodnoty podle názvu. Mimochodem, takové postupy jsou ve standardních verzích.

· Vracení hlasitosti o něco větší, než je částka potřebná ke snížení počtu hovorů. Například, pokud je nutné získat směnný kurz několika měn současně, je vhodné volat funkci výhradně podle data bez výběru měn. Po absolvování všech kurzů určete, která měna je nyní potřebná a která nikoli.

· Vytvoření procedury, která provede požadavek při ukládání výsledků do mezipaměti (příchozí parametry - text požadavku, několik názvů a hodnot parametrů).

Chtěl bych mluvit o další metodě podrobněji. Tato metoda je založena na použití funkce, která obsahuje volání databáze, s opakovaným použitím návratové hodnoty přímo ve smyčce, to je druh dotazu ve smyčce. V některých případech může taková konstrukce zlepšit výkon. Měla by být splněna následující podmínka: v cyklu by se mělo vyskytnout malé množství různých hodnot vstupních parametrů a většina kombinací byla alespoň jednou získána dříve v této relaci. Je třeba si uvědomit, že je mimořádně obtížné získat určitou sadu kombinací všech hodnot vstupních parametrů předem a pokusy o získání hodnot pro všechny druhy kombinací mohou vést ke čtení příliš velkého množství dat z databáze.

Poskytli jsme vám pouze ukázkové funkce a metody. Před jejich použitím proto vyhodnoťte podmínky, za kterých bude váš kód fungovat.