19.07.2023
Rumah / Senang mendengarnya / 1c string koneksi sumber data eksternal. Sumber data eksternal. Contoh rangkaian koneksi

1c string koneksi sumber data eksternal. Sumber data eksternal. Contoh rangkaian koneksi

Mengapa kesempatan ini membangkitkan minat seperti itu? Setiap orang yang telah memprogram dalam 1C cukup akrab dengan SQL dan setidaknya secara umum akrab dengan arsitektur dan prinsip pengembangan platform teknologi lain untuk aplikasi bisnis akan memberi tahu Anda dengan pasti apa yang paling dia sukai di 1C. Tentu saja, pembuat kueri adalah mekanisme yang paling nyaman dan bijaksana untuk menulis kueri untuk mendapatkan data dari struktur relasional yang pernah saya temui secara pribadi. Dan sekarang 1C telah memberi kami kesempatan luar biasa untuk menggunakannya tidak hanya dengan 1C, tetapi juga dengan tabel lainnya. Ini hanya sekumpulan "terbang dalam salep" yang dituangkan ke dalam "tong madu" ini. Semuanya teratur:

1) Pengaturan dan penggunaan- tanpa "menari dengan rebana" tidak akan berhasil
a) Tambahkan sumber data eksternal - sepertinya tidak rumit
b) centang kotak "Pilih dari daftar" - perlu - ini diperlukan untuk memeriksa kinerja di awal dan menyelamatkan Anda dari masalah yang tidak perlu
c) - pastikan untuk menekan "..." - koneksi ODBC. Bukan OLEDB seperti yang biasa kita lakukan, tapi satu tingkat lebih rendah

D) Berhati-hatilah di sini.

Ini adalah driver ODBC - jika Anda menggunakan versi client-server, itu harus ada di server. Jika Anda mengembangkan pada satu sistem, dan versi kerja di sisi lain (seperti biasanya) pastikan tidak ada kejutan untuk Anda. Rekomendasi yang aneh, tetapi pilih driver tertua atau paling umum jika Anda tidak terlalu peduli dengan kecepatan dan Anda tidak bermaksud melampaui batas standar SQL92. Ini akan memberi Anda kompatibilitas yang lebih baik. Misalnya untuk SQL Server 2008 pengemudi terbaik akan ada SQL Server Native Client 11, tetapi saya sarankan memilih SQL Server saja, jika tidak, klien asli ini harus diinstal baik di server atau di semua mesin klien (dalam hal menggunakan versi file), dan itu akan tidak memberi banyak keuntungan untuk tugas-tugas sederhana.
e) Dialog pemilihan Server Standar

E) Saya sarankan untuk menjawab "ya" untuk pertanyaan tentang menyimpan kata sandi, jika tidak maka tidak akan berhasil untuk memulai bisnis ini.
g) Pilih tabel dan detailnya... peluang bagus - Anda dapat langsung mengganti namanya sesuka Anda (dan detailnya juga), sementara di properti Anda akan melihat nama bidang sumber data

H) Dan sekarang Anda menjalankan, buka perancang kueri - Anda dengan bodohnya memilih semua catatan dari tabel dan OPA - kesalahan. Apa yang harus dilakukan? Jika Anda memiliki antarmuka terkelola, lihat di menu layanan, dan jika Anda memiliki antarmuka normal...
Saya pribadi menggunakan kode ini:
Kode 1C v 8.x Parameter = ExternalDataSources.DAX.GetCommonConnectionParameters();
Parameters.AuthenticationStandard = true;
Parameter.UserName = "sa";
Parameter.Password = "pas";
Parameters.ConnectionString = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;DATABASE=database";
Parameter.DBMS = "MSSQLServer";

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

ExternalDataSources.DAX.SetConnection();
Mungkin beberapa bagian tidak diperlukan, tetapi berhasil.
Anda perlu mengeksekusi kode SEKALI. Setelah itu, itu akan terhubung secara normal ... tentu saja mistisisme - mengapa itu perlu tidak jelas ...

2) Sumber data hanya-baca- Ya, keajaiban tidak terjadi ... tapi terkadang Anda ingin ....

