Jak uzyskać dostęp do procedury modułu ogólnego 1c. Wspólne moduły

Dzisiaj przyjrzymy się popularnym modułom, czym są, dlaczego są potrzebne i jak z nich korzystać. Funkcje używane w kilku dokumentach można umieścić we wspólnym module. Na przykład obliczenie kwoty w części tabelarycznej dokumentu.

Weźmy na przykład naszą starą konfigurację, z której korzystałem w poprzednich artykułach. Mamy w nim dwa dokumenty: Przybycie Towaru na magazyn oraz Wydanie Towaru na magazyn. W obu dokumentach znajdują się procedury obliczające kwotę w wierszu tabelarycznym.

Każdy dokument zawiera ten sam kod służący do obliczenia kwoty.

Materiały proceduralneCena przy zmianie (element)
TabularPart Wiersz = Elementy.Materiały.CurrentData;
TabularPartLine.Amount = TabularPartLine.Quantity * TabularPartLine.Price;
Koniec procedury

Dzisiaj przeniesiemy go do wspólnego modułu i wywołamy z dokumentu.

Tworzymy ogólny moduł do obliczania kwoty

A więc zaczynajmy, najpierw trzeba stworzyć wspólny moduł. Aby to zrobić, przejdź do konfiguratora, poszukaj pozycji Moduły ogólne, kliknij prawym przyciskiem myszy i dodaj nowe, wpisz nazwę WorkWithDocuments. Wpisujemy do niego następujący kod.

Pamiętaj także, aby zaznaczyć pola obok opcji Klient (aplikacja zarządzana) i Serwer w oknie właściwości.

Teraz musisz nieco zmienić kod w module formularza dokumentu. Po lewej stronie w konfiguracji szukamy dokumentu Przybycie towaru, rozwijamy okna do okna Formularze, dwukrotnie klikamy na Formularz dokumentu i w oknie formularza, które się otworzy, przechodzimy do zakładki Moduł na dole. Mamy ten kod

Procedura ta działa w przypadku zmiany ilości w części tabelarycznej dokumentu przyjęcia towaru i obliczenia kwoty.

&Na kliencie



Koniec procedury

I ta procedura zaczyna działać w momencie zmiany Ceny w części tabelarycznej dokumentu odbioru towaru i obliczenia kwoty.

&Na kliencie

TabularPart Wiersz = Elementy.Materiały.CurrentData;
TabularPartLine.Amount = TabularPartLine.Quantity * TabularPartLine.Price;
Koniec procedury

Zamień go na ten

&Na kliencie
Materiał procedury Ilość przy zmianie (element)
TabularPart Wiersz = Elementy.Materiały.CurrentData;

Koniec procedury
&Na kliencie
Materiały proceduralneCena przy zmianie (element)
TabularPart Wiersz = Elementy.Materiały.CurrentData;
WorkWithDocuments.CalculateSum(TabularPartRow);
Koniec procedury

Jak zauważyłeś, zmienia się tylko jedna linia, na pierwszy rzut oka może się wydawać, że jedna linia została zastąpiona inną. Ale nie zapominaj, że to jest przykład. W rzeczywistości ilość kodu może być znacznie większa, jeśli na przykład wykonasz obliczenia przy użyciu złożonej formuły, w takim przypadku kod zostanie zauważalnie zmniejszony.

To samo robimy dla dokumentu Wydanie towaru z magazynu, uruchamiamy i sprawdzamy funkcjonalność kodu. Więc ty i ja stworzyliśmy pierwszy wspólny moduł, mam nadzieję, że mój artykuł będzie komuś przydatny.

Moduły platformy 1C:Enterprise 8.3, 8.2

Wspólne moduły

Funkcje zadeklarowane w takim module flagą „export” można wywołać z dowolnego miejsca konfiguracji. Wywołanie jest realizowane poprzez CommonModuleName.FunctionName().

Takie moduły nie mają sekcji zmiennej.

Wykonanie wspólnych modułów zależy od ustawień w ich właściwościach:

Oznacz „Globalny”

