1s 8 xarici məlumat mənbəyi. Xarici məlumat mənbələri

Platformanın 8.3.5.1068 versiyasında (və daha sonra) 1C proqram təminatından istifadə edərək xarici mənbələrdə məlumatları əlavə etmək, dəyişdirmək və silmək mümkün oldu. Bu xüsusiyyətin nümunələri bu məqalədə təqdim olunur.

Xarici mənbələrə yazmağı mümkün etmək üçün 1C şirkəti məlumat cədvəllərinə və xarici mənbələrin sahələrinə yeni xüsusiyyətlər əlavə etdi:

  • Bütün masa üçün - əmlak Yalnız oxumaq. Yalnız oxumaq = Doğrudur bu cədvəldəki məlumatların dəyişdirilməsinin qeyri-mümkün olduğunu bildirir;
  • Fərdi cədvəl sahələri üçün - xüsusiyyətlər Yalnız oxumaq, AllowNullDoldurma Dəyəri:
    • Yalnız oxumaq = Doğrudur bu sahədə məlumatların dəyişdirilməsinin mümkün olmadığını bildirir;
    • AllowNull = Doğrudur o deməkdir ki, bu sahəyə dəyər yazıla bilər SIFIR;
    • Doldurma Dəyəri bu sahənin standart dəyərini ehtiva edir (əgər varsa).

Siz (cədvəlləri əl ilə təsvir edərkən) və ya platforma (dizaynerdən istifadə edərək cədvəllər yaradarkən) bu xassələrdən aşağıdakı kimi istifadə edə bilərsiniz.

  • Yalnız oxumaq = Doğrudur məsələn, görünüşlər üçün ifadə (funksiya nəticəsi) və s. əsasında alınan cədvəllər təyin edin. Belə cədvəllərdəki məlumatlar dəyişdirilə bilməz;
  • Yalnız oxumaq = Doğrudur avtomatik təyin olunan sahələr üçün müəyyən edin ( AVTOARTMA), hesablanmış sahələr və s. Bu cür sahələrdə məlumatlar dəyişdirilə bilməz;
  • AllowNull = Doğrudurəsas sahələr və xarici mənbədə təsvir olunanlar istisna olmaqla, bütün sahələr üçün təyin edin NULL DEYİL;
  • Doldurma Dəyəri sahələr xarici mənbə bu sahənin standart dəyərini təyin etdiyi halda təyin edilməlidir (dəyər DEFAULT).

Daxili dildən istifadə edərək və ya interaktiv şəkildə xarici mənbələrdəki məlumatları əlavə edə, dəyişdirə və silə bilərsiniz. Daxili dil bunun üçün aşağıdakı cədvəl meneceri metodlarından istifadə edir:

  • RecordSet yaradın()- qeyri-obyekt cədvəlləri üçün;
  • Yeni üsul CreateObject()- obyekt cədvəlləri üçün.

Müvafiq olaraq, obyektlər Xarici verilənlər mənbəyi cədvəli qeyd dəstiExternalDataSourceTableObject yeni üsullar ortaya çıxdı yaz()Sil().

Məlumatların əlavə edilməsi

Xarici mənbəyə məlumat əlavə etdiyiniz zaman obyekt (və ya qeydlər dəsti) yaradırsınız, sahə dəyərlərini təyin edir və yazırsınız. Bununla belə, bilmək üçün faydalı olan bəzi xüsusiyyətlər var.

Məsələn, bir sahənin dəyərini təyin etməyə çalışsanız Yalnız oxumaq = Doğrudur, xəta atılacaq. Və ifadədə birbaşa verilənlər bazasına yazarkən INSERT belə sahələr atlanacaq. Qalan sahələr onlara təyin etdiyiniz dəyərləri ehtiva edir. Buna görə də dəyərlər Sıfır və defolt dəyərlər sahələrə açıq şəkildə təyin edilməlidir.

  • id(AllowNull = Doğrudur);
  • ad(AllowNull = Doğrudur);
mFeature = ExternalDataSources.TableIm.shop_feature.CreateObject(); mCharacteristic.id = Kod; mCharacteristic.name = Ad; mCharacteristic.Write();

Bəyanatın icrası yaz() hadisə işləyicisinin əvvəlcə çağırılmasına səbəb olacaq Qeydiyyatdan əvvəl, sonra xarici mənbə cədvəlinə fiziki giriş edilir ( INSERT), sonra hadisə işləyicisi çağırılacaq Yazan zaman.