3) JANGAN GUNAKAN MEREKA BERSAMA DENGAN SUMBER DATA INTERNAL
Secara pribadi, fakta ini langsung membunuh saya.

Bagaimana .... apa yang mereka tunggu dan sudah bayangkan dan jilat bagaimana kita sekarang dalam satu permintaan menggabungkan data kita dengan 1C, memutarnya - mengelompokkannya, memasukkannya ke dalam laporan, tetapi tidak ada .. .
Tapi tentu saja, ini tidak menghentikan orang yang berpengalaman ... pikiran apa yang muncul di benak? Benar - tabel sementara:

4) JANGAN GUNAKAN MEREKA BERSAMA DENGAN TABEL SEMENTARA

Tapi ini tidak lagi terlihat seperti kesulitan teknologi, tapi sangat mirip dengan apa yang mereka ingin kita lakukan "agar hidup tidak tampak seperti surga" :).

5) Hanya dapat digunakan pada koneksi SKD
Bagi yang belum tahu, ada di ACS pada tab "Dataset Links". Seberapa sering Anda menggunakannya? Nyaman? Rupanya mereka ingin memaksa kami untuk lebih sering menggunakannya. Tetapi ada kolom "Kondisi tautan" dan "Parameter tautan". Saya tidak menemukan contoh penggunaannya dalam konfigurasi tipikal apa pun, dalam dokumentasi dan di Khrustaleva, juga, entah bagaimana semuanya tidak transparan. Adakah yang bisa menjelaskan kepada saya bagaimana "kondisi tautan" bekerja. Jika Anda menulis SourceAttribute = ReceiverRevision di sana, itu tidak akan berhasil. Tentu saja, syaratnya dapat ditulis di bidang "Ekspresi" - dalam banyak kasus ini sudah cukup ... tetapi entah bagaimana itu tidak mudah.

Secara total, masalah ini sebelumnya diselesaikan di suatu tempat seperti ini:
Kode 1C v 8.x Fungsi MenginisialisasiDataSource()

DateStart = BuilderSettings.Settings.DataParameters.Items.Value;
DateCon = BuilderSettings.Settings.DataParameters.Items.Value;
Jika DateCon > "20100101" Kemudian
DateCon = "20100101";
Berakhir jika;

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

ArrayNumber = New Array();
ArrayNumber.Add(Type("Nomor"));

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

ArrayData = Array Baru();
ArrayDate.Add(Type("Tanggal"));

//Kami akan mengisi biaya akuntansi di tabel
TypeNumber = NewTypeDescription(ArrayNumber,KN);
StringType = NewTypeDescription(ArrayString, CS);
TypeDate = NewTypeDescription(ArrayDate);

//tabel untuk memuat data dari SQL
TK = TabelNilai Baru();
TK.Columns.Add("NomenclatureCode", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add("Periode", TypeDate);

TK.Indices.Add("Periode");

// Hubungkan ke SQL
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=;Gunakan Enkripsi for Data=False;Tag with column collation when possible=False;Initial Catalog=Reports";
Koneksi = COMObject Baru("ADODB.Connection");
Command = New COMObject("ADODB.Command");
RecordSet = New COMObject("ADODB.RecordSet");
Tanggal = "";
Percobaan
Connection.Open(ShortLP(ConnectionString));
Command.ActiveConnection = Koneksi;
Command.CommandText = "Pilih * dari PH di mana periode >= "" + String(Format(DateStart, "DF=yyyyMMdd")) + "" dan periode<= "" + Строка(Формат(ДатаКон, "ДФ=ггггММдд")) + """;
RecordSet = Perintah.Jalankan();
RecordSet.MoveFirst();
Pengecualian
Pengembalian TK;
Akhir Percobaan;

Sedangkan RecordSet.EOF = False Loop
String = TK.Tambah();
String.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Nama).Nilai;
String.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Nama).Nilai;
String.Periode = RecordSet.Fields(RecordSet.Fields.Item(13).Nama).Nilai;
RecordSet.MoveNext();
Akhiri Siklus;