Jeśli ta flaga jest ustawiona, kontekst takiego modułu staje się globalny. Oznacza to, że uzyskując dostęp do funkcji eksportu, nie trzeba podawać nazwy modułu. Jednak nazwy funkcji eksportu muszą być unikalne w kontekście konfiguracji globalnej.

Flaga serwera

Funkcje takiego modułu można realizować na serwerze.

Flaga „Klient (zwykła aplikacja)”.

Funkcje takiego modułu można wykonywać na kliencie w normalnym trybie aplikacji.

Flaga „Klient (aplikacja zarządzana)”.

Funkcje takiego modułu można realizować na kliencie w trybie aplikacji zarządzanej.

Flaga „Wywołanie serwera”.

Flaga dostępna jest dla modułów z ustawioną flagą "Serwer". Umożliwia klientowi wywołanie funkcji eksportu tego modułu (które zostaną wykonane na serwerze).

Flaga dołączania zewnętrznego

Funkcje eksportu takiego modułu można wywołać przy podłączeniu ze źródła zewnętrznego.

Oznacz „Uprzywilejowany”

W module z tą flagą sprawdzanie uprawnień będzie wyłączone. Nadaje się do działań związanych z produktywnością lub administracją.

Opcja ponownego użycia

Jeśli włączysz tę opcję, wartości zwracane przez funkcje eksportu zostaną zapisane w pamięci podręcznej natychmiast po pierwszym wywołaniu. Buforowanie możliwe jest na czas trwania połączenia (czas wykonania określonej procedury) lub na czas trwania sesji użytkownika.

Moduł aplikacji

Zaprojektowany do obsługi zdarzeń uruchamiania i kończenia aplikacji. Istnieją dwa typy: do aplikacji zwykłych i zarządzanych.

Nie należy go przeciążać, gdyż wpływa to na czas uruchamiania aplikacji.

Moduł sesji

Specjalny moduł służący do inicjowania parametrów sesji. Jest to konieczne, aby nie powielać kodu w różnych modułach aplikacji.

Należy go używać ostrożnie, ponieważ moduł można wykonać kilka razy, a także można go wykonać bez dalszego uruchamiania bazy danych. Wykonywane przed modułami aplikacji.

Z poważaniem (nauczyciel i programista).

Wspólne moduły odpowiadają za przechowywanie procedur i funkcji wywoływanych z innych miejsc w systemie 1C. Za dobrą praktykę uważa się umieszczanie kodu, który jest wywoływany wielokrotnie w procedurze, we wspólnym module. Ta zasada jest uniwersalna dla wszystkich konfiguracji, więc każdy programista 1C powinien móc pracować z tymi obiektami konfiguracyjnymi. Aby to zrobić, musisz zrozumieć wszystkie niuanse i móc poprawnie wykorzystać możliwości, jakie daje platforma.

Tworzenie wspólnego modułu w 1C

Po utworzeniu funkcji w jednym z modułów obiektu zaistniała potrzeba zastosowania podobnego algorytmu w innym miejscu. Najlepiej w tym przypadku przenieść kod do wspólnego modułu, ale wcześniej należy go utworzyć. W tym celu należy przejść do konfiguratora i w drzewku konfiguracyjnym odszukać zakładkę „Ogólne”. Następnie wybierz „Moduły ogólne” i użyj przycisku w postaci białego plusa na zielonym kółku.

