Sumber data eksternal 1c 8.3 excel. Sumber data eksternal

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

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-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 memperoleh data dari struktur relasional yang pernah saya temui secara pribadi. Dan sekarang 1C telah memberi kami kesempatan yang luar biasa untuk menggunakannya tidak hanya dengan 1C, tetapi juga dengan tabel lainnya. Berikut adalah sekelompok "lalat dalam salep" yang dituangkan ke dalam "tong madu" ini. Semuanya berurutan:

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

A) Tambahkan sumber luar data - seperti tidak ada yang rumit
b) centang kotak "Pilih dari daftar" - perlu - ini perlu 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, tetapi satu tingkat lebih rendah

Dan berada di sini SANGAT PERHATIAN.

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

E) Dialog pemilihan Server Standar

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

Z) Dan sekarang Anda menjalankan, buka desainer 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;
Parameters.UserName = "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(), 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 ... mistisisme tentu saja - mengapa itu perlu tidak jelas ...

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

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

Gimana nih.... yang sudah kita tunggu-tunggu dan sudah terbayang dan dijilat bagaimana kita sekarang dalam satu request akan menggabungkan data kita dengan 1C, matikan - kelompokkan, masukkan ke report, tapi ternyata tidak di sana ...

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

4) JANGAN GUNAKAN BERSAMA DENGAN TABEL SEMENTARA

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

5) Hanya dapat digunakan di koneksi SKD

Bagi yang belum tahu, ada di ACS pada tab "Dataset Links". Seberapa sering Anda menggunakannya? Nyaman? Rupanya mereka ingin memaksa kita untuk menggunakannya lebih sering. Tapi ada kolom "Link condition" dan "Link parameter". Saya tidak menemukan contoh penggunaannya dalam konfigurasi khas 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 berfungsi. Tentu saja, kondisinya 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 InisialisasiDataSource()

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

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

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

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

