Heim / Gut zu wissen / 1c Verbindungszeichenfolge für externe Datenquellen. Externe Datenquellen. Beispiel für eine Verbindungszeichenfolge

1c Verbindungszeichenfolge für externe Datenquellen. Externe Datenquellen. Beispiel für eine Verbindungszeichenfolge

Warum diese Möglichkeit weckt solches Interesse? Jeder, der in 1C programmiert hat, ist mit SQL ziemlich vertraut und zumindest allgemein mit der Architektur und den Prinzipien der Entwicklung anderer technologischer Plattformen für Geschäftsanwendungen vertraut, wird Ihnen mit fester Gewissheit sagen, was ihm an 1C am besten gefällt. Natürlich ist der Abfragegenerator der bequemste und durchdachteste Mechanismus zum Schreiben von Abfragen zum Abrufen von Daten aus relationalen Strukturen, die mir persönlich je begegnet sind. Und jetzt hat uns 1C eine so wunderbare Gelegenheit gegeben, es nicht nur mit 1C, sondern auch mit anderen Tischen zu verwenden. Hier sind nur ein paar "Haare in der Suppe", die in dieses "Honigfass" gegossen wurden. Alles in Ordnung:

1) Einrichtung und Verwendung- Ohne "Tanzen mit einem Tamburin" geht es nicht
a) Fügen Sie eine externe Datenquelle hinzu - es scheint nicht kompliziert zu sein
b) Aktivieren Sie das Kontrollkästchen "Aus der Liste auswählen" - dies ist erforderlich - dies ist erforderlich, um die Leistung zu Beginn zu überprüfen und Sie vor unnötigen Problemen zu bewahren
c) - Achten Sie darauf, "..." zu drücken - die Verbindung ist ODBC. Nicht OLEDB wie wir es alle gewohnt sind, sondern eine Ebene tiefer

D) Seien Sie hier SEHR VORSICHTIG.

Dies ist ein ODBC-Treiber - wenn Sie die Client-Server-Version verwenden, muss er auf dem Server vorhanden sein. Wenn Sie auf einem System entwickeln und Arbeitsversion andererseits sollten Sie (wie so oft) darauf achten, dass keine Überraschungen auf Sie warten. Eine seltsame Empfehlung, aber wählen Sie den ältesten oder gängigsten Treiber, wenn Ihnen die Geschwindigkeit nicht besonders wichtig ist und Sie nicht beabsichtigen, die Grenzen des SQL92-Standards zu überschreiten. Dies wird Ihnen zur Verfügung gestellt bessere Verträglichkeit. Zum Beispiel für SQL Server 2008 der beste Fahrer es wird SQL Server Native Client 11 geben, aber ich empfehle, nur SQL Server zu wählen, da sonst dieser sehr native Client entweder auf dem Server oder auf allen Client-Rechnern (bei Verwendung der Dateiversion) installiert werden muss, und das wird er auch geben für einfache Aufgaben nicht viel Gewinn.
e) Standard-Server-Auswahldialoge

E) Ich empfehle, die Frage nach dem Speichern des Passworts mit „Ja“ zu beantworten, da es sonst nicht funktioniert, dieses Geschäft zu starten.
g) Wählen Sie eine Tabelle und Details ... eine großartige Gelegenheit - Sie können sie sofort beliebig umbenennen (und auch Details), während Sie in den Eigenschaften die Namen der Datenquellenfelder sehen

H) Und jetzt laufen Sie, öffnen Sie den Abfragedesigner - Sie wählen dummerweise alle Datensätze aus der Tabelle und dem OPA aus - ein Fehler. Was zu tun ist? Wenn Sie eine verwaltete Schnittstelle haben, schauen Sie im Servicemenü nach, und wenn Sie eine normale haben ...
Ich persönlich habe diesen Code verwendet:
Code 1C v 8.x Parameter = ExternalDataSources.DAX.GetCommonConnectionParameters();
Parameters.AuthenticationStandard = true;
Parameter.Benutzername = "sa";
Parameter.Password = "pas";
Parameters.ConnectionString = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;DATABASE=database";
Parameters.DBMS = "MSSQLServer";

ExternalDataSources.DAX.SetCommonConnectionParameters(Parameter);
ExternalDataSources.DAX.SetUserConnectionParameters(UserName(), Parameters);
ExternalDataSources.DAX.SetSessionConnectionParameters(Parameter);

ExternalDataSources.DAX.SetConnection();
Vielleicht werden einige Teile nicht benötigt, aber es funktioniert.
Sie müssen den Code EINMAL ausführen. Danach wird es normal verbunden ... Mystik natürlich - warum es notwendig war, ist nicht klar ...