Właściwości dodanego wspólnego modułu otworzą się po prawej stronie i musimy dowiedzieć się, co każdy z nich oznacza. Mogą mieć różne kierunki, dlatego przed ustawieniem nowego obiektu warto zdecydować, co będziemy w nim przechowywać. Jeśli już, w przyszłości możliwa będzie zmiana właściwości zgodnie z zadaniami:

  • "Światowy". Flaga ta jest ustawiana, jeśli moduł przeznaczony jest do przechowywania procedur i funkcji, które należy wywołać bez podawania nazwy modułu. Naturalnie muszą nadawać się do eksportu, a ich nazwy muszą być unikalne w kontekście całego globalnego kontekstu. Nie będą się różnić w obsłudze od standardowych funkcji platformy;
  • "Klient". Zależy od ustawień systemu i reguluje możliwość wykonywania procedur modułu po stronie klienta;
  • "Serwer". Zaznaczone są moduły ogólne, w ramach których planowane jest umieszczenie algorytmów do wykonania na serwerze;
  • „Złączenie zewnętrzne”. Procedury modułu z aktywowaną tą właściwością będą mogły być wykonywane poprzez podłączenie zewnętrznego źródła;
  • „Wywołanie serwera”. Odpowiedzialny za umożliwienie procedurom modułu wywoływania serwera podczas działania na kliencie;
  • "Uprzywilejowany". Włączenie tego ustawienia pozwoli Ci nie sprawdzać praw dostępu podczas uruchamiania kodu procedury modułu. Z tym ustawieniem możesz wywołać wspólny moduł tylko na serwerze. Ustawienia Klienta i Połączenia Zewnętrznego zostaną zresetowane;
  • "Ponowne użycie". Może przyjmować następujące wartości: „Nie używać”, „Przez czas trwania sesji”, „Przez czas trwania połączenia”. Przy wielokrotnym wywołaniu jednej procedury system może wykorzystać wyliczone wcześniej dane w ramach procedury (wywołanie) lub czas trwania całej sesji (uruchomienie 1C). Należy zachować szczególną ostrożność przy tym ustawieniu, ponieważ nieprawidłowe użycie takich modułów może spowodować błędy.

Zdarzają się sytuacje, gdy trzeba utworzyć wspólny moduł z wywołaniami procedur na serwerze i kliencie, różniącymi się algorytmem. Dyrektywy preprocesora ze sprawdzaniem służą do oddzielania kodu. W rezultacie będzie to jeden kod dla wywołania serwera, a drugi dla wywołania klienta.
Procedura AlgorithmServerClient() Eksportuj #If ThinClient Następnie // kod jest wykonywany, jeśli wywołanie procedury pochodzi od klienta ShowUserAlert("Na kliencie"); ElseIf Server Następnie // kod jest wykonywany, jeśli wywołanie procedury pochodzi z serwera VariableServer = "Wywołanie serwera"; #TheEndIfTheEndProcedura

Przykład przeniesienia kodu do wspólnego modułu 1C

Rozważmy sytuację, gdy na formularzu dokumentu mamy dwa zdarzenia wymagające jednej procedury pomnożenia ilości i ceny w części tabelarycznej. Jest to dość powszechny algorytm, który można znaleźć w wielu dokumentach zakupowych i sprzedażowych. Przenieśmy kod procedury do wspólnego modułu, który należy najpierw utworzyć, aby móc wykorzystać ten kod w innych dokumentach.

&OnClient Procedura ProduktyCenaOnChange(Element) RecalculateAmount(); Koniec procedury &Procedura na kliencie ProduktyQuantityOnChange(Element) RecalculateAmount(); Koniec procedury &Na kliencie Procedura Przelicz kwoty() Wiersz TC = Elements.Products.CurrentData; Linia PM.Amount = Linia PM.Ilość * Linia PM.Cena; Koniec procedury

Ponieważ do naszego zadania potrzebujemy jedynie połączenia od klienta i nie potrzebujemy danych z bazy danych, ustawiamy jedynie flagę „Klient”. Jeśli chcesz w przyszłości używać tego samego modułu do bardziej skomplikowanych obliczeń, zaznacz opcję „Serwer” we właściwościach. Etap przygotowawczy został zakończony i możemy przejść do pisania kodu.


Stwórzmy w module procedurę eksportu i przenieśmy tam algorytm wyliczania kwoty z procedury w module formularza. Ciąg sekcji tabeli zostanie użyty jako parametr procedury na wejściu. W module formularza dokumentu zmieniamy wywołania procedur z tego samego modułu na wywołania procedur z modułu ogólnego.


Procedura CalculateRow(TabularPartRow) ExportTabularPartRow.Sum = TabularPartRow.Quantity * TabularPartRow.Price; Koniec procedury

Fragment 1