Permintaan = Permintaan Baru();
VrTable = NewTempTableManager();
Query.SetParameter("vDataTable", TK);
Query.SetParameter("StartDate", StartDate);
Query.SetParameter("DateCon", DateCon);
Query.Text = "PILIH
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Periode
|PUT Tabel Data
| DARI
| & vrDataTable SEBAGAI vrDataTable
|DIMANA
| vrDataTable.Periode >= &TanggalMulai
| Dan vrDataTable.Periode<= &ДатаКон";
Permintaan.Jalankan();
TK = Tidak terdefinisi;

Permintaan = Permintaan Baru;
Query.TempTableManager = VrTable;
Query.Text = "Ini adalah kueri yang melibatkan tabel temp";

Hasil = Permintaan.Jalankan();
Hasil Pengembalian;

Fungsi Akhir

OuterSet = MenginisialisasiDataSource();
DataSet = Struktur Baru();
DataSet.Insert("Tabel SQL", ExternalSet);
GenericReports.Generate GenericReport(ThisObject, Result, Data Dekripsi, OutputToReportForm,DataSet);

Sebenarnya, tidak banyak baris kode dan cukup standar ... dalam hal ini, Anda dapat menggunakan fungsionalitas penuh pembuat kueri, dan hanya memberikan fungsi KOMPOSISI DATA di ACS

Tapi, tentu saja, tampilannya sedikit tidak begitu indah ... dan mengunggah ke tabel nilai setiap kali Anda perlu menulis kode dan memeriksa apakah Anda membuat kesalahan atas nama detailnya ... jika tidak, apa yang diberikan kepada kami di 1C terlihat setengah hati. Saya belum memutuskan mana yang lebih nyaman digunakan. Anda memutuskan, dan menulis tentang keputusan Anda dan apa yang mendorong Anda untuk membuatnya.

Informasi diambil dari situs

Rilis 8.2.14.533 - akhirnya versi yang kurang lebih stabil dari rilis ke-14 platform. Terakhir, ada kesempatan untuk mencoba peluang bagus - "sumber data eksternal".

Mengapa peluang ini begitu menarik? Setiap orang yang telah memprogram dalam 1C cukup akrab dengan SQL dan setidaknya secara umum akrab dengan arsitektur dan prinsip pengembangan platform teknologi lain untuk aplikasi bisnis akan memberi tahu Anda dengan pasti apa yang paling dia sukai di 1C. Tentu saja, pembuat kueri adalah mekanisme yang paling nyaman dan bijaksana untuk menulis kueri untuk mendapatkan data dari struktur relasional yang pernah saya temui secara pribadi. Dan sekarang 1C telah memberi kami kesempatan luar biasa untuk menggunakannya tidak hanya dengan 1C, tetapi juga dengan tabel lainnya. Ini hanya sekumpulan "terbang dalam salep" yang dituangkan ke dalam "tong madu" ini. Semuanya teratur:

1) Menyiapkan dan menggunakan - tanpa "menari dengan rebana" tidak akan berhasil

A) Tambahkan sumber data eksternal - sepertinya tidak rumit
b) centang kotak "Pilih dari daftar" - perlu - ini diperlukan untuk memeriksa kinerja di awal dan menyelamatkan Anda dari masalah yang tidak perlu
V)
(IMG:http://pics.livejournal.com/comol/pic/0000cr1r.png)
- pastikan untuk menekan "..." - koneksi ODBC. Bukan OLEDB seperti yang biasa kita lakukan, tapi satu tingkat lebih rendah

Dan berada di sini SANGAT PERHATIAN.

Ini adalah driver ODBC - jika Anda menggunakan versi client-server, itu harus ada di server. Jika Anda mengembangkan satu sistem dan mengerjakan yang lain (seperti biasanya), pastikan Anda tidak mendapatkan kejutan apa pun. Rekomendasi yang aneh, tetapi pilih driver tertua atau paling umum jika Anda tidak terlalu peduli dengan kecepatan dan Anda tidak bermaksud melampaui batas standar SQL92. Ini akan memberi Anda kompatibilitas terbaik. Misalnya, untuk SQL Server 2008, driver terbaik adalah SQL Server Native Client 11, tetapi saya sarankan memilih SQL Server saja, jika tidak, klien asli ini harus diinstal baik di server atau di semua mesin klien (dalam kasus menggunakan versi file), dan keuntungan khusus untuk sederhana dia tidak akan memberi Anda pekerjaan.

E) Dialog pemilihan Server Standar