ArrayData = Array Baru();
ArrayDate.Add(Tipe("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 = Tabel Nilai Baru();
TK.Columns.Add("NomenclatureCode", TypeString);
TK.Columns.Add("Jumlah", TypeNumber);
TK.Columns.Add("Periode", TypeDate);

TK.Indices.Add("Periode");

// Hubungkan ke SQL
ConnectionString = "Penyedia=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Pwd=;Sumber Data=;Gunakan Prosedur untuk Siapkan=1;Terjemahkan Otomatis=True;Ukuran Paket=4096;ID Workstation=;Gunakan Enkripsi for Data=False;Tag dengan susunan kolom bila memungkinkan=False;Katalog Awal=Laporan";
Koneksi = COMObject Baru("ADODB.Koneksi");
Command = COMObject Baru("ADODB.Command");
RecordSet = COMObject Baru("ADODB.RecordSet");
Tanggal = "";
Percobaan
Connection.Open(ShortLP(ConnectionString));
Command.ActiveConnection = Koneksi;
Command.CommandText = "Pilih * dari PH di mana titik >= "" + String(Format(TanggalMulai, "DF=yyyyMMdd")) + "" dan titik RecordSet = Command.Execute();
RecordSet.MoveFirst();
Pengecualian
Pengembalian TK;
Akhir Upaya;

Sementara RecordSet.EOF = False Loop
String = TK.Tambah();
String.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Value;
String.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Nilai;
Row.Period = RecordSet.Fields(RecordSet.Fields.Item(13).Name).Nilai;
RecordSet.MoveNext();
Siklus Akhir;

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

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

Hasil = Permintaan.Jalankan();
Hasil Pengembalian;

Fungsi Akhir

OuterSet = InisialisasiDataSource();
DataSet = Struktur Baru();
DataSet.Insert("Tabel SQL", ExternalSet);
GenericReports.Generate GenericReport(Objek Ini, Hasil, Data Dekripsi, OutputToReportForm,DataSet);

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

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

[Anda harus mendaftar untuk melihat tautan]

Mulai dari versi 8.3.5, platform mengimplementasikan kemampuan untuk menulis data ke tabel sumber data eksternal. Artikel mempertimbangkan fungsi ini, yang memperluas kemungkinan yang ada untuk mengintegrasikan konfigurasi dengan sistem pihak ketiga.

Penerapan

Artikel ini membahas platform 1C 8.3.5. Materi ini juga relevan untuk rilis platform saat ini.

Menulis ke sumber data eksternal di 1C:Enterprise 8

Di platform 8.2.14, pohon metadata telah ditambahkan objek baru– sumber data eksternal. Tujuan dari mekanisme ini adalah untuk mendapatkan data dari database eksternal dalam kaitannya dengan 1C.

Dengan rilis rilis baru platform, sumber data eksternal telah berevolusi, misalnya, menjadi mungkin untuk menempatkannya di tabel sementara, melakukan penggabungan dengan tabel biasa.

Dalam artikel ini, kita akan melihat alat apa yang dimiliki pengembang untuk menulis ke sumber data eksternal.

Semua tindakan dilakukan pada DBMS Microsoft SQL Server 2008 R2.

Di platform 8.3.4, kemampuan untuk menggunakan fungsi yang dijelaskan dalam sumber data eksternal diimplementasikan.

Fitur ini memungkinkan Anda untuk menjalankan prosedur tersimpan di sisi SQL Server, dan dengan bantuannya mengakses data dari sumber eksternal, termasuk untuk menulis.

Mari kita ambil contoh. Mari kita buat database baru dengan nama kursy_test menggunakan SQL Management Studio. Semua percobaan lebih lanjut akan dilakukan di atasnya.

Pada database ini kita akan membuat tabel nomenklatura, untuk itu kita akan menulis script dengan isi sebagai berikut :

GUNAKAN [kursy_test]
PERGILAH
BUAT TABEL [ dbo ] . [nomenklatur](
[ id ] [ int ] TIDAK NULL ,
[ deskripsi ] [ nvarchar ](150 ) TIDAK NULL ,
[ harga ] [ numerik ](15 , 2 ) NULL ,
CONSTRAINT [ PK_id ] PRIMARY KEY ([ id ])
PERGILAH

Sebagai hasil dari eksekusi, tabel struktur berikut akan dibuat:

Sekarang kita perlu membuat dua prosedur tersimpan yang akan digunakan untuk memodifikasi data.

Mari kita panggil prosedur pertama insert_nomenklatura. Ini akan dirancang untuk menambahkan garis baru Ke meja. Script untuk membuatnya akan terlihat seperti ini:

GUNAKAN [kursy_test]
PERGILAH
BUAT PROSEDUR insert_nomenklatura
@id int ,
@deskripsi nvarchar(150 ),
@pricenumeric (15 , 2 )
SEBAGAI
MULAI
MASUKKAN KE [kursy_test].dbo. [ nomenklatura ] ([ id ], [ deskripsi ] ,[ harga ])
NILAI (@id , @deskripsi , @harga )
AKHIR
PERGILAH

Prosedur kedua, bernama update_nomenklatura, akan mengupdate record yang sudah ada di tabel. Untuk membuatnya, skrip berikut dijalankan:

Di Object Browser, tabel yang dihasilkan dan dua prosedur tersimpan terlihat seperti ini:

Kami telah menyelesaikan semua langkah persiapan di sisi Microsoft SQL Server, sekarang kita akan ke konfigurator 1C:Enterprise 8.

Kami membuat sumber data eksternal baru bernama Nomenklatura. Saat membuat tabel baru di sumber data ini, kami menentukan parameter berikut untuk menghubungkan ke sumber data:

String koneksi adalah sebagai berikut:

Driver = (SQL Server); Server =(lokal ); Basis data = cursy_test ; Id Pengguna = sa ; kata sandi =;

Jika pengguna sa memiliki kata sandi, itu harus ditentukan dalam parameter Kata Sandi dari string koneksi.

Jika semua parameter koneksi ditentukan dengan benar, saat Anda mengklik OK, sebuah jendela akan terbuka berisi tabel yang tersedia di sumber data:

Kami menandai bidang yang menarik bagi kami di tabel. Saat Anda menekan tombol Siap tabel dbo_nomenklatura akan dibuat di sumber data eksternal Nomenklatura:

Sekarang kita beralih ke tab "Fungsi" dari sumber data kita.

Menggunakan wizard serupa, kami menambahkan dua prosedur tersimpan:

Kami mendapatkan yang berikutnya penampilan tab "Fungsi":

Sekarang mari kita program antarmuka pengguna untuk bekerja dengan sumber data eksternal.

Dalam bentuk daftar di panel perintah, letakkan tombol "Tambah" dengan handler berikut:

&PadaKlien
Tambahkan() prosedur
waspada = baru DeskripsiAlerts(“BukaTabelSelesai”, Objek Ini );
Formulir Terbuka (
“ExternalDataSource.Nomenklatura.Table.dbo_nomenklatura.ObjectForm”
, , , , , ,
Peringatan, FormWindowOpenModeForm.LockAllInterface);
AkhirProsedur

&PadaKlien
Prosedur Simpan (Perintah)
SimpanDiServer();
Prosedur Akhir &Di Server
Prosedur SimpanDiServer()
Jika Objek.Referensi.Kosong() Kemudian
ExternalDataSources.Nomenklatura.dbo_insert_nomenklatura
Jika tidak
ExternalDataSources.Nomenklatura.dbo_update_nomenklatura
(Object.id , Object.description , Object.price );
Berakhir jika ;
AkhirProsedur

Dalam mode perusahaan, formulir daftar terlihat seperti ini:

Bentuk benda tersebut dapat dilihat di bawah ini:

Klik pada gambar untuk memperbesar.

Jadi, dengan menggunakan prosedur tersimpan, kami telah menerapkan penulisan ke sumber data eksternal.

Di platform 8.3.5, fitur baru telah muncul - menulis ke sumber data eksternal secara langsung, melewati mekanisme prosedur tersimpan yang dibahas di atas.

Data dapat diedit baik secara terprogram maupun interaktif. Dan untuk contoh kami, Anda tidak perlu menggunakan konfigurasi.

Di bilah perintah dan di menu "Lainnya", Anda dapat melihat tombol standar, seperti "Buat", "Salin", "Edit", dll.

Klik pada gambar untuk memperbesar.

Dan dalam bentuk objek, tombol "Simpan" dan "Simpan dan tutup" muncul:

Seperti yang Anda lihat, sekarang bekerja dengan sumber eksternal mirip dengan bekerja dengan direktori, dokumen, dll.

Pertimbangkan perubahan apa yang telah dibuat pada tingkat metadata untuk memungkinkan penulisan ke sumber data eksternal.

Properti baru telah ditambahkan ke tabel data Hanya membaca(tipe - boolean).

Jika properti ini disetel ke True, menulis data ke tabel ini melalui platform tidak dimungkinkan.

Bidang tabel data sekarang memiliki properti berikut:

  • Hanya membaca(tipe - boolean) – apakah mungkin untuk mengubah data di bidang ini;
  • IzinkanNull(ketik - boolean) - apakah mungkin untuk menyimpan nilai NULL di bidang ini.

Properti Hanya membaca harus disetel ke benar untuk bidang basis data dengan perubahan otomatis, bidang kunci yang dibuat secara otomatis, bidang terhitung, dll.

Anda dapat menambahkan, mengubah, dan menghapus data di sumber eksternal menggunakan bahasa bawaan.

Untuk ini, objek ExternalDataSourceTableRecordSet dan ExternalDataSourceTableObject metode baru telah diterapkan Menulis() dan Menghapus().

Pertimbangkan contoh penambahan record baru secara terprogram untuk sumber data eksternal yang dibahas di atas.

&PadaKlien
Prosedur Buat Secara Terprogram(Tim )
Buat Secara Terprogram Di Server();
Prosedur Akhir &Di Server

Prosedur Buat Secara Terprogram Di Server()
Objek yang Dapat Ditulis=
ExternalDataSources.Nomenklatura.Tables.dbo_nomenklatura.CreateObject();
WritableObject.id= 5 ;
WritableObject.deskripsi= “Lemari” ;
dapat ditulisObject.price= 5000 ;
Objek yang Dapat Ditulis.Tulis();
AkhirProsedur

Dalam modul objek tabel dari sumber data eksternal, Anda sekarang dapat menyetel penangan peristiwa tulis, seperti: SebelumMenulis(), Pada catatan() dll.:

Dalam artikel ini, dua opsi untuk menulis data ke sumber data eksternal dipertimbangkan - menggunakan prosedur tersimpan dan menggunakan mekanisme baru platform 8.3.5.

Dengan demikian, platform sekarang mengimplementasikan mekanisme untuk integrasi penuh dengan aplikasi eksternal.

Dalam versi 8.3.6, fungsi yang dijelaskan di atas telah diperluas dengan yang baru metode khusus GetChangableFields() dan SetChangableFields(). Dengan bantuan mereka, dimungkinkan untuk melakukan operasi tulis ke bidang-bidang tabel VIEW yang ditandai di konfigurator sebagai hanya-baca. Berkat ini, menjadi mungkin untuk mengimplementasikan skenario di mana penulisan ke bidang individual dari tabel VID hanya dimungkinkan dalam kasus-kasus ketika diperlukan sesuai dengan logika bisnis aplikasi.

Dalam versi 8.3.7, mekanisme telah diperbaiki yang menentukan bidang tertentu dari tabel VIEW yang dapat berisi nilai NULL. Sampai saat ini, semua tabel VIEW bisa mengambil nilai ini. Perubahan ini disebabkan oleh peningkatan kecepatan penyortiran di daftar dinamis pada bidang-bidang ini.

Dalam rilis 8.3.8, akhirnya dimungkinkan untuk menentukan apakah sumber data eksternal berada dalam status transaksional. Fungsionalitas ini disediakan oleh metode baru ExternalDataSourceManager.TransactionActive()

Sebagai kesimpulan, kami mencatat bahwa untuk sumber data eksternal, seperti yang ditunjukkan di atas, tabel data dari model relasional klasik dijelaskan. Platform menggunakan paradigma yang berbeda untuk bekerja dengan data, menawarkan pengembang satu set jenis objek aplikasi tertentu (buku referensi, dokumen, register, dll.). Itulah sebabnya sistem, saat bekerja dengan tabel sumber data eksternal, tidak mendukung sebagian besar fungsi yang melekat pada objek "asli". Oleh karena itu, disarankan untuk menahan diri dari mengembangkan semacam logika bisnis, dengan mempertimbangkan penggunaan tabel VID, jika ini tidak terkait dengan tugas integrasi dengan yang sudah sistem yang ada. Atau, secara sederhana, Anda harus mencoba menghindari penyimpanan data yang digunakan secara aktif dalam aplikasi Anda di beberapa tabel lain. sistem eksternal jika mereka tidak digunakan oleh sistem ini.

Pada artikel berikutnya, kami akan mempertimbangkan kelanjutan logis dari penggunaan teknologi sumber data eksternal dalam sistem 1C:Enterprise.

Bekerja dengan mereka dalam daftar dalam mode 1C Enterprise.

Namun, dalam pekerjaan, situasi sering muncul ketika sebagian data disimpan di tempat lain.

  • Toko online (biasanya menyimpan data dalam database MySQL/SQL eksternal)
  • Basis lain.

Untuk bekerja dengan data yang disimpan di database lain, Anda perlu mengembangkan mekanisme khusus.

Dalam versi 1C 8.2.14, yang baru muncul yang disebut Sumber Data Eksternal 1C, yang sangat memudahkan pekerjaan programmer, karena:

  • sekarang tidak perlu membuat mekanisme khusus untuk mendapatkan data
  • data tersebut dapat diakses oleh
  • data tersebut dapat dilihat dalam daftar 1C.
    • Sumber data eksternal 1C - dasar eksternal SQL

      Katakanlah kita memiliki database SQL yang menyimpan data yang kita butuhkan. Mari kita coba membaca data darinya menggunakan mekanisme Sumber Data Eksternal 1C.

      Mari tambahkan sumber data eksternal 1C. Anda harus pergi ke konfigurator, sumber data eksternal terletak di jendela konfigurasi, di bagian paling bawah pohon.

      1. Koneksi

      Mari kita tambahkan sumber data eksternal baru 1C, sebut saja sewenang-wenang.

      Database terdiri dari tabel. Kita perlu menambahkannya di dalam sumber data eksternal yang ditambahkan. Klik kanan padanya dan pilih Tambahkan Tabel.

      Pertama kali, itu akan meminta Anda untuk memberikan string koneksi. Itu dapat dimasukkan secara manual, atau dibentuk, di mana Anda perlu mengklik tombol "...".

      Sebagai driver dalam kasus khusus kami, kami akan memilih "SQL Server"

      Mari kita isi parameter dasar untuk menghubungkan ke SQL. Nama server dapat dimasukkan atau dipilih dari daftar.

      1C akan terhubung ke SQL dan meminta Anda untuk memilih database tertentu dari daftar.

      Setelah itu, 1C akan menampilkan daftar tabel di database ini dan kolomnya. Anda perlu memilih tabel yang diperlukan dengan kotak centang.

      Tabel dan kolom akan ditambahkan. Nama-nama akan seperti yang didefinisikan dalam database jarak jauh. Di 1C Anda dapat mengganti namanya (di properti).

      Berikut adalah contoh tabel yang ditambahkan:

      Berikut adalah contoh kolom yang ditambahkan:

      Agar platform 1C dapat bekerja dengan tabel eksternal dengan cara yang sama seperti halnya dengan direktori 1C, parameter tambahan dapat ditentukan dalam tabel:

      • Di properti Bidang Kunci, tentukan salah satu kolom yang akan memberikan identifikasi unik dari baris tersebut; jika banyak string memberikan keunikan, maka cara ini tidak berfungsi (analog dari bidang Kode)
      • Di properti bidang Lihat, tentukan salah satu kolom yang akan memberikan representasi singkat dari string (analog dari bidang Nama)
      • Dalam properti tipe data Tabel, tentukan Data objek.

      2. Lihat

      Sambungan ke database jauh tidak dibuat secara otomatis. Untuk menghubungkan, Anda perlu memilih menu khas.

      Di cabang Standar terletak tim khusus Manajemen sumber data eksternal, yang memungkinkan Anda menentukan parameter koneksi (sendiri untuk mode 1C Enterprise) dan menghubungkan.

      Pertama, Anda perlu menentukan parameter untuk menghubungkan ke database.

      Ketika Anda melakukan konfigurasi di konfigurator, itu menunjukkan kepada Anda string koneksi sebagai hasilnya. Anda dapat melihatnya lagi dengan mengklik Tambah tabel di konfigurator lagi.

      Salin string koneksi dan tentukan dalam mode 1C Enterprise.

      Setelah itu, Anda perlu membuat koneksi yang sebenarnya.

      Setelah koneksi dibuat, dimungkinkan untuk bekerja dengan daftar.

      3. Gunakan dalam bahasa 1C

      Koneksi juga dapat dibuat dari kode program dalam bahasa 1C.

      Parameter koneksi ditentukan sebagai berikut:
      ConnectionParameters = ExternalDataSources.SourceNameConfigurator.GetCommonConnectionParameters();

      ConnectionParameters.AuthenticationStandard = true;
      ConnectionParameters.UserName = "sa";
      ConnectionParameters.Password = "kata sandi";
      ConnectionParameters.ConnectionString = "string koneksi dari konfigurator";
      ConnectionParameters.DBMS = "MSSQLServer";

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

      Anda dapat meminta data dari database menggunakan file . Contoh teks kueri untuk sumber eksternal OurExternalSource dan tablesExternalSourceTable:

      PILIH
      Tabel Sumber Eksternal.NamaBidang
      DARI
      ExternalDataSource.OurExternalSource.Table.ExternalSourceTable"

      Sumber data eksternal 1C - bekerja dengan file Excel

      Mari kita coba opsi lain - bekerja dengan file Excel melalui sumber data 1C eksternal.

      Mari kita buat file Excel sederhana.

      Mari tambahkan sumber eksternal, beri nama FileExcel. Tambahkan tabel "Sheet1 $" ke dalamnya. Seperti yang Anda lihat, ini adalah nama lembar di Excel dengan penambahan simbol "$".

      Seperti dalam kasus SQL, mari tambahkan kolom. Mereka dapat ditambahkan secara manual. Penting untuk memastikan bahwa jenis kolom yang ditambahkan cocok, jika tidak, Anda mungkin mendapatkan kesalahan seperti "Ketidakcocokan Jenis Data" nanti.

      Untuk kolom, Anda perlu menentukan nama di 1C dan nama di sumber data.

      Untuk Excel, ada fitur (kesalahan seperti "Terlalu sedikit parameter. Memerlukan 3"):

      • Jika baris pertama tabel excel nama kolom berada, maka Anda hanya perlu menentukan nama kolom ini, misalnya "Kode".
      • Jika tidak, Anda perlu menentukan nama lengkap dengan nama tabel “Sheet1$.Code”, tetapi tambahkan “HDR=NO;” di parameter.

      Parameter koneksi untuk file Excel terlihat seperti ini:

      • File XLSX (Office versi 2007 dan yang lebih baru)
        Sopir=( Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb));DBQ=D:\FileExcel.xlsx;
      • File XLS (sebelumnya)
        Driver=(Pengandar Microsoft Excel (*.xls)); DriverID=790; DBQ=D:\FileExcel.xls;
        Anda harus menentukan nama dan jalur Anda sendiri ke file.

Dalam versi 8 dari program 1C, pengembang menambahkan fungsionalitas kemampuan untuk menghubungkan database pihak ketiga dan memperoleh 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 di 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 gangguan pada data pada tingkat tabel fisik.

Membuat sumber baru

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

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

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

Tab pertama hanya memiliki satu parameter yang menarik - mode kontrol kunci. Jika Anda tidak mengajukan pertanyaan tentang pemblokiran data dalam transaksi, tentang seluk-beluk memparalelkan arus informasi, Anda dapat membiarkan parameter ini dalam mode pemblokiran 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, mereka menggunakan mekanisme transaksi yang tertanam dalam program itu sendiri, dan bukan di DBMS, yang memungkinkan Anda untuk mentransfer tangkapan tabel ke lebih banyak lagi 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 yang sesuai dari setiap tabel tertentu.

Tab data dari 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 depan kita.

Beras. 4

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

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

Beras. 5

Selanjutnya, kita harus menentukan jenis tabel, atau lebih tepatnya objektivitasnya. Jika data yang disimpan dalam struktur dapat diidentifikasi secara unik melalui salah satu bidang, tabel dapat menjadi tabel objek. Jika identitas catatan ditentukan oleh sekumpulan 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 register informasi.

Kumpulan bidang kunci ditentukan dalam parameter formulir berikutnya ("Bidang Kunci"). Bidang ini wajib diisi, membiarkannya 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 mengatur pengidentifikasinya (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.

Konstruktor tabel

Mungkin poin terpenting dan menarik dalam bekerja dengan sumber eksternal adalah pembuatan string koneksi. Konstruktornya terbuka ketika Anda mengklik tombol dengan tiga titik di sebelah parameter "Connection string".

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

Beras. 7

Definisi yang salah dari parameter ini tidak akan memungkinkan Anda untuk terhubung ke pihak ketiga basis informasi. Juga harus dipahami bahwa tidak semua driver yang ditentukan dalam daftar drop-down dapat digunakan untuk menghasilkan 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 string 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 baris konstruktor menyebabkan kesalahan Gbr.8.

Kami akan menulis sendiri parameter koneksi.

Driver=(Microsoft Access Driver (*.mdb)) - seperti inilah bagian pertama dari baris tersebut. V kurung kurawal kami telah mendefinisikan driver.

Untuk file excel itu akan terlihat seperti (Microsoft Excel Driver (*.xls)) , untuk file Excel yang dibuat di kantor yang lebih lama dari tahun 2003, string 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, kita mendapatkan Driver=(Microsoft Access Driver (*.mdb));DBQ=D:\Database1.mdb, menulis parameter ini, kita 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 memasuki tabel, kita perlu menulis string koneksi yang sama dalam mode "Enterprise".

Mengapa kesempatan ini begitu menarik? Setiap orang yang telah memprogram dalam 1C cukup akrab dengan SQL dan setidaknya secara umum akrab dengan arsitektur dan prinsip-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 memperoleh data dari struktur relasional yang pernah saya temui secara pribadi. Dan sekarang 1C telah memberi kami kesempatan yang luar biasa untuk menggunakannya tidak hanya dengan 1C, tetapi juga dengan tabel lainnya. Berikut adalah sekelompok "lalat dalam salep" yang dituangkan ke dalam "tong madu" ini. Semuanya berurutan:

1) Siapkan dan gunakan- tanpa "menari dengan rebana" tidak akan berfungsi
a) Tambahkan sumber data eksternal - sepertinya tidak ada yang rumit
b) centang kotak "Pilih dari daftar" - perlu - ini perlu 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, tetapi satu tingkat lebih rendah

