DIE KLINGEL

Es gibt diejenigen, die diese Nachrichten vor Ihnen lesen.
Abonnieren Sie, um die neuesten Artikel zu erhalten.
Email
Name
Nachname
Wie willst du The Bell lesen?
Kein Spam

Im vorherigen Artikel haben wir allen Verzeichnissen unserer Konfiguration allgemeine Requisiten hinzugefügt, um zu wissen, wer dieses Verzeichnisobjekt erstellt hat. Jetzt erstellen wir ein Abonnement für die Veranstaltung und geben an, welche Informationen in diese Requisiten eingetragen werden sollen.

In diesem Rang schreiben wir jedes Mal, bevor wir ein Objekt aufnehmen, den Autor des Objekts neu. Es ist natürlich wünschenswert anzugeben, wann dies geschehen ist, und wir werden dem Autor auch das Aufnahmedatum hinzufügen.

Vorgehensweise Autor vor dem Aufzeichnen automatisch speichern (Quelle, Verwerfen) Exportieren // Setzen Sie die Probe ein. Quelle. AuthorObktu \u003d UserName () + " ; "+ string (aktuelles Datum ()); EndProcedure

Perfekt. Lassen Sie uns nun darüber nachdenken, wo Sie die allgemeinen Details noch verwenden können.

Zunächst können Sie anhand der allgemeinen Details das Attribut "Kommentar", das Attribut "Autor" und andere Details, die Sie benötigen, zu allen Dokumenten in der Konfiguration hinzufügen.

Die allgemeinen Details haben einen weiteren interessanten Parameter: Datenübertragung ".Mit diesem Mechanismus können wir die Daten definieren, die wir dem Benutzer anzeigen möchten. Damit beispielsweise keiner der Manager alle Kunden des Unternehmens kennt, zeigen wir ihm nur die Kunden, die er der Datenbank hinzugefügt hat, mit der er arbeitet. Versuchen wir, diese Funktionalität zur Datenbank hinzuzufügen. Zunächst müssen wir angeben, dass wir die Datentrennung verwenden. Das System bietet automatisch an, Standardsitzungsparameter zu erstellen.

Danach müssen wir nur noch die Sitzungsparameter im Sitzungsmodul einstellen:

Lassen Sie uns ein Beispiel geben, wie das Gegenparteienverzeichnis ohne Verwendung von "Datenfreigabe" und damit aussieht:

Keine Trennung

Mit Teilung

Bitte beachten Sie, dass das Attribut "Verantwortlich" in der ersten Gegenpartei nicht gefunden wurde, da der Autor dieses Attributs eine andere Person war.

Ein klassisches Beispiel für die Trennung der Buchhaltung ist die Organisation, bei der den Benutzern nur die Dokumente angezeigt werden, die sich auf die entsprechende Organisation beziehen.

Wir haben den Sitzungsparameter-Mechanismus verwendet. Lassen Sie uns kurz verstehen, was es ist. Tatsächlich sind Sitzungsparameter globale Variablen, die beim Systemstart festgelegt werden. Dies geschieht in der Regel im "Sitzungsmodul". Bitte beachten Sie, dass Sitzungsparameter ausschließlich programmgesteuert erstellt werden.

Nachdem wir die "Sitzungsparameter" eingestellt haben, können wir mit einem einfachen von jedem Modul des Systems auf diesen Parameter verweisen

Dementsprechend muss der Benutzer das Programm beenden und erneut eingeben, um die Sitzungsparameter zu ändern.

Einmal haben wir die Mechanismen zur Einschränkung des Benutzerzugriffs in 1C und insbesondere besprochen.

Der Benutzer kann nicht mit allen Dokumenten arbeiten, sondern nur mit denen, in denen eine bestimmte Organisation oder ein bestimmtes Lager angegeben ist. Die Auswahl wird dynamisch getroffen, sodass die Datenbank einer bestimmten Belastung ausgesetzt wird.

Mit der Eigenschaft der allgemeinen Trennvariablen - Trennung von 1C-Benutzern - können Sie die Verfügbarkeit der Benutzerliste abhängig von der Verwendung von Trennzeichen festlegen.

Wenn das Trennzeichen für einen Benutzer aktiviert ist, wird es in der Liste der Benutzer im 1C Enterprise-Modus angezeigt. Andernfalls wird es nicht angezeigt.

Auf diese Weise können Sie verschiedene Benutzerlisten für verschiedene Teile der Datenbank organisieren.

Mit der Eigenschaft der allgemeinen Trennvariablen - Trennung der 1C-Authentifizierung - können Sie Benutzer mit denselben Benutzernamen für verschiedene Teile der Datenbank erstellen.

Bedingte Trennung 1C

Bedingte Trennung 1C ermöglicht das Aktivieren und Deaktivieren des Trennzeichens basierend auf Datenbankdaten. Auf diese Weise können Sie Ketten von voneinander abhängigen Trennzeichen erstellen, die in dem einen oder anderen Fall dynamisch wirken.

Um die bedingte 1C-Trennung zu aktivieren, müssen Sie in der Eigenschaft der allgemeinen Trennvariablen - 1C-bedingte Trennung - angeben, ob die 1C-Trennung aktiviert ist.

Es ist möglich, eine Konstante mit dem Booleschen Typ oder ein Referenzattribut mit dem Booleschen Typ zu verwenden.

Wichtig - für diese Konstante / diese Referenz müssen Sie die Verwendung (wählen Sie Nicht verwenden) als Teil der Trennzeichen deaktivieren, nur dann ist es möglich, sie auszuwählen.

1. Präambel.

Es war notwendig, die Buchhaltung für zwei Organisationen in einem IS zu organisieren. Die Situation ist nicht eindeutig, aber es kam vor, dass unser stark untypisches 250-Gigabyte-UPP ziemlich langsam funktionierte. Statt RLS entschieden wir uns, den Datenaustausch zu versuchen. Was es ist, wird zum Beispiel beschrieben, oder. Kurz gesagt, wenn RLS SQL-Abfragen bedingt, ist das Datentrennzeichen eine zusätzliche Spalte in den Tabellen auf DBMS-Ebene, weshalb der Partitionierungsmechanismus schneller als RLS arbeiten sollte.

An die Basis, an der die Buchhaltung für LLC Nr. 1 geführt wurde, ist es daher erforderlich, Informationen von einer separaten Basis von LLC Nr. 2 zu übertragen und gemeinsame Arbeiten zu organisieren. Genau wie auf dem Bild:

Gewöhnliche Sterbliche arbeiten nur mit ihrer LLC zusammen, und der Hauptbuchhalter prüft manchmal Daten zu zwei juristischen Personen. Im Modus des Zugriffs auf beide LLCs können Sie nur Daten lesen, sodass der Hauptbuchhalter in der Lage sein sollte, interaktiv zwischen den Modi "Alles lesen" / "Nur eine Organisation schreiben" zu wechseln und LLC auszuwählen (dh den Wert einer gemeinsamen Variablen festzulegen), um beispielsweise zu führen. Berechnung der Kosten.

2. Implementierung

Plattform 8.2.19.90, kein Kompatibilitätsmodus. DBMS - MSSQL Server 2008 R2 Standart.

Wir haben ein gemeinsames Attribut OrganizationSplitter vom Typ "number" erstellt, das mit dem Vorschlag zur Erstellung von Sitzungsparametern übereinstimmt und das Attribut ausfüllt (einschließlich mehrerer Nachschlagewerke, aller Dokumente, Akkumulations-, Buchhaltungs- und Berechnungsregister). Datenaustausch - "Unabhängig und gemeinsam". Der Sitzungsparameterwert wird aus den Standardbenutzereinstellungen in der SessionParametersSetting-Prozedur im Sitzungsmodul festgelegt:

Organization \u003d User Management.GetDefault Value (glCurrentUser, "MainOrganization");
SessionParameters.OrganizationSeparatorValue \u003d Organization.SeparatorValue;

In der Schnittstelle des Hauptbuchhalters erstellten sie ein Formular mit der Möglichkeit, zwischen Organisationen zu wechseln und den Trennungsmodus zu aktivieren / deaktivieren:

Wenn die Trennung deaktiviert ist und SessionParameters.OrganizationSplitterUsage \u003d False ist, weigert sich die Plattform, Dokumente zu schreiben. Fehler wie "SDBL-Fehler: Ausdruck erwartet (pos \u003d 12)" schlagen fehl, sodass der Benutzer keine Dokumente auf diese Weise schreiben kann. Aus Gründen der Zuverlässigkeit haben wir Abonnements für das Ereignis "Vor der Aufzeichnung" für Objekte erstellt, die im allgemeinen Attribut enthalten sind:

Wenn SessionParameters.OrganizationSeparatorUsage \u003d False Then
# Wenn Kunde dann
Warnung ("Kann nicht schreiben, da die Datenfreigabe deaktiviert ist!");
# EndIf
Ablehnung \u003d wahr;
EndIf;

Unser Aktionsplan war wie folgt: Wir bereiten den Konfigurationsempfänger von IB # 1 vor, setzen die Werte der gemeinsamen Variablen \u003d 1, laden Daten von IB # 2, setzen nach dem Laden für alle Objekte mit einem leeren (gleich 0) Trennwert OrganizationSplitter \u003d 2.

Die Konfiguration wurde vorbereitet, es stellte sich die Frage, wie der Wert der allgemeinen Anforderung für Dokumente und deren Bewegungen in geschlossenen Zeiträumen schnell und ohne das Risiko festgelegt werden kann, dass die Zahlen in der Bilanz fliegen. Es ist unmöglich, das Trennzeichen separat vom Objekt durch das 1C-Objektmodell zu schreiben, daher musste ich die Lizenzvereinbarung brechen, um eine Abfrage für MS SQL zu erstellen. Da das allgemeine Attribut viele Objekte enthält und für diese Objekte noch mehr Tabellen in den Wangenknochen vorhanden sind, haben wir eine Verarbeitung geschrieben, die eine Abfrage für SQL generiert (für jedes im Trennzeichen enthaltene Metadatenobjekt haben wir "update" + DB_Name + ".dbo._" + geschrieben Tabellenname + "set _" + FieldGeneralProps + "\u003d 1";)

Der Wert wurde eingestellt, einige der Daten wurden von IB Nr. 2 übertragen und die Tests begannen.

Das Ergebnis war enttäuschend. Erstens gibt es Probleme mit dem Buchhaltungsregister. Bei aktivierter Aufteilung ist der Analyst nicht sichtbar:

Dies liegt daran, dass das Abrechnungsregister auf DBMS-Ebene als mehrere Tabellen gespeichert ist und nicht alle Tabellen den Wert einer gemeinsamen Variablen enthalten (die Verarbeitung wurde zum Anzeigen der Struktur verwendet).


Nun, wir setzen den Trennwert über MS SQL, wir sehen die Analyse. Jetzt funktionieren Berichte nicht mehr. Es stellt sich heraus, dass es Probleme mit Abfragen an die virtuellen Tabellen des Abrechnungsregisters "Turnovers" und "TurnoversDtKt" gibt:

(Fld27033 ist nur eine allgemeine Variable in der Buchhaltungsregistertabelle)

Das Trennzeichen ist in allen Tabellen festgelegt, dies kann auf DBMS-Ebene gesehen werden, was ein Fehler sein könnte, ist nicht klar. Wir erweitern einen typischen leeren SCP, nehmen die Änderungen in der oben beschriebenen Konfiguration vor, geben einige Dokumente ein (in dieser Version schreibt die Plattform selbst den Trennwert in allen Tabellen des Abrechnungsregisters fest), aber die Fehler werden reproduziert. Schlecht, aber wir schließen Buchhaltungsregister von den allgemeinen Requisiten aus, wir testen weiter.

Ferner stellt sich heraus, dass der Präventivmechanismus für die Berechnungsregister nicht mehr funktioniert. Wir haben die Pläne für die Berechnungstypen nicht getrennt, wir versuchen, das Problem in den Tabellen des Berechnungsregisters und in Neuberechnungen zu suchen. Wir überprüfen, notieren den Wert der Hauptrequisiten, führen T & I durch - ohne Erfolg.

Unterwegs diagnostizieren wir das Problem beim Schreiben von Informationen aus dem Listenformular in unabhängige Register. In diesem Fall werden die Daten aufgezeichnet, sie können nach einem Neustart angezeigt werden. Das Problem wird auch auf der Testbasis reproduziert:


Die Informationsregister konnten nicht durch Manipulieren von SQL "repariert" werden (der Trennwert wurde in allen Tabellen festgelegt), sodass sie einfach aus dem allgemeinen Attribut ausgeschlossen wurden. Nach mehreren Tagen des Experimentierens schlagen Versuche fehl, die Verschiebung zur Arbeit wiederherzustellen.

An diesem Punkt entscheiden wir uns, die Datenfreigabe zu deaktivieren und RLS zu verwenden. Wenn Sie die Partition auf "Nicht verwenden" setzen, werden Fehler "Microsoft OLE DB-Anbieter für SQL Server: CREATE UNIQUE INDEX wurde beendet, weil ein doppelter Schlüssel für den Index gefunden wurde ..." angezeigt. Das heißt, es ist nicht einfach, vor der Trennung in den Zustand zurückzukehren. Das Problem mit Indizes von Neuberechnungstabellen, Einstellungen zum Speichern von Summen und anderen. Tatsache ist, dass identische Zeilen in den Tabellen gespeichert sind und sich nur im Wert des gemeinsamen Attributs unterscheiden. Wenn Sie ein gemeinsames Attribut löschen, werden nicht eindeutige Einträge angezeigt. Sie müssen unnötige Datensätze direkt in MS SQL löschen, etwa so (für die Neuberechnungstabelle):

Basis verwenden;
ALTER TABLE _CRgRecalc1399
ADD id INT IDENTITY (1,1);
GEHEN
LÖSCHEN VON _CRgRecalc1399
WO id< (SELECT MAX(id)
FROM _CRgRecalc1399 AS T1
WHERE _CRgRecalc1399._RecorderTRef \u003d T1._RecorderTRef und
_CRgRecalc1399. [_ RecorderRRef] \u003d T1. [_ RecorderRRef] und
_CRgRecalc1399. [_ CalcKindRRef] \u003d T1. [_ CalcKindRRef] und
_CRgRecalc1399. [_ Fld1400RRef] \u003d T1. [_ Fld1400RRef] und
_CRgRecalc1399. [_ Fld1401RRef] \u003d T1. [_ Fld1401RRef] und
_CRgRecalc1399. [_ Fld1402RRef] \u003d T1. [_ Fld1402RRef]
);
GEHEN
ALTER TABLE _CRgRecalc1399
DROP COLUMN id;

Und erst nach dem Bereinigen von mehreren Dutzend Tabellen kann die Datentrennung deaktiviert werden. Nach dem Ausschalten der Trennung gibt es kein Problem.

3. Schlussfolgerungen.

Es gab einen Hoffnungsschimmer, dass 8.3 Probleme gelöst wurden. Waren nicht faul, überprüft am 8.3.4.482 (mit deaktiviertem Kompatibilitätsmodus). Wir haben uns einen fast typischen UPP-Shke angesehen, bei dem Änderungen in der Konfiguration nur für die allgemeinen Anforderungen vorgenommen wurden. Auf dieser Testbasis wurde die Teilung eingeschaltet, bevor die Information eingegeben wurde, d.h. Die Plattform musste den Trennwert korrekt in alle Tabellen schreiben, sie haben selbst nichts direkt in MS SQL geschrieben.

Ergebnis:

    Das Problem mit Abfragen an die virtuellen Tabellen "Turnovers" und "TurnoversDtKt" wird reproduziert.

    Das präventive Problem ist reproduzierbar.

    Das Problem beim Schreiben in unabhängige Informationsregister ist reproduzierbar.

    Das Problem beim Ausschalten der Trennung - Sie können sie nicht mit einem Knopfdruck entfernen!

Daher konnten wir RLS nicht durch einen neuen Mechanismus ersetzen. Dieser Mechanismus wurde höchstwahrscheinlich für Cloud-Dienste konzipiert, und wenn gemeinsam genutzte Daten "unabhängig" verwendet werden, funktioniert die Trennung möglicherweise, aber wir benötigen gemeinsame Referenzdaten. Es bleibt abzuwarten, bis 1C Fehler behebt oder noch besser einen typischen Mechanismus für die Aufteilung nach Organisationen in typischen Konfigurationen implementiert.

Allgemeine Requisiten in 1C 8.3 ist ein Plattform-Metadatenobjekt, mit dem Sie ein Attribut für viele Konfigurationsobjekte (Verzeichnisse, Dokumente, Kontenpläne usw.) verwenden können. Das Objekt wurde hauptsächlich zur Erleichterung der Entwicklungsarbeit und der Datentrennung erstellt.

Allgemeine Details wurden ursprünglich in Version 1C 7.7 implementiert, aber die Entwickler haben sie nicht sofort in die Plattform von Version 8 aufgenommen. Der Mechanismus allgemeiner Details wurde von den 1C-Entwicklern erst in der Version 8.2.14 eingeführt.

Es ist sehr praktisch, allgemeine Anforderungen hinzuzufügen, um Standardobjekte in der Konfiguration nicht zu ändern. Ich verwende sie häufig zusammen mit.

Nach dem Hinzufügen eines allgemeinen Attributs kann es in Abfragen verwendet und in Form von Objekten angezeigt werden. äußerlich unterscheidet es sich nicht von gewöhnlichen Requisiten.

Die einzige Einschränkung allgemeiner Details besteht darin, dass sie nicht in verwendet werden können.

Betrachten wir die Grundeinstellungen und Eigenschaften allgemeiner Attribute, die sich von anderen Konfigurationsobjekten unterscheiden:

Komposition - Eine Liste von Objekten, für die das allgemeine Attribut verwendet wird. Die Einstellung ähnelt der Einstellung eines Austauschplans

Holen Sie sich kostenlos 267 1C Video-Tutorials:

Automatische Verwendung - Die Einstellung bestimmt, ob ein gemeinsames Attribut für die Objekte verwendet wird, für die der Verwendungsmodus "Automatisch" angegeben ist.

Datenübertragung - Wir werden diese Einstellung separat betrachten.

Trennung von Daten in 1C unter Verwendung gemeinsamer Requisiten

Datenübertragung - ein dem Mechanismus ähnlicher Mechanismus. Die Leistung dieses Mechanismus ist jedoch effizienter und einfacher zu konfigurieren.

Mit dem Mechanismus können Sie die Anzeige nur von Elementen anpassen, die der Benutzer sehen kann. Sie können beispielsweise alle Objekte (Dokumente, Verzeichnisse usw.) abgrenzen, in denen eine bestimmte Organisation eingerichtet ist.

Einrichten der Datentrennung anhand allgemeiner 1C-Details

Für die Einstellung im allgemeinen Attribut müssen Sie die Datentrennung angeben - Teilen... Unmittelbar nach dem Klicken bietet das System an, Standardabrechnungsparameter zu erstellen:

In diesem Fall müssen Sie die Sitzungsparameter zu Beginn des Systems angeben. Dies geschieht anhand eines Beispiels, das im Artikel beschrieben wurde.

Damit ist die Einrichtung abgeschlossen. Der Benutzer hat nur Zugriff auf die Informationen, die in den ausgewählten Sitzungsparametern angegeben sind.

Beispiel für die Verwendung gängiger Requisiten

Lassen Sie uns die Einstellung der allgemeinen Requisiten in 1C 8.3 am Beispiel einer Rahmenkonfiguration und von Requisiten analysieren Organisation:

Es gibt 3 Dokumente im System, in denen die Organisationsvariable angegeben werden muss: Dies ist die Belegrechnung, die Spesenabrechnung und die Gehaltsabgrenzung.

Das Setup ist einfach:

  1. Erstellen Sie ein neues allgemeines Attribut und geben Sie den Typ DirectoryLink.Organization an.
  2. In der Komposition platzieren wir für unsere Dokumente - Verwenden.

Das war's, das Setup ist vorbei!

Mal sehen, das Ergebnis:

Das System zeigt das allgemeine Attribut "als sein eigenes" an: in Anforderungen, in den Formularattributen und an anderen Stellen. Das ist die Magie! 🙂

Allgemeine Requisiten 1C 8.3 werden nicht hinzugefügt

DIE KLINGEL

Es gibt diejenigen, die diese Nachrichten vor Ihnen lesen.
Abonnieren Sie, um die neuesten Artikel zu erhalten.
Email
Name
Nachname
Wie willst du The Bell lesen?
Kein Spam