G) Pilih tabel dan detailnya ... peluang bagus - Anda dapat langsung mengganti namanya sesuka Anda (dan detailnya juga), sementara di properti Anda akan melihat nama bidang sumber data

H) Dan sekarang Anda menjalankan, buka perancang kueri - Anda dengan bodohnya memilih semua catatan dari tabel dan OPA - kesalahan. Apa yang harus dilakukan? Jika Anda memiliki antarmuka terkelola, lihat di menu layanan, dan jika Anda memiliki antarmuka normal...
Saya pribadi menggunakan kode ini:

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

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

ExternalDataSources.DAX.SetConnection();

Mungkin beberapa bagian tidak diperlukan, tetapi berhasil. Perlu menjalankan kode SEKALI. Setelah itu, itu akan terhubung secara normal ... tentu saja mistisisme - mengapa itu perlu tidak jelas ...

2) Sumber data hanya-baca
Ya, keajaiban tidak terjadi ... tapi terkadang Anda ingin ....

3) JANGAN GUNAKAN MEREKA BERSAMA DENGAN SUMBER DATA INTERNAL
Secara pribadi, fakta ini langsung membunuh saya.

Bagaimana .... apa yang mereka tunggu dan sudah bayangkan dan jilat bagaimana kita sekarang dalam satu permintaan menggabungkan data kita dengan 1C, memutarnya - mengelompokkannya, memasukkannya ke dalam laporan, tetapi tidak ada .. .

Tapi tentu saja, ini tidak menghentikan orang yang berpengalaman ... pikiran apa yang muncul di benak? Benar - tabel sementara:

4) JANGAN GUNAKAN MEREKA BERSAMA DENGAN TABEL SEMENTARA

Tapi ini tidak lagi terlihat seperti kesulitan teknologi, tapi sangat mirip dengan apa yang mereka ingin kita lakukan "agar hidup tidak tampak seperti surga" (IMG :) .

5) Hanya dapat digunakan pada koneksi SKD

Bagi yang belum tahu, ada di ACS pada tab "Dataset Links". Seberapa sering Anda menggunakannya? Nyaman? Rupanya mereka ingin memaksa kami untuk lebih sering menggunakannya. Tetapi ada kolom "Kondisi tautan" dan "Parameter tautan". Saya tidak menemukan contoh penggunaannya dalam konfigurasi tipikal apa pun, dalam dokumentasi dan di Khrustaleva, juga, entah bagaimana semuanya tidak transparan. Adakah yang bisa menjelaskan kepada saya bagaimana "kondisi tautan" bekerja. Jika Anda menulis SourceAttribute = ReceiverRevision di sana, itu tidak akan berhasil. Tentu saja, syaratnya dapat ditulis di bidang "Ekspresi" - dalam banyak kasus ini sudah cukup ... tetapi entah bagaimana itu tidak mudah.

Secara total, masalah ini sebelumnya diselesaikan di suatu tempat seperti ini:

Fungsi MenginisialisasiDataSource()

DateStart = BuilderSettings.Settings.DataParameters.Items.Value;
DateCon = BuilderSettings.Settings.DataParameters.Items.Value;
Jika DateCon > "20100101" Kemudian
DateCon = "20100101";
Berakhir jika;

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

ArrayNumber = New Array();
ArrayNumber.Add(Type("Nomor"));

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

ArrayData = Array Baru();
ArrayDate.Add(Type("Tanggal"));

//Kami akan mengisi biaya akuntansi di tabel
TypeNumber = NewTypeDescription(ArrayNumber,KN);
StringType = NewTypeDescription(ArrayString, CS);
TypeDate = NewTypeDescription(ArrayDate);