2) Nur-Lese-Datenquellen- Ja, Wunder passieren nicht ... aber manchmal will man ....

3) VERWENDEN SIE SIE NICHT ZUSAMMEN MIT INTERNEN DATENQUELLEN
Mich persönlich hat diese Tatsache auf der Stelle umgebracht.

Wie ist es .... worauf sie gewartet und sich bereits vorgestellt und geleckt haben, wie wir jetzt in einer Anfrage unsere Daten mit 1C kombinieren, umdrehen - gruppieren, in den Bericht einfügen, aber es war nicht da.. .
Aber das hält erfahrene Leute natürlich nicht auf ... welcher Gedanke kam mir in den Sinn? Das ist richtig - temporäre Tabellen:

4) VERWENDEN SIE SIE NICHT ZUSAMMEN MIT TEMPORÄREN TABELLEN

Aber das sieht nicht mehr nach technologischen Schwierigkeiten aus, sondern sehr nach dem, was sie von uns wollen, "damit das Leben nicht wie ein Paradies erscheint" :).

5) Nur in SKD-Anschlüssen einsetzbar
Für diejenigen, die es nicht wissen, es befindet sich im ACS auf der Registerkarte "Datensatz-Links". Wie oft benutzt du sie? Gemütlich? Anscheinend wollen sie uns zwingen, sie öfter zu benutzen. Aber es gibt eine Spalte "Link-Bedingung" und "Link-Parameter". Ich habe kein Beispiel für ihre Verwendung in einer typischen Konfiguration gefunden, in der Dokumentation und auch in Khrustaleva, irgendwie ist nicht alles transparent. Kann mir jemand erklären, wie die "Link-Bedingung" funktioniert. Wenn Sie dort SourceAttribute = ReceiverRevision schreiben, funktioniert es nicht. Natürlich kann die Bedingung in das Feld "Ausdruck" geschrieben werden - in den meisten Fällen reicht das ... aber irgendwie ist es nicht ganz einfach.

Insgesamt wurde dieses Problem zuvor irgendwo wie folgt gelöst:
Code 1C v 8.x Funktion InitializeDataSource()

DateStart = BuilderSettings.Settings.DataParameters.Items.Value;
DateCon = BuilderSettings.Settings.DataParameters.Items.Value;
Wenn DateCon > "20100101" Dann
DateCon = "20100101";
EndIf;

QN = NewQualifiersNumber(15,2);
cs = NewStringQualifiers (255);

ArrayNummer = Neues Array();
ArrayNumber.Add(Type("Number"));

ArrayString = Neues Array();
ArrayString.Add(Type("String"));

ArrayData = Neues Array();
ArrayDate.Add(Type("Datum"));

//Wir werden die Buchhaltungskosten in die Tabelle eintragen
TypeNumber = NewTypeDescription (ArrayNumber, KN);
StringType = NewTypeDescription (ArrayString, CS);
TypeDate = NewTypeDescription(ArrayDate);

//Tabelle zum Laden von Daten aus SQL
TK = Neue Wertetabelle();
TK.Columns.Add("NomenklaturCode", TypeString);
TK.Columns.Add("Menge", TypeNumber);
TK.Columns.Add("Periode", TypeDate);

TK.Indices.Add("Periode");

// Mit SQL verbinden
ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Pwd=;Data Source=;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=;Use Encryption for Data=False;Tag mit Spaltensortierung wenn möglich=False;Initial Catalog=Reports";
Connection = New COMObject("ADODB.Connection");
Command = New COMObject("ADODB.Command");
RecordSet = New COMObject("ADODB.RecordSet");
Datum = "";
Versuchen
Connection.Open(ShortLP(ConnectionString));
Command.ActiveConnection = Verbindung;
Command.CommandText = "S_elect * from PH wo period >= "" + String(Format(DateStart, "DF=yyyyMMdd")) + "" und period<= "" + Строка(Формат(ДатаКон, "ДФ=ггггММдд")) + """;
RecordSet = Command.Execute();
RecordSet.MoveFirst();
Ausnahme
Rückgabe von TK;
Ende des Versuchs;

While RecordSet.EOF = Falsche Schleife
String = TK.Hinzufügen();
String.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Value;
String.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Value;
String.Period = RecordSet.Fields(RecordSet.Fields.Item(13).Name).Value;
RecordSet.MoveNext();
EndCycle;

Anfrage = Neue Anfrage();
VrTable = NewTempTableManager();
Query.SetParameter("vDataTable", TK);
Query.SetParameter("Startdatum", Startdatum);
Query.SetParameter("DateCon", DateCon);
Abfrage.Text = "AUSWÄHLEN
| vrDataTable.NomenclatureCode,
| vrDataTable.Anzahl,
| vrDataTable.Period
|PUT-Datentabelle
| VON
| &vrDataTable AS vrDataTable
|WO
| vrDataTable.Period >= &DateStart
| Und vrDataTable.Period<= &ДатаКон";
Request.Execute();
TK = undefiniert;

Anfrage = Neue Anfrage;
Query.TempTableManager = VrTable;
Query.Text = "Hier ist eine Abfrage mit einer temporären Tabelle";

Ergebnis = Request.Run();
Ergebnis zurückgeben;

Endfunktionen

OuterSet = InitializeDataSource();
DataSet = Neue Struktur ();
DataSet.Insert("SQL-Tabelle", ExternalSet);
GenericReports.Generate GenericReport(ThisObject, Result, Decryption Data, OutputToReportForm,Dataset);

Eigentlich sind es nicht viele Codezeilen und sie sind ziemlich Standard ... in diesem Fall können Sie die volle Funktionalität des Abfrageerstellers verwenden und nur die Funktion DATA COMPOSITION im ACS angeben

Aber natürlich sieht es ein bisschen nicht so schön aus ... und jedes Mal, wenn Sie Code schreiben und überprüfen müssen, ob Sie einen Fehler im Namen der Details gemacht haben, müssen Sie in die Wertetabelle hochladen ... ansonsten sieht das, was uns in 1C gegeben wurde, irgendwie halbherzig aus. Ich habe mich noch nicht entschieden, was bequemer zu bedienen ist. Sie entscheiden und schreiben über Ihre Entscheidungen und was Sie dazu bewogen hat.

Informationen von der Website übernommen

Release 8.2.14.533 - endlich eine mehr oder weniger stabile Version des 14. Release der Plattform. Schließlich gab es die Möglichkeit, eine wunderbare Möglichkeit auszuprobieren – „externe Datenquellen“.

Warum ist diese Gelegenheit so interessant? Jeder, der in 1C programmiert hat, ist mit SQL ziemlich vertraut und zumindest allgemein mit der Architektur und den Prinzipien der Entwicklung anderer technologischer Plattformen für Geschäftsanwendungen vertraut, wird Ihnen mit fester Gewissheit sagen, was ihm an 1C am besten gefällt. Natürlich ist der Abfragegenerator der bequemste und durchdachteste Mechanismus zum Schreiben von Abfragen zum Abrufen von Daten aus relationalen Strukturen, die mir persönlich je begegnet sind. Und jetzt hat uns 1C eine so wunderbare Gelegenheit gegeben, es nicht nur mit 1C, sondern auch mit anderen Tischen zu verwenden. Hier sind nur ein paar "Haare in der Suppe", die in dieses "Honigfass" gegossen wurden. Alles in Ordnung:

1) Aufbau und Nutzung - ohne "Tanzen mit Tamburin" geht es nicht

A) Fügen Sie eine externe Datenquelle hinzu - es scheint nicht kompliziert zu sein
b) Aktivieren Sie das Kontrollkästchen "Aus der Liste auswählen" - dies ist erforderlich - dies ist erforderlich, um die Leistung zu Beginn zu überprüfen und Sie vor unnötigen Problemen zu bewahren
in)
(IMG:http://pics.livejournal.com/comol/pic/0000cr1r.png)
- Achten Sie darauf, "..." zu drücken - Die Verbindung ist ODBC. Nicht OLEDB wie wir es alle gewohnt sind, sondern eine Ebene tiefer

Und sei hier SEHR AUFMERKSAM.

Dies ist ein ODBC-Treiber - wenn Sie die Client-Server-Version verwenden, muss er auf dem Server vorhanden sein. Wenn Sie auf einem System entwickeln und auf einem anderen arbeiten (was normalerweise der Fall ist), stellen Sie sicher, dass Sie keine Überraschungen erleben. Eine seltsame Empfehlung, aber wählen Sie den ältesten oder gängigsten Treiber, wenn Ihnen die Geschwindigkeit nicht besonders wichtig ist und Sie nicht beabsichtigen, die Grenzen des SQL92-Standards zu überschreiten. Dadurch erhalten Sie die beste Kompatibilität. Für SQL Server 2008 wäre der beste Treiber beispielsweise SQL Server Native Client 11, aber ich empfehle, nur SQL Server zu wählen, da sonst dieser sehr native Client entweder auf dem Server oder auf allen Client-Rechnern (in dem Fall der Verwendung der Dateiversion), und der Gewinn ist besonders, weil er Ihnen einfach keinen Job gibt.

E) Standard-Server-Auswahldialoge

G) Wählen Sie eine Tabelle und Details ... eine großartige Gelegenheit - Sie können sie sofort beliebig umbenennen (und Details auch), während Sie in den Eigenschaften die Namen der Datenquellenfelder sehen

H) Und jetzt laufen Sie, öffnen Sie den Abfragedesigner - Sie wählen dummerweise alle Datensätze aus der Tabelle und dem OPA aus - ein Fehler. Was zu tun ist? Wenn Sie eine verwaltete Schnittstelle haben, schauen Sie im Servicemenü nach, und wenn Sie eine normale haben ...
Ich persönlich habe diesen Code verwendet:

Parameter = ExternalDataSources.DAX.GetCommonConnectionParameters();
Parameters.AuthenticationStandard = true;
Parameter.Benutzername = "sa";
Parameter.Password = "pas";
Parameters.ConnectionString = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;DATABASE=database";
Parameters.DBMS = "MSSQLServer";

ExternalDataSources.DAX.SetCommonConnectionParameters(Parameter);
ExternalDataSources.DAX.SetUserConnectionParameters(UserName(), Parameters);
ExternalDataSources.DAX.SetSessionConnectionParameters(Parameter);

ExternalDataSources.DAX.SetConnection();

Vielleicht werden einige Teile nicht benötigt, aber es funktioniert. Code ausführen müssen EINMAL. Danach wird es normal verbunden ... Mystik natürlich - warum es notwendig war, ist nicht klar ...

2) Nur-Lese-Datenquellen
Ja, Wunder passieren nicht ... aber manchmal will man ....

3) VERWENDEN SIE SIE NICHT ZUSAMMEN MIT INTERNEN DATENQUELLEN
Mich persönlich hat diese Tatsache auf der Stelle umgebracht.

Wie ist es .... worauf sie gewartet und sich bereits vorgestellt und geleckt haben, wie wir jetzt in einer Anfrage unsere Daten mit 1C kombinieren, umdrehen - gruppieren, in den Bericht einfügen, aber es war nicht da.. .

Aber das hält erfahrene Leute natürlich nicht auf ... welcher Gedanke kam mir in den Sinn? Das ist richtig - temporäre Tabellen:

4) VERWENDEN SIE SIE NICHT ZUSAMMEN MIT TEMPORÄREN TABELLEN

Aber das sieht nicht mehr nach technologischen Schwierigkeiten aus, sondern sehr nach dem, was sie von uns wollen, "damit das Leben nicht wie ein Paradies erscheint" (IMG :) .

5) Nur in SKD-Anschlüssen einsetzbar

Für diejenigen, die es nicht wissen, es befindet sich im ACS auf der Registerkarte "Datensatz-Links". Wie oft benutzt du sie? Gemütlich? Anscheinend wollen sie uns zwingen, sie öfter zu benutzen. Aber es gibt eine Spalte "Link-Bedingung" und "Link-Parameter". Ich habe kein Beispiel für ihre Verwendung in einer typischen Konfiguration gefunden, in der Dokumentation und auch in Khrustaleva, irgendwie ist nicht alles transparent. Kann mir jemand erklären, wie die "Link-Bedingung" funktioniert. Wenn Sie dort SourceAttribute = ReceiverRevision schreiben, funktioniert es nicht. Natürlich kann die Bedingung in das Feld "Ausdruck" geschrieben werden - in den meisten Fällen reicht das ... aber irgendwie ist es nicht ganz einfach.

Insgesamt wurde dieses Problem zuvor irgendwo wie folgt gelöst:

Funktion InitializeDataSource()

DateStart = BuilderSettings.Settings.DataParameters.Items.Value;
DateCon = BuilderSettings.Settings.DataParameters.Items.Value;
Wenn DateCon > "20100101" Dann
DateCon = "20100101";
EndIf;

QN = NewQualifiersNumber(15,2);
cs = NewStringQualifiers (255);

ArrayNummer = Neues Array();
ArrayNumber.Add(Type("Number"));

ArrayString = Neues Array();
ArrayString.Add(Type("String"));

ArrayData = Neues Array();
ArrayDate.Add(Type("Datum"));

//Wir werden die Buchhaltungskosten in die Tabelle eintragen
TypeNumber = NewTypeDescription (ArrayNumber, KN);
StringType = NewTypeDescription (ArrayString, CS);
TypeDate = NewTypeDescription(ArrayDate);

//Tabelle zum Laden von Daten aus SQL
TK = Neue Wertetabelle();
TK.Columns.Add("NomenklaturCode", TypeString);
TK.Columns.Add("Menge", TypeNumber);
TK.Columns.Add("Periode", TypeDate);

TK.Indices.Add("Periode");

// Mit SQL verbinden
ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Pwd=;Data Source=;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=;Use Encryption for Data=False;Tag mit Spaltensortierung wenn möglich=False;Initial Catalog=Reports";
Connection = New COMObject("ADODB.Connection");
Command = New COMObject("ADODB.Command");
RecordSet = New COMObject("ADODB.RecordSet");
Datum = "";
Versuchen
Connection.Open(ShortLP(ConnectionString));
Command.ActiveConnection = Verbindung;
Command.CommandText = "Select * from PH where period >= "" + String(Format(DateStart, "DF=yyyyMMdd")) + "" and period RecordSet = Command.Execute();
RecordSet.MoveFirst();
Ausnahme
Rückgabe von TK;
Ende des Versuchs;

While RecordSet.EOF = Falsche Schleife
String = TK.Hinzufügen();
String.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Value;
String.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Value;
String.Period = RecordSet.Fields(RecordSet.Fields.Item(13).Name).Value;
RecordSet.MoveNext();
EndCycle;

Anfrage = Neue Anfrage();
VrTable = NewTempTableManager();
Query.SetParameter("vDataTable", TK);
Query.SetParameter("Startdatum", Startdatum);
Query.SetParameter("DateCon", DateCon);
Abfrage.Text = "AUSWÄHLEN
| vrDataTable.NomenclatureCode,
| vrDataTable.Anzahl,
| vrDataTable.Period
|PUT-Datentabelle
| VON
| &vrDataTable AS vrDataTable
|WO
| vrDataTable.Period >= &DateStart
| Und vrDataTable.Period Query.Execute();
TK = undefiniert;

Anfrage = Neue Anfrage;
Query.TempTableManager = VrTable;
Query.Text = "Hier ist eine Abfrage mit einer temporären Tabelle";

Ergebnis = Request.Run();
Ergebnis zurückgeben;

Endfunktionen

OuterSet = InitializeDataSource();
DataSet = Neue Struktur ();
DataSet.Insert("SQL-Tabelle", ExternalSet);
GenericReports.Generate GenericReport(ThisObject, Result, Decryption Data, OutputToReportForm,DataSet);

Eigentlich sind es nicht viele Codezeilen und sie sind ziemlich Standard ... in diesem Fall können Sie die volle Funktionalität des Abfrageerstellers verwenden und nur die Funktion DATA COMPOSITION im ACS angeben

Aber natürlich sieht es ein bisschen nicht so schön aus ... und jedes Mal, wenn Sie Code schreiben und überprüfen müssen, ob Sie einen Fehler im Namen der Details gemacht haben, müssen Sie in die Wertetabelle hochladen ... ansonsten sieht das, was uns in 1C gegeben wurde, irgendwie halbherzig aus. Ich habe mich noch nicht entschieden, was bequemer zu bedienen ist. Sie entscheiden und schreiben über Ihre Entscheidungen und was Sie dazu bewogen hat.

[Sie müssen sich registrieren, um den Link anzuzeigen]

Externe Quellen 1C-Daten sind ein relativ neues Metadatenobjekt 1C 8.3 und 8.2, mit dessen Hilfe externe Datenquellen mit 1C verbunden werden können: SQL-Tabellen, Excel, Access, FoxPro (dbf), eine andere 1C-Datenbank, Oracle, Paradox (db ), - und sogar auslesen einfache Dateien txt/csv.

Dies bietet viele Möglichkeiten, mit anderen Systemen zu arbeiten. Lassen Sie uns genauer betrachten.

Externe Datenquellen in 1C 8 einrichten

Die Einrichtung externer Quellen ist für jeden Systemtyp individuell. Aber in der Regel ist der gemeinsame Teil der Einstellung derselbe - dies ist die Einstellung der Verbindungszeichenfolge:

Erhalten Sie 267 kostenlose 1C-Videolektionen:

Wenn die Verbindungszeichenfolge korrekt ist, werden Sie vom System aufgefordert, die erforderliche Tabelle aus der Datenbank auszuwählen. Als Ergebnis erhalten wir eine fertige Tabelle, in der Sie das Schlüsselfeld (eindeutiges Feld) und das Ansichtsfeld (wie der Datensatz in 1C wiedergegeben wird) angeben können:

Verwendung externer Datenquellen in 1C 8.3

Externe Datenquellen in 1C können wie andere Datenbanktabellen verwendet werden. Die Plattform generiert automatisch ein Formular für sie, wenn keines festgelegt ist. Abfragen können auch Daten aus externen Quellen verwenden.

In Plattformversion 8.3.5.1068 (und höher) wurde es möglich, Daten in externen Quellen hinzuzufügen, zu ändern und zu löschen Software-Tools 1C. Beispiele für diese Funktion werden in diesem Artikel vorgestellt.

Um die Aufnahme in externe Quellen zu ermöglichen, hat 1C neue Eigenschaften zu Datentabellen und Feldern externer Quellen hinzugefügt:

  • Für den ganzen Tisch - Eigentum Nur lesen. ReadOnly = True bedeutet, dass eine Änderung der Daten in dieser Tabelle nicht möglich ist;
  • Für einzelne Tabellenfelder - Eigenschaften Nur lesen, AllowNull und Wert füllen:
    • ReadOnly = True bedeutet, dass eine Änderung der Daten in diesem Feld nicht möglich ist;
    • AllowNull = True bedeutet, dass in dieses Feld ein Wert geschrieben werden kann NULL;
    • Wert füllen enthält den Standardwert dieses Felds (falls vorhanden).

Sie (bei der manuellen Beschreibung von Tabellen) oder die Plattform (bei der Erstellung von Tabellen mit dem Designer) können diese Eigenschaften auf folgende Weise verwenden.

  • ReadOnly = True B. für Ansichten (View), Tabellen, die auf der Grundlage eines Ausdrucks (Funktionsergebnis) erhalten werden, und dergleichen. Daten in solchen Tabellen können nicht geändert werden;
  • ReadOnly = True angeben für automatisch gesetzte Felder ( AUTOINKREMENT), berechnete Felder und dergleichen. Die Daten in diesen Feldern können nicht geändert werden;
  • AllowNull = True für alle Felder gesetzt, außer für Schlüsselfelder und solche, die in einer externen Quelle als beschrieben sind NICHT NULL;
  • Wert füllen Felder, die gesetzt werden sollen, wenn der Standardwert dieses Felds in der externen Quelle angegeben ist (value URSPRÜNGLICH).

Sie können Daten in externen Quellen mithilfe der integrierten Sprache oder interaktiv hinzufügen, ändern und löschen. In der eingebauten Sprache werden dafür folgende Methoden des Tabellenmanagers verwendet:

  • Datensatzsatz erstellen()- für Nicht-Objekt-Tabellen;
  • Neue Methode CreateObject()- für Objekttabellen.

Dementsprechend sind die Objekte ExternalDataSourceTableRecordSet und ExternalDataSourceTableObject neue Methoden entstanden Schreiben() und Löschen().

Daten hinzufügen

Wenn Sie einer externen Quelle Daten hinzufügen, erstellen Sie ein Objekt (oder einen Recordset), legen Feldwerte fest und schreiben. Es gibt jedoch einige nützliche Funktionen, die Sie kennen sollten.

Wenn Sie beispielsweise versuchen, den Wert eines Felds festzulegen, das hat ReadOnly = True, wird ein Fehler ausgegeben. Und beim direkten Schreiben in die Datenbank im Ausdruck EINFÜGUNG solche Felder werden übersprungen. Die restlichen Felder werden mit den Werten gefüllt, die Sie ihnen zugewiesen haben. Daher die Werte Null und Standardwerte müssen Feldern explizit zugewiesen werden.

  • Ich würde(AllowNull = True);
  • Name(AllowNull = True);
mCharacteristic = ExternalDataSources.IM.Tables.shop_feature.CreateObject(); mCharacteristic.id = Code; mCharacteristic.name = Name; mCharacteristic.Write();

Anweisungsausführung Schreiben() bewirkt, dass zuerst der Ereignishandler aufgerufen wird Vor der Aufnahme, dann wird ein physischer Schreibvorgang in die externe Quelltabelle ( EINFÜGUNG), dann wird der Ereignishandler aufgerufen Beim Aufnehmen.

Mit dem Schlüsselfeld der externen Quelltabelle können Sie Folgendes tun. Wenn das Schlüsselfeld editierbar ist, legen Sie seinen Wert vor dem Schreiben "manuell" fest. Wenn das Ändern des Schlüsselfelds verboten ist, wird die Plattform den Schlüssel selbst einholen EINFÜGUNG oder gleich danach. In diesen Prozess können Sie mit der Methode eingreifen SetReferenceNew() vor dem physischen Datensatz (im Ereignishandler Vor der Aufnahme) oder direkt nach dem physischen Eintrag (im Eventhandler Beim Aufnehmen).

Daten ändern

Wenn Daten geändert werden, werden die Werte aller Felder der Tabelle, die haben ReadOnly = False.

MFeature = ExternalDataSources.IM.Tables.shop_feature.FindByField("id",code); mObject = mCharacteristic.GetObject(); mObject.name = Name; mObject.Write();

Wenn nur einige Felder aufgezeichnet werden müssen, können Sie deren Liste mithilfe der Methoden direkt aus der integrierten Sprache spezifizieren SetWritableFields() und GetWritableFields().

Löschen von Daten

Das Löschen von Daten löscht direkt eine Zeile aus einer Datenbanktabelle. Gleichzeitig werden Verweise auf das gelöschte Objekt nicht gesucht. Wenn eine solche Funktionalität benötigt wird, können Sie sie im Ereignishandler selbst programmieren VorLöschen().

MFeature = ExternalDataSources.IM.Tables.shop_feature.FindByField("id",Code); mObject = mCharacteristic.GetObject(); mObject.Delete();

Transaktionen

Das Lesen von Daten aus externen Quellen erfolgt wie bisher außerhalb einer Transaktion, beim Schreiben öffnet die Plattform eine implizite Transaktion. Gleichzeitig können Sie in expliziten Transaktionen mit Objektmethoden sowohl lesen als auch schreiben ExternalDataSourceManager:

  • StartTransaktion();
  • CommitTransaktion();
  • CancelTransaction().

Schlösser

  • Auto;
  • Gelang es;
  • Automatisch und kontrolliert.

sowie die Eigenschaft der externen Quelltabelle IsolationsstufeTransaktionen:

Darüber hinaus können Sie die Ebene der Sperren in der Methode unabhängig festlegen StartTransaktion().

Ich habe den typischen Artikel mit Beispielen ergänzt.) Es wird mehr Zeit geben - ich werde weitere Beispiele hinzufügen.

In Version 8 des 1C-Programms haben die Entwickler die Funktionalität um die Möglichkeit erweitert, Datenbanken von Drittanbietern zu verbinden und Informationen direkt aus dem Konfigurator zu erhalten, ohne sie zu verwenden COM-Verbindungen und OLE-Objekte. Diese Funktion wird mithilfe eines neuen Objekts implementiert – „Externe Datenquellen“.

Externe Datenquellen in 1C können auf die gleiche Weise wie die übrigen Systemtabellen verwendet werden:

  1. Bei der Erstellung von Berichten und Berechnungen mit einem Datenkompositionssystem (ACS);
  2. Um Links zu Informationen zu erhalten, die in Quellen Dritter gespeichert sind;
  3. Um die in den Tabellen gespeicherten Daten zu ändern;
  4. Bei Anfragen.

Es ist wichtig zu wissen, dass dieser Mechanismus nicht für die Arbeit mit anderen 1C-Datenbanken ausgelegt ist, da das 1C.Enterprise-Betriebsmodell selbst keine Eingriffe in Daten auf der Ebene physischer Tabellen impliziert.

Erstellen einer neuen Quelle

Das Hinzufügen einer neuen externen Quelle zum Programm erfolgt im Modus "Konfigurator". Im Konfigurationsbaum gibt es einen entsprechenden Zweig (Abb. 1)

Beim Erstellen einer neuen Quelle müssen Sie schwitzen, obwohl das Formular des neuen Objekts nur vier Registerkarten hat:

  1. Basic;
  2. Daten;
  3. Funktionen;
  4. Rechte.

Die erste Registerkarte hat nur einen interessanten Parameter - den Sperrsteuerungsmodus. Wenn Sie keine Fragen zum Sperren von Daten in Transaktionen stellen, zu den Feinheiten der Parallelisierung Informationsflüsse Sie können diese Einstellung im automatischen Sperrmodus belassen. Dieser Ansatz kann jedoch zu übermäßigen Einschränkungen führen (z. B. wenn das Programm anstelle eines einzelnen Datensatzes die gesamte physische Tabelle sperrt und anderen Benutzern die Möglichkeit nimmt, damit zu arbeiten).

Verwaltete Sperren verwenden im Gegensatz zu automatischen Sperren den Transaktionsmechanismus des Programms selbst und nicht des DBMS, wodurch Sie Tabellenerfassungen in viel mehr übersetzen können niedriges Niveau.

Indem wir diesen Parameter auf „Automatisch und verwaltet“ setzen, geben wir dem System die Möglichkeit zu bestimmen, welcher Modus verwendet werden soll, indem wir uns direkt auf die ähnliche Eigenschaft jeder spezifischen Tabelle beziehen.

Registerkarte „Daten“ des Eigenschaftenformulars für externe Quellen

Die Form der Registerkarte „Daten“ ist in Abb. 2

Reis. 2

Hier können wir externe Quelltabellen und Cubes hinzufügen. Es gibt zwei Möglichkeiten, eine Tabelle hinzuzufügen:

  1. Manuell sehen wir dann das Formular zum Hinzufügen einer Tabelle (Abb. 3);

Reis. 3

  1. Oder wählen Sie aus der Liste der physikalischen Quelltabellen (Abb. 4), in diesem Fall öffnet sich ein spezieller Konstruktor vor uns.

Reis. vier

Schauen wir uns das Formular zum Hinzufügen einer Tabelle genauer an. Die Eigenschaft "Name" dient der eindeutigen Identifizierung eines Objekts in einer Konfiguration.

Der Vergleich des Metadatenobjekts und der endgültigen physischen Tabelle erfolgt über die Eigenschaft „Name in der Datenquelle“, die sich auf der Registerkarte „Zusätzlich“ befindet (Abb. 5).

Reis. 5

Als nächstes müssen wir den Typ der Tabelle oder besser gesagt ihre Objektivität bestimmen. Wenn die in der Struktur gespeicherten Daten durch ein beliebiges Feld eindeutig identifiziert werden können, kann die Tabelle eine Objekttabelle sein. Wenn die Identität des Datensatzes durch eine Reihe von Schlüsselfeldern bestimmt wird, muss die Tabelle einen Nicht-Objekttyp haben.

Wenn wir solche Tabellen mit anderen Metadatenobjekten vergleichen, können wir die folgende Analogie ziehen:

  • Objekttabellen sind Nachschlagewerke;
  • Nicht objektiv sind Informationsregister.

Die Menge der Schlüsselfelder wird im nächsten Formularparameter ("Key Fields") definiert. Dieses Feld ist erforderlich. Wenn Sie es leer lassen, tritt beim Speichern der Konfiguration ein Fehler auf.

Wie Sie in Abb. 5 sehen können, stehen einige Felder und Formularschaltflächen nicht zur Bearbeitung zur Verfügung:

  • Ausdruck in Datenquelle;
  • Tabellendatentyp;
  • Ansichtsfeld;
  • Handler anzeigen.

Sie können erst verwendet werden, nachdem wir die Tabellenfelder ausgefüllt, ihren Typ definiert und ihre Identifikatoren eingestellt haben (Abb. 6).

Reis. 6

Hier sollten Sie auf die Option "Null zulassen" achten, wenn diese Checkbox aktiviert ist, ist ein solches Feld nicht erwünscht, um als Schlüssel verwendet zu werden.

Tabellenkonstrukteur

Vielleicht das wichtigste und interessanter Punkt beim Arbeiten mit externen Quellen besteht darin, eine Verbindungszeichenfolge zu erstellen. Sein Konstruktor öffnet sich, wenn Sie auf die Schaltfläche mit den drei Punkten neben dem Parameter "Verbindungszeichenfolge" klicken.

Zunächst werden wir aufgefordert, uns für den Treiber zu entscheiden, der für die Verbindung verwendet wird (Abb. 7).

Reis. 7

Bei falscher Definition dieses Parameters können Sie keine Verbindung zu einem Drittanbieter herstellen Informationsbasis. Es versteht sich auch, dass nicht alle in der Dropdown-Liste angegebenen Treiber zum automatischen Generieren einer Verbindungszeichenfolge verwendet werden können. Wenn die Plattform einen Fehler ausgibt (Abb. 8), muss die Verbindungszeichenfolge manuell geschrieben werden.

Abb.8

Reis. 9

Die Leitung selbst ist ein streng geregeltes Bauwerk.

Beispiel für eine Verbindungszeichenfolge

Stellen Sie sich eine Datenbank eines Drittanbieters vor, die in erstellt wurde Microsoft Access und befindet sich im Stammverzeichnis von Laufwerk D. Um diese Basis zu verbinden, müssen wir den entsprechenden Treiber verwenden, aber die Auswahl im Zeilenkonstruktor führt zu einem Fehler Abb.8.

Die Verbindungsparameter schreiben wir selbst.

Driver=(Microsoft Access Driver (*.mdb)) - so sieht der erste Teil der Zeile aus. In geschweiften Klammern haben wir den Treiber definiert.

Zum Excel-Dateien so wird es aussehen Microsoft Excel Driver (*.xls)) , für Excel-Dateien, die in Office älter als 2003 erstellt wurden, sieht die Treiberzeile wie folgt aus (Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)).

Wenn wir diesen Parameter durch ein Semikolon vom nächsten trennen, müssen wir die Adresse unseres Speichers schreiben (in unserem Fall DBQ=D:\Database1.mdb).

Wenn wir diese beiden Parameter hinzufügen, erhalten wir Driver=(Microsoft Access Driver (*.mdb));DBQ=D:\Database1.mdb. Wenn wir diesen Parameter schreiben, erhalten wir Zugriff auf die internen Strukturen dieser Datenbank.

Für das Objekt „Externe Quelle“ reicht es nicht aus, es nur in der Konfiguration anzulegen, es muss auch im Modus „Enterprises“ verbunden werden. Dies ist über das Menü „Alle Funktionen“ -> Externe Quellen möglich. Wenn wir unsere Tabelle zum ersten Mal betreten, müssen wir dieselbe Verbindungszeichenfolge bereits im „Enterprise“-Modus schreiben.