Heim / Windows-Tutorials / Verbinden mit einer externen Datenquelle 1s 8.3. Externe Datenquellen. Beispiel für eine Verbindungszeichenfolge

Verbinden mit einer externen Datenquelle 1s 8.3. 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) hinzufügen externe Quelle Daten - wie nichts kompliziertes
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

Arbeiten Sie mit ihnen in Listen im 1C Enterprise-Modus.

Bei der Arbeit kommt es jedoch häufig vor, dass ein Teil der Daten woanders gespeichert ist.

  • Online-Shop (speichert normalerweise Daten in einer externen MySQL/SQL-Datenbank)
  • Eine andere Basis.

Um mit solchen Daten zu arbeiten, die in anderen Datenbanken gespeichert sind, müssen Sie spezielle Mechanismen entwickeln.

In Version 1C 8.2.14 erschien eine neue namens 1C External Data Sources, die die Arbeit des Programmierers erheblich erleichtert, da:

  • Jetzt müssen keine speziellen Mechanismen zum Abrufen von Daten erstellt werden
  • auf diese Daten kann zugegriffen werden
  • solche Daten können in 1C-Listen eingesehen werden.
    • Externe Datenquelle 1C - externe SQL-Datenbank

      Nehmen wir an, wir haben eine SQL-Datenbank, die die benötigten Daten speichert. Versuchen wir, Daten mit dem 1C External Data Source-Mechanismus daraus zu lesen.

      Lassen Sie uns eine externe Datenquelle 1C hinzufügen. Sie müssen zum Konfigurator gehen, externe Datenquellen befinden sich im Konfigurationsfenster ganz unten in der Baumstruktur.

      1. Verbindung

      Fügen wir eine neue externe Datenquelle 1C hinzu, nennen wir sie willkürlich.

      Die Datenbank besteht aus Tabellen. Wir müssen sie in der hinzugefügten externen Datenquelle hinzufügen. Klicken Sie mit der rechten Maustaste darauf und wählen Sie Tabelle hinzufügen.

      Beim ersten Mal werden Sie aufgefordert, eine Verbindungszeichenfolge anzugeben. Es kann manuell eingegeben oder gebildet werden, wofür Sie auf die Schaltfläche „…“ klicken müssen.

      Als Treiber wählen wir in unserem speziellen Fall "SQL Server"

      Lassen Sie uns die grundlegenden Parameter für die Verbindung mit SQL eingeben. Der Servername kann eingegeben oder aus der Liste ausgewählt werden.

      1C stellt eine Verbindung zu SQL her und fordert Sie auf, eine bestimmte Datenbank aus der Liste auszuwählen.

      Danach zeigt 1C eine Liste der Tabellen in dieser Datenbank und ihrer Spalten an. Sie müssen die erforderlichen Tabellen mit Kontrollkästchen auswählen.

      Tabellen und Spalten werden hinzugefügt. Die Namen sind so, wie sie in der entfernten Datenbank definiert sind. In 1C können Sie sie umbenennen (in den Eigenschaften).

      Hier ist ein Beispiel für eine hinzugefügte Tabelle:

      Hier ist ein Beispiel für eine hinzugefügte Spalte:

      Damit die 1C-Plattform mit einer externen Tabelle genauso arbeitet wie mit 1C-Verzeichnissen, können zusätzliche Parameter in der Tabelle angegeben werden:

      • Geben Sie in der Eigenschaft Schlüsselfeld eine der Spalten an, die die Zeile eindeutig identifiziert; wenn mehrere Zeilen Eindeutigkeit bieten, dann funktioniert diese Methode nicht (analog zum Feld Code)
      • Geben Sie in der Eigenschaft Ansichtsfeld eine der Spalten an, die eine kurze Darstellung der Zeichenfolge liefert (analog zum Feld Name).
      • Geben Sie in der Eigenschaft Tabellendatentyp Objektdaten an.

      2. Anzeigen

      Die Verbindung zur entfernten Datenbank wird nicht automatisch hergestellt. Um eine Verbindung herzustellen, müssen Sie ein typisches Menü auswählen.

      Im Standardzweig gibt es einen speziellen Befehl Externe Datenquellen verwalten, mit dem Sie die Verbindungsparameter (ihre eigenen für den 1C Enterprise-Modus) angeben und eine Verbindung herstellen können.

      Zuerst müssen Sie die Parameter für die Verbindung zur Datenbank angeben.

      Als Sie die Konfiguration im Konfigurator vorgenommen haben, wurde Ihnen als Ergebnis die Verbindungszeichenfolge angezeigt. Sie können es wieder sehen, indem Sie im Konfigurator erneut auf Tabelle hinzufügen klicken.

      Kopieren Sie die Verbindungszeichenfolge und geben Sie sie im 1C Enterprise-Modus an.

      Danach müssen Sie die eigentliche Verbindung herstellen.

      Nachdem die Verbindung hergestellt wurde, kann mit Listen gearbeitet werden.

      3. Verwendung in 1C-Sprache

      Die Verbindung kann auch aus dem Programmcode in der 1C-Sprache hergestellt werden.

      Verbindungsparameter werden wie folgt angegeben:
      ConnectionParameters = ExternalDataSources.SourceNameConfigurator.GetCommonConnectionParameters();

      ConnectionParameters.AuthenticationStandard = true;
      ConnectionParameters.UserName = "sa";
      ConnectionParameters.Password = "Passwort";
      ConnectionParameters.ConnectionString = "Verbindungsstring aus dem Konfigurator";
      ConnectionParameters.DBMS = "MSSQLServer";

      ExternalDataSources.SourceNameConfigurator.SetCommonConnectionParameters(ConnectionParameters);
      ExternalDataSources.SourceNameConfigurator.SetUserConnectionParameters(UserName(), Parameter);
      ExternalDataSources.SourceNameConfigurator.SetSessionConnectionParameters(Parameter);
      ExternalDataSources.SourceNameConfigurator.SetConnection();

      Sie können Daten aus der Datenbank mit der üblichen . Ein Beispiel für einen Abfragetext für eine externe Quelle OurExternalSource und tablesExternalSourceTable:

      WÄHLEN
      ExternalSource-Tabelle.Feldname
      AUS
      ExternalDataSource.OurExternalSource.Table.ExternalSourceTable"

      Externe Datenquelle 1C - Arbeiten mit einer Excel-Datei

      Versuchen wir eine andere Option - Arbeiten mit einer Excel-Datei über eine externe 1C-Datenquelle.

      Lassen Sie uns eine einfache Excel-Datei erstellen.

      Lassen Sie uns eine externe Quelle hinzufügen, nennen Sie sie willkürlich FileExcel. Fügen Sie die Tabelle „Sheet1 $“ hinzu. Wie Sie sehen können, ist dies der Name des Blatts in Excel mit dem Zusatz des „$“-Symbols.

      Lassen Sie uns wie im Fall von SQL Spalten hinzufügen. Sie können manuell hinzugefügt werden. Es ist wichtig sicherzustellen, dass die Typen der hinzugefügten Spalten übereinstimmen, da es sonst später zu einem Fehler wie „Datentypkonflikt“ kommen kann.

      Für die Spalte müssen Sie den Namen in 1C und den Namen in der Datenquelle angeben.

      Für Excel gibt es eine Funktion (ein Fehler wie "Zu wenige Parameter. Erfordert 3"):

      • Wenn die erste Zeile der Excel-Tabelle Spaltennamen enthält, müssen Sie nur den Namen dieser Spalte angeben, z. B. "Code".
      • Andernfalls müssen Sie den vollständigen Namen mit dem Tabellennamen „Sheet1$.Code“ angeben, aber in den Parametern „HDR=NO;“ hinzufügen.

      Die Verbindungsparameter für eine Excel-Datei sehen wie folgt aus:

      • XLSX-Dateien (Office-Version 2007 und höher)
        Driver=(Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb));DBQ=D:\FileExcel.xlsx;
      • XLS-Dateien (früher)
        Treiber=(Microsoft Excel-Treiber (*.xls)); FahrerID=790; DBQ=D:\FileExcel.xls;
        Sie müssen Ihren eigenen Namen und Pfad zur Datei angeben.

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) 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 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

und DB

f) 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 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<= &ДатаКон";
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.
Autor.

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 COM-Verbindungen und OLE-Objekte zu verwenden. 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 oder zu den Feinheiten der Parallelisierung von Informationsflüssen stellen, können Sie diesen Parameter 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 auf eine viel niedrigere Ebene übertragen können.

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 der 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

Der vielleicht wichtigste und interessanteste Punkt bei der Arbeit mit externen Quellen ist die Erstellung einer Verbindungszeichenfolge. 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 einer Drittanbieter-Infobase herstellen. 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

Betrachten wir eine Datenbank eines Drittanbieters, die in Microsoft Access erstellt wurde und sich im Stammverzeichnis von Laufwerk D befindet. Um diese Datenbank zu verbinden, müssen wir den entsprechenden Treiber verwenden, aber die Auswahl im Zeilenkonstruktor führt zu dem 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.

Für Excel-Dateien sieht es so aus (Microsoft Excel Driver (*.xls)) , für Excel-Dateien, die in Office älter als 2003 erstellt wurden, sieht die Treiberzeile so 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.