//tabel untuk memuat data dari SQL
TK = TabelNilai Baru();
TK.Columns.Add("NomenclatureCode", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add("Periode", TypeDate);

TK.Indices.Add("Periode");

// Hubungkan ke SQL
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=;Gunakan Enkripsi for Data=False;Tag with column collation when possible=False;Initial Catalog=Reports";
Koneksi = COMObject Baru("ADODB.Connection");
Command = New COMObject("ADODB.Command");
RecordSet = New COMObject("ADODB.RecordSet");
Tanggal = "";
Percobaan
Connection.Open(ShortLP(ConnectionString));
Command.ActiveConnection = Koneksi;
Command.CommandText = "Pilih * dari PH dengan periode >= "" + String(Format(DateStart, "DF=yyyyMMdd")) + "" dan periode RecordSet = Command.Execute();
RecordSet.MoveFirst();
Pengecualian
Pengembalian TK;
Akhir Percobaan;

Sedangkan RecordSet.EOF = False Loop
String = TK.Tambah();
String.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Nama).Nilai;
String.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Nama).Nilai;
Baris.Periode = RecordSet.Fields(RecordSet.Fields.Item(13).Nama).Nilai;
RecordSet.MoveNext();
Akhiri Siklus;

Permintaan = Permintaan Baru();
VrTable = NewTempTableManager();
Query.SetParameter("vDataTable", TK);
Query.SetParameter("StartDate", StartDate);
Query.SetParameter("DateCon", DateCon);
Query.Text = "PILIH
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Periode
|PUT Tabel Data
| DARI
| & vrDataTable SEBAGAI vrDataTable
|DIMANA
| vrDataTable.Periode >= &TanggalMulai
| Dan vrDataTable.Period Query.Execute();
TK = Tidak terdefinisi;

Permintaan = Permintaan Baru;
Query.TempTableManager = VrTable;
Query.Text = "Ini adalah kueri yang melibatkan tabel temp";

Hasil = Permintaan.Jalankan();
Hasil Pengembalian;

Fungsi Akhir

OuterSet = MenginisialisasiDataSource();
DataSet = Struktur Baru();
DataSet.Insert("Tabel SQL", ExternalSet);
GenericReports.Generate GenericReport(ThisObject, Result, Data Dekripsi, OutputToReportForm,DataSet);

Sebenarnya, tidak banyak baris kode dan cukup standar ... dalam hal ini, Anda dapat menggunakan fungsionalitas penuh pembuat kueri, dan hanya memberikan fungsi KOMPOSISI DATA di ACS

Tapi, tentu saja, tampilannya sedikit tidak begitu indah ... dan mengunggah ke tabel nilai setiap kali Anda perlu menulis kode dan memeriksa apakah Anda membuat kesalahan atas nama detailnya ... jika tidak, apa yang diberikan kepada kami di 1C terlihat setengah hati. Saya belum memutuskan mana yang lebih nyaman digunakan. Anda memutuskan, dan menulis tentang keputusan Anda dan apa yang mendorong Anda untuk membuatnya.

[Anda perlu mendaftar untuk melihat tautan]

Sumber eksternal Data 1C adalah objek metadata yang relatif baru 1C 8.3 dan 8.2, dengan bantuan yang memungkinkan untuk menghubungkan sumber data eksternal ke 1C: tabel SQL, Excel, Access, FoxPro (dbf), database 1C lainnya, Oracle, Paradox (db ), - dan bahkan membaca dari file sederhana txt/csv.

Ini memberi banyak peluang untuk bekerja dengan sistem lain. Mari pertimbangkan lebih detail.

Menyiapkan sumber data eksternal di 1C 8

Menyiapkan sumber eksternal bersifat individual untuk setiap jenis sistem. Tapi, sebagai aturan, bagian umum dari pengaturannya sama - ini adalah pengaturan string koneksi:

Dapatkan 267 pelajaran video 1C gratis:

Jika string koneksi benar, sistem akan meminta Anda untuk memilih tabel yang diperlukan dari database. Hasilnya, kami mendapatkan tabel yang sudah jadi di mana Anda dapat menentukan bidang kunci (bidang unik) dan bidang tampilan (bagaimana catatan akan tercermin dalam 1C):

Menggunakan sumber data eksternal dalam 1C 8.3

Sumber data eksternal dalam 1C dapat digunakan seperti tabel database lainnya. Platform secara otomatis menghasilkan formulir untuk mereka jika tidak disetel. Kueri juga dapat menggunakan data dari sumber eksternal.

Pada platform versi 8.3.5.1068 (dan yang lebih baru), dimungkinkan untuk menambah, memodifikasi, dan menghapus data di sumber eksternal alat perangkat lunak 1C. Contoh fitur ini disajikan dalam artikel ini.