&Na kliencie Procedura ProductsPriceWhenChanged(Element) //wywołanie procedury z modułu ogólnego CalculationsInSystem.CalculateRow(Elements.Products.CurrentData); //Oblicz ponownie kwotę(); Koniec procedury &Na kliencie Procedura ProductsQuantityWhenChanging(Element) //wywołanie procedury z modułu ogólnego CalculationsInSystem.CalculateRow(Elements.Products.CurrentData); //Oblicz ponownie kwotę(); Koniec procedury &Na kliencie Procedura Przelicz kwoty() Wiersz TC = Elements.Products.CurrentData; Linia PM.Amount = Linia PM.Ilość * Linia PM.Cena; Koniec procedury

Fragment 2

Kiedy system się uruchomi, nie zauważymy różnicy, ale taka struktura kodu jest znacznie wygodniejsza w czytaniu i utrzymaniu. Oczywiście w tym przykładzie ilość kodu nie może pokazać wszystkich korzyści. W przypadku złożonego algorytmu dla kilkudziesięciu obiektów konfiguracyjnych przyrost ilości kodu i jego struktury będzie miał także wpływ na szybkość działania systemu. Ponadto doświadczeni programiści 1C zalecają, aby nie opisywać algorytmów w modułach formularzy, ale umieszczać je w poprawnie skonfigurowanych modułach ogólnych.

Tworząc moduły ogólne, należy wziąć pod uwagę ogólnie przyjęte zasady ich tworzenia:

  • Umieść procedury i funkcje związane z podobną funkcjonalnością w oddzielnym wspólnym module;
  • Nazwa modułu powinna odzwierciedlać jego przynależność do kontekstu (Klient, Serwer) i unikać popularnych słów (procedury obsługi, procedury itp.);
  • Oddziel wewnętrzną logikę serwera aplikacji od logiki klienta dla interfejsu;
  • Zachowaj ostrożność podczas tworzenia globalnego modułu współdzielonego. Brak konieczności odwoływania się do procedury poprzez nazwę modułu może prowadzić do zamieszania, szczególnie jeśli system jest obsługiwany przez wiele zespołów programistycznych.

Poprawnie utworzone moduły pomogą Ci poruszać się po strukturze konfiguracji i znacznie szybciej wprowadzać ulepszenia. Jeśli widzisz możliwość uuniwersalizowania użytecznej funkcji i umieszczenia jej we wspólnym module, zrób to. W przyszłości Ty i Twoi współpracownicy będziecie wdzięczni za tę decyzję.

Drukuj (Ctrl+P)

Obiekty znajdujące się w gałęzi Moduły Ogólne drzewa konfiguracyjnego mają zawierać teksty funkcji i procedur, które można wywołać z dowolnego innego modułu konfiguracyjnego.
UWAGA! Moduł ogólny może zawierać jedynie definicje procedur i funkcji.
Procedury i funkcje wspólnego modułu, dla których w nagłówkach określono słowo kluczowe Export, są jednym ze składników kontekstu globalnego. Więcej informacji na temat pisania procedur w module ogólnym znajdziesz w rozdziałach „Format tekstów źródłowych modułów programu” i „Operatory” wbudowanej pomocy językowej.
Aby edytować moduł wspólny, należy na palecie właściwości obiektu typu Common Modules w oknie Konfiguracja, we właściwości Moduł kliknąć odnośnik Otwórz. Tekst modułu ogólnego zostanie wydany do edycji w edytorze tekstu systemu 1C:Enterprise w trybie edycji tekstu modułu oprogramowania.
Moduł wspólny, będący częścią konfiguracji, zapisywany jest tylko jako część konfiguracji.
Właściwość Global określa, czy wyeksportowane metody wspólnego modułu są częścią kontekstu globalnego.
Jeśli właściwość Global jest ustawiona na True, wówczas wyeksportowane metody wspólnego modułu są dostępne jako metody kontekstu globalnego.
Jeśli właściwość Global jest ustawiona na False, w kontekście globalnym tworzona jest właściwość o nazwie odpowiadającej nazwie wspólnego modułu w metadanych. Ta właściwość jest tylko do odczytu. Wartością tej właściwości jest obiekt GeneralModule. Wyeksportowane metody tego wspólnego modułu są dostępne za pośrednictwem tego obiektu. Zatem dostęp do metod nieglobalnych modułów współdzielonych wygląda następująco XXXXX.YYYYY, gdzie XXXXX to nazwa właściwości odpowiadającej kontekstowi współdzielonego modułu, a YYYYY to nazwa wyeksportowanej metody współdzielonego modułu.
Przykład:

Praca ze sprzętem do sprzedaży detalicznej. ConnectBarcode Scanner();

Różne konteksty i wspólne moduły

Korzystając z właściwości wspólnych modułów i instrukcji preprocesora, możesz zorganizować wykonywanie różnych metod wspólnych modułów w pożądanym kontekście.
Każda właściwość wspólnego modułu odpowiada za możliwość skompilowania (i wykonania) wspólnego modułu w określonym kontekście.
Dostępne są następujące właściwości, które odpowiadają za kontekst, w jakim dostępne są metody modułu ogólnego:
Klient (zwykła aplikacja)– metody wspólnego modułu będą dostępne dla grubego klienta w normalnym trybie aplikacji;
● – metody modułu ogólnego będą dostępne dla cienkiego klienta, klienta sieciowego, a także dla grubego klienta w
tryb aplikacji zarządzanej;
● Serwer – metody wspólnego modułu będą dostępne na serwerze;
Połączenie zewnętrzne– metody modułu wspólnego będą dostępne w połączeniu zewnętrznym.
Jeśli jednocześnie ustawionych zostanie kilka właściwości, oznacza to, że metody wspólnego modułu będą dostępne w kilku kontekstach.
Jeśli wspólny moduł ma ustawioną właściwość Serwer i jakąkolwiek inną właściwość, oznacza to, że wspólny moduł będzie dostępny jednocześnie na serwerze i u wybranego klienta. Należy zrozumieć, że w rzeczywistości będzie to kilka wersji skompilowanego kodu (w zależności od liczby wybranych klientów i samego serwera).
Co więcej, jeśli od strony klienta zostanie wywołana metoda znajdująca się w takim wspólnym module, wówczas zostanie użyta kliencka kopia wspólnego modułu, a jeśli z serwera, kopia serwerowa. W tym przypadku, używając dyrektyw preprocesora (więcej szczegółów znajdziesz tutaj), możesz „chronić” serwer przed kodem, którego nie można na nim wykonać.
Spójrzmy na przykład. We wspólnym module (który można uruchomić na cienkim kliencie i na serwerze) znajduje się metoda, która zachowuje się nieco inaczej po stronie cienkiego klienta i po stronie serwera. Zobaczmy, jak można to zrobić:



#Jeśli ThinClient to
// Pokaż ostrzeżenie
Pokaż alert użytkownika(„Na kliencie”);
#KoniecJeśli
Koniec procedury
Następnie po stronie serwera kod będzie wyglądał następująco:
Procedura Metoda CommonModule(). Eksport
// Tutaj trafiają różne ważne kody
Koniec procedury
Po stronie cienkiego klienta kod będzie wyglądał następująco:
Procedura CommonModule Metoda() Eksport
// Tutaj trafiają różne ważne kody
// Pokaż ostrzeżenie
ShowUserAlert("Na kliencie");
Koniec procedury

Istnieje kilka sposobów przekazania kontroli z klienta na serwer:
● wywołać metodę wspólnego modułu serwera;
● w formularzu lub module poleceń wywołać metodę, która jest poprzedzona dyrektywami kompilacji &Na serwerze, &Na serwerzebez kontekstu

