Harici veri kaynakları 1c 8.3 excel. Harici veri kaynakları

8.2.14.533 Sürümü, nihayet platformun 14. sürümünün az çok kararlı bir sürümüdür. Son olarak, harika bir fırsatı - "harici veri kaynaklarını" denemek için fırsat kendini sundu.

Neden fırsat verildi böyle bir ilgi uyandırmak? Aynı zamanda 1C'de programlama yapan herkes SQL'e oldukça aşinadır ve en azından genel anlamda iş uygulamaları için diğer teknolojik platformları geliştirmenin mimarisine ve ilkelerine tam bir güvenle aşinadır. Elbette sorgu oluşturucu, kişisel olarak şimdiye kadar karşılaştığım ilişkisel yapılardan veri almak üzere sorgu yazmak için en uygun ve karmaşık mekanizmadır. Ve şimdi 1C bize onu sadece 1C ile değil, diğer tablolarla da kullanmak için harika bir fırsat sağladı. İşte bu "bal fıçısına" dökülen bir avuç "merhemde sinek". Her şey sırayla:

1) Kurulum ve kullanım - "tef ile dans etme" olmadan çalışmaz

A) Ekle dış kaynak veri - karmaşık bir şey yokmuş gibi
b) "Listeden seç" seçeneğini işaretleyin - gerekli - bu, performansı zaten başlangıçta kontrol etmek için gereklidir ve sizi gereksiz sorunlardan kurtaracaktır
v)
(IMG: http: //pics.livejournal.com/comol/pic/0000cr1r.png)
- "..." tuşuna bastığınızdan emin olun - ODBC bağlantısı. Hepimizin alıştığı gibi OLEDB değil, bir seviye aşağıda

Burada olmak ÇOK DİKKATLİ.

Bu bir ODBC sürücüsüdür - istemci-sunucu sürümünü kullanıyorsanız, sunucuda olması gerekir. Bir sistemde geliştirme yapıyorsanız ve çalışan sürüm başka bir sistemde (genellikle olduğu gibi) sürprizlerle karşılaşmadığınızdan emin olun. Garip bir öneri, ancak özellikle hız konusunda endişeleriniz yoksa ve SQL92 standardının yeteneklerinin ötesine geçmeyi düşünmüyorsanız en eski veya en genel sürücüyü seçin. Bu size en iyi uyumluluğu sağlayacaktır. Örneğin SQL Server 2008 için en iyi sürücü SQL Server Native Client 11 olacaktır, ancak sadece SQL Server'ı seçmenizi öneririm, aksi takdirde bu çok yerel istemcinin ya sunucuya ya da tüm istemci makinelere yüklenmesi gerekir (kullanılması durumunda dosya sürümü) ve getirisi için özeldir basit görevler o vermeyecek.

E) Standart Sunucu seçimi diyalogları

G) Bir tablo ve ayrıntılar seçin ... harika bir fırsat - hemen istediğiniz gibi yeniden adlandırabilirsiniz (ve ayrıntılar da), özelliklerde veri kaynağının alanlarının adlarını görüntülersiniz

H) Ve şimdi başlıyorsunuz, sorgu tasarımcısını açın - aptalca tüm kayıtları tablodan ve OPA'dan seçiyorsunuz - bir hata. Ne yapalım? Yönetilen bir arayüzünüz varsa, servis menüsüne bir göz atın ve eğer normal bir arayüz ise ...
Şahsen aşağıdaki kodu kullandım:

Parametreler = ExternalDataSources.DAX.GetGeneralConnectionParameters ();
Parameters.AuthenticationStandard = Doğru;
Parameters.Username = "sa";
Parameters.Password = "geçti";
Parameters.ConnectionString = "SÜRÜCÜ = (SQL Server); SUNUCU = servet; UID = sa; PWD =; DATABASE = veritabanı";
Parameters.DBMS = "MSSQLServer";

ExternalDataSources.DAX.SetGeneralConnectionParameters (Parametreler);
ExternalDataSources.DAX.SetUserConnectionParameters (KullanıcıAdı (), Parametreler);
ExternalDataSources.DAX.SetSessionConnectionParameters (Parametreler);

ExternalDataSources.DAX.InstallConnection ();

Belki bazı parçalara ihtiyaç yoktur, ama işe yarıyor. Kodu çalıştırmanız gerekiyor BİR ZAMANLAR... Bundan sonra normal bir şekilde bağlanacak ... tasavvuf elbette - neden gerekli olduğu açık değil ...

2) Salt okunur veri kaynakları
Evet mucizeler olmuyor...ama bazen o kadar çok istiyorsun ki...

3) DAHİLİ VERİ KAYNAKLARIYLA BİRLİKTE KULLANILAMAZ
Bu gerçek beni kişisel olarak öldürdü.

Nasıl ... o zaman ne bekliyorlardı ve zaten sundular ve şimdi tek bir istekte verilerimizi 1C ile birleştireceğimiz için dudaklarını yaladılar, daraltacağız - gruplayacağız, rapora ekleyeceğiz, ama oldu orada değil ...

Ama doğal olarak deneyimli insanlar bu durmuyor ... aklına ne geldi? Bu doğru - geçici tablolar:

4) ZAMAN TABLOLARI İLE BİRLİKTE KULLANMAYIN

Ama bu artık teknolojik zorluklara benzemiyor, "hayat cennet gibi görünmesin" (IMG :).

5) Yalnızca ACS bağlantılarında kullanılabilir

Bilmeyenler için - bu, "Veri Kümesi Bağlantıları" sekmesindeki ACS'dedir. Onları sık kullanıyor musun? Uygun mu? Görünüşe göre bizi onları daha sık kullanmaya zorlamak istiyorlar. Yalnızca bir "Bağlantı Koşulu" ve "Bağlantı Parametresi" sütunu vardır. Herhangi bir tipik konfigürasyonda kullanımlarının bir örneğini bulamadım; belgelerde ve Khrustaleva'da her şey bir şekilde şeffaf değil. Birisi bana "bağlantı koşulunun" nasıl çalıştığını açıklayabilir mi? Orada SourceProps = RevisionReceiver yazarsanız çalışmaz. Tabii ki, koşul "İfade" alanına yazılabilir - çoğu durumda bu yeterlidir ... ama bir şekilde onu elde etmek çok kolay değil.