Untuk memungkinkan perekaman ke sumber eksternal, 1C telah menambahkan properti baru ke tabel data dan bidang sumber eksternal:

  • Untuk seluruh tabel - properti Hanya membaca. Baca Saja = Benar berarti mengubah data dalam tabel ini tidak dimungkinkan;
  • Untuk masing-masing bidang tabel - properti Hanya membaca, AllowNull Dan Isi nilai:
    • Baca Saja = Benar berarti mengubah data di bidang ini tidak dimungkinkan;
    • AllowNull = Benar berarti bahwa nilai dapat ditulis ke bidang ini BATAL;
    • Isi nilai berisi nilai default bidang ini (jika ada).

Anda (saat mendeskripsikan tabel secara manual) atau platform (saat membuat tabel dengan desainer) dapat menggunakan properti ini dengan cara berikut.

  • Baca Saja = Benar atur, misalnya untuk tampilan (tampilan), tabel diperoleh berdasarkan ekspresi (hasil fungsi) dan sejenisnya. Data dalam tabel tersebut tidak dapat diubah;
  • Baca Saja = Benar tentukan untuk bidang yang diatur secara otomatis ( PENINGKATAN OTOMATIS), kolom kalkulasi, dan sejenisnya. Data di bidang ini tidak dapat diubah;
  • AllowNull = Benar atur untuk semua bidang, kecuali untuk bidang kunci, dan yang dijelaskan dalam sumber eksternal sebagai BUKAN NULL;
  • Isi nilai bidang untuk diatur dalam kasus ketika nilai standar bidang ini ditentukan dalam sumber eksternal (nilai BAWAAN).

Anda dapat menambah, memodifikasi, dan menghapus data di sumber eksternal menggunakan bahasa bawaan atau secara interaktif. Dalam bahasa bawaan, metode pengelola tabel berikut digunakan untuk ini:

  • Buat RecordSet()- untuk tabel non-objek;
  • Metode baru BuatObjek()- untuk tabel objek.

Dengan demikian, objek ExternalDataSourceTableRecordSet Dan ExternalDataSourceTableObject metode baru muncul Menulis() Dan Menghapus().

Menambahkan data

Saat Anda menambahkan data ke sumber eksternal, Anda membuat objek (atau kumpulan rekaman), menetapkan nilai bidang, dan menulis. Namun, ada beberapa fitur yang berguna untuk diketahui.

Misalnya, saat mencoba menyetel nilai bidang yang memiliki Baca Saja = Benar, kesalahan akan terjadi. Dan saat menulis langsung ke database di ekspresi MENYISIPKAN bidang seperti itu akan dilewati. Kolom lainnya diisi dengan nilai yang Anda tetapkan. Oleh karena itu, nilai-nilai Batal dan nilai default harus ditetapkan ke bidang secara eksplisit.

  • pengenal(AllowNull = Benar);
  • nama(AllowNull = Benar);
mCharacteristic = ExternalDataSources.IM.Tables.shop_feature.CreateObject(); mKarakteristik.id = Kode; mCharacteristic.name = Nama; mCharacteristic.Write();

Eksekusi pernyataan Menulis() akan menyebabkan event handler dipanggil terlebih dahulu Sebelum Merekam, maka penulisan fisik dibuat ke tabel sumber eksternal ( MENYISIPKAN), maka event handler akan dipanggil Saat Merekam.

Dengan bidang kunci dari tabel sumber eksternal, Anda dapat melakukan hal berikut. Jika bidang kunci dapat diedit, maka Anda "secara manual" menetapkan nilainya sebelum menulis. Jika mengubah bidang kunci dilarang, maka platform akan mendapatkan kunci secara mandiri MENYISIPKAN atau segera setelahnya. Anda dapat melakukan intervensi dalam proses ini dengan metode tersebut SetReferensiBaru() sebelum catatan fisik (di event handler Sebelum Merekam) atau langsung setelah entri fisik (di event handler Saat Merekam).

Ubah data

Saat data diubah, nilai semua bidang tabel yang dimiliki Baca Saja = Salah.

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

Jika perlu merekam hanya beberapa bidang, Anda dapat menentukan daftarnya langsung dari bahasa bawaan menggunakan metode SetWritableFields() Dan GetWritableFields().

Menghapus data

Menghapus data secara langsung akan menghapus satu baris dari tabel database. Pada saat yang sama, referensi ke objek yang dihapus tidak dicari. Jika fungsionalitas tersebut diperlukan, Anda dapat memprogramnya sendiri di event handler SebelumHapus().

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

Transaksi

Membaca data dari sumber eksternal, seperti sebelumnya, dilakukan di luar transaksi, dan saat menulis, platform membuka transaksi implisit. Pada saat yang sama, Anda dapat melakukan pembacaan dan penulisan dalam transaksi eksplisit menggunakan metode objek ExternalDataSourceManager:

  • MulaiTransaksi();
  • Transaksi Komit();
  • BatalTransaksi().

Kunci

  • Mobil;
  • Dikelola;
  • Otomatis dan terkontrol.

serta properti tabel sumber eksternal Transaksi Tingkat Isolasi:

Selain itu, Anda dapat secara mandiri mengatur level kunci dalam metode ini MulaiTransaksi().

Saya melengkapi artikel tipikal dengan contoh) Akan ada lebih banyak waktu - saya akan menambahkan lebih banyak contoh.

Dalam versi 8 program 1C, pengembang menambahkan fungsionalitas kemampuan untuk menghubungkan database pihak ketiga dan mendapatkan informasi dari mereka langsung dari konfigurator, tanpa menggunakan koneksi COM dan objek OLE. Fitur ini diimplementasikan menggunakan objek baru - "Sumber Data Eksternal"

Sumber data eksternal dalam 1C dapat digunakan dengan cara yang sama seperti tabel sistem lainnya:

  1. Saat membuat laporan dan perhitungan menggunakan sistem komposisi data (ACS);
  2. Untuk mendapatkan tautan ke informasi yang disimpan di sumber pihak ketiga;
  3. Untuk mengubah data yang disimpan dalam tabel;
  4. Saat membuat permintaan.

Penting untuk diketahui bahwa mekanisme ini tidak dirancang untuk bekerja dengan database 1C lainnya, karena model operasi 1C.Enterprise itu sendiri tidak menyiratkan interferensi dengan data pada tingkat tabel fisik.

Membuat sumber baru

Menambahkan sumber eksternal baru ke program terjadi dalam mode "Configurator". Ada cabang yang sesuai di pohon konfigurasi (Gbr. 1)

Anda harus berkeringat saat membuat sumber baru, meskipun bentuk objek baru hanya memiliki empat tab:

  1. Dasar;
  2. Data;
  3. Fungsi;
  4. Hak.

Tab pertama hanya memiliki satu parameter menarik - mode kontrol kunci. Jika Anda tidak bertanya tentang pemblokiran data dalam transaksi, tentang seluk-beluk paralelisasi arus informasi Anda dapat membiarkan setelan ini dalam mode kunci otomatis. Namun, pendekatan ini dapat menyebabkan pembatasan yang berlebihan (misalnya, ketika alih-alih satu catatan, program mengunci seluruh tabel fisik, membuat pengguna lain tidak dapat bekerja dengannya).

Kunci terkelola, tidak seperti yang otomatis, menggunakan mekanisme transaksi yang melekat pada program itu sendiri, dan bukan di DBMS, yang memungkinkan Anda menerjemahkan tangkapan tabel ke lebih banyak level rendah.

Dengan menyetel parameter ini ke "Otomatis dan Terkelola", kami memberi sistem kemampuan untuk menentukan mode mana yang akan digunakan dengan merujuk langsung ke properti serupa dari setiap tabel tertentu.

Tab data formulir properti sumber eksternal

Bentuk tab "Data" ditunjukkan pada Gambar. 2

Beras. 2

Di sini kita dapat menambahkan tabel dan kubus sumber eksternal. Ada dua cara untuk menambahkan tabel:

  1. Secara manual, maka kita akan melihat form untuk menambahkan tabel (Gbr. 3);

Beras. 3

  1. Atau pilih dari daftar tabel sumber fisik (Gbr. 4), dalam hal ini konstruktor khusus terbuka di hadapan kita.

Beras. 4