Jednocześnie nie jest możliwe wywoływanie metod wspólnych modułów klienta (które nie mają ustawionej właściwości Serwer) oraz metod klienta modułu formularza lub modułu poleceń z procedur serwera. Sterowanie powróci do klienta po zakończeniu wywołania metody serwera zewnętrznego.
Wyjątkiem są metody modułu formularza i modułu poleceń, które poprzedzone są dyrektywami kompilacji &Na klienciena serwerze, &OnClientOnServerBez kontekstu
Należy również wspomnieć o następujących kwestiach:
● Jeśli wspólny moduł jest dostępny dla więcej niż jednego klienta, wówczas pisząc kod programu należy wziąć pod uwagę maksymalne ograniczenia, jakie mogą nałożyć klienci, lub zastosować instrukcje preprocesora w celu „wyizolowania” kodu specyficznego dla klienta.
● Instrukcje preprocesora mają również sens, gdy jeden wspólny moduł ma kilka kontekstów wykonania, na przykład połączenie zewnętrzne i cienki klient lub (co jest znacznie bardziej powszechne) jakiś klient i serwer. W tym przypadku instrukcje preprocesora ułożą w ramkę interaktywny kod, którego nie można użyć na serwerze, ale można go użyć na kliencie (patrz przykład powyżej).
Więcej informacji na temat instrukcji preprocesora i dyrektyw kompilacji można znaleźć w sekcji „Wykonywanie procedur i funkcji” w pomocy w języku wbudowanym.
Właściwość Call Server ma na celu kontrolowanie możliwości wywoływania wyeksportowanych metod wspólnego modułu serwera z kodu klienta.
Jeśli właściwość jest ustawiona, wyeksportowane metody wspólnego modułu serwera będą dostępne do wywołania przez klienta. Jeśli właściwość nie jest ustawiona, wówczas takie wyeksportowane metody można wywołać tylko z metod po stronie serwera (zarówno metody wspólnych modułów po stronie serwera, jak i metody po stronie serwera modułów formularzy i modułów poleceń).
Rada . Zaleca się ustawienie właściwości Server Call na False w przypadkach, gdy wspólny moduł serwera zawiera metody, których nie chcesz wywoływać od klienta (na przykład ze względów bezpieczeństwa).
Notatka. Jeśli właściwości są ustawione w tym samym czasie Klient (zwykła aplikacja), Klient (aplikacja zarządzana), Połączenie zewnętrzne, właściwość serwera połączeń zostanie automatycznie zresetowana. Jeżeli właściwość Serwer wywołań jest ustawiona, właściwości zostaną automatycznie zresetowane Klient (zwykła aplikacja), Klient (aplikacja zarządzana) I Połączenie zewnętrzne, jeśli te właściwości zostały ustawione w tym samym czasie.
Nieruchomość Uprzywilejowany ma na celu wyłączenie kontroli praw dostępu podczas wykonywania metod wspólnego modułu.
NOTATKA. Jeśli nieruchomość Uprzywilejowany zainstalowany, wówczas właściwość Serwer jest automatycznie ustawiana dla wspólnego modułu, a pozostałe właściwości są resetowane ( Klient (zwykła aplikacja), Klient (aplikacja zarządzana) oraz b połączenie zewnętrzne). Uprzywilejowany moduł współdzielony można uruchomić tylko na serwerze.

Ponowne użycie zwracanych wartości

Jeżeli udostępniony moduł nie jest globalny, dostępna staje się właściwość Reuse Return Values. Ta właściwość może przyjmować następujące wartości:
● Nie używaj - Nie ma możliwości ponownego wykorzystania zwracanych wartości dla funkcji w tym wspólnym module.
● Na połączenie i na sesję – moduł współdzielony wykorzystuje metodę określania ponownego wykorzystania danych. Istota tej metody polega na tym, że podczas wykonywania kodu system zapamiętuje parametry i wynik funkcji już po pierwszym wywołaniu funkcji. Gdy funkcja zostanie wywołana ponownie z tymi samymi parametrami, wartość zapisana w pamięci (z pierwszego wywołania) zostanie zwrócona bez wykonywania samej funkcji. Jeśli funkcja zmieni wartości parametrów w trakcie jej wykonywania, to ponowne wywołanie funkcji nie spowoduje tego.
Można wyróżnić następujące funkcje zapisywania wyników połączeń:
● jeżeli na serwerze wykonywana jest funkcja i wywoływana z kodu serwera, to wartości parametrów i wynik wywołania są zapamiętywane dla bieżącej sesji po stronie serwera;
● jeśli funkcja jest wykonywana na grubym lub cienkim kliencie, to wartości parametrów i wyniki wywołania są zapamiętywane po stronie klienta;
● jeśli funkcja jest wykonywana po stronie serwera i wywoływana z kodu klienta, to wartości parametrów wywołania są zapamiętywane zarówno po stronie klienta, jak i po stronie serwera (dla bieżącej sesji).
Zapisane wartości są usuwane:
● jeśli właściwość jest ustawiona na Na czas trwania połączenia:
● po stronie serwera – przy oddawaniu kontroli z serwera;
● po stronie klienta – kiedy kończy się wbudowana procedura lub funkcja językowa najwyższego poziomu (wywoływana przez system z interfejsu, a nie z innej wbudowanej procedury lub funkcji językowej);
● jeśli właściwość modułu współdzielonego jest ustawiona na Na czas trwania sesji:
● po stronie serwera – na koniec sesji;
● po stronie klienta – przy zamykaniu aplikacji klienckiej.
Zapisane wartości zostaną usunięte:
● na serwerze, w grubym kliencie, w połączeniu zewnętrznym, w cienkim kliencie i w kliencie sieciowym przy normalnej szybkości połączenia - 20 minut po obliczeniu zapisanej wartości lub 6 minut po ostatnim użyciu;
● w kliencie cienkim i kliencie internetowym o niskiej prędkości połączenia – 20 minut po przeliczeniu zapisanej wartości;
● jeśli w procesie pracy serwera brakuje pamięci RAM;
● podczas ponownego uruchamiania przepływu pracy;
● gdy klient przełącza się na inny przepływ pracy.
Po usunięciu wartości wywołanie wyeksportowanej funkcji odbywa się jak przy pierwszym wywołaniu.
Ta właściwość wspólnych modułów nie wpływa na wykonywanie procedur — procedury są zawsze wykonywane.

Jeśli wspólny moduł jest ustawiony na ponowne wykorzystanie zwracanych wartości, wówczas na typy parametrów eksportowanych przez funkcję nakłada się szereg ograniczeń. Typy parametrów mogą być tylko:
● Typy pierwotne ( Niezdefiniowany, NULL, wartość logiczna, liczba, ciąg znaków, data).
● Wszelkie odniesienia do obiektów bazy danych.
● Struktury o wartościach właściwości powyższych typów. W tym przypadku tożsamość parametrów jest kontrolowana „przez zawartość” struktur.
Jeśli wyeksportowana funkcja zwróci obiekt, w rzeczywistości zwraca odwołanie do obiektu przechowywanego w pamięci podręcznej. Jeżeli po otrzymaniu tej referencji stan obiektu ulegnie zmianie, to kolejne wywołanie tej samej funkcji zwróci referencję do już zmodyfikowanego obiektu bez faktycznego wykonania funkcji. To zachowanie będzie kontynuowane do momentu usunięcia zapisanej wartości (z dowolnego powodu). Innymi słowy zmiana stanu obiektu wynikająca z wywołania funkcji ze wspólnego modułu z ponownym wykorzystaniem zwracanych wartości nie jest podstawą do faktycznego wywołania funkcji. Należy także pamiętać, że pamięć podręczna zwracanych obiektów jest obojętna
stan trybu uprzywilejowanego w momencie wywołania funkcji, ponowne wykorzystanie zwracanych wartości. Ta funkcja może powodować następujące zachowanie:
● Rzeczywiste wykonanie wywołania funkcji z ponownym wykorzystaniem zwracanych wartości (pierwsze wywołanie) zostało wykonane przy włączonym trybie uprzywilejowanym.
● Podczas wykonywania funkcji odebrano obiekt, którego nie można odebrać przy wyłączonym trybie uprzywilejowanym.
● Kolejne wywołania funkcji zostały wykonane bez ustawiania trybu uprzywilejowanego.
● Jednakże, do czasu wyczyszczenia pamięci podręcznej obiektów zwracanych lub ponownego wykonania wywołania, funkcja zwróci obiekt formalnie niedostępny.
● Odwrotne zachowanie ma również miejsce, gdy pierwsze wywołanie jest wykonywane bez ustawienia trybu uprzywilejowanego iw trybie uprzywilejowanym nie jest zwracany obiekt, który mógłby zostać odebrany w trybie uprzywilejowanym.

Jeśli wspólny moduł ma właściwość Ponowne użycie zwracanych wartości jest ustawione na Na czas trwania sesji wówczas wartości tego typu nie mogą być użyte w wartościach zwracanych przez funkcje takiego modułu Menedżer harmonogramu.
Jeśli funkcja modułu współdzielonego z ustawionym możliwością ponownego użycia jest wywoływana z poziomu tego samego modułu współdzielonego (na przykład o nazwie GeneralModule), to należy pamiętać o następującym zastrzeżeniu: jeśli funkcja jest wywoływana pod nazwą MyFunction() , wówczas funkcja będzie wykonywana za każdym razem, gdy zostanie wywołana. Aby zapisane wartości mogły zostać wykorzystane, funkcja musi zostać wywołana jej pełną nazwą:
GeneralModule.MojaFunkcja().
Metoda kontekstu globalnego usuwa wszystkie ponownie użyte wartości, zarówno po stronie serwera, jak i po stronie klienta, niezależnie od tego, gdzie metoda zostanie wywołana. Po wykonaniu metody AktualizujReusedValues() pierwsze wywołanie funkcji zostanie wykonane w całości.

Ogólne moduły 1C- obiekt metadanych konfiguracyjnych dla 1C 8.3 i 8.2, który przechowuje kod programu często wywoływany w konfiguracji. Funkcję/procedurę można wywołać z dowolnego miejsca konfiguracji (jeśli jest to konfiguracja eksportowa).

Jak korzystać z udostępnionego modułu

Dobrą praktyką jest umieszczenie procedury lub funkcji we wspólnym module, jeśli jest ona wywoływana w więcej niż jednym miejscu. Po pierwsze, jeśli procedura jest korygowana, należy ją poprawić tylko w jednym miejscu. Po drugie, zapewnia to większy porządek w kodzie.

Typowym przykładem modułu ogólnego jest obsługa księgowania do jakiegoś rejestru, uzyskanie kwoty różnicy w dniach roboczych, przeliczenie kursów walut, przeliczenie ilości/ceny/kwota w części tabelarycznej i inne funkcje.

Właściwości wspólnych modułów

Jedną z głównych cech modułów współdzielonych z innych modułów jest to, że nie można deklarować zmiennych współdzielonych.

Uzyskaj 267 lekcji wideo na 1C za darmo:

Przyjrzyjmy się bliżej palecie właściwości modułu ogólnego:

  • Światowy- jeżeli flaga jest ustawiona, funkcje i procedury z tego modułu stają się dostępne w kontekście globalnym. Te. można je wywołać w dowolnym miejscu konfiguracji, uzyskując dostęp bez nazwy wspólnego modułu. Dodano jednak warunek – nazwy procedur i funkcji w tym wspólnym module muszą być unikalne w kontekście globalnym.
  • serwer— procedury i funkcje tego wspólnego modułu mogą być wykonywane na serwerze.
  • Połączenie zewnętrzne— kody programów tego wspólnego modułu można wykonać po podłączeniu zewnętrznego źródła (na przykład COM).
  • Klient (aplikacja zarządzana)— procedury i funkcje tego wspólnego modułu mogą być używane w grubym kliencie w trybie aplikacji zarządzanej.
  • Klient (zwykła aplikacja)— kody programów tego wspólnego modułu mogą być używane w grubym kliencie w normalnym trybie aplikacji.
  • Połączenie z serwerem— flaga umożliwiająca klientowi korzystanie z procedur i funkcji z tego wspólnego modułu.
  • - jeśli ustawione na True, sprawdzanie praw dostępu będzie wyłączone w tym wspólnym module.
  • Ponowne użycie— określa ustawienia zwracanych wartości, jeżeli opcja jest włączona, to po pierwszym wykonaniu system zapamięta wartość tych parametrów wejściowych i zwróci gotową wartość. Może przyjmować następujące wartości: nieużywany- zamknięcie, na czas trwania połączenia- na czas trwania określonej procedury, na czas trwania sesji— do czasu zamknięcia przez użytkownika sesji (programu).

Jeśli zaczynasz uczyć się programowania 1C, polecamy nasz bezpłatny kurs (nie zapomnij

W górę