Toplamda, bu görev daha önce şöyle bir yerde çözülmüştü:

İşlev InitializeDataSource ()

StartDate = SettingsComposer.Settings.DataParameters.Elements.Value;
DateCon = SettingsComposer.Settings.DataParameters.Elements.Value;
DateCon> "201001101" ise
DateCon = "201000101";
EndIf;

CC = Yeni NiteleyicilerSayılar (15.2);
KS = Yeni Dizi Niteleyicileri (255);

ArrayNumber = Yeni Dizi ();
ArrayNumber.Add (Tür ("Sayı"));

ArrayString = Yeni Dizi();
ArrayString.Add (Tür ("Dize"));

ArrayDate = Yeni Dizi ();
ArrayDate.Add (Tür ("Tarih"));

// Tabloda muhasebe maliyetini dolduracağız
TypeNumber = Türlerin Yeni Açıklaması (ArrayNumber, CN);
TypeString = Türlerin Yeni Açıklaması (ArrayString, KS);
TypeDate = NewDateDescription (ArrayDate);

// SQL'den veri yüklemek için tablo
TK = Yeni Değerler Tablosu ();
TZ.Kolonki.Add ("NomenclatureCode", StringType);
TK.Columns.Add ("Miktar", TypeNumber);
TK.Kolonki.Add ("Dönem", TypeDate);

TK.Ideksy.Add ("Dönem");

// SQL'e bağlan
ConnectionString = "Sağlayıcı = SQLOLEDB.1; Kalıcı Güvenlik Bilgisi = Doğru; Kullanıcı Kimliği = sa; Pwd =; Veri Kaynağı =; Hazırlama Prosedürünü Kullan = 1; Otomatik Çevir = Doğru; Paket Boyutu = 4096; İş İstasyonu Kimliği =; Şifreleme Kullan Veri için = Yanlış; Mümkün olduğunda sütun harmanlamalı etiket = Yanlış; İlk Katalog = Raporlar ";
Bağlantı = Yeni COMObject ("ADODB.Connection");
Komut = Yeni COMObject ("ADODB.Command");
RecordSet = Yeni COMObject ("ADODB.RecordSet");
Tarih = "";
Girişim
Connection.Open (SocrLP (ConnectionString));
Command.ActiveConnection = Bağlantı;
Command.CommandText = "PH'den * seçin, burada nokta> =" "+ Dize (Format (DateStart," DF = yyyyMMdd ")) +" "ve nokta RecordSet = Command.Execute ();
RecordSet.MoveFirst ();
Bir istisna
TK'nin Dönüşü;
Denemelerin Sonu;

RecordSet.EOF = Yanlış Döngü
String = TK.Add();
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 ();
Döngü Sonu;

İstek = Yeni İstek ();
VRTable = NewTempTablesManager();
Request.SetParameter ("vrTableData", TK);
Request.SetParameter ("BaşlangıçTarihi", BaşlangıçTarihi);
Request.SetParameter ("DateCon", DateCon);
Request.Text = "SEÇ
| vpDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vpDataTable.Period
| POST Veri Tablosu
|
| & vrDataTable AS vrDataTable
| NEREDE
| timeDataTable.Period> = & StartDate
| VE vrDataTable.Period Request.Run ();
TK = Tanımsız;

İstek = Yeni İstek;
Request.TemporaryTablesManager = VRTable;
Query.Text = "İşte sözlü tablo içeren bir sorgu";

Sonuç = Query.Run();
Geri Ödeme Sonucu;

EndFunction

OuterSet = InitializeDataSource();
Veri Kümesi = Yeni Yapı ();
DataSet.Insert ("SQL Tablosu", ExternalSet);
Tipik Raporlar, Tipik Bir Rapor Oluşturun (Bu Nesne, Sonuç, Verilerin Kodunu Çözme, Rapordan Çıktı Formu, Veri Kümesi);

Aslında, çok fazla kod satırı yoktur ve bunlar oldukça standarttır ... bu durumda, sorgu yapıcısının tüm işlevselliğini kullanabilir ve ACS'de yalnızca DATA LINK işlevini verebilirsiniz.

Ama neredeyse kesinlikle çok güzel görünmüyor ... ve her seferinde kodu yazmanız ve ayrıntılar adına bir hata yapıp yapmadığınızı kontrol etmeniz gereken değerler tablosuna boşaltma ... ama bize verilenler 1C'de bir şekilde yarım yürekli görünüyor. Neyin daha kullanışlı olduğuna henüz karar vermedim. Karar verirsiniz ve kararlarınızı ve sizi bunlara iten şeyi yazarsınız.

[bağlantıyı görebilmek için üye olmalısınız]

8.3.5 sürümünden itibaren platform, harici veri kaynaklarının tablolarına veri yazma özelliğini uygulamaya koymuştur. Bu makalede, yapılandırmayı üçüncü taraf sistemlerle tümleştirmeye yönelik mevcut olasılıkları genişleten bu işlevsellik ele alınmaktadır.

uygulanabilirlik

Makale, platform 1C 8.3.5'i tartışıyor. Materyal, platformun mevcut sürümleriyle de ilgilidir.

"1C: Enterprise 8" de harici veri kaynaklarına yazma

8.2.14 platformunda meta veri ağacı eklendi yeni nesne- harici veri kaynakları. Bu mekanizmanın amacı, 1C ile ilgili olarak harici veritabanlarından veri almaktır.

Yeni platform sürümlerinin sürümleriyle, harici veri kaynakları gelişti, örneğin bunları geçici tablolara yerleştirmek, sıradan tablolarla birleştirme yapmak mümkün hale geldi.

Bu yazıda, geliştiricinin harici veri kaynaklarına yazmak için hangi araçlara sahip olduğuna bakacağız.

Tüm eylemler Microsoft SQL Server 2008 R2 DBMS'de gerçekleştirildi.

8.3.4 platformunda, harici veri kaynaklarında açıklanan fonksiyonların kullanılabilmesi sağlandı.

Bu özellik, SQL Server tarafında saklı yordamları çalıştırmanıza ve onların yardımıyla yazma dahil olmak üzere harici kaynaklardan gelen verilere erişmenize olanak tanır.

Bir örneğe bakalım. SQL Management Studio kullanarak kursy_test adında yeni bir veritabanı oluşturalım. Diğer tüm deneyler bunun üzerinde yapılacaktır.

Bu veritabanında nomenklatura tablosunu oluşturacağız, bunun için aşağıdaki içeriğe sahip bir komut dosyası yazacağız:

KULLAN [kursy_test]
Gitmek
TABLO OLUŞTUR [dbo]. [isim] (
[id] [int] NULL DEĞİL,
[açıklama] [nvarchar] (150) NULL DEĞİL,
[fiyat] [sayısal] (15, 2) NULL,
KISITLAMA [PK_id] BİRİNCİL ANAHTAR ([id])
Gitmek

Yürütme sonucunda aşağıdaki yapıya sahip bir tablo oluşturulur:

Şimdi, veri değişikliğinin gerçekleştirileceği iki saklı yordam oluşturmamız gerekiyor.

İlk prosedürü insert_nomenklatura olarak adlandıracağız. Eklemek için tasarlanacak Yeni hat masaya. Yaratılışı için komut dosyası şöyle görünecek:

KULLAN [kursy_test]
Gitmek
PROSEDÜR OLUŞTUR
@id int,
@description nvarchar (150),
@fiyat sayısal (15, 2)
OLARAK
BAŞLAMAK
[kursy_test] .dbo İÇİNE EKLE. [isim] ([id], [açıklama], [fiyat])
DEĞERLER (@id, @description, @price)
SON
Gitmek

update_nomenklatura adlı ikinci prosedür, tablodaki mevcut bir kaydı güncelleyecektir. Oluşturmak için aşağıdaki komut dosyası çalıştırıldı:

Nesne Tarayıcıda, oluşturulan tablo ve iki saklı yordam şöyle görünür:

Microsoft SQL Server tarafında tüm hazırlık adımlarını tamamladık, şimdi 1C: Enterprise 8 konfigüratörüne geçiyoruz.

Nomenklatura adlı yeni bir dış veri kaynağı oluşturun. Bu veri kaynağında yeni bir tablo oluştururken veri kaynağına bağlanmak için aşağıdaki parametreleri belirtiyoruz:

Aşağıdaki bağlantı dizesini belirteceğiz:

Sürücü = (SQL Sunucusu); Sunucu = (yerel); Veritabanı = kursy_test; Kullanıcı Kimliği = sa; Şifre =;

Kullanıcının parolası varsa, bağlantı dizesinin Parola parametresinde belirtilmelidir.

Tüm bağlantı parametreleri doğru bir şekilde belirtilirse, Tamam düğmesine tıkladığınızda, veri kaynağında bulunan tabloları içeren bir pencere açılır:

Tablonun ilgimizi çeken alanlarını işaretliyoruz. Düğmeye basıldığında Hazır dbo_nomenklatura tablosu, Nomenklatura harici veri kaynağında oluşturulacaktır:

Şimdi veri kaynağımızın “İşlevler” sekmesine geçiyoruz.

Benzer bir sihirbaz kullanarak iki saklı yordam ekliyoruz:

sonrakini alırız görünüm"İşlevler" sekmeleri:

şimdi programlayalım Kullanıcı arayüzü harici bir veri kaynağıyla çalışmak için.

Komut panelindeki liste formunda aşağıdaki işleyici ile “Ekle” butonunu yerleştireceğiz:

& OnClient
Prosedür Ekle ()
Uyarı = Yeni Açıklama Uyarıları("OpenTableCompletion", BuNesne);
OpenForm (
"ExternalDataSource.Nomenklatura.Table.dbo_nomenklatura.ObjectForm"
, , , , , ,
Uyarmak, ModeOpenWindowForms.LockAllInterface);
Prosedürün Sonu

& OnClient
Prosedürü Kaydet (Komut)
Sunucuda Kaydet();
İşlem Sonu ve Sunucuda
prosedür Sunucuda Kaydet()
Eğer Nesne.Ref.Boş() O zamanlar
ExternalDataSources.Nomenklatura.dbo_insert_nomenklatura
Aksi halde
ExternalDataSources.Nomenklatura.dbo_update_nomenklatura
(Object.id, Object.description, Object.fiyat);
EndIf;
Prosedürün Sonu

Kurumsal modda liste formu şöyle görünür:

Cismin şekli aşağıda gösterilmiştir:

Büyütmek için resmin üzerine tıklayın.

Böylece, saklı yordamları kullanarak dış veri kaynaklarına yazmayı gerçekleştirdik.

8.3.5 platformunda yeni bir özellik ortaya çıktı - yukarıda tartışılan saklı yordamların mekanizmasını atlayarak doğrudan harici veri kaynaklarına yazma.

Veriler hem programlı hem de etkileşimli olarak düzenlenebilir. Ve örneğimiz için, yapılandırmaya başvurmanız gerekmeyecek.

Komut çubuklarında ve "Diğer" menüsünde "Yeni", "Kopyala", "Değiştir" gibi standart düğmeleri görebilirsiniz.

Büyütmek için resmin üzerine tıklayın.

Ve nesne şeklinde "Yaz" ve "Yaz ve kapat" düğmeleri vardı:

Gördüğünüz gibi, artık harici kaynaklarla çalışmak dizinler, belgeler vb. ile çalışmaya benzer.

Dış veri kaynaklarına yazmayı mümkün kılmak için meta veri düzeyinde hangi değişikliklerin yapıldığını düşünün.

Veri tablosuna yeni bir özellik eklendi sadece okuma(tür booleandır).

Bu özellik True olarak ayarlanırsa platform bu tabloya veri yazamaz.

Veri tablosu alanı artık aşağıdaki özelliklere sahiptir:

  • sadece okuma(tür - boolean) - bu alandaki verileri değiştirmek mümkün müdür;
  • AllowNull(tür - boolean) - NULL değerini bu alanda saklamanın mümkün olup olmadığı.

Mülk sadece okuma olarak ayarlanmalıdır Doğru ile veritabanı alanları için otomatik değiştirme, otomatik oluşturulan anahtar alanlar, hesaplanan alanlar vb.

Yerleşik dili kullanarak harici kaynaklardaki verileri ekleyebilir, değiştirebilir ve silebilirsiniz.

Bunu yapmak için nesneler ExternalDataSourceTableRecordSet ve ExternalDataSourceTableObject yeni yöntemler uygulandı Yazı yazmak () ve Silmek().

Yukarıda tartışılan harici bir veri kaynağı için programlı olarak yeni bir kayıt ekleme örneğine bakalım.

& OnClient
prosedür Programlı Olarak Oluştur(Takım )
CreateProgrammaticallyOnServer();
İşlem Sonu ve Sunucuda

prosedür CreateProgrammaticallyOnServer()
yazılabilirnesne=
ExternalDataSources.Nomenklatura.Tables.dbo_nomenklatura.CreateObject();
YazılabilirObject.id= 5 ;
YazılabilirObject.description= "Gardırop";
YazılabilirNesne.fiyat= 5000 ;
YazılabilirNesne.();
Prosedürün Sonu

Harici veri kaynağı tablosunun nesne modülünde, yazarken tetiklenen olaylar için olay işleyicileri ayarlayabilirsiniz, örneğin: Kayıt Öncesi (), Kayıt Yaparken () vb.:

Bu makalede, harici veri kaynaklarına veri yazmak için iki seçenek ele alındı ​​- saklı yordamları kullanmak ve 8.3.5 platformunun yeni mekanizmalarını kullanmak.

Böylece platform artık harici uygulamalarla tam entegrasyon için mekanizmalar uyguluyor.

8.3.6 sürümünde, yukarıda açıklanan işlevsellik, yeni özelliklerin yardımıyla genişletildi. özel yöntemler GetMutableFields() ve SetMutableFields(). Bunların yardımıyla, yapılandırıcıda salt okunur olarak işaretlenen GÖRÜNÜM tablosunun bu alanlarında bir yazma işlemi yapmak mümkündür. Bu sayede TID tablosunun tek tek alanlarına yazmanın ancak uygulamanın iş mantığına uygun olarak gerekli olduğu durumlarda mümkün olduğu böyle bir senaryonun uygulanması mümkün hale geldi.

8.3.7 sürümünde, görünüm tablolarının hangi belirli alanlarının NULL değerleri içerebileceğini belirleyen mekanizma geliştirildi. Bu noktaya kadar, tüm görünüm tabloları bu değeri alabilir. Bu değişiklik, sıralama hızındaki bir artışla ilişkilidir. dinamik listeler bu alanlar üzerinde.

8.3.8 revizyonunda, sonunda harici bir veri kaynağının işlem durumunda olup olmadığını belirlemek mümkündür. Bu işlevsellik, yeni ExternalDataSourceManager.TransactionActive () yöntemiyle sunulmaktadır.

Sonuç olarak, yukarıda gösterildiği gibi harici veri kaynakları için klasik ilişkisel modelden veri tablolarının açıklandığını not ediyoruz. Öte yandan platform, verilerle çalışmak için farklı bir paradigma kullanır ve geliştiriciye belirli bir dizi uygulamalı nesne (dizinler, belgeler, kayıtlar vb.) sunar. Bu nedenle sistem, harici veri kaynaklarının tablolarıyla çalışırken, "yerel" nesnelerinde bulunan işlevlerin çoğunu desteklemez. Bu nedenle, zaten entegrasyon görevleriyle ilgili değilse, VID tablolarının kullanımını dikkate alarak bir tür iş mantığı geliştirmekten kaçınılması önerilir. mevcut sistemler... Veya basitçe söylemek gerekirse, uygulamanızda aktif olarak kullanılan verileri başka bir tabloda depolamaktan kaçınmaya çalışmalısınız. harici sistem eğer bu sistem tarafından kullanılmıyorlarsa.

Bir sonraki makalede, 1C: Enterprise sisteminde harici veri kaynakları teknolojisinin kullanımının mantıksal devamını ele alacağız.

Onlarla 1C Enterprise modunda listelerde çalışın.

Bununla birlikte, işte, verilerin bir kısmı başka bir yerde depolandığında genellikle bir durum ortaya çıkar.

  • Çevrimiçi mağaza (genellikle verileri harici bir MySQL / SQL veritabanında depolar)
  • Başka bir taban.

Diğer veritabanlarında saklanan bu tür verilerle çalışmak için özel mekanizmalar geliştirmeniz gerekir.

1C 8.2.14 sürümünde, programcının çalışmasını büyük ölçüde kolaylaştıran Harici veri kaynakları 1C adlı yeni bir tane ortaya çıktı, çünkü:

  • artık veri almak için özel mekanizmalar oluşturmaya gerek yok
  • bu tür verilere her zamanki gibi erişilebilir
  • bu tür veriler 1C listelerinde görüntülenebilir.
    • Harici veri kaynağı 1C - dış taban SQL

      Diyelim ki ihtiyacımız olan verileri depolayan bir SQL veritabanımız var. 1C Harici Veri Kaynağı mekanizmasını kullanarak ondan veri okumaya çalışalım.

      Harici bir veri kaynağı 1C ekleyelim. Konfigüratöre gitmeniz gerekiyor, harici veri kaynakları ağacın en altındaki konfigürasyon penceresinde bulunur.

      1. Bağlantı

      Yeni bir harici veri kaynağı 1C ekleyelim, keyfi olarak adlandıralım.

      Veritabanı tablolardan oluşur. Bunları eklenen harici veri kaynağının içine eklememiz gerekiyor. Üzerine sağ tıklayın ve Tablo Ekle'yi seçin.

      İlk kez sizden bir bağlantı dizesi isteyecektir. Manuel olarak girilebilir veya "..." düğmesine tıklamanız gereken oluşturulabilir.

      Bizim özel durumumuzda, sürücü olarak "SQL Server"ı seçeceğiz.

      SQL'e bağlanmak için temel parametreleri dolduralım. Sunucu adı listeden girilebilir veya seçilebilir.

      1C, SQL'e bağlanacak ve listeden belirli bir veritabanı seçmeyi teklif edecektir.

      Bundan sonra 1C, bu veritabanındaki tabloların ve sütunlarının bir listesini görüntüler. Onay işaretli gerekli tabloları seçmek gereklidir.

      Tablolar ve sütunlar eklenecektir. Adlar uzak veritabanında tanımlandığı gibi olacaktır. 1C'de onları yeniden adlandırabilirsiniz (özelliklerde).

      İşte eklenen tablonun bir örneği:

      İşte eklenen bir sütun örneği:

      1C platformunun harici bir tabloyla 1C referans kitaplarıyla aynı şekilde çalışması için tabloda ek parametreler belirtilebilir:

      • Anahtar alanı özelliğinde - satırın benzersiz bir tanımlamasını sağlayacak sütunlardan birini belirtin; birkaç satır benzersizlik sağlıyorsa, o zaman Bu taraftançalışmıyor (Kod alanının analogu)
      • Sunum alanı özelliğinde, dizenin kısa bir temsilini sağlayacak sütunlardan birini belirtin (Ad alanına benzer)
      • Tablo veri türü özelliğinde, Nesne verilerini belirtin.

      2. Görüntüleme

      Uzak baza bağlantı otomatik olarak yapılmaz. Bağlanmak için tipik bir menü seçmeniz gerekir.

      Standart şube şunları içerir: özel ekip Bağlantı parametrelerini (1C Enterprise modu için sizinki) belirlemenize ve bağlanmanıza izin veren harici veri kaynaklarının yönetimi.

      İlk olarak, veritabanına bağlanmak için parametreleri belirlemeniz gerekir.

      Konfigüratörde ayarları yaptığınızda, sonuç olarak size bağlantı dizisini gösterdi. Konfigüratörde tekrar Tablo Ekle'ye tıklayarak tekrar görebilirsiniz.

      Bağlantı dizesini kopyalayın ve 1C Enterprise modunda belirtin.

      Bundan sonra, gerçek bağlantıyı yapmanız gerekir.

      Bağlantı yapıldıktan sonra listelerle çalışmak mümkündür.

      3. 1C dilinde kullanın

      1C dilindeki program kodundan da bağlantı yapılabilir.

      Bağlantı parametreleri şu şekilde belirtilir:
      ConnectionParameters = ExternalDataSources.SourceNameConfigurator.GetGeneralConnectionParameters ();

      ConnectionParameters.AuthenticationStandard = Doğru;
      Bağlantı Parametreleri.KullanıcıAdı = "sa";
      Bağlantı Parametreleri.Password = "parola";
      Connection Parameters.ConnectionString = "yapılandırıcıdan bağlantı dizisi";
      Bağlantı Parametreleri.DBMS = "MSSQLServer";

      ExternalDataSources.SourceNameConfigurator.SetGeneralConnectionParameters (ConnectionParameters);
      ExternalDataSources.SourceNameConfigurator.SetUserConnectionParameters (UserName (), Parametreler);
      ExternalDataSources.SourceNameConfigurator.SetSessionConnectionParameters (Parametreler);
      ExternalDataSources.SourceNameConfigurator.InstallConnection ();

      Normal olanı kullanarak veritabanındaki verileri sorgulayabilirsiniz. Harici kaynak OurExternalSource ve ExternalSourceTable tabloları için örnek sorgu metni:

      SEÇME
      ExternalSourceTable.FieldName
      İTİBAREN
      ExternalDataSource.OurExternalSource.Table.ExternalSourceTable "

      Harici veri kaynağı 1C - bir Excel dosyasıyla çalışma

      Başka bir seçenek deneyelim - harici bir 1C veri kaynağı aracılığıyla bir Excel dosyasıyla çalışmak.

      Basit bir Excel dosyası oluşturalım.

      Harici bir kaynak ekleyelim, adını FileExcel koyalım. Buna "Sheet1 $" tablosunu ekleyelim. Kolayca fark edebileceğiniz gibi, bu, "$" sembolünün eklenmesiyle Excel'deki sayfanın adıdır.

      SQL'de olduğu gibi, sütunları ekleyelim. Manuel olarak eklenebilirler. Eklenen sütun türlerinin yazışmalarını izlemek önemlidir, aksi takdirde daha sonra "Veri türlerinin tutarsızlığı" türünde bir hata alabilirsiniz.

      Sütun için 1C'deki adı ve veri kaynağındaki adı belirtmeniz gerekir.

      Excel için bir özellik vardır ("Çok az parametre. 3 gerektirir" gibi bir hata):

      • İlk satırda ise Excel tabloları sütunların adları bulunur, o zaman bu sütunun adını, örneğin "Kod" belirtmeniz yeterlidir.
      • Aksi takdirde, tam adı "Sheet1 $ .Code" tablo adıyla belirtmeniz, ancak parametrelere "HDR = NO;" eklemeniz gerekir.

      Excel dosyası için bağlantı parametreleri şöyle görünür:

      • XLSX dosyaları (Office 2007 ve üstü)
        Sürücü = ( Microsoft Excel Sürücü (* .xls, * .xlsx, * .xlsm, * .xlsb)); DBQ = D: \ FileExcel.xlsx;
      • XLS dosyaları (eskiden)
        Sürücü = (Microsoft Excel Sürücüsü (* .xls)); Sürücü Kimliği = 790; DBQ = D: \ FileExcel.xls;
        Dosya için kendi adınızı ve yolunuzu belirtmelisiniz.

1C programının 8. sürümünde, geliştiriciler, işlevselliğe, üçüncü taraf veritabanlarına bağlanma ve bunlardan COM bağlantılarını ve OLE nesnelerini kullanmadan doğrudan yapılandırıcıdan bilgi alma yeteneğini ekledi. Bu özellik, yeni bir nesne kullanılarak uygulanır - "Harici veri kaynakları"

1C'deki harici veri kaynakları, sistemdeki diğer tablolarla aynı şekilde kullanılabilir:

  1. Veri kompozisyon sistemini (ACS) kullanarak raporlar ve hesaplamalar oluştururken;
  2. Üçüncü şahıs kaynaklarında saklanan bilgilere bağlantılar elde etmek için;
  3. Tablolarda saklanan verileri değiştirmek için;
  4. İstekler oluştururken.

1C Enterprise modelinin kendisi, fiziksel tablolar düzeyinde verilere müdahale anlamına gelmediğinden, bu mekanizmanın diğer 1C veritabanlarıyla çalışmak üzere tasarlanmadığını bilmek önemlidir.

Yeni bir kaynak oluşturma

"Konfigüratör" modunda programa yeni bir harici kaynak eklenir. Yapılandırma ağacında karşılık gelen bir dal vardır (Şekil 1)

Yeni bir nesnenin biçiminde yalnızca dört sekme olmasına rağmen, yeni bir kaynak oluştururken terlemeniz gerekecek:

  1. Temel;
  2. Veri;
  3. Fonksiyonlar;
  4. Haklar.

İlk sekmenin yalnızca bir ilginç parametresi vardır - kilitleme kontrol modu. İşlemlerdeki verileri engelleme, bilgi akışlarını paralelleştirmenin karmaşıklıkları hakkında soru sormazsanız, bu parametreyi otomatik engelleme modunda bırakabilirsiniz. Bununla birlikte, böyle bir yaklaşım aşırı kısıtlamalara yol açabilir (örneğin, ayrı bir kayıt yerine program tüm fiziksel tabloyu kilitler ve diğer kullanıcıları onunla çalışma yeteneğinden mahrum bırakır).

Yönetilen kilitler, otomatik olanlardan farklı olarak, DBMS'de değil, programın kendisinde bulunan işlem mekanizmasını kullanırlar, bu da tablo yakalamalarını çok daha fazlasına aktarmayı mümkün kılar. düşük seviye.

Bu parametreyi "Otomatik ve Kontrollü" olarak ayarlayarak, sisteme her bir spesifik tablonun analog özelliğine doğrudan başvurarak hangi modun kullanılacağını belirleme yeteneği sağlıyoruz.

Harici kaynak özellikleri formunun "Veri" sekmesi

"Veri" sekmesinin formu Şekil 2'de gösterilmektedir. 2

Pirinç. 2

Burada harici kaynak tablolar ve küpler ekleyebiliriz. Tablo eklemenin iki yolu vardır:

  1. Manuel olarak, önümüzde bir tablo eklemek için bir form açılacak (Şekil 3);

Pirinç. 3

  1. Veya fiziksel tablolar listesinden kaynağı seçin (Şekil 4), bu durumda önümüzde özel bir kurucu açılır.

Pirinç. 4

Tablo ekleme formuna daha yakından bakalım. "Ad" özelliği, konfigürasyondaki bir nesneyi benzersiz olarak tanımlamak için kullanılır.

Meta veri nesnesi ile nihai fiziksel tablonun karşılaştırması, "Gelişmiş" sekmesinde bulunan "Veri kaynağındaki ad" özelliği aracılığıyla gerçekleşir (Şekil 5)

Pirinç. 5

Ardından, tablonun türünü veya daha doğrusu nesnelliğini belirlemeliyiz. Yapıda saklanan veriler herhangi bir alan aracılığıyla benzersiz bir şekilde tanımlanabiliyorsa, tablo nesne olabilir. Bir kaydın bireyselliği bir dizi anahtar alan tarafından belirlenirse, tablonun nesne olmayan bir türü olmalıdır.

Bu tür tabloları diğer meta veri nesneleriyle karşılaştırarak aşağıdaki benzetme yapılabilir:

  • Nesne tabloları dizinlerdir;
  • Nesne olmayan bilgi kayıtlarıdır.

Anahtar alanları kümesi, sonraki form parametresinde ("Anahtar Alanlar") tanımlanır. Bu alan zorunludur, boş bırakırsanız yapılandırmayı kaydetme başarısız olur.

Şekil 5'te görebileceğiniz gibi, bazı form alanları ve butonlar düzenlenemez:

  • Veri kaynağındaki ifade;
  • Tablonun veri türü;
  • Sunum alanı;
  • İşleyicileri görüntüleyin.

Sadece tablodaki alanları doldurup, türlerini tanımladıktan ve tanımlayıcılar verdikten sonra kullanılabilirler (Şekil 6)

Pirinç. 6

Burada "Allow Null" parametresine dikkat etmelisiniz, bu onay kutusu seçiliyse, böyle bir alanın anahtar olarak kullanılması istenmeyen bir durumdur.

Tablo oluşturucu

Dış kaynaklarla çalışmanın belki de en önemli ve ilginç noktası bağlantı dizesinin oluşturulmasıdır. "Bağlantı dizisi" parametresinin yanında üç nokta bulunan düğmeyi tıkladığınızda yapıcısı açılır.

Öncelikle bağlantı için kullanılacak sürücüye karar vermemiz istenecek (Şekil 7)

Pirinç. 7

Bu parametrenin yanlış tanımlanması, üçüncü taraflara bağlanmayı engeller. bilgi tabanı... Ayrıca, açılır listede belirtilen tüm sürücülerin otomatik olarak bir bağlantı dizesi oluşturmak için kullanılamayacağı da anlaşılmalıdır. Platform bir hata üretirse (Şekil 8) bağlantı dizesinin manuel olarak yazılması gerekecektir.

Şekil 8

Pirinç. 9

Dizenin kendisi oldukça düzenlenmiş bir yapıdır.

Bağlantı dizisi örneği

Oluşturulan bir üçüncü taraf veritabanını düşünün Microsoft Erişimi ve D diskinin kökünde bulunur. Bu veritabanını bağlamak için uygun sürücüyü kullanmalıyız, ancak onu satır oluşturucuda seçmek bir hatayla sonuçlanır Şekil.8.

Bağlantı parametrelerini kendi başımıza yazalım.

Sürücü = (Microsoft Access Sürücüsü (* .mdb)) - satırın ilk kısmı böyle görünüyor. V kıvırcık parantezler sürücüyü tanımladık.

İçin Excel dosyaları(Microsoft Excel Sürücüsü (* .xls)) gibi görünecektir, 2003'ten daha eski bir ofiste oluşturulan Excel dosyaları için, sürücü satırı şöyle görünecektir (Microsoft Excel Sürücüsü (* .xls, * .xlsx, * .xlsm, * .xlsb )).

Bu parametreyi bir sonrakinden noktalı virgülle ayırarak, depomuzun adresini kaydetmeliyiz (bizim durumumuzda, DBQ = D: \ Database1.mdb).

Bu iki parametreyi ekleyerek Driver = (Microsoft Access Driver (* .mdb)); DBQ = D: \ Database1.mdb elde ediyoruz, bu parametreyi yazarak bu veritabanının iç yapılarına erişeceğiz.

"Harici kaynak" nesnesi için, onu sadece konfigürasyonda oluşturmak yeterli değildir; yine de "Kurumsal" modunda bağlanması gerekir. Bu, "Tüm işlevler" -> Harici kaynaklar menüsünden yapılabilir. Tablomuza ilk girdiğimizde, aynı bağlantı dizisini zaten "Enterprise" modunda kaydetmemiz gerekiyor.

Bu fırsat neden bu kadar ilginç? Aynı zamanda 1C'de programlama yapan herkes SQL'e oldukça aşinadır ve en azından genel anlamda iş uygulamaları için diğer teknolojik platformları geliştirmenin mimarisine ve ilkelerine tam bir güvenle aşinadır. Elbette sorgu oluşturucu, kişisel olarak şimdiye kadar karşılaştığım ilişkisel yapılardan veri almak üzere sorgu yazmak için en uygun ve karmaşık mekanizmadır. Ve şimdi 1C bize onu sadece 1C ile değil, diğer tablolarla da kullanmak için harika bir fırsat sağladı. İşte bu "bal fıçısına" dökülen bir avuç "merhemde sinek". Her şey sırayla:

1) Kurulum ve kullanım- "tef ile dans etme" olmadan çalışmaz
a) Harici bir veri kaynağı ekleyin - karmaşık bir şey görünmüyor
b) "Listeden seç" seçeneğini işaretleyin - gerekli - bu, performansı zaten başlangıçta kontrol etmek için gereklidir ve sizi gereksiz sorunlardan kurtaracaktır
c) - "..." tuşuna bastığınızdan emin olun - bağlantı ODBC'dir. Hepimizin alıştığı gibi OLEDB değil, bir seviye aşağıda

D) Ve burada, ÇOK DİKKATLİ olun.

Bu bir ODBC sürücüsüdür - istemci-sunucu sürümünü kullanıyorsanız, sunucuda olması gerekir. Bir sistemde geliştirme yapıyorsanız ve çalışan sürüm başka bir sistemde (genellikle olduğu gibi) sürprizlerle karşılaşmadığınızdan emin olun. Garip bir öneri, ancak özellikle hız konusunda endişeleriniz yoksa ve SQL92 standardının yeteneklerinin ötesine geçmeyi düşünmüyorsanız en eski veya en genel sürücüyü seçin. Bu size en iyi uyumluluğu sağlayacaktır. Örneğin, SQL Server 2008 için en iyi sürücü SQL Server Native Client 11 olacaktır, ancak yalnızca SQL Server'ı seçmenizi öneririm, aksi takdirde bu çok yerel istemcinin ya sunucuya ya da tüm istemci makinelere yüklenmesi gerekir (bu durumda dosya sürümünü kullanma) ve basit için özel kazanç görevleri vermeyecektir.
e) Standart Sunucu seçimi diyalogları

F) Şifreyi kaydetme sorusuna "evet" cevabını vermenizi tavsiye ederim, aksi halde bu işe başlamak işe yaramaz.
g) Tabloyu ve ayrıntıları seçin ... harika bir fırsat - hemen istediğiniz gibi yeniden adlandırabilirsiniz (ve ayrıntıları da), özelliklerde veri kaynağının alanlarının adlarını görüntülersiniz

H) Ve şimdi başlıyorsunuz, sorgu tasarımcısını açın - aptalca tüm kayıtları tablodan ve OPA'dan seçiyorsunuz - bir hata. Ne yapalım? Yönetilen bir arayüzünüz varsa, servis menüsüne bir göz atın ve eğer normal bir arayüz ise ...
Şahsen aşağıdaki kodu kullandım:
Code 1C v 8.х Parametreler = ExternalDataSources.DAX.GetGeneralConnectionParameters ();
Parameters.AuthenticationStandard = Doğru;
Parameters.Username = "sa";
Parameters.Password = "geçti";
Parameters.ConnectionString = "SÜRÜCÜ = (SQL Server); SUNUCU = servet; UID = sa; PWD =; DATABASE = veritabanı";
Parameters.DBMS = "MSSQLServer";

ExternalDataSources.DAX.SetGeneralConnectionParameters (Parametreler);
ExternalDataSources.DAX.SetUserConnectionParameters (KullanıcıAdı (), Parametreler);
ExternalDataSources.DAX.SetSessionConnectionParameters (Parametreler);

ExternalDataSources.DAX.InstallConnection ();
Belki bazı parçalara ihtiyaç yoktur, ama işe yarıyor.
ONCE kodunu çalıştırmanız gerekir. Bundan sonra normal bir şekilde bağlanacak ... tasavvuf elbette - neden gerekli olduğu açık değil ...

2) Salt okunur veri kaynakları- Evet, mucizeler olmaz... ama bazen o kadar çok istersiniz ki...

3) DAHİLİ VERİ KAYNAKLARIYLA BİRLİKTE KULLANILAMAZ
Bu gerçek beni kişisel olarak öldürdü.

Nasıl ... o zaman ne bekliyorlardı ve zaten sundular ve şimdi tek bir istekte verilerimizi 1C ile birleştireceğimiz için dudaklarını yaladılar, daraltacağız - gruplayacağız, rapora ekleyeceğiz, ama oldu orada değil ...
Ama doğal olarak deneyimli insanlar bu durmuyor ... aklına ne geldi? Bu doğru - geçici tablolar:

4) ZAMAN TABLOLARI İLE BİRLİKTE KULLANMAYIN

Ama bu teknolojik zorluklara benzemiyor, "hayat cennete benzemesin diye" bizden yapmamızı istedikleri şeye çok benziyor :).

5) Yalnızca ACS bağlantılarında kullanılabilir
Bilmeyenler için - bu, "Veri Kümesi Bağlantıları" sekmesindeki ACS'dedir. Onları sık kullanıyor musun? Uygun mu? Görünüşe göre bizi onları daha sık kullanmaya zorlamak istiyorlar. Yalnızca bir "Bağlantı Koşulu" ve "Bağlantı Parametresi" sütunu vardır. Herhangi bir tipik konfigürasyonda kullanımlarının bir örneğini bulamadım; belgelerde ve Khrustaleva'da her şey bir şekilde şeffaf değil. Birisi bana "bağlantı koşulunun" nasıl çalıştığını açıklayabilir mi? Orada SourceProps = RevisionReceiver yazarsanız çalışmaz. Tabii ki, koşul "İfade" alanına yazılabilir - çoğu durumda bu yeterlidir ... ama bir şekilde onu elde etmek çok kolay değil.

Toplamda, bu görev daha önce şöyle bir yerde çözülmüştü:
Kod 1C v 8.x İşlev InitializeDataSource ()

StartDate = SettingsComposer.Settings.DataParameters.Elements.Value;
DateCon = SettingsComposer.Settings.DataParameters.Elements.Value;
DateCon> "201001101" ise
DateCon = "201000101";
EndIf;

CC = Yeni NiteleyicilerSayılar (15.2);
KS = Yeni Dizi Niteleyicileri (255);

ArrayNumber = Yeni Dizi ();
ArrayNumber.Add (Tür ("Sayı"));

ArrayString = Yeni Dizi();
ArrayString.Add (Tür ("Dize"));

ArrayDate = Yeni Dizi ();
ArrayDate.Add (Tür ("Tarih"));

// Tabloda muhasebe maliyetini dolduracağız
TypeNumber = Türlerin Yeni Açıklaması (ArrayNumber, CN);
TypeString = Türlerin Yeni Açıklaması (ArrayString, KS);
TypeDate = NewDateDescription (ArrayDate);

// SQL'den veri yüklemek için tablo
TK = Yeni Değerler Tablosu ();
TZ.Kolonki.Add ("NomenclatureCode", StringType);
TK.Columns.Add ("Miktar", TypeNumber);
TK.Kolonki.Add ("Dönem", TypeDate);

TK.Ideksy.Add ("Dönem");

// SQL'e bağlan
ConnectionString = "Sağlayıcı = SQLOLEDB.1; Kalıcı Güvenlik Bilgisi = Doğru; Kullanıcı Kimliği = sa; Pwd =; Veri Kaynağı =; Hazırlama Prosedürünü Kullan = 1; Otomatik Çevir = Doğru; Paket Boyutu = 4096; İş İstasyonu Kimliği =; Şifreleme Kullan Veri için = Yanlış; Mümkün olduğunda sütun harmanlamalı etiket = Yanlış; İlk Katalog = Raporlar ";
Bağlantı = Yeni COMObject ("ADODB.Connection");
Komut = Yeni COMObject ("ADODB.Command");
RecordSet = Yeni COMObject ("ADODB.RecordSet");
Tarih = "";
Girişim
Connection.Open (SocrLP (ConnectionString));
Command.ActiveConnection = Bağlantı;
Command.CommandText = "S_elect * 'dan PH'den nokta> =" "+ Dize (Format (DateStart," DF = yyyyMMdd")) +" "ve nokta<= "" + Строка(Формат(ДатаКон, "ДФ=ггггММдд")) + """;
RecordSet = Command.Execute ();
RecordSet.MoveFirst ();
Bir istisna
TK'nin Dönüşü;
Denemelerin Sonu;

RecordSet.EOF = Yanlış Döngü
String = TK.Add();
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 ();
Döngü Sonu;

İstek = Yeni İstek ();
VRTable = NewTempTablesManager();
Request.SetParameter ("vrTableData", TK);
Request.SetParameter ("BaşlangıçTarihi", BaşlangıçTarihi);
Request.SetParameter ("DateCon", DateCon);
Request.Text = "SEÇ
| vpDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vpDataTable.Period
| POST Veri Tablosu
|
| & vrDataTable AS vrDataTable
| NEREDE
| timeDataTable.Period> = & StartDate
| Ve vrDataTable.Period<= &ДатаКон";
İstek.Çalıştır ();
TK = Tanımsız;

İstek = Yeni İstek;
Request.TemporaryTablesManager = VRTable;
Query.Text = "İşte sözlü tablo içeren bir sorgu";

Sonuç = Query.Run();
Geri Ödeme Sonucu;

EndFunction

OuterSet = InitializeDataSource();
Veri Kümesi = Yeni Yapı ();
DataSet.Insert ("SQL Tablosu", ExternalSet);
Tipik Raporlar, Tipik Bir Rapor Oluşturun (Bu Nesne, Sonuç, Verilerin Kodunu Çözme, Rapordan Çıktı Formu, Veri Kümesi);

Aslında, çok fazla kod satırı yoktur ve bunlar oldukça standarttır ... bu durumda, sorgu yapıcısının tüm işlevselliğini kullanabilir ve ACS'de yalnızca DATA LINK işlevini verebilirsiniz.

Ama neredeyse kesinlikle çok güzel görünmüyor ... ve her seferinde kodu yazmanız ve ayrıntılar adına bir hata yapıp yapmadığınızı kontrol etmeniz gereken değerler tablosuna boşaltma ... ama bize verilenler 1C'de bir şekilde yarım yürekli görünüyor. Neyin daha kullanışlı olduğuna henüz karar vermedim. Karar verirsiniz ve kararlarınızı ve sizi bunlara iten şeyi yazarsınız.

Siteden alınan bilgiler