Mari kita lihat lebih dekat formulir untuk menambahkan tabel. Properti "Nama" digunakan untuk mengidentifikasi objek secara unik dalam konfigurasi.

Perbandingan objek metadata dan tabel fisik terakhir terjadi melalui properti "Nama di sumber data" yang terletak di tab "Tambahan" (Gbr. 5)

Beras. 5

Selanjutnya, kita harus menentukan jenis tabelnya, atau lebih tepatnya objektivitasnya. Jika data yang disimpan dalam struktur dapat diidentifikasi secara unik melalui salah satu bidang, tabel tersebut dapat berupa tabel objek. Jika identitas rekaman ditentukan oleh kumpulan bidang kunci, tabel harus memiliki tipe non-objek.

Membandingkan tabel tersebut dengan objek metadata lainnya, kita dapat menggambar analogi berikut:

  • Tabel objek adalah buku referensi;
  • Non-objektif adalah daftar informasi.

Kumpulan bidang kunci ditentukan dalam parameter formulir berikutnya ("Bidang Kunci"). Bidang ini wajib diisi, jika dibiarkan kosong akan mengakibatkan kesalahan saat menyimpan konfigurasi.

Seperti yang Anda lihat dari Gbr.5, beberapa bidang dan tombol formulir tidak tersedia untuk diedit:

  • Ekspresi dalam sumber data;
  • tipe data tabel;
  • Lihat bidang;
  • Lihat penangan.

Mereka hanya dapat digunakan setelah kita mengisi bidang tabel, menentukan jenisnya dan menyetel pengenalnya (Gbr. 6)

Beras. 6

Di sini Anda harus memperhatikan opsi "Izinkan Null", jika kotak ini dicentang, bidang seperti itu tidak diinginkan untuk digunakan sebagai kunci.

Pembuat tabel

Mungkin yang paling penting dan poin yang menarik dalam bekerja dengan sumber eksternal adalah membuat string koneksi. Konstruktornya terbuka saat Anda mengklik tombol dengan tiga titik di sebelah parameter "String sambungan".

Pertama-tama kita akan diminta untuk menentukan driver yang akan digunakan untuk koneksi (Gbr. 7)

Beras. 7

Definisi yang salah dari parameter ini tidak akan memungkinkan Anda terhubung ke pihak ketiga basis informasi. Juga harus dipahami bahwa tidak semua driver yang ditentukan dalam daftar drop-down dapat digunakan untuk membuat string koneksi secara otomatis. Jika platform memberikan kesalahan (Gbr. 8), maka string koneksi harus ditulis secara manual.

Gbr.8

Beras. 9

Garis itu sendiri adalah konstruksi yang diatur secara ketat.

Contoh rangkaian koneksi

Pertimbangkan database pihak ketiga yang dibuat di akses microsoft dan terletak di root drive D. Untuk menghubungkan basis ini, kita harus menggunakan driver yang sesuai, tetapi memilihnya di konstruktor garis menyebabkan kesalahan Gbr.8.

Kami akan menulis sendiri parameter koneksi.

Driver=(Microsoft Access Driver (*.mdb)) - ini adalah tampilan bagian pertama baris. Dalam kurung kurawal, kami telah mendefinisikan driver.

Untuk File Excel itu akan terlihat seperti Microsoft Excel Driver (*.xls)) , untuk file Excel yang dibuat di kantor lebih lama dari tahun 2003, baris driver akan terlihat seperti (Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)).

Memisahkan parameter ini dari yang berikutnya dengan titik koma, kita harus menulis alamat penyimpanan kita (dalam kasus kita, DBQ=D:\Database1.mdb).

Menambahkan dua parameter ini, kami mendapatkan Driver=(Microsoft Access Driver (*.mdb));DBQ=D:\Database1.mdb, menulis parameter ini, kami mendapatkan akses ke struktur internal database ini.

Untuk objek "Sumber eksternal", tidak cukup hanya membuatnya dalam konfigurasi, tetapi juga harus terhubung dalam mode "Perusahaan". Ini dapat dilakukan dari menu "Semua fungsi"->Sumber eksternal. Saat pertama kali kita masuk ke tabel kita, kita perlu menulis string koneksi yang sama dalam mode "Enterprise".