Xarici mənbə cədvəlinin açar sahəsi ilə aşağıdakıları edə bilərsiniz. Əgər əsas sahə dəyişkəndirsə, onda siz yazmadan əvvəl onun dəyərini “əl ilə” təyin edirsiniz. Açar sahəsinin dəyişdirilməsi qadağandırsa, platforma müstəqil olaraq açarı alacaq INSERT və ya dərhal sonra. Metoddan istifadə edərək bu prosesə müdaxilə edə bilərsiniz SetLinkNew() fiziki qeyddən əvvəl (hadisə idarəedicisində Qeydiyyatdan əvvəl) və ya fiziki qeyddən dərhal sonra (hadisə idarəedicisində Yazan zaman).

Məlumatların dəyişdirilməsi

Məlumat dəyişdikdə, mövcud olan bütün cədvəl sahələrinin dəyərləri Yalnız oxumaq = Yanlış.

MFeature = ExternalDataSources.TableIm.shop_feature.FindByField("id",kod); mObject = mCharacteristic.GetObject(); mObject.name = Ad; mObject.Write();

Yalnız bəzi sahələri qeyd etmək lazımdırsa, metodlardan istifadə edərək birbaşa daxili dildən onların siyahısını təyin edə bilərsiniz. SetWritableFields()GetWrittenFields().

Məlumatların silinməsi

Məlumatların silinməsi birbaşa verilənlər bazası cədvəlindən bir sıra silir. Bu halda, silinən obyektə istinadların axtarışı həyata keçirilmir. Əgər belə bir funksionallıq lazımdırsa, siz onu hadisə idarəedicisində özünüz proqramlaşdıra bilərsiniz Silmədən əvvəl().

MFeature = ExternalDataSources.TableIm.shop_feature.FindByField("id",Kod); mObject = mCharacteristic.GetObject(); mObject.Delete();

Əməliyyatlar

Xarici mənbələrdən məlumatların oxunması, əvvəllər olduğu kimi, əməliyyatdan kənar həyata keçirilir və yazarkən platforma gizli əməliyyat açır. Eyni zamanda, obyekt metodlarından istifadə edərək açıq əməliyyatlarda həm oxumaq, həm də yazmaq olar ExternalDataSourceManager:

  • Tranzaksiyaya başlayın();
  • CommitTransaction();
  • Ləğv Etmə().

Kilidlər

  • Avtomatik;
  • idarə olunur;
  • Avtomatik və idarə olunur.

eləcə də xarici mənbə cədvəlinin xassəsi Tranzaksiya İzolyasiya Səviyyəsi:

Bundan əlavə, üsulda kilidləmə səviyyəsini müstəqil olaraq təyin edə bilərsiniz Tranzaksiyaya başlayın().

Standart məqaləyə misallar əlavə etdim) Əgər daha çox vaxtım olsa, daha çox nümunə əlavə edəcəm.

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 alınması üçü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ə istənilən 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çim dialoqları

E) Parolun saxlanması ilə bağlı suala “bəli” cavabını verməyi tövsiyə edirəm, əks halda bu biznesə 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 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:
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. Bundan sonra normal əlaqə qurmaq mümkün 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 ki... 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 barədə dodaqlarımızı yaladıq, onu yığışdırın - qruplaşdırın, hesabata daxil edin, amma bu deyil. hal...
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 = "Provayder=SQLOLEDB.1; Davamlı Təhlükəsizlik Məlumatı=Doğru;İstifadəçi ID=sa;Pwd=;Məlumat Mənbəsi=;Hazırlanma üçü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şlama 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ı, OutputInReportForm, 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

1C Enterprise rejimində siyahılarda onlarla işləyin.

Bununla belə, işdə tez-tez məlumatların bir hissəsinin başqa yerdə saxlandığı bir vəziyyət var.

  • Onlayn mağaza (adətən məlumatları xarici MySQL/SQL verilənlər bazasında saxlayır)
  • Başqa bir baza.

Başqa verilənlər bazalarında saxlanılan belə məlumatlarla işləmək üçün xüsusi mexanizmlər işlənib hazırlanmalıdır.

1C 8.2.14 versiyasında proqramçının işini xeyli asanlaşdıran 1C Xarici Məlumat Mənbələri adlı yenisi peyda oldu, çünki:

  • indi məlumatların əldə edilməsi üçün xüsusi mexanizmlərin yaradılmasına ehtiyac yoxdur
  • bu cür məlumatlar adi şəkildə əldə edilə bilər
  • bu cür məlumatlara 1C siyahılarında baxmaq olar.
    • Xarici məlumat mənbəyi 1C – xarici SQL verilənlər bazası

      Tutaq ki, bizdə SQL verilənlər bazası var, orada bizə lazım olan məlumat saxlanılır. 1C Xarici Məlumat Mənbəsi mexanizmindən istifadə edərək ondan məlumatları oxumağa çalışaq.

      Xarici 1C məlumat mənbəyi əlavə edək. Konfiquratora getməlisiniz, xarici məlumat mənbələri konfiqurasiya pəncərəsində, ağacın ən aşağı hissəsində yerləşir.

      1. Əlaqə

      Gəlin yeni xarici məlumat mənbəyi 1C əlavə edək, onu özbaşına adlandıraq.

      Verilənlər bazası cədvəllərdən ibarətdir. Biz onları əlavə edilmiş xarici məlumat mənbəyinə əlavə etməliyik. Bunun üzərinə sağ vurun və Cədvəl əlavə et seçin.

      İlk dəfə o, sizdən əlaqə sətrini təqdim etməyi təklif edəcək. Onu əl ilə daxil etmək və ya “…” düyməsini sıxmaqla yaratmaq olar.

      Xüsusi vəziyyətimizdə sürücü olaraq “SQL Server” seçəcəyik

      SQL-ə qoşulmaq üçün əsas parametrləri dolduraq. Server adı daxil edilə və ya siyahıdan seçilə bilər.

      1C SQL-ə qoşulacaq və siyahıdan müəyyən verilənlər bazasını seçməyi təklif edəcək.

      Bundan sonra, 1C bu verilənlər bazasındakı cədvəllərin siyahısını və onların sütunlarını göstərəcəkdir. Lazımi cədvəlləri seçmək üçün qutuları qeyd etməlisiniz.

      Cədvəllər və sütunlar əlavə olunacaq. Adlar uzaq verilənlər bazasında təyin olunduğu kimi olacaq. 1C-də siz onların adlarını dəyişdirə bilərsiniz (xüsusiyyətlərdə).

      Əlavə edilmiş cədvəlin bir nümunəsidir:

      Əlavə edilmiş sütunun bir nümunəsidir:

      1C platformasının 1C qovluqlarında olduğu kimi xarici cədvəllə işləməsi üçün cədvəldə əlavə parametrləri təyin edə bilərsiniz:

      • Key Field xassəsində sətrin unikal identifikasiyasını təmin edəcək sütunlardan birini təyin edin; bir neçə sətir unikallığı təmin edərsə, bu üsul işləmir (Kod sahəsinin analoqu)
      • Təqdimat sahəsinin xüsusiyyətində – xəttin qısa təsvirini təmin edəcək sütunlardan birini göstərin (Ad sahəsinin analoqu)
      • Cədvəl Məlumat Tipi xassəsində Obyekt Məlumatını təyin edin.

      2. Baxın

      Uzaq bazaya qoşulma avtomatik olaraq həyata keçirilmir. Qoşulmaq üçün standart menyu seçməlisiniz.

      Standart filialda əlaqə parametrlərini (1C Müəssisə rejiminə xas) təyin etməyə və əlaqə yaratmağa imkan verən Xarici məlumat mənbələrinin idarə edilməsi xüsusi əmri var.

      Əvvəlcə verilənlər bazasına qoşulmaq üçün parametrləri təyin etməlisiniz.

      Konfiquratorda parametrləri etdikdə, nəticədə o, sizə əlaqə xəttini göstərdi. Konfiquratorda Cədvəl əlavə et düyməsini yenidən klikləməklə onu yenidən görə bilərsiniz.

      Bağlantı sətirini kopyalayın və 1C Enterprise rejimində təyin edin.

      Bundan sonra faktiki əlaqə qurmalısınız.

      Bağlantı qurulduqdan sonra siyahılarla işləmək mümkündür.

      3. 1C dilində istifadə edin

      Bağlantı 1C dilində proqram kodundan da edilə bilər.

      Bağlantı parametrləri aşağıdakı kimi müəyyən edilir:
      ConnectionParameters = ExternalDataSources.SourceNameConfigurator.GetGeneralConnectionParameters();

      ConnectionParameters.AuthenticationStandard = Doğrudur;
      ConnectionParameters.UserName = "sa";
      ConnectionParameters.Password = "parol";
      ConnectionParameters.ConnectionString = “konfiquratordan əlaqə sətri”;
      ConnectionParameters.DBMS = "MSSQLServer";

      ExternalDataSources.SourceNameConfigurator.SetGeneralConnectionParameters(ConnectionParameters);
      ExternalDataSources.SourceNameConfigurator.SetUserConnectionParameters(UserName(), Parametrlər);
      ExternalDataSources.SourceNameConfigurator.SetSessionConnectionParameters(Parameters);
      ExternalDataSources.SourceNameConfigurator.SetConnection();

      Siz müntəzəm istifadə edərək verilənlər bazasından məlumatları sorğulaya bilərsiniz. Xarici mənbə OurExternalSource və ExternalSource Cədvəl cədvəlləri üçün sorğu mətninin nümunəsi:

      SEÇİN
      ExternalSourceTable.FieldName
      FROM
      ExternalDataSource.OurExternal Source.Cədvəl.External SourceTable"

      Xarici məlumat mənbəyi 1C - Excel faylı ilə işləmək

      Başqa bir varianta cəhd edək - xarici 1C məlumat mənbəyi vasitəsilə Excel faylı ilə işləmək.

      Sadə bir Excel faylı yaradaq.

      Xarici mənbə əlavə edək, onu özbaşına FileExcel adlandıraq. Gəlin ona “Sheet1$” cədvəlini əlavə edək. Asanlıqla gördüyünüz kimi, bu, Excel-də “$” simvolu əlavə edilmiş vərəqin adıdır.

      SQL-də olduğu kimi, sütunları əlavə edək. Onlar əl ilə əlavə edilə bilər. Əlavə etdiyiniz sütun növlərinin uyğun olduğundan əmin olmaq vacibdir, əks halda daha sonra “Məlumat növü uyğunsuzluğu” kimi xəta ala bilərsiniz.

      Sütun üçün 1C-də bir ad və məlumat mənbəyində bir ad göstərməlisiniz.

      Excel üçün bir xüsusiyyət var (“Çox az parametr. 3 tələb olunur” kimi xəta):

      • Excel cədvəlinin birinci sətirində sütun adları varsa, o zaman sadəcə bu sütunun adını göstərməlisiniz, məsələn, “Kod”.
      • Əks halda, tam adı cədvəl adı ilə “Sheet1$.Code” göstərməlisiniz, lakin parametrlərə “HDR=NO;” əlavə edin.

      Excel faylı üçün əlaqə parametrləri belə görünür:

      • XLSX faylları (Office 2007 və sonra)
        Driver=(Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb));DBQ=D:\FileExcel.xlsx;
      • XLS faylları (əvvəllər)
        Sürücü=(Microsoft Excel Sürücüsü (*.xls)); DriverID=790; DBQ=D:\FileExcel.xls;
        Siz öz adınızı və faylın yolunu göstərməlisiniz.

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 ilə kifayət qədər tanış olan və ən azı biznes tətbiqləri üçün digər texnoloji platformaların arxitekturası və işlənmə 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 alınması üçü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 onun adını istədiyiniz kimi dəyişə bilərsiniz (və detallar da) və məlumat mənbəyinin sahələrinin adları xassələrdə göstəriləcək.

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Ə. Bundan sonra normal əlaqə qurmaq mümkün 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 ki... 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 barədə dodaqlarımızı yaladıq, onu yığışdırın - qruplaşdırın, hesabata daxil edin, amma bu deyil. hal...

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əsində 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 = "Provayder=SQLOLEDB.1; Davamlı Təhlükəsizlik Məlumatı=Doğru;İstifadəçi ID=sa;Pwd=;Məlumat Mənbəsi=;Hazırlanma üçü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şlama 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ı, OutputInReportForm, 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]

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ə qarşılıqlı fəaliyyət üçün bir çox 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 sizə 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. Sorğularda xarici mənbələrdən alınan məlumatlardan da istifadə etmək mümkündür.



Əlaqədar nəşrlər