Açıq
Yaxın

Xarici məlumat mənbələri 1s 8.2. Xarici məlumat mənbələri. Nümunə əlaqə sətri

Qeyri-1C məlumatları ilə işləmək üçün, məsələn: SQL verilənlər bazası, Access verilənlər bazası, Excel faylı və bir çox başqaları, 8.2.14 versiyasından başlayaraq texnoloji platformaya Xarici Məlumat Mənbələri adlı mexanizm (obyekt) daxil edilmişdir.

Bu yazıda gəlin bu obyektin adət etdiyimiz Excel faylı ilə necə qarşılıqlı əlaqədə olduğuna baxaq. Məsələn, bəzi fasilələrlə *.xls faylından məlumatları 1C verilənlər bazasına oxumağa ehtiyac var. Əgər əvvəllər Com obyektlərindən istifadə edərək inisializasiya etməli idiksə, sonra dəyərlər cədvəli yaratmalı, verilənləri sətir-sətir oxumalı idik, indi bu manipulyasiyalar sadəcə olaraq yox olur. Xarici Məlumat Mənbəsindən istifadə edərkən biz məlumatları dərhal sorğulaya və əldə edə bilərik.

Tutaq ki, bizim aşağıdakı məzmunu olan Excel iş dəftərimiz var. Hansı ki, biz məlumatları oxumalıyıq.

Əvvəlcə konfiqurator rejimində yeni məlumat mənbəyi əlavə edin və onu Excel adlandırın.

İndi məlumatları, 1C-də olacağımız sahələri olan bir cədvəl əlavə etməliyik. Faylda sütunların adlandırıldığı kimi onları da yaradaq. Bunu etmək üçün yaradılmış obyektə keçin və Məlumat sekmesinde əlavə et düyməsini basın. Burada onu əl ilə yaratmağı tövsiyə edirəm, çünki 1c-ina avtomatik olaraq özünü konfiqurasiya etməyə çalışdıqda çox vaxt problemlər olur.

Gəlin cədvəlimizi DataTable adlandıraq. Bundan sonra Data sekmesine keçin və sahələr yaradın (fayl kimi).

Hər bir sahənin xassələrində məlumat mənbəyində Ad, Tip və Adı göstərməlisiniz (faylla eynidir).
Məlumat mənbəyində bir ad təyin edin. Burada vərəqin adını * ilə göstəririk. xls sonuna "$" işarəsi əlavə edildi. Bizdə 1$ Siyahı var.
Açar Sahələri göstərdiyinizə əmin olun. Burada verilənlər bazası nəzəriyyəsindən satırın tamamilə unikal olacağı sahəni göstərmək lazımdır.
Təqdimat sahəsi - xəttin qısa təsvirini verəcək sahəni göstəririk, bizim vəziyyətimizdə Nomenklatura.

Hamısı! Bu, əslində bütün quraşdırmadır. Bundan sonra, sadəcə hər hansı bir prosedurda əlaqə sətirini təyin etməlisiniz və qoşulduqdan sonra məlumat mənbəyi ilə işləyə bilərsiniz.

XLSX faylları üçün əlaqə sətri (Office 2007 və sonrakı)

Driver=(Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb));DBQ=D:\FileExcel.xlsx;

XLS və əvvəlki fayllar üçün əlaqə sətri.

Sürücü=(Microsoft Excel Sürücüsü (*.xls)); DriverID=790; DBQ=D:\FileExcel.xls;

Qoşulacaq və əlaqəni bildirəcək yeni xarici emal yaradaq.

Prosedur ButtonExecutePress(Button)ConnectionParameters = NewConnectionParametersExternalDataSource; Bağlantı parametrləri. ConnectionString= “Sürücü= ( Microsoft Excel Sürücüsü (*. xls) ); DriverID= 790; DBQ= D:\meyvə. xls; "; Xarici məlumat mənbələri. Excel. SetGeneralConnectionParameters(ConnectionParameters); Xarici məlumat mənbələri. Excel. Əlaqə qurmaq() ; ( Sorğu = Yeni İstək(); Sorğu. Mətn = "SEÇ | Data Cədvəli. Kod, | Data Cədvəli. Nomenklatura, | Data Cədvəli. Vahid, | Data Cədvəli. Kəmiyyət | FROM | Xarici verilənlər mənbəyi. Excel. Cədvəl. DataTable AS DataTable"; TK = Sorğu. İcra etmək

) . Boşaltma (); Hesabat ("Qoşuldu"); Prosedurun Sonu

Bir kəsmə nöqtəsi təyin etsək və texniki xüsusiyyətlərdə nələrə sahib olduğumuza baxsaq, aşağıdakıları görəcəyik:

P.S. Excel faylının özündə sahə adlarından əvvəl heç bir boş sətir olmamalıdır, əks halda odbc xətası yaranacaq. sqlstate 07002 (odbc excel sürücüsü çox az parametrlər).

Xarici məlumat mənbələri 1C - 1C xarici məlumat mənbələrinə qoşulmaq mümkün olan nisbətən yeni metadata obyekti 1C 8.3 və 8.2: SQL cədvəlləri, Excel, Access, FoxPro (dbf), başqa bir 1C verilənlər bazası, Oracle, Paradox (db) , - və hətta sadə txt/csv fayllarından oxumaq.

Bu, digər sistemlərlə çoxlu imkanlar verir. Gəlin daha yaxından nəzər salaq.

1C 8-də xarici məlumat mənbələrinin qurulması

Xarici mənbələrin qurulması hər bir sistem növü üçün fərdi. Ancaq, bir qayda olaraq, quraşdırmanın ümumi hissəsi eynidır - bu, əlaqə xəttini təyin edir:

1C-də 267 video dərsi pulsuz əldə edin:

Əgər əlaqə sətri düzgün göstərilibsə, sistem verilənlər bazasından istədiyiniz cədvəli seçməyi təklif edəcək. Nəticədə, əsas sahəni (unikal sahə) və təqdimat sahəsini (qeyd 1C-də necə əks olunacaq) təyin edə biləcəyimiz hazır bir cədvəl alacağıq:

1C 8.3-də xarici məlumat mənbələrindən istifadə 1C-də xarici məlumat mənbələri digər verilənlər bazası cədvəlləri kimi istifadə edilə bilər. Platforma müəyyən edilmədikdə onlar üçün avtomatik olaraq forma yaradır.

1C proqramının 8-ci versiyasında tərtibatçılar funksionallığa üçüncü tərəf verilənlər bazalarını qoşmaq və COM əlaqələri və OLE obyektlərindən istifadə etmədən konfiquratordan birbaşa məlumat əldə etmək imkanı əlavə etdilər. Bu xüsusiyyət yeni bir obyektdən istifadə etməklə həyata keçirilir - "Xarici Məlumat Mənbələri"

1C-də xarici məlumat mənbələri sistemdəki digər cədvəllərlə eyni şəkildə istifadə edilə bilər:

  1. Məlumat kompozisiya sistemindən (DCS) istifadə edərək hesabatlar və hesablamalar yaratarkən;
  2. Üçüncü tərəf mənbələrində saxlanılan məlumatlara keçid əldə etmək;
  3. Cədvəllərdə saxlanılan məlumatları dəyişdirmək üçün;
  4. Müraciətlər yaratarkən.

Bu mexanizmin digər 1C verilənlər bazaları ilə işləmək üçün nəzərdə tutulmadığını bilmək vacibdir, çünki 1C.Enterprise əməliyyat modelinin özü fiziki cədvəllər səviyyəsində məlumatlara müdaxilə etməyi nəzərdə tutmur.

Yeni mənbənin yaradılması

Proqrama yeni xarici mənbənin əlavə edilməsi “Konfiqurator” rejimində baş verir. Konfiqurasiya ağacında müvafiq filial var (şək. 1)

Yeni obyektin formasının yalnız dörd nişanı olmasına baxmayaraq, yeni mənbə yaratarkən çox çalışmalı olacaqsınız:

  1. Əsas;
  2. Məlumat;
  3. Funksiyalar;
  4. Hüquqlar.

Birinci sekmədə yalnız bir maraqlı parametr var - kilid idarəetmə rejimi. Əməliyyatlarda məlumatların bloklanması və ya məlumat axınlarının paralelləşdirilməsinin incəlikləri ilə bağlı heç bir sualınız yoxdursa, bu seçimi avtomatik bloklama rejimində tərk edə bilərsiniz. Bununla belə, belə bir yanaşma həddindən artıq məhdudiyyətlərə səbəb ola bilər (məsələn, ayrı bir qeyd əvəzinə proqram bütün fiziki cədvəli kilidlədikdə, digər istifadəçiləri onunla işləmək qabiliyyətindən məhrum edir).

İdarə olunan kilidlər, avtomatik kilidlərdən fərqli olaraq, DBMS-də deyil, proqramın özünə xas olan əməliyyat mexanizmindən istifadə edir, bu da cədvəl tutmalarını daha aşağı səviyyəyə ötürməyə imkan verir.

Bu parametri “Avtomatik və İdarə olunan” olaraq təyin etməklə biz sistemə hər bir xüsusi cədvəl üçün oxşar xüsusiyyətə birbaşa daxil olaraq hansı rejimin istifadə olunacağını müəyyən etmək imkanı veririk.

Xarici mənbə xüsusiyyətləri formasının "Məlumat" sekmesi

"Məlumat" nişanının forması Şəkil 1-də göstərilmişdir. 2

düyü. 2

Burada biz xarici mənbə cədvəlləri və kublar əlavə edə bilərik. Cədvəl əlavə etməyin iki yolu var:

  1. Əl ilə, sonra masa əlavə etmək üçün forma bizim qarşımızda açılacaq (şək. 3);

düyü. 3

  1. Və ya fiziki mənbə cədvəlləri siyahısından seçin (şəkil 4), bu halda qarşımızda xüsusi konstruktor açılır.

düyü. 4

Cədvəl əlavə etmək formasına daha yaxından nəzər salaq. “Ad” xassəsi konfiqurasiyadakı obyekti unikal şəkildə müəyyən etmək üçün istifadə olunur.

Metaməlumat obyektinin və yekun fiziki cədvəlin müqayisəsi “Qabaqcıl” nişanında yerləşən “Məlumat mənbəyində ad” xüsusiyyəti vasitəsilə baş verir (Şəkil 5).

düyü. 5

Sonra cədvəlin növünü, daha doğrusu, obyektivliyini müəyyən etməliyik. Əgər strukturda saxlanılan məlumatlar hər hansı bir sahə vasitəsilə unikal şəkildə müəyyən edilə bilərsə, cədvəl obyekt ola bilər. Yazının fərdiliyi əsas sahələr dəsti ilə müəyyən edilirsə, cədvəl qeyri-obyekt tipinə malik olmalıdır.

Bu cür cədvəlləri digər metadata obyektləri ilə müqayisə edərək, aşağıdakı bənzətməni vermək olar:

  • Obyekt cədvəlləri istinad kitablarıdır;
  • Obyekt olmayanlar informasiya registrləridir.

Açar sahələrin dəsti növbəti forma parametrində (“Açar sahələr”) müəyyən edilir. Bu sahə tələb olunur, əgər onu boş qoysanız, konfiqurasiyanı saxlamaq uğursuz olacaq.

Şəkil 5-dən göründüyü kimi, formanın bəzi sahələri və düymələri redaktə edilə bilməz:

  • Məlumat mənbəyində ifadə;
  • Cədvəl məlumat növü;
  • Təqdimat sahəsi;
  • İşləyicilərə baxın.

Onlardan yalnız biz cədvəl sahələrini doldurduqdan, onların tipini təyin etdikdən və onlara identifikatorlar təyin etdikdən sonra istifadə edilə bilər (şək. 6).

düyü. 6

Burada "Nulla icazə ver" parametrinə diqqət yetirməlisiniz, əgər bu onay qutusu seçilibsə, belə bir sahəni açar kimi istifadə etmək məsləhət görülmür.

Masa qurucusu

Xarici mənbələrlə işləməkdə bəlkə də ən vacib və maraqlı məqam əlaqə sətirinin yaradılmasıdır. “Bağlantı sətri” parametrinin yanında üç nöqtə olan düyməni klikləsəniz, onun konstruktoru açılır.

Hər şeydən əvvəl, bizdən əlaqə üçün istifadə ediləcək sürücüyə qərar vermək istəniləcək (şək. 7)

düyü. 7

Bu parametrin yanlış tərifi üçüncü tərəfin məlumat bazasına qoşulmağa imkan verməyəcək. Siz həmçinin başa düşməlisiniz ki, açılan siyahıda göstərilən bütün drayverlər avtomatik olaraq əlaqə xətti yaratmaq üçün istifadə edilə bilməz. Platformada xəta yaranarsa (şək. 8), onda əlaqə sətri əl ilə daxil edilməli olacaq.

Şəkil 8

düyü. 9

Xəttin özü ciddi şəkildə tənzimlənən bir tikintidir.

Nümunə əlaqə sətri

Microsoft Access-də yaradılmış və D diskinin kökündə yerləşən üçüncü tərəf verilənlər bazasını nəzərdən keçirək. Bu verilənlər bazasını birləşdirmək üçün müvafiq drayverdən istifadə etməliyik, lakin onu sıra konstruktorunda seçmək Şəkil 8 xətası ilə nəticələnir.

Bağlantı parametrlərini özümüz quracağıq.

Driver=(Microsoft Access Driver (*.mdb)) – xəttin birinci hissəsi belə görünür. Buruq mötərizələrdə sürücünü müəyyən etdik.

Excel faylları üçün (Microsoft Excel Driver (*.xls)), 2003-cü ildən köhnə ofisdə yaradılmış Excel faylları üçün sürücü xətti (Microsoft Excel Driver (*.xls, *.xlsx, *.)) kimi görünəcək. xlsm, *.xlsb)).

Bu parametri növbəti parametrdən vergüllə ayıraraq, yaddaşımızın ünvanını daxil etməliyik (bizim halda DBQ=D:\Database1.mdb).

Bu iki parametri əlavə edərək Driver=(Microsoft Access Driver (*.mdb));DBQ=D:\Database1.mdb bu parametri yazmaqla biz bu verilənlər bazasının daxili strukturlarına giriş əldə edirik.

"Xarici Mənbə" obyekti üçün onu yalnız konfiqurasiyada yaratmaq kifayət deyil, həmçinin "Müəssisə" rejimində qoşulmaq lazımdır. Bu, “Bütün funksiyalar”->Xarici mənbələr menyusundan edilə bilər. Cədvəlimizə ilk daxil olduğumuz zaman eyni əlaqə sətirini “Enterprise” rejimində daxil etməliyik.

Bu fürsət niyə belə maraq doğurur? 1C-də proqramlaşdıran və SQL-ə kifayət qədər bələd olan və ən azı biznes proqramları üçün digər texnoloji platformaların arxitekturası və inkişaf prinsipləri ilə tanış olan hər hansı bir şəxs sizə 1C haqqında ən çox nəyi bəyəndiyini qəti əminliklə söyləyəcək. Əlbəttə ki, sorğu qurucusu mənim şəxsən rastlaşdığım əlaqə strukturlarından məlumatların əldə edilməsi üçün sorğuların yazılması üçün ən rahat və düşünülmüş mexanizmdir. İndi 1C bizə yalnız 1C ilə deyil, həm də hər hansı digər masalarla istifadə etmək üçün belə gözəl bir fürsət verdi. Sadəcə, bu “bal çəlləsində” çoxlu “məlhəmdə milçəklər” var. Əvvəlcə ilk şeylər:

1) Quraşdırma və istifadə- "qafla rəqs etmədən" işləməyəcək
a) Xarici məlumat mənbəyi əlavə edin - bu, mürəkkəb görünmür
b) "Siyahıdan seçin" onay qutusunu yoxlayın - məcburi - bu, başlanğıcda funksionallığı yoxlamaq üçün lazımdır və sizi lazımsız problemlərdən xilas edəcək
c) - "..." düyməsini sıxmağınızdan əmin olun - əlaqə ODBC-dir. Hamımızın öyrəşdiyi kimi OLEDB deyil, bir səviyyə aşağı

D) Amma burada ÇOX DİQQƏTLİ olun.

Bu ODBC sürücüsüdür - əgər siz müştəri-server versiyasından istifadə edirsinizsə, o, serverdə olmalıdır. Əgər bir sistem üzərində inkişaf edirsinizsə və başqa bir sistem üzərində işləyirsinizsə (adətən belədir), əmin olun ki, sizi heç bir sürpriz gözləmir. Qəribə bir tövsiyədir, lakin sürətdən xüsusilə narahat deyilsinizsə və SQL92 standartının imkanlarından kənara çıxmaq niyyətində deyilsinizsə, ən köhnə və ya ən ümumi sürücünü seçin. Bu sizə daha yaxşı uyğunluq verəcəkdir. Məsələn, SQL Server 2008 üçün ən yaxşı sürücü SQL Server Native Client 11 olacaq, lakin mən sadəcə SQL Serveri seçməyi məsləhət görürəm, əks halda bu çox yerli müştəri ya serverdə, ya da bütün müştəri maşınlarında quraşdırılmalı olacaq (əgər fayl versiyası) və faydası sadə üçün xüsusidir, o, sizə heç bir tapşırıq verməyəcək.
e) Standart Server seçimi dialoqları

E) Parolun saxlanması ilə bağlı suala “hə” cavabını verməyi məsləhət görürəm, əks halda bu işə başlaya bilməyəcəksiniz.
g) Cədvəl və təfərrüatları seçin... gözəl fürsət - siz dərhal istədiyiniz kimi adını dəyişə bilərsiniz (və detalları da) və xassələrdə məlumat mənbəyinin sahələrinin adlarını görəcəksiniz.

Z) İndi onu işə salırsınız, sorğu dizaynerini açın - axmaqcasına cədvəldən və OPA-dan bütün qeydləri seçin - xəta. Nə etməli? İdarə olunan interfeysiniz varsa, xidmət menyusuna baxın və əgər adi...
Mən şəxsən bu kodu istifadə etdim:
Kod 1C v 8.x Parametrlər = ExternalDataSources.DAX.GetGeneralConnectionParameters();
Parameters.AuthenticationStandard = Doğrudur;
Parameters.UserName = "sa";
Parameters.Password = "pass";
Parameters.ConnectionString = "SÜRÜCÜ=(SQL Server);SERVER=servet;UID=sa;PWD=;MƏLUMAT BAZASI=verilənlər bazası";
Parameters.DBMS = "MSSQLServer";

ExternalDataSources.DAX.SetCommonConnectionParameters(Parameters);
ExternalDataSources.DAX.SetUserConnectionParameters(UserName(), Parametrlər);
ExternalDataSources.DAX.SetSessionConnectionParameters(Parameters);

ExternalDataSources.DAX.SetConnection();
Bəzi parçalar lazım olmaya bilər, amma işləyir.
Siz kodu BİR DƏFƏ işlətməlisiniz. Ondan sonra bağlanmaq normal olacaq... təbii ki mistisizm - bunun nə üçün lazım olduğu aydın deyil...

2) Yalnız oxunan məlumat mənbələri- Bəli, möcüzələr baş vermir... amma bəzən bunu istəyirsən...

3) DAXİLİ MƏLUMAT MƏNBƏLƏRİ İLƏ BİRLİKDƏ İSTİFADƏ EDİLƏ BİLMƏZ
Şəxsən bu fakt məni yerindəcə öldürdü.

Bu necə ola bilər... gözlədiyimiz və artıq təsəvvür etdiyimiz və indi məlumatlarımızı bir sorğuda 1C ilə necə birləşdirəcəyimizə dair dodaqlarımızı yaladıq, onu yığışdırın - qruplaşdırın, hesabata daxil edin, amma bu belə deyil. ...
Amma təbii ki, bu, təcrübəli insanları dayandırmır... ağlına hansı fikir gəldi? Düzdür - müvəqqəti cədvəllər:

4) MÜVƏQƏQİ CƏDVƏLLƏR İLƏ BİRLİKDƏ İSTİFADƏ EDİLMƏZ

Ancaq bu, artıq texnoloji çətinliklər kimi görünmür, amma "həyat cənnət kimi görünməsin deyə" bizdən istədiklərinə çox bənzəyir :).

5) Yalnız ACS birləşmələrində istifadə edilə bilər
Bilməyənlər üçün bu, "Məlumat Dəsti Bağlantıları" sekmesindəki ACS-də. Onlardan tez-tez istifadə edirsiniz? Rahatdır? Görünür, bizi onlardan daha tez-tez istifadə etməyə məcbur etmək istəyirlər. Yalnız "Rabitə vəziyyəti" və "Rabitə parametri" sütunu var. Onların heç bir standart konfiqurasiyada istifadəsinə dair bir nümunə tapmadım və nədənsə sənədlərdə və Xrustalevanın işində hər şey şəffaf deyil. Kimsə mənə "bağlantı şərtinin" necə işlədiyini izah edə bilər. Oraya Mənbə Atributları = Alıcı Atributları yazsanız, işləmir. Əlbəttə ki, şərt "İfadə" sahəsinə yazıla bilər - əksər hallarda bu kifayətdir...

Ümumilikdə, bu problem əvvəllər belə bir yerdə həll edildi:
Code 1C v 8.x Function InitializeDataSource()

DateStart = SettingsComposer.Settings.DataParameters.Items.Value;
DataCon = SettingsBuilder.Settings.DataParameters.Items.Value;
Əgər DataCon > "20100101" Sonra
DataCon = "20100101";
endIf;

CN = Yeni QualifiersNumbers(15,2);
KS = NewStringQualifiers(255);

ArrayNumber = Yeni Massiv();
ArrayNumber.Add(Növ("Nömrə"));

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

ArrayData = Yeni Array();
ArrayDate.Add(Növ("Tarix"));

//Cədvəldə mühasibat xərclərini dolduracağıq
TypeNumber = New DescriptionTypes(ArrayNumber, CN);
TypeString = New TypeDescription(ArrayString, KS);
TypeDate = New TypeDescription(ArrayDate);

//SQL-dən verilənlərin yüklənməsi üçün cədvəl
TZ = Yeni Dəyər Cədvəli();
TK.Columns.Add("Nomenklatura Kodu", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add("Dövr", Tarix Növü);

TK.Indices.Add("Dövr");

//SQL-ə qoşulun
Bağlantı sətri = "Provider=SQLOLEDB.1; Davamlı Təhlükəsizlik Məlumatı=Doğru;İstifadəçi ID=sa;Pwd=;Məlumat Mənbəsi=;Hazırlama üçün İstifadə Proseduru=1;Avtomatik Tərcümə=Doğru;Paket Ölçüsü=4096;İş Stansiyasının ID-si=;İstifadə edin Məlumat üçün Şifrələmə=Yanlış;Mümkün olduqda sütunların harmanlanması ilə etiketləyin=Yanlış;İlkin Kataloq=Hesabatlar";
Əlaqə = Yeni COMObject("ADODB.Connection");
Komanda = Yeni COMObject("ADODB.Command");
RecordSet = Yeni COMObject("ADODB.RecordSet");
Tarix = "";
Cəhd
Connection.Open(AbbrLP(ConnectionString));
Command.ActiveConnection = Əlaqə;
Command.CommandText = "S_select * PH-dən dövr >= "" + String(Format(DateStart, "DF=yyyyMMdd"))) + "" və dövr<= "" + Строка(Формат(ДатаКон, "ДФ=ггггММдд")) + """;
RecordSet = Command.Execute();
RecordSet.MoveFirst();
İstisna
Texniki şərtlərin qaytarılması;
EndAttempt;

RecordSet.EOF = False Loop isə
Xətt = TK.Add();
Satır.NomenklaturaKod = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Dəyər;
Satır.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Value;
Row.Period = RecordSet.Fields(RecordSet.Fields.Item(13).Ad).Dəyər;
RecordSet.MoveNext();
EndCycle;

Sorğu = Yeni Sorğu();
VrTable = Yeni TemporaryTableManager();
Query.SetParameter("vrDataTable", TK);
Query.SetParameter("Başlanğıc tarixi", Başlama tarixi);
Request.SetParameter("DataCon", DateCon);
Query.Text = "SEÇ
| vrDataTable.Nomenklatura Kodu,
| vrDataTable.Qnty,
| vrDataTable.Period
|Məlumat Cədvəlini yerləşdirin
|FROM
| &vDataTable AS vrDataTable
|HARADA
| vrDataTable.Period >= &Başlama Tarixi
| Və vrDataTable.Period<= &ДатаКон";
Request.Run();
TZ = Müəyyən edilməmiş;

Sorğu = Yeni Sorğu;
Query.TemporaryTableManager = VrTable;
Query.Text = "Budur, dəyişən cədvəlini əhatə edən sorğu";

Nəticə = Query.Run();
Nəticəni qaytarmaq;

EndFunction

ExternalSet = InitializeDataSource();
DataSet = yeni Struktur();
DataSet.Insert("SQL Cədvəli", ExternalSet);
TypicalReports.GenerateTypicalReport(ThisObject, Nəticə, Şifrədən Çıxarma Məlumatı, OutputToReportForm, DataSet);

Əslində, kod sətirləri çox deyil və onlar kifayət qədər standartdır... bu halda siz sorğu dizaynerinin tam funksionallığından istifadə edə və ACS-yə yalnız DATA COMPOSITION funksiyasını verə bilərsiniz.

Amma bu, əlbəttə ki, o qədər də gözəl görünmür... və hər dəfə dəyərləri cədvələ yükləmək üçün kod yazmaq və detalların adında səhv edib-etmədiyinizi yoxlamaq lazımdır... 1C nədənsə yarımçıq görünür. Hansının istifadə etmək daha rahat olduğuna hələ qərar verməmişəm. Siz qərar verin və qərarlarınız və sizi onlara nəyin sövq etdiyini yazın.

Məlumat saytdan götürülüb

8.2.14.533 buraxılışı nəhayət platformanın 14-cü buraxılışının az və ya çox stabil versiyasıdır. Nəhayət, gözəl bir fürsəti - “xarici məlumat mənbələrini” sınamaq fürsəti yarandı.

Bu fürsət niyə belə maraq doğurur? 1C-də proqramlaşdıran və SQL-ə kifayət qədər bələd olan və ən azı biznes proqramları üçün digər texnoloji platformaların arxitekturası və inkişaf prinsipləri ilə tanış olan hər hansı bir şəxs sizə 1C haqqında ən çox nəyi bəyəndiyini qəti əminliklə söyləyəcək. Əlbəttə ki, sorğu qurucusu mənim şəxsən rastlaşdığım əlaqə strukturlarından məlumatların əldə edilməsi üçün sorğuların yazılması üçün ən rahat və düşünülmüş mexanizmdir. İndi 1C bizə yalnız 1C ilə deyil, həm də hər hansı digər masalarla istifadə etmək üçün belə gözəl bir fürsət verdi. Sadəcə, bu “bal çəlləsində” çoxlu “məlhəmdə milçəklər” var. Əvvəlcə ilk şeylər:

1) Quraşdırmaq və istifadə etmək - "daf ​​ilə rəqs etmədən" işləməyəcək

A) Xarici məlumat mənbəyi əlavə edin - bu, mürəkkəb görünmür
b) "Siyahıdan seçin" onay qutusunu yoxlayın - məcburi - bu, başlanğıcda funksionallığı yoxlamaq üçün lazımdır və sizi lazımsız problemlərdən xilas edəcək
V)
(IMG:http://pics.livejournal.com/comol/pic/0000cr1r.png)
- "..." düyməsini sıxmağınızdan əmin olun - əlaqə ODBC-dir. Hamımızın öyrəşdiyi kimi OLEDB deyil, bir səviyyə aşağı

Amma burda ol ÇOX DİQQƏTLİ.

Bu ODBC sürücüsüdür - əgər siz müştəri-server versiyasından istifadə edirsinizsə, o, serverdə olmalıdır. Əgər bir sistem üzərində inkişaf edirsinizsə və başqa bir sistem üzərində işləyirsinizsə (adətən belədir), əmin olun ki, sizi heç bir sürpriz gözləmir. Qəribə bir tövsiyədir, lakin sürətdən xüsusilə narahat deyilsinizsə və SQL92 standartının imkanlarından kənara çıxmaq niyyətində deyilsinizsə, ən köhnə və ya ən ümumi sürücünü seçin. Bu sizə daha yaxşı uyğunluq verəcəkdir. Məsələn, SQL Server 2008 üçün ən yaxşı sürücü SQL Server Native Client 11 olacaq, lakin mən sadəcə SQL Serveri seçməyi məsləhət görürəm, əks halda bu çox yerli müştəri ya serverdə, ya da bütün müştəri maşınlarında quraşdırılmalı olacaq (əgər fayl versiyası) və faydası sadə üçün xüsusidir, o, sizə heç bir tapşırıq verməyəcək.

E) Standart Server seçim dialoqları

G) Cədvəl və təfərrüatları seçin... gözəl fürsət - siz dərhal adını istədiyiniz kimi dəyişə bilərsiniz (və detalları da) və xassələrdə məlumat mənbəyinin sahələrinin adlarını görəcəksiniz.

Z) İndi onu işə salırsınız, sorğu dizaynerini açın - axmaqcasına cədvəldən və OPA-dan bütün qeydləri seçin - xəta. Nə etməli? İdarə olunan interfeysiniz varsa, xidmət menyusuna baxın və əgər adi...
Mən şəxsən bu kodu istifadə etdim:

Parametrlər = ExternalDataSources.DAX.GetGeneralConnectionParameters();
Parameters.AuthenticationStandard = Doğrudur;
Parameters.UserName = "sa";
Parameters.Password = "pass";
Parameters.ConnectionString = "SÜRÜCÜ=(SQL Server);SERVER=servet;UID=sa;PWD=;MƏLUMAT BAZASI=verilənlər bazası";
Parameters.DBMS = "MSSQLServer";

ExternalDataSources.DAX.SetCommonConnectionParameters(Parameters);
ExternalDataSources.DAX.SetUserConnectionParameters(UserName(), Parametrlər);
ExternalDataSources.DAX.SetSessionConnectionParameters(Parameters);

ExternalDataSources.DAX.SetConnection();

Bəzi parçalar lazım olmaya bilər, amma işləyir. Kodu işlətməlisiniz BİR DƏFƏ. Ondan sonra əlaqə qurmaq normal olacaq... təbii ki mistisizm - bunun nə üçün lazım olduğu aydın deyil...

2) Yalnız oxunan məlumat mənbələri
Bəli, möcüzələr baş vermir, amma bəzən bunu belə istəyirsən...

3) DAXİLİ MƏLUMAT MƏNBƏLƏRİ İLƏ BİRLİKDƏ İSTİFADƏ EDİLƏ BİLMƏZ
Şəxsən bu fakt məni yerindəcə öldürdü.

Bu necə ola bilər... gözlədiyimiz və artıq təsəvvür etdiyimiz və indi məlumatlarımızı bir sorğuda 1C ilə necə birləşdirəcəyimizə dair dodaqlarımızı yaladıq, onu yığışdırın - qruplaşdırın, hesabata daxil edin, amma bu belə deyil. ...

Amma təbii ki, bu, təcrübəli insanları dayandırmır... ağlına hansı fikir gəldi? Düzdür - müvəqqəti cədvəllər:

4) MÜVƏQƏQİ CƏDVƏLLƏR İLƏ BİRLİKDƏ İSTİFADƏ EDİLMƏZ

Ancaq bu, artıq texnoloji çətinliklər kimi görünmür, amma "həyat cənnət kimi görünməməsi üçün" bizdən istədiklərinə çox bənzəyir (IMG:).

5) Yalnız ACS birləşmələrində istifadə edilə bilər

Bilməyənlər üçün bu, "Məlumat Dəsti Bağlantıları" sekmesindəki ACS-də. Onlardan tez-tez istifadə edirsiniz? Rahatdır? Görünür, bizi onlardan daha tez-tez istifadə etməyə məcbur etmək istəyirlər. Yalnız "Rabitə vəziyyəti" və "Rabitə parametri" sütunu var. Onların heç bir standart konfiqurasiyada istifadəsinə dair bir nümunə tapmadım və nədənsə sənədlərdə və Xrustalevanın işində hər şey şəffaf deyil. Kimsə mənə "bağlantı şərtinin" necə işlədiyini izah edə bilər. Oraya Mənbə Atributları = Alıcı Atributları yazsanız, işləmir. Əlbəttə ki, şərt "İfadə" sahəsinə yazıla bilər - əksər hallarda bu kifayətdir...

Ümumilikdə, bu problem əvvəllər belə bir yerdə həll edildi:

Funksiya InitializeDataSource()

DateStart = SettingsComposer.Settings.DataParameters.Items.Value;
DataCon = SettingsBuilder.Settings.DataParameters.Items.Value;
Əgər DataCon > "20100101" Sonra
DataCon = "20100101";
endIf;

CN = Yeni QualifiersNumbers(15,2);
KS = NewStringQualifiers(255);

ArrayNumber = Yeni Massiv();
ArrayNumber.Add(Növ("Nömrə"));

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

ArrayData = Yeni Array();
ArrayDate.Add(Növ("Tarix"));

//Cədvəldə mühasibat xərclərini dolduracağıq
TypeNumber = New DescriptionTypes(ArrayNumber, CN);
TypeString = New TypeDescription(ArrayString, KS);
TypeDate = New TypeDescription(ArrayDate);

//SQL-dən verilənlərin yüklənməsi üçün cədvəl
TZ = Yeni Dəyər Cədvəli();
TK.Columns.Add("Nomenklatura Kodu", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add("Dövr", Tarix Növü);

TK.Indices.Add("Dövr");

//SQL-ə qoşulun
Bağlantı sətri = "Provider=SQLOLEDB.1; Davamlı Təhlükəsizlik Məlumatı=Doğru;İstifadəçi ID=sa;Pwd=;Məlumat Mənbəsi=;Hazırlama üçün İstifadə Proseduru=1;Avtomatik Tərcümə=Doğru;Paket Ölçüsü=4096;İş Stansiyasının ID-si=;İstifadə edin Məlumat üçün Şifrələmə=Yanlış;Mümkün olduqda sütunların harmanlanması ilə etiketləyin=Yanlış;İlkin Kataloq=Hesabatlar";
Əlaqə = Yeni COMObject("ADODB.Connection");
Komanda = Yeni COMObject("ADODB.Command");
RecordSet = Yeni COMObject("ADODB.RecordSet");
Tarix = "";
Cəhd
Connection.Open(AbbrLP(ConnectionString));
Command.ActiveConnection = Əlaqə;
Command.CommandText = "PH-dən * seçin, burada dövr >= "" + String(Format(TarixBaşlanğıc, "DF=yyyyMMdd")) + "" və dövr RecordSet = Command.Execute();
RecordSet.MoveFirst();
İstisna
Texniki şərtlərin qaytarılması;
EndAttempt;

RecordSet.EOF = False Loop isə
Xətt = TK.Add();
Satır.NomenklaturaKod = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Dəyər;
Satır.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Value;
Row.Period = RecordSet.Fields(RecordSet.Fields.Item(13).Ad).Dəyər;
RecordSet.MoveNext();
EndCycle;

Sorğu = Yeni Sorğu();
VrTable = Yeni TemporaryTableManager();
Query.SetParameter("vrDataTable", TK);
Query.SetParameter("Başlanğıc tarixi", Başlama tarixi);
Request.SetParameter("DataCon", DateCon);
Query.Text = "SEÇ
| vrDataTable.Nomenklatura Kodu,
| vrDataTable.Qnty,
| vrDataTable.Period
|Məlumat Cədvəlini yerləşdirin
|FROM
| &vDataTable AS vrDataTable
|HARADA
| vrDataTable.Period >= &Başlama Tarixi
| Və vrDataTable.Period Query.Execute();
TZ = Müəyyən edilməmiş;

Sorğu = Yeni Sorğu;
Query.TemporaryTableManager = VrTable;
Query.Text = "Budur, dəyişən cədvəlini əhatə edən sorğu";

Nəticə = Query.Run();
Nəticəni qaytarmaq;

EndFunction

ExternalSet = InitializeDataSource();
DataSet = yeni Struktur();
DataSet.Insert("SQL Cədvəli", ExternalSet);
TypicalReports.GenerateTypicalReport(ThisObject, Nəticə, Şifrədən Çıxarma Məlumatı, OutputToReportForm, DataSet);

Əslində, kod sətirləri çox deyil və onlar kifayət qədər standartdır... bu halda siz sorğu dizaynerinin tam funksionallığından istifadə edə və ACS-yə yalnız DATA COMPOSITION funksiyasını verə bilərsiniz.

Amma bu, əlbəttə ki, o qədər də gözəl görünmür... və hər dəfə dəyərləri cədvələ yükləmək üçün kod yazmaq və detalların adında səhv edib-etmədiyinizi yoxlamaq lazımdır... 1C nədənsə yarımçıq görünür. Hansının istifadə etmək daha rahat olduğuna hələ qərar verməmişəm. Siz qərar verin və qərarlarınız və sizi onlara nəyin sövq etdiyini yazın.

[linkə baxmaq üçün qeydiyyatdan keçməlisiniz]