D) Berhati-hatilah di sini.

Ini adalah driver ODBC - jika Anda menggunakan versi client-server, itu harus di server. Jika Anda mengembangkan satu sistem dan mengerjakan yang lain (seperti biasanya), pastikan Anda tidak mendapatkan kejutan. Rekomendasi yang aneh, tetapi pilihlah driver tertua atau paling umum jika Anda tidak terlalu memperhatikan 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 hanya SQL Server, jika tidak, klien yang sangat asli ini harus diinstal baik di server atau di semua mesin klien (dalam kasus ini menggunakan versi file), dan keuntungannya khusus untuk yang sederhana dia tidak akan memberi Anda pekerjaan.
e) Dialog pemilihan Server Standar

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

Z) Dan sekarang Anda menjalankan, buka desainer 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;
Parameters.UserName = "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(), 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 ... mistisisme tentu saja - mengapa itu perlu tidak jelas ...

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

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

Gimana nih.... yang sudah kita tunggu-tunggu dan sudah terbayang dan dijilat bagaimana kita sekarang dalam satu request akan menggabungkan data kita dengan 1C, matikan - kelompokkan, masukkan ke report, tapi ternyata tidak di sana ...
Tapi tentu saja, ini tidak menghentikan orang yang berpengalaman ... pikiran apa yang muncul di benak? Itu benar - tabel sementara:

4) JANGAN GUNAKAN BERSAMA DENGAN TABEL SEMENTARA

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

5) Hanya dapat digunakan di koneksi SKD
Bagi yang belum tahu, ada di ACS pada tab "Dataset Links". Seberapa sering Anda menggunakannya? Nyaman? Rupanya mereka ingin memaksa kita untuk menggunakannya lebih sering. Tapi ada kolom "Link condition" dan "Link parameter". Saya tidak menemukan contoh penggunaannya dalam konfigurasi khas 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 berfungsi. Tentu saja, kondisinya 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 InitializeDataSource()

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

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

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

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

ArrayData = Array Baru();
ArrayDate.Add(Tipe("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 = Tabel Nilai Baru();
TK.Columns.Add("NomenclatureCode", TypeString);
TK.Columns.Add("Jumlah", TypeNumber);
TK.Columns.Add("Periode", TypeDate);

TK.Indices.Add("Periode");

// Hubungkan ke SQL
ConnectionString = "Penyedia=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Pwd=;Sumber Data=;Gunakan Prosedur untuk Siapkan=1;Terjemahkan Otomatis=True;Ukuran Paket=4096;ID Workstation=;Gunakan Enkripsi for Data=False;Tag dengan susunan kolom bila memungkinkan=False;Katalog Awal=Laporan";
Koneksi = COMObject Baru("ADODB.Koneksi");
Command = COMObject Baru("ADODB.Command");
RecordSet = COMObject Baru("ADODB.RecordSet");
Tanggal = "";
Percobaan
Connection.Open(ShortLP(ConnectionString));
Command.ActiveConnection = Koneksi;
Command.CommandText = "S_elect * dari PH mana titik >= "" + String(Format(DateStart, "DF=yyyyMMdd")) + "" dan titik<= "" + Строка(Формат(ДатаКон, "ДФ=ггггММдд")) + """;
RecordSet = Perintah.Execute();
RecordSet.MoveFirst();
Pengecualian
Pengembalian TK;
Akhir Upaya;

Sementara RecordSet.EOF = False Loop
String = TK.Tambah();
String.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Value;
String.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Nilai;
Row.Period = RecordSet.Fields(RecordSet.Fields.Item(13).Name).Nilai;
RecordSet.MoveNext();
Siklus Akhir;

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

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

Hasil = Permintaan.Jalankan();
Hasil Pengembalian;

Fungsi Akhir

OuterSet = InisialisasiDataSource();
DataSet = Struktur Baru();
DataSet.Insert("Tabel SQL", ExternalSet);
GenericReports.Generate GenericReport(Objek Ini, Hasil, Data Dekripsi, OutputToReportForm,DataSet);

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

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

Informasi diambil dari situs