DZWON

Są tacy, którzy czytają tę wiadomość przed tobą.
Zapisz się, aby otrzymywać najnowsze artykuły.
E-mail
Nazwa
Nazwisko
Jak chcesz czytać dzwonek?
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ę na wydarzenie i wskażemy, jakimi informacjami wypełnić te rekwizyty.

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

Procedura Automatycznie zapisz autora przed nagraniem (źródło, odrzuć) Eksport // Wstaw próbkę na miejsce.Źródło. AutorObktu = Nazwa Użytkownika () + " ; "+ ciąg (bieżąca data ()); EndProcedure

Doskonale. Zastanówmy się teraz, gdzie jeszcze możesz wykorzystać ogólne informacje?

Po pierwsze, używając wspólnych atrybutów, możesz dodać atrybut „Komentarz”, atrybut „autor”, a także inne potrzebne szczegóły do ​​wszystkich dokumentów w konfiguracji.

Ogólne szczegóły mają jeszcze jeden interesujący parametr” Separacja danych”. Mechanizm ten pozwala nam zdefiniować dane, które chcemy pokazać użytkownikowi. Na przykład, aby żaden z menedżerów nie znał wszystkich klientów firmy, pokażemy mu tylko tych klientów, których dodał do bazy danych, z którą współpracuje. Spróbujmy dodać tę funkcjonalność do bazy danych. Na początek będziemy musieli wskazać, że użyjemy 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 użycia „Udostępniania danych” i z nim:

Brak separacji

Z podziałem

Należy pamiętać, że atrybut „Odpowiedzialny” nie został znaleziony 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.

Wykorzystaliśmy mechanizm parametrów sesji, pokrótce zrozummy, co to jest. W rzeczywistości parametry sesji są zmiennymi globalnymi, 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 „Opcji sesji” możemy się odwołać ten parametr z dowolnego modułu systemu proste

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

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

Pozwala użytkownikowi na pracę nie ze wszystkimi dokumentami, a tylko z tymi, w których wskazana jest konkretna organizacja lub magazyn. Selekcje dokonywane są dynamicznie, przez co w pewnym stopniu obciążają pracę bazy 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 użycia 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 danych.

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

Warunkowa separacja 1C

Warunkowa separacja 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 / tego odniesienia musisz wyłączyć użycie (wybierz Nie używaj) jako część separatorów, dopiero wtedy będzie można ją wybrać.

1. Wstęp.

Zaistniała potrzeba zorganizowania księgowości dla dwóch organizacji w jednym IS. Sytuacja nie jest wyjątkowa, ale tak się złożyło, że nasz bardzo nietypowy 250-gigabajtowy softstarter działał dość wolno, więc zamiast RLS zdecydowaliśmy się na udostępnianie danych. Co to jest opisane, na przykład lub. Krótko mówiąc, jeśli RLS uzupełnia z warunkami Zapytania SQL, wtedy separatorem danych jest dodatkowa kolumna w tabelach na poziomie SZBD, dzięki czemu mechanizm separacji powinien działać szybciej niż RLS.

Tak więc do bazy, w której prowadzona była rachunkowość dla LLC nr 1, konieczne jest przeniesienie informacji z oddzielnej bazy LLC nr 2 i zorganizowanie wspólna praca... Tak jak na zdjęciu:

Zwykli śmiertelnicy pracują tylko ze swoją LLC, a główny księgowy czasami przegląda dane dotyczące dwóch podmiotów prawnych. W trybie dostępu do obu LLC można tylko odczytywać dane, dlatego główny księgowy powinien móc interaktywnie przełączać się między trybami „odczyt wszystkiego” / „zapis tylko jednej organizacji” i wybrać LLC (czyli ustawić wartość wspólną zmienną) do przeprowadzania np. kalkulacji kosztów.

2. Wdrożenie

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

Stworzyliśmy wspólny atrybut OrganizationSplitter typu „liczba”, zgodził się z propozycją stworzenia parametrów sesji, uzupełniony atrybutem (zawarto kilka księgi referencyjnej, wszystkie dokumenty, rejestry akumulacyjne, księgowe i kalkulacyjne). Udostępnianie danych - „Niezależne i współdzielone”. Wartość parametru sesji jest ustawiana od ustawienia standardowe użytkownika w procedurze SetSessionParameters w module sesji:

Organizacja = UserManage.GetDefault Wartość (glCurrentUser, "MainOrganization");
SessionParameters.OrganizationSeparatorValue = Organizacja.SeparatorValue;

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

Z wyłączoną separacją, gdy SessionParameters.OrganizationSplitterUsage = False, platforma odmawia pisania dokumentów, popadając w błędy typu „Błąd SDBL: oczekiwane wyrażenie (pos = 12)”, więc nie możesz pozwolić użytkownikowi na pisanie dokumentów w ten sposób. Dla niezawodności utworzyliśmy subskrypcje zdarzenia „Przed nagraniem” dla obiektów zawartych w atrybucie general:

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

Nasz plan działania był następujący: przygotowujemy konfigurację-odbiornik IB nr 1, ustawiamy wartości zmiennej wspólnej = 1, ładujemy dane z IB nr 2, po załadowaniu dla wszystkich obiektów pustym (równym 0 ) wartość separatora, ustaw OrganizationSplitter = 2.

Konfiguracja została przygotowana, pojawiło się pytanie, jak ustawić wartość rekwizytu ogólnego dla dokumentów i ich ruchów w okresach zamkniętych, szybko i bez ryzyka, że ​​liczby w bilansie będą latać? Nie da się napisać separatora oddzielnie od obiektu przez model obiektowy 1C, więc musiałem się zepsuć umowa licencyjna wyjdź i napisz zapytanie do MS SQL. Ponieważ w atrybucie ogólnym jest wiele obiektów, a w kościach policzkowych jest jeszcze więcej tabel dla tych obiektów, napisaliśmy przetwarzanie, które generuje zapytanie dla SQL (dla każdego obiektu metadanych zawartego w separatorze napisali „aktualizacja” + Nazwa_DB + ".dbo._" + TableName + "set _" + FieldGeneralProps + "= 1";)

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

Wynik był rozczarowujący. Po pierwsze pojawiają się problemy z rejestrem księgowym. Gdy podział jest włączony, analityk nie jest widoczny:

Wynika to z faktu, że rejestr księgowy na poziomie SZBD przechowywany jest jako kilka tabel, a nie wszystkie tabele zawierają wartość wspólnej zmiennej (do podglądu struktury użyto przetwarzania).


Cóż, ustawiamy wartość separatora przez MS SQL, widzimy analitykę. Teraz raporty nie działają. Okazuje się, że występują problemy z zapytaniami do wirtualnych tabel rejestru księgowego „Obrót” i „ObrótDtKt”:

(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. Rozbudowujemy 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 się powtarzają. Źle, ale wyłączamy rejestry księgowe z rekwizytów ogólnych, kontynuujemy testowanie.

Ponadto okazuje się, że przestał działać mechanizm wywłaszczający dla rejestrów obliczeniowych. Nie rozdzielaliśmy planów rodzajów obliczeń, staramy się szukać problemu w tabelach rejestru obliczeniowego oraz w przeliczeniach. Sprawdzamy, odkładamy wartość głównego atrybutu, 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:


Rejestrów informacyjnych nie można było "naprawiać" manipulując SQL (wartość separatora była ustawiona we wszystkich tabelach), więc po prostu zostały wyłączone z atrybutu general. Po kilku dniach eksperymentów próby przywrócenia wysiedlenia do pracy kończą się niepowodzeniem.

W tym momencie postanawiamy wyłączyć udostępnianie danych i korzystać z RLS. Podczas ustawiania partycji na "nie używaj" napotykamy błędy "Dostawca Microsoft OLE DB dla SQL Server: 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. Po usunięciu atrybutu współdzielonego pojawiają się nieunikalne wpisy. Będziesz musiał usunąć niepotrzebne rekordy bezpośrednio w MS SQL, coś takiego (dla tabeli przeliczeń):

Użyj bazy;
ALTER TABELA _CRgRecalc1399
DODAJ identyfikator INT IDENTITY (1,1);
WYBRAĆ SIĘ
USUŃ Z _CRgRecalc1399
GDZIE id< (SELECT MAX(id)
OD _CRgRecalc1399 JAKO T1
WHERE _CRgRecalc1399._RecorderTRef = T1._RecorderTRef i
_CRgRecalc1399. [_ RecorderRRef] = T1. [_ RecorderRRef] i
_CRgRecalc1399. [_ CalcKindRRef] = T1. [_ CalcKindRRef] i
_CRgRecalc1399.[_Fld1400RRef] = T1.[_Fld1400RRef] i
_CRgRecalc1399.[_Fld1401RRef] = T1.[_Fld1401RRef] i
_CRgRecalc1399. [_ Fld1402RRef] = T1. [_ Fld1402RRef]
);
WYBRAĆ SIĘ
ALTER TABELA _CRgRecalc1399
UPUŚĆ ID KOLUMNY;

I 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 8.3 problemy zostały rozwiązane. Nie były leniwe, sprawdzone na 8.3.4.482 (z wyłączonym trybem zgodności). Przyjrzeliśmy się niemal typowemu UPP-shke, ze zmianami w konfiguracji tylko dla ogólnego wymogu. Na tej bazie testowej podział został włączony przed wprowadzeniem informacji, tj. platforma musiała poprawnie wpisać wartość separatora do wszystkich tabel, samodzielnie nie zapisywała niczego bezpośrednio do MS SQL.

Wynik:

    Problem z zapytaniami do tabel wirtualnych „Obrót” i „ObrótDtKt” jest powtarzalny.

    Problem wyprzedzania jest powtarzalny.

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

    Problem z wyłączeniem separacji – nie można się jej pozbyć jednym naciśnięciem przycisku!

Tym samym nie udało się nam zastąpić RLS nowym mechanizmem. Ten mechanizm został wymyślony, podobno dla usługi w chmurze, a w przypadku korzystania ze współdzielonych danych „niezależnie” może podział zadziała, ale potrzebujemy wspólnych danych referencyjnych. Pozostaje poczekać, aż 1C naprawi błędy, a jeszcze lepiej zaimplementuje typowy mechanizm dzielenia przez organizacje w typowych konfiguracjach.

Rekwizyty ogólne w 1C 8.3 to obiekt metadanych platformy, który pozwala na użycie jednego atrybutu dla wielu obiektów konfiguracyjnych (katalogi, dokumenty, plany kont itp.). Obiekt powstał głównie z myślą o ułatwieniu prac rozwojowych i separacji danych.

Ogólne szczegóły zostały pierwotnie zaimplementowane w wersji 1C 7.7, ale programiści nie od razu włączyli je do platformy wersji 8. Mechanizm ogólnych szczegółów został wprowadzony przez programistów 1C dopiero w wersji 8.2.14.

Bardzo wygodnie jest dodawać ogólne rekwizyty, aby nie zmieniać standardowych obiektów w konfiguracji, często z nich korzystam.

Po dodaniu ogólnego atrybutu może być używany w żądaniach i wyświetlany w postaci obiektów - na zewnątrz nie różni się niczym od zwykłych rekwizytów.

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

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

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

Uzyskaj 267 samouczków wideo 1C za darmo:

Automatyczne użycie- ustawienie określa, czy wspólny atrybut będzie używany dla tych obiektów, które mają określony w swojej kompozycji tryb użytkowania "Automatyczny".

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

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

Udostępnianie danych- mechanizm podobny do mechanizmu. Jednak działanie tego mechanizmu jest wydajniejsze i łatwiejsze w konfiguracji.

Mechanizm pozwala dostosować wyświetlanie tylko tych elementów, które użytkownik widzi. Na przykład, możesz rozgraniczyć wszystkie obiekty (dokumenty, katalogi itp.), w których ustanowiono określoną organizację.

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

Aby ustawić w atrybucie ogólnym, należy określić separację danych - Dzielić... Natychmiast po kliknięciu system zaproponuje utworzenie domyślnych parametrów księgowych:

W takim przypadku konieczne będzie określenie parametrów sesji na starcie systemu, jak to zrobić, na przykładzie zostało to opisane 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 znajdują się 3 dokumenty, w których konieczne jest wskazanie zmiennej Organizacja: jest to Faktura Przychodowa, Faktura Wydatkowa, Naliczenie Wynagrodzeń.

Konfiguracja jest prosta:

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

To wszystko, konfiguracja jest skończona!

Zobaczmy wynik:

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

Ogólne wymaganie 1C 8.3 nie zostało dodane

DZWON

Są tacy, którzy czytają tę wiadomość przed tobą.
Zapisz się, aby otrzymywać najnowsze artykuły.
E-mail
Nazwa
Nazwisko
Jak chcesz czytać dzwonek?
Bez spamu