DZWON

Są tacy, którzy czytają tę wiadomość przed wami.
Zapisz się, aby otrzymywać najnowsze artykuły.
E-mail
Imię
Nazwisko
Jak chcesz przeczytać The Bell
Bez spamu

W poprzednim artykule dodaliśmy ogólne właściwości do wszystkich katalogów naszej konfiguracji, aby wiedzieć, kto utworzył ten obiekt katalogu. Teraz utworzymy subskrypcję wydarzenia i wskażemy, jakie informacje wypełnić te rekwizyty.

W tej randze każdorazowo przed nagraniem obiektu przepiszemy autora obiektu, pożądane jest oczywiście wskazanie kiedy to się stało, do autora dodamy również datę nagrania.

Procedura Automatyczne zapisywanie autora przed nagraniem (źródło, odrzucenie) Eksport // Włóż próbkę na miejsce. Źródło. AuthorObktu \u003d nazwa użytkownika () + " ; "+ string (current date ()); EndProcedure

Doskonale. Zastanówmy się teraz, gdzie jeszcze możesz użyć ogólnych szczegółów?

Po pierwsze, korzystając z informacji ogólnych, możesz dodać atrybut „Komentarz”, atrybut „autor” i inne szczegóły potrzebne do wszystkich dokumentów w konfiguracji.

Ogólne szczegóły mają inny interesujący parametr „ Udostępnianie danych ".Mechanizm ten pozwala zdefiniować dane, które chcemy pokazać użytkownikowi. Przykładowo, aby żaden z menadżerów nie znał wszystkich klientów firmy, pokażemy mu tylko tych klientów, których dodał do bazy, z którą pracuje. Spróbujmy dodać tę funkcjonalność do bazy danych. Najpierw będziemy musieli wskazać, że będziemy używać separacji danych, system automatycznie zaproponuje utworzenie domyślnych parametrów sesji.

Następnie wystarczy ustawić parametry sesji w module sesji:

Podajmy przykład, jak wygląda katalog kontrahentów bez korzystania z „Udostępniania danych” i razem z nim:

Bez separacji

Z podziałem

Zwróć uwagę, że atrybutu „Odpowiedzialny” nie znaleziono u pierwszego kontrahenta, ponieważ autorem tego atrybutu był ktoś inny.

Klasycznym przykładem rozdzielenia księgowego jest organizacja, pokazująca użytkownikom tylko te dokumenty, które odnoszą się do odpowiedniej organizacji.

Skorzystaliśmy z mechanizmu parametrów sesji, przyjrzyjmy się pokrótce, co to jest. W rzeczywistości parametry sesji to zmienne globalne, które są ustawiane podczas uruchamiania systemu. Z reguły dzieje się to w „module sesji”, należy pamiętać, że parametry sesji są tworzone wyłącznie programowo.

Po ustawieniu "Parametry sesji" możemy odwołać się do tego parametru z dowolnego modułu systemu za pomocą prostego pliku

W związku z tym, aby zmienić parametry sesji, użytkownik musi wyjść i ponownie wejść do programu.

Kiedyś omawialiśmy mechanizmy ograniczania dostępu użytkowników w 1C, aw szczególności.

Pozwala użytkownikowi pracować nie ze wszystkimi dokumentami, a tylko z tymi, w których wskazana jest konkretna organizacja lub magazyn. Selekcje są dokonywane dynamicznie, więc nakładają określone obciążenie na bazę danych.

Właściwość wspólnej zmiennej separatora - Separacja użytkowników 1C - pozwala ustawić dostępność listy użytkowników w zależności od zastosowania separatorów.

Jeśli separator jest włączony dla użytkownika, będzie widoczny na liście użytkowników w trybie 1C Enterprise - w przeciwnym razie nie będzie widoczny.

W ten sposób możesz organizować różne listy użytkowników dla różnych części bazy.

Właściwość wspólnej zmiennej separatora - Separation of 1C authentication - umożliwia tworzenie użytkowników o tych samych nazwach użytkowników dla różnych części bazy danych.

Separacja warunkowa 1C

Separacja warunkowa 1C umożliwia włączanie i wyłączanie separatora na podstawie danych z bazy danych. W ten sposób można tworzyć łańcuchy wzajemnie zależnych separatorów dynamicznie działających w takim czy innym przypadku.

Aby włączyć separację warunkową 1C - należy określić we właściwości wspólnej zmiennej separatora - separacja warunkowa 1C - która będzie odpowiedzialna za określenie, czy separacja 1C jest włączona.

Możliwe jest użycie stałej o typie boolowskim lub atrybutu referencyjnego o typie boolowskim.

Ważne - dla tej stałej / tej referencji należy wyłączyć użycie (wybierz Nie używaj) jako części separatorów, dopiero wtedy będzie można ją wybrać.

1. Wstęp.

Istniała potrzeba zorganizowania księgowości dwóch organizacji w jednym IS. Sytuacja nie jest wyjątkowa, ale tak się złożyło, że nasz mocno nietypowy 250-gigabajtowy UPP działał raczej wolno, więc zamiast RLS zdecydowaliśmy się spróbować współdzielenia danych. Na przykład to, co jest opisane, lub. Krótko mówiąc, jeśli RLS warunkuje zapytania SQL, to separatorem danych jest dodatkowa kolumna w tabelach na poziomie DBMS, dzięki czemu mechanizm partycjonowania powinien działać szybciej niż RLS.

Tak więc do bazy, w której prowadzono rachunkowość dla LLC nr 1, konieczne jest przesłanie informacji z oddzielnej bazy LLC nr 2 i zorganizowanie wspólnej pracy. Tak jak na zdjęciu:

Zwykli śmiertelnicy współpracują tylko ze swoją spółką LLC, a główny księgowy czasami przegląda dane dotyczące dwóch osób prawnych. W trybie dostępu do obu LLC można tylko czytać dane, więc główny księgowy powinien mieć możliwość interaktywnego przełączania się między trybami „czytaj wszystko” / „pisz tylko jedną organizację” i wybrać LLC (czyli ustawić wartość wspólnej zmiennej) do przeprowadzenia np. obliczenie kosztu.

2. Wdrożenie

Platforma 8.2.19.90, brak trybu zgodności. DBMS - MSSQL Server 2008 R2 Standart.

Stworzyliśmy wspólny atrybut OrganizationSplitter typu „liczba”, zgodziliśmy się z propozycją tworzenia parametrów sesji, wypełniliśmy skład atrybutu (w tym kilka podręczników, wszystkie dokumenty, rejestry akumulacyjne, księgowe i obliczeniowe). Udostępnianie danych - „Niezależne i udostępnione”. Wartość parametru sesji jest ustawiana na podstawie domyślnych ustawień użytkownika w procedurze SessionParametersSetting w module sesji:

Organizacja \u003d Zarządzanie użytkownikami.GetDefault Wartość (glCurrentUser, "MainOrganization");
SessionParameters.OrganizationSeparatorValue \u003d Organization.SeparatorValue;

W interfejsie głównego księgowego stworzyli formularz z możliwością przełączania się między organizacjami oraz włączania / wyłączania trybu separacji:

Po wyłączeniu separacji, gdy SessionParameters.OrganizationSplitterUsage \u003d False, platforma odmawia zapisu dokumentów, co kończy się niepowodzeniem z błędami typu „błąd SDBL: oczekiwano wyrażenia (pos \u003d 12)”, więc nie można pozwolić użytkownikowi pisać dokumentów w ten sposób. Aby zapewnić niezawodność, utworzyliśmy subskrypcje zdarzenia „Przed nagraniem” dla obiektów, które są częścią atrybutu ogólnego:

Jeśli SessionParameters.OrganizationSeparatorUsage \u003d False Then
# Jeśli klient to
Ostrzeżenie („Nie można pisać, ponieważ udostępnianie danych jest wyłączone!”);
# EndIf
Odmowa \u003d Prawda;
EndIf;

Nasz plan działania był następujący: przygotowujemy odbiornik konfiguracji IB # 1, ustawiamy wartości zmiennej wspólnej \u003d 1, ładujemy dane z IB # 2, po załadowaniu dla wszystkich obiektów z pustą (równą 0) wartością separatora ustawiamy OrganizationSplitter \u003d 2.

Konfiguracja została przygotowana, pojawiło się pytanie, jak ustawić wartość zapotrzebowania ogólnego na dokumenty i ich ruchy w okresach zamkniętych oraz szybko i bez ryzyka, że \u200b\u200bliczby w bilansie będą latać? Nie da się napisać separatora oddzielnie od obiektu poprzez model obiektowy 1C, więc musiałem zerwać umowę licencyjną, aby wyjść i napisać zapytanie do MS SQL. Ponieważ atrybut ogólny zawiera wiele obiektów, aw kościach policzkowych tych obiektów jest jeszcze więcej tabel, napisaliśmy przetwarzanie, które generuje zapytanie SQL (dla każdego obiektu metadanych zawartego w separatorze napisaliśmy „aktualizacja” + nazwa_bazy_danych + ”.dbo._” + TableName + "set _" + FieldGeneralProps + "\u003d 1";)

Wartość została ustawiona, część danych została przeniesiona z IB nr 2 i rozpoczęto testy.

Wynik był rozczarowujący. Po pierwsze, są problemy z rejestrem księgowym. Po włączeniu podziału analityk nie jest widoczny:

Wynika to z faktu, że rejestr rozliczeniowy na poziomie DBMS jest przechowywany jako kilka tabel, a nie wszystkie tabele zawierają wartość wspólnej zmiennej (do przeglądania struktury zastosowano przetwarzanie).


Cóż, ustawiamy wartość separatora za pomocą MS SQL, widzimy analizę. Teraz raporty nie działają. Okazuje się, że są problemy z zapytaniami do wirtualnych tabel rejestru księgowego „Obroty” i „ObrotyDtKt”:

(Fld27033 to tylko ogólna zmienna w tabeli rejestru księgowego)

Separator jest ustawiony we wszystkich tabelach, widać to na poziomie DBMS, co może być błędem, nie jest jasne. Rozwijamy typowy pusty SCP, dokonujemy opisanych powyżej zmian w konfiguracji, wprowadzamy kilka dokumentów (w tej wersji platforma sama umieszcza wartość separatora we wszystkich tabelach rejestru księgowego), ale błędy są powielane. Źle, ale wykluczamy rejestry księgowe z ogólnych rekwizytów, kontynuujemy testy.

Ponadto okazuje się, że przestał działać mechanizm wywłaszczeniowy dla rejestrów obliczeniowych. Nie wyodrębnialiśmy planów typów obliczeń, problemu staramy się szukać w tabelach rejestru obliczeniowego oraz w przeliczeniach. Sprawdzamy, odkładamy wartość głównych rekwizytów, robimy T&I - bezskutecznie.

Po drodze diagnozujemy problem przy zapisywaniu informacji z formularza listy do niezależnych rejestrów. W takim przypadku dane są rejestrowane, można je zobaczyć po ponownym uruchomieniu. Problem jest również odtwarzany w bazie testowej:


Rejestry informacyjne nie mogły być „naprawione” poprzez manipulację SQL (wartość separatora została ustawiona we wszystkich tabelach), więc zostały one po prostu wyłączone z atrybutu ogólnego. Po kilku dniach eksperymentów próby przywrócenia przemieszczenia do pracy kończą się niepowodzeniem.

W tym momencie decydujemy się wyłączyć udostępnianie danych i używać RLS. Podczas ustawiania partycji na „nie używaj” napotykamy błąd „Dostawca Microsoft OLE DB dla serwera SQL: CREATE UNIQUE INDEX został zakończony, ponieważ znaleziono zduplikowany klucz dla indeksu ...”. Oznacza to, że powrót do stanu sprzed separacji nie jest łatwy. Problem z indeksami tabel przeliczeń, ustawieniami przechowywania sum i innymi. Faktem jest, że w tabelach przechowywane są identyczne wiersze, różniące się tylko wartością wspólnego atrybutu. Podczas usuwania wspólnego atrybutu pojawiają się nieunikalne wpisy. Będziesz musiał usunąć niepotrzebne rekordy bezpośrednio w MS SQL, coś takiego (dla tabeli przeliczeniowej):

Użyj bazy;
ALTER TABLE _CRgRecalc1399
DODAJ ID TOŻSAMOŚĆ INTELEKTU (1,1);
UDAĆ SIĘ
USUŃ Z _CRgRecalc1399
GDZIE id< (SELECT MAX(id)
Z _CRgRecalc1399 AS T1
WHERE _CRgRecalc1399._RecorderTRef \u003d T1._RecorderTRef i
_CRgRecalc1399. [_ RecorderRRef] \u003d T1. [_ RecorderRRef] i
_CRgRecalc1399. [_ CalcKindRRef] \u003d T1. [_ CalcKindRRef] i
_CRgRecalc1399. [_ Fld1400RRef] \u003d T1. [_ Fld1400RRef] i
_CRgRecalc1399. [_ Fld1401RRef] \u003d T1. [_ Fld1401RRef] i
_CRgRecalc1399. [_ Fld1402RRef] \u003d T1. [_ Fld1402RRef]
);
UDAĆ SIĘ
ALTER TABLE _CRgRecalc1399
DROP COLUMN id;

Dopiero po wyczyszczeniu kilkudziesięciu tabel można wyłączyć separację danych. Po wyłączeniu separacji nie ma problemu.

3. Wnioski.

Pojawiła się iskierka nadziei, że problemy 8.3 zostały rozwiązane. Nie byliśmy leniwi, sprawdzono na 8.3.4.482 (z wyłączonym trybem zgodności). Przyjrzeliśmy się prawie typowemu UPP-shke, ze zmianami w konfiguracji tylko dla ogólnych wymagań. Na tej bazie testowej podział został włączony przed wprowadzeniem informacji, tj. platforma musiała poprawnie zapisać wartość separatora do wszystkich tabel, samodzielnie nie zapisywała niczego bezpośrednio do MS SQL.

Wynik:

    Problem z zapytaniami do wirtualnych tabel „Obroty” i „ObrotyDtKt” został odtworzony.

    Problem zapobiegawczy jest powtarzalny.

    Problem z zapisem do niezależnych rejestrów informacji jest powtarzalny.

    Problem z wyłączeniem separacji - nie można się jej pozbyć jednym kliknięciem przycisku!

Tym samym nie udało nam się zastąpić RLS nowym mechanizmem. Mechanizm ten został pomyślany najprawdopodobniej dla usług w chmurze iw przypadku korzystania z udostępnionych danych „samodzielnie” być może separacja zadziała, ale potrzebujemy wspólnych danych referencyjnych. Pozostaje poczekać, aż 1C naprawi błędy, a nawet lepiej zaimplementuje typowy mechanizm podziału na organizacje w typowych konfiguracjach.

Ogólne rekwizyty w 1C 8.3 to obiekt metadanych platformy, który umożliwia użycie jednego atrybutu dla wielu obiektów konfiguracyjnych (katalogów, dokumentów, planów kont itp.). Obiekt powstał głównie w celu ułatwienia pracy dewelopera oraz separacji danych.

Ogólne szczegóły zostały pierwotnie zaimplementowane w wersji 1C 7.7, ale programiści nie umieścili go od razu na platformie w wersji 8. Mechanizm ogólnych szczegółów został wprowadzony przez programistów 1C dopiero w wersji 8.2.14.

Bardzo wygodnie jest dodać ogólne wymagania, aby nie zmieniać standardowych obiektów w konfiguracji, często używam ich razem z.

Po dodaniu ogólnego atrybutu można go używać w zapytaniach i wyświetlać w postaci obiektów - na zewnątrz niczym nie różni się od zwykłych rekwizytów.

Jedynym ograniczeniem ogólnych szczegółów jest to, że nie można ich używać w.

Rozważmy podstawowe ustawienia i właściwości atrybutów ogólnych, które różnią się od innych obiektów konfiguracyjnych:

Kompozycja - lista obiektów, do których będzie używany atrybut ogólny, ustawienie przypomina ustawienie planu wymiany

Pobierz bezpłatne samouczki wideo 267 1C:

Automatyczne użycie - ustawienie określa, czy wspólny atrybut będzie używany dla tych obiektów, dla których określono tryb użytkowania „Automatyczny”.

Udostępnianie danych - rozważymy to ustawienie osobno.

Separacja danych w 1C za pomocą wspólnych rekwizytów

Udostępnianie danych - mechanizm podobny do mechanizmu. Jednak działanie tego mechanizmu jest bardziej wydajne i łatwiejsze do skonfigurowania.

Mechanizm pozwala na dostosowanie wyświetlania tylko elementów, które użytkownik widzi. Na przykład możesz rozróżnić wszystkie obiekty (dokumenty, katalogi itp.), W których dana organizacja ma siedzibę.

Konfigurowanie separacji danych przy użyciu ogólnych szczegółów 1C

Aby ustawić atrybut ogólny, musisz określić separację danych - Podzielić... Natychmiast po kliknięciu system zaproponuje utworzenie domyślnych parametrów rozliczeniowych:

W takim przypadku konieczne będzie określenie parametrów sesji na starcie systemu, jak to zrobić, na przykładzie opisanym w artykule.

To kończy konfigurację - użytkownik będzie miał dostęp tylko do informacji określonych w wybranych parametrach sesji.

Przykład użycia typowych rekwizytów

Przeanalizujmy ustawienie ogólnych rekwizytów w 1C 8.3 na przykładzie konfiguracji ramy i rekwizytów Organizacja:

W systemie są 3 dokumenty, w których konieczne jest wskazanie zmiennej Organizacja: jest to faktura paragonowa, faktura wydatkowa, naliczenie wynagrodzenia.

Konfiguracja jest prosta:

  1. Utwórz nowy atrybut ogólny, określ typ - DirectoryLink.Organization.
  2. W składzie, który umieszczamy dla naszych dokumentów - Posługiwać się.

To wszystko, konfiguracja jest zakończona!

Zobaczmy wynik:

System wyświetla atrybut ogólny „jako swój własny”: w żądaniach, w atrybutach formularza i w innych miejscach. To jest magia! 🙂

Ogólne rekwizyty 1C 8.3 nie zostały dodane

DZWON

Są tacy, którzy czytają tę wiadomość przed wami.
Zapisz się, aby otrzymywać najnowsze artykuły.
E-mail
Imię
Nazwisko
Jak chcesz przeczytać The Bell
Bez spamu