Makipagtulungan sa kanila sa mga listahan sa 1C Enterprise mode.

Gayunpaman, sa trabaho ay madalas na isang sitwasyon kung saan ang bahagi ng data ay naka-imbak sa ibang lugar.

  • Online na tindahan (karaniwang nag-iimbak ng data sa isang panlabas na database ng MySQL/SQL)
  • Isa pang base.

Upang gumana sa naturang data na nakaimbak sa iba pang mga database, kailangang bumuo ng mga espesyal na mekanismo.

Sa bersyon 1C 8.2.14, may lumabas na bago na tinatawag na 1C External Data Sources, na lubos na nagpapadali sa gawain ng programmer, dahil:

  • ngayon ay hindi na kailangang lumikha ng mga espesyal na mekanismo para sa pagkuha ng data
  • maaaring ma-access ang naturang data sa karaniwang paraan
  • maaaring matingnan ang naturang data sa mga listahan ng 1C.
    • Panlabas na data source 1C – panlabas na database ng SQL

      Sabihin nating mayroon tayong SQL database kung saan nakaimbak ang data na kailangan natin. Subukan nating basahin ang data mula dito gamit ang mekanismo ng 1C External Data Source.

      Magdagdag tayo ng external na 1C data source. Kailangan mong pumunta sa configurator, ang mga panlabas na mapagkukunan ng data ay matatagpuan sa window ng pagsasaayos, sa pinakailalim ng puno.

      1. Koneksyon

      Magdagdag tayo ng bagong external na data source na 1C, pangalanan ito nang basta-basta.

      Ang database ay binubuo ng mga talahanayan. Kailangan naming idagdag ang mga ito sa loob ng idinagdag na external na data source. Mag-right-click dito at piliin ang Add Table.

      Sa unang pagkakataon, ipo-prompt ka nitong magbigay ng string ng koneksyon. Maaari itong maipasok nang manu-mano, o nabuo sa pamamagitan ng pag-click sa "..." na buton.

      Sa aming partikular na kaso, pipiliin namin ang "SQL Server" bilang driver

      Punan natin ang mga pangunahing parameter para sa pagkonekta sa SQL. Ang pangalan ng server ay maaaring ipasok o mapili mula sa listahan.

      Kokonekta ang 1C sa SQL at mag-aalok na pumili ng isang partikular na database mula sa listahan.

      Pagkatapos nito, magpapakita ang 1C ng isang listahan ng mga talahanayan sa database na ito at ang kanilang mga column. Kailangan mong lagyan ng tsek ang mga kahon upang piliin ang mga kinakailangang talahanayan.

      Idadagdag ang mga talahanayan at column. Ang mga pangalan ay magiging kapareho ng mga ito ay tinukoy sa remote database. Sa 1C maaari mong palitan ang pangalan ng mga ito (sa mga katangian).

      Narito ang isang halimbawa ng idinagdag na talahanayan:

      Narito ang isang halimbawa ng idinagdag na column:

      Upang gumana ang platform ng 1C sa isang panlabas na talahanayan sa parehong paraan tulad ng ginagawa nito sa mga direktoryo ng 1C, maaari mong tukuyin ang mga karagdagang parameter sa talahanayan:

      • Sa property na Key Field, tukuyin ang isa sa mga column na magbibigay ng natatanging pagkakakilanlan ng row; kung ang ilang mga linya ay nagbibigay ng natatangi, kung gayon ang pamamaraang ito ay hindi gumagana (katulad sa field ng Code)
      • Sa property ng Presentation Field, tukuyin ang isa sa mga column na magbibigay ng maikling representasyon ng linya (katulad sa field na Pangalan)
      • Sa property ng Table Data Type, tukuyin ang Object Data.

      2. Tingnan

      Ang koneksyon sa remote base ay hindi awtomatikong ginagawa. Upang kumonekta, kailangan mong pumili ng karaniwang menu.

      Sa Standard branch mayroong isang espesyal na utos Pamamahala ng mga panlabas na mapagkukunan ng data, na nagbibigay-daan sa iyo upang tukuyin ang mga parameter ng koneksyon (tiyak sa 1C Enterprise mode) at gumawa ng isang koneksyon.

      Una kailangan mong tukuyin ang mga parameter para sa pagkonekta sa database.

      Kapag ginawa mo ang mga setting sa configurator, ipinakita nito sa iyo ang string ng koneksyon bilang isang resulta. Makikita mo itong muli sa pamamagitan ng pag-click muli sa Add Table sa configurator.

      Kopyahin ang string ng koneksyon at tukuyin ito sa 1C Enterprise mode.

      Pagkatapos nito, kailangan mong gawin ang aktwal na koneksyon.

      Matapos magawa ang koneksyon, posible na magtrabaho kasama ang mga listahan.

      3. Gamitin sa 1C na wika

      Ang koneksyon ay maaari ding gawin mula sa program code sa 1C na wika.

      Ang mga parameter ng koneksyon ay tinukoy bilang mga sumusunod:
      ConnectionParameters = ExternalDataSources.SourceNameConfigurator.GetGeneralConnectionParameters();

      ConnectionParameters.AuthenticationStandard = True;
      ConnectionParameters.UserName = "sa";
      ConnectionParameters.Password = "password";
      ConnectionParameters.ConnectionString = "string ng koneksyon mula sa configurator";
      ConnectionParameters.DBMS = "MSSQLServer";

      ExternalDataSources.SourceNameConfigurator.SetGeneralConnectionParameters(ConnectionParameters);
      ExternalDataSources.SourceNameConfigurator.SetUserConnectionParameters(UserName(), Parameters);
      ExternalDataSources.SourceNameConfigurator.SetSessionConnectionParameters(Mga Parameter);
      ExternalDataSources.SourceNameConfigurator.SetConnection();

      Maaari kang mag-query ng data mula sa isang database gamit ang isang regular na . Isang halimbawa ng text ng query para sa isang panlabas na pinagmulan OurExternalSource at mga talahanayan ng ExternalSource Table:

      PUMILI
      ExternalSourceTable.FieldName
      MULA SA
      ExternalDataSource.OurExternalSource.Table.ExternalSourceTable"

      Panlabas na data source 1C - gumagana sa Excel file

      Subukan natin ang isa pang opsyon - nagtatrabaho sa isang Excel file sa pamamagitan ng panlabas na 1C data source.

      Gumawa tayo ng simpleng Excel file.

      Magdagdag tayo ng panlabas na pinagmulan, arbitraryong tawagan itong FileExcel. Idagdag natin ang talahanayang “Sheet1$” dito. Tulad ng madali mong nakikita, ito ang pangalan ng sheet sa Excel kasama ang pagdaragdag ng simbolo na "$".

      Tulad ng sa kaso ng SQL, magdagdag tayo ng mga column. Maaari silang idagdag nang manu-mano. Mahalagang tiyaking tumutugma ang mga uri ng mga column na idinaragdag mo, kung hindi, maaari kang makatanggap ng error sa ibang pagkakataon tulad ng "Hindi tugma sa uri ng data."

      Para sa column kailangan mong tumukoy ng pangalan sa 1C at pangalan sa data source.

      Mayroong isang tampok para sa Excel (error tulad ng "Masyadong kakaunti ang mga parameter. 3 ang kinakailangan"):

      • Kung ang unang hilera ng isang talahanayan ng Excel ay naglalaman ng mga pangalan ng haligi, kailangan mong ipahiwatig lamang ang pangalan ng hanay na ito, halimbawa "Code".
      • Kung hindi, kailangan mong tukuyin ang buong pangalan na may pangalan ng talahanayan na "Sheet1$.Code", ngunit idagdag ang "HDR=NO;" sa mga parameter.

      Ang mga parameter ng koneksyon para sa Excel file ay ganito ang hitsura:

      • XLSX file (Office 2007 at mas bago)
        Driver=(Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb));DBQ=D:\FileExcel.xlsx;
      • XLS file (dating)
        Driver=(Microsoft Excel Driver (*.xls)); DriverID=790; DBQ=D:\FileExcel.xls;
        Dapat mong tukuyin ang iyong sariling pangalan at landas sa file.

Simula sa bersyon 8.3.5, ipinatupad ng platform ang kakayahang magsulat ng data sa mga talahanayan ng mga panlabas na mapagkukunan ng data. Tinatalakay ng artikulo ang functionality na ito, na nagpapalawak sa mga kasalukuyang kakayahan para sa pagsasama ng configuration sa mga third-party na system.

Applicability

Tinatalakay ng artikulo ang 1C 8.3.5 platform. May kaugnayan din ang materyal para sa mga kasalukuyang release ng platform.

Pagre-record sa external na data source sa 1C:Enterprise 8

Sa platform 8.2.14, isang bagong bagay ang idinagdag sa metadata tree - mga panlabas na mapagkukunan ng data. Ang layunin ng mekanismong ito ay makakuha ng data mula sa mga panlabas na database na may kaugnayan sa 1C.

Sa paglabas ng mga bagong paglabas ng platform, ang mga panlabas na mapagkukunan ng data ay umunlad, halimbawa, naging posible na ilagay ang mga ito sa mga pansamantalang talahanayan at magsagawa ng mga koneksyon sa mga regular na talahanayan.

Sa artikulong ito titingnan natin kung anong mga tool ang dapat i-record ng developer sa mga external na data source.

Ang lahat ng mga aksyon ay isinagawa sa Microsoft SQL Server 2008 R2 DBMS.

Ipinakilala ng Platform 8.3.4 ang kakayahang gumamit ng mga function na inilarawan sa mga panlabas na mapagkukunan ng data.

Binibigyang-daan ka ng tampok na ito na magpatakbo ng mga nakaimbak na pamamaraan sa gilid ng SQL Server, at sa tulong ng mga ito sa pag-access ng data mula sa mga panlabas na mapagkukunan, kabilang ang pagsusulat.

Tingnan natin ang isang halimbawa. Gamit ang SQL Management Studio, gumawa tayo ng bagong database na pinangalanang kursy_test. Lahat ng karagdagang eksperimento ay isasagawa dito.

Sa database na ito gagawa kami ng table nomenklatura, para dito susulat kami ng script na may sumusunod na nilalaman:

GAMITIN [kursy_test]
GO
GUMAWA NG TALAAN [dbo]. [nomenclatura](
[id] [int] HINDI NULL,
[ paglalarawan ] [ nvarchar ](150) HINDI NULL,
[presyo] [numeric](15, 2) NULL,
CONSTRAINT [ PK_id ] PANGUNAHING SUSI ([ id ])
GO

Bilang resulta ng pagpapatupad, isang talahanayan na may sumusunod na istraktura ay malilikha:

Ngayon kailangan naming lumikha ng dalawang naka-imbak na mga pamamaraan, sa tulong ng kung saan ang pagbabago ng data ay isasagawa.

Tawagan natin ang unang pamamaraan na insert_nomenklatura. Ito ay idinisenyo upang magdagdag ng bagong hilera sa talahanayan. Ang script para likhain ito ay magiging ganito:

GAMITIN [kursy_test]
GO
GUMAWA NG PAMAMARAAN insert_nomenklatura
@id int
@description nvarchar(150),
@price numeric (15, 2)
AS
MAGSIMULA
INSERT SA [kursy_test].dbo. [nomenklatura] ([ id ], [ paglalarawan ], [ presyo ])
VALUES (@id, @description, @price)
WAKAS
GO

Ang pangalawang pamamaraan, na pinangalanang update_nomenklatura, ay mag-a-update ng isang umiiral na tala sa talahanayan. Upang gawin ito, inilunsad ang sumusunod na script:

Sa Object Browser, ganito ang hitsura ng nilikhang talahanayan at dalawang nakaimbak na pamamaraan:

Nakumpleto namin ang lahat ng mga hakbang sa paghahanda sa panig ng Microsoft SQL Server, ngayon ay pupunta kami sa 1C: Enterprise 8 configurator.

Gumawa ng bagong external na data source na pinangalanang Nomenklatura. Kapag gumagawa ng bagong talahanayan sa data source na ito, tinutukoy namin ang mga sumusunod na parameter para sa pagkonekta sa data source:

Tinukoy namin ang sumusunod na string ng koneksyon:

Driver = (SQL Server) ; Server =(lokal); Database = kursy_test ; User Id = sa ; Password =;

Kung may password ang gumagamit, dapat itong tukuyin sa parameter ng Password ng linya ng koneksyon.

Kung ang lahat ng mga parameter ng koneksyon ay tinukoy nang tama, kapag na-click mo ang OK, magbubukas ang isang window na naglalaman ng mga talahanayan na available sa data source:

Nilagyan namin ng tsek ang mga patlang ng talahanayan na interesado sa amin. Kapag pinindot ang pindutan handa na ang dbo_nomenklatura table ay gagawin sa external na data source na Nomenklatura:

Ngayon ay lumipat kami sa tab na "Mga Function" ng aming data source.

Gamit ang isang katulad na wizard, nagdaragdag kami ng dalawang nakaimbak na pamamaraan:

Nakukuha namin ang sumusunod na hitsura ng tab na "Mga Pag-andar":

Ngayon, i-program natin ang user interface upang gumana sa isang panlabas na mapagkukunan ng data.

Sa form ng listahan sa command panel, ilalagay namin ang "Add" button kasama ang sumusunod na handler:

&OnClient
Pagdaragdag ng Pamamaraan ()
Alerto = Bago DeskripsyonAlerts(“OpenTableComplete”, ThisObject );
OpenForm (
“ExternalDataSource.Nomenklatura.Table.dbo_nomenklatura.ObjectForm”
, , , , , ,
alerto, FormWindowOpenMode.LockEntireInterface);
Katapusan ng Pamamaraan

&OnClient
Pamamaraan sa Pag-save (Utos)
SaveOnServer();
Katapusan ng Pamamaraan &Sa Server
Pamamaraan SaveOnServer()
Kung Object.Link.Empty() Pagkatapos
ExternalDataSources.Nomenklatura.dbo_insert_nomenklatura
Kung hindi
ExternalDataSources.Nomenklatura.dbo_update_nomenklatura
(Object.id, Object.description, Object.price);
Tapusin kung ;
Katapusan ng Pamamaraan

Sa Enterprise mode, ganito ang hitsura ng form ng listahan:

Ang hugis ng bagay ay ipinapakita sa ibaba:

Upang palakihin, i-click ang larawan.

Kaya, gamit ang mga naka-imbak na pamamaraan, ipinatupad namin ang pag-record sa mga panlabas na mapagkukunan ng data.

Sa platform 8.3.5, lumitaw ang isang bagong tampok - direktang sumulat sa mga panlabas na mapagkukunan ng data, na lumalampas sa mekanismo ng nakaimbak na pamamaraan na tinalakay sa itaas.

Maaaring i-edit ang data alinman sa programmatically o interactive. At para sa aming halimbawa ay hindi na kailangang gumamit ng pagsasaayos.

Sa mga panel ng command at sa menu na "Higit pa" makikita mo ang mga karaniwang pindutan tulad ng "Lumikha", "Kopyahin", "I-edit", atbp.

Upang palakihin, i-click ang larawan.

At ang mga pindutang "I-save" at "I-save at Isara" ay lumitaw sa anyo ng bagay:

Tulad ng nakikita mo, ngayon ang pagtatrabaho sa mga panlabas na mapagkukunan ay katulad ng pagtatrabaho sa mga sangguniang libro, mga dokumento, atbp.

Tingnan natin kung anong mga pagbabago ang ginawa sa antas ng metadata upang gawing posible ang pagsulat sa mga panlabas na mapagkukunan ng data.

May naidagdag na bagong property sa talahanayan ng data Nagbabasa lang(uri – boolean).

Kung ang property na ito ay nakatakda sa True, ang pagsusulat ng data sa talahanayang ito gamit ang mga tool sa platform ay imposible.

Ang field ng talahanayan ng data ay mayroon na ngayong mga sumusunod na katangian:

  • Nagbabasa lang(type – boolean) – posible bang baguhin ang data sa field na ito;
  • AllowNull(type – boolean) – kung posible bang mag-imbak ng NULL value sa field na ito.

Ari-arian Nagbabasa lang dapat itakda sa totoo para sa mga patlang ng database na may mga awtomatikong pagbabago, awtomatikong nabuong mga pangunahing field, mga kalkuladong field, atbp.

Maaari kang magdagdag, magbago at magtanggal ng data sa mga panlabas na mapagkukunan gamit ang built-in na wika.

Upang gawin ito, mga bagay ExternalDataSourceTableRecordSet At ExternalDataSourceTableObject ipinatupad ang mga bagong pamamaraan Sumulat() At Tanggalin().

Tingnan natin ang halimbawa ng programmatically pagdaragdag ng isang bagong record para sa isang panlabas na pinagmumulan ng data na tinalakay sa itaas.

&OnClient
Pamamaraan CreateProgrammatically(Koponan)
CreateProgrammaticallyOnServer();
Katapusan ng Pamamaraan &Sa Server

Pamamaraan CreateProgrammaticallyOnServer()
WritableObject=
ExternalDataSources.Nomenklatura.Tables.dbo_nomenklatura.CreateObject();
WriteableObject.id= 5 ;
WriteableObject.paglalarawan= “Wardrobe” ;
WritableObject.price= 5000 ;
WriteableObject.Write();
Katapusan ng Pamamaraan

Sa external na data source table object module, maaari mo na ngayong tukuyin ang write event handler, gaya ng BeforeWrite(), OnWrite() atbp.:

Sinuri ng artikulong ito ang dalawang opsyon para sa pagsusulat ng data sa mga external na pinagmumulan ng data - gamit ang mga nakaimbak na pamamaraan at paggamit ng mga bagong mekanismo ng 8.3.5 platform.

Kaya, ang platform ay nagpapatupad na ngayon ng mga mekanismo para sa ganap na pagsasama sa mga panlabas na aplikasyon.

Sa bersyon 8.3.6, ang functionality na inilarawan sa itaas ay pinalawak sa tulong ng mga bagong espesyal na pamamaraan na GetModifiableFields() at SetModifiableFields(). Gamit ang mga ito, posibleng magsagawa ng write operation sa mga field na iyon ng VIEW table na minarkahan sa configurator bilang read-only. Dahil dito, naging posible na ipatupad ang isang senaryo kung saan ang pagsulat sa mga indibidwal na patlang ng talahanayan ng VIEW ay posible lamang sa mga kaso kung saan kinakailangan ito alinsunod sa lohika ng negosyo ng application.

Sa bersyon 8.3.7, ang mekanismo ay pinahusay upang matukoy kung aling mga partikular na field ng VIEW table ang maaaring maglaman ng NULL values. Hanggang sa puntong ito, maaaring tanggapin ng lahat ng VIEW table ang value na ito. Ang pagbabagong ito ay dahil sa pagtaas ng bilis ng pag-uuri sa mga dynamic na listahan ayon sa mga field na ito.

Sa bersyon 8.3.8, naging posible sa wakas na matukoy ang katotohanan na ang isang panlabas na pinagmumulan ng data ay nasa estado ng transaksyon. Ang pagpapaandar na ito ay ibinibigay ng bagong paraan na ExternalDataSourceManager.TransactionActive()

Sa konklusyon, tandaan namin na para sa mga panlabas na mapagkukunan ng data, tulad ng ipinapakita sa itaas, ang mga talahanayan ng data mula sa klasikal na modelo ng relational ay inilarawan. Gumagamit ang platform ng ibang paradigm para sa pagtatrabaho sa data, na nag-aalok sa developer ng isang tiyak na hanay ng mga uri ng mga object ng application (mga direktoryo, dokumento, rehistro, atbp.). Iyon ang dahilan kung bakit ang system, kapag nagtatrabaho sa mga talahanayan ng mga panlabas na pinagmumulan ng data, ay hindi sumusuporta sa karamihan ng pag-andar na likas sa mga "katutubong" mga bagay nito. Samakatuwid, inirerekumenda na pigilin ang sarili mula sa pagbuo ng anumang lohika ng negosyo, na isinasaalang-alang ang paggamit ng mga talahanayan ng VID, kung hindi ito nauugnay sa mga gawain ng pagsasama sa mga umiiral na sistema. O, sa madaling salita, dapat mong subukang iwasan ang pag-imbak ng data na aktibong ginagamit sa iyong aplikasyon sa ilang iba pang talahanayan ng panlabas na system, kung hindi ito ginagamit ng system na ito.

Sa susunod na artikulo titingnan natin ang lohikal na pagpapatuloy ng paggamit ng teknolohiya ng mga panlabas na mapagkukunan ng data sa 1C:Enterprise system.

Ang release 8.2.14.533 ay sa wakas ay isang mas o hindi gaanong matatag na bersyon ng ika-14 na release ng platform. Sa wakas, ipinakita ng pagkakataon ang sarili nito upang subukan ang isang magandang pagkakataon - "mga panlabas na mapagkukunan ng data".

Bakit ang pagkakataong ito ay interesado? Ang sinumang tao na naka-program sa 1C at medyo pamilyar sa SQL at sa pangkalahatan ay pamilyar sa arkitektura at mga prinsipyo ng pagbuo ng iba pang mga platform ng teknolohiya para sa mga application ng negosyo ay magsasabi sa iyo nang may matatag na kumpiyansa kung ano ang pinakagusto niya tungkol sa 1C. Siyempre, ang tagabuo ng query ay ang pinaka-maginhawa at maalalahanin na mekanismo para sa pagsulat ng mga query para sa pagkuha ng data mula sa mga istrukturang may kaugnayan na personal kong nakatagpo. At ngayon ay binigyan kami ng 1C ng napakagandang pagkakataon na gamitin ito hindi lamang sa 1C, kundi pati na rin sa anumang iba pang mga talahanayan. Kaya lang ang "barrel of honey" na ito ay maraming "langaw sa ointment". Mga unang bagay muna:

1) Pag-set up at paggamit - nang walang "pagsasayaw gamit ang tamburin" hindi ito gagana

A) Magdagdag ng external na data source - mukhang hindi ito kumplikado
b) suriin ang checkbox na "Pumili mula sa listahan" - sapilitan - ito ay kinakailangan upang suriin ang pag-andar sa simula at i-save ka mula sa hindi kinakailangang mga problema
V)
(IMG:http://pics.livejournal.com/comol/pic/0000cr1r.png)
- siguraduhing i-click ang "..." - ang koneksyon ay ODBC. Hindi OLEDB tulad ng nakasanayan nating lahat, ngunit isang antas na mas mababa

Pero nandito ka VERY CAREFUL.

Ito ay isang driver ng ODBC - kung gagamitin mo ang bersyon ng client-server, dapat itong nasa server. Kung ikaw ay bumubuo sa isang sistema at nagtatrabaho sa isa pa (tulad ng karaniwang nangyayari), siguraduhing walang mga sorpresa na naghihintay para sa iyo. Isang kakaibang rekomendasyon, ngunit piliin ang pinakaluma o pinakakaraniwang driver kung hindi ka partikular na nag-aalala tungkol sa bilis at hindi nilalayong lumampas sa mga kakayahan ng pamantayan ng SQL92. Bibigyan ka nito ng mas mahusay na pagiging tugma. Halimbawa, para sa SQL Server 2008, ang pinakamahusay na driver ay ang SQL Server Native Client 11, ngunit inirerekumenda kong piliin lamang ang SQL Server, kung hindi, ang mismong katutubong client na ito ay kailangang mai-install alinman sa server o sa lahat ng mga client machine (kung ginagamit ang bersyon ng file), at ang benepisyo ay espesyal para sa simpleng hindi ka niya bibigyan ng anumang mga gawain.

E) Mga karaniwang dialog ng pagpili ng Server

G) Piliin ang talahanayan at mga detalye... isang magandang pagkakataon - maaari mo itong palitan kaagad ng pangalan ayon sa gusto mo (at ang mga detalye din), at sa mga katangian makikita mo ang mga pangalan ng mga field ng data source

Z) Ngayon ilunsad mo ito, buksan ang taga-disenyo ng query - tanga na piliin ang lahat ng mga tala mula sa talahanayan at OPA - isang error. Anong gagawin? Kung mayroon kang pinamamahalaang interface, tingnan ang menu ng serbisyo, at kung regular...
Personal kong ginamit ang code na ito:

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

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

ExternalDataSources.DAX.SetConnection();

Maaaring hindi kailangan ang ilang piraso, ngunit gumagana ito. Kailangan mong patakbuhin ang code MINSAN. Pagkatapos nito ay magiging normal na ang kumonekta... mistisismo siyempre - kung bakit ito kinakailangan ay hindi malinaw...

2) Read-only na data source
Oo, hindi nangyayari ang mga himala... pero minsan gusto mo ng ganyan....

3) HINDI SILA MAAARING GAMITIN KASAMA SA INTERNAL DATA SOURCES
Sa personal, ang katotohanang ito ay pinatay ako sa lugar.

Paano kaya ito... kung ano ang hinihintay namin at naisip na namin at nagdila sa aming mga labi tungkol sa kung paano namin ngayon pagsasamahin ang aming data sa 1C sa isang kahilingan, i-collapse ito - pangkatin ito, ipasok ito sa ulat, ngunit hindi iyon ang kaso...

Ngunit siyempre hindi ito humihinto sa mga taong may karanasan... ano ang pumasok sa isip? Tama iyon - mga pansamantalang talahanayan:

4) HINDI SILA MAAARING GAMITIN KASAMA NG PANSAMANTALA TABLES

Ngunit hindi na ito mukhang mga teknolohikal na paghihirap, ngunit mukhang katulad ng gusto nilang gawin natin "upang ang buhay ay hindi parang paraiso" (IMG:).

5) Magagamit lamang sa mga koneksyon sa ACS

Para sa mga hindi nakakaalam, ito ay nasa ACS sa tab na "Mga Link sa Set ng Data". Madalas mo bang ginagamit ang mga ito? Komportable? Tila gusto nilang pilitin kaming gamitin ang mga ito nang mas madalas. Mayroon lamang column na "Kondisyon ng komunikasyon" at "Parameter ng komunikasyon". Wala akong nakitang halimbawa ng kanilang paggamit sa anumang karaniwang pagsasaayos, at sa anumang paraan ang lahat ay hindi malinaw sa dokumentasyon at sa gawain ni Khrustaleva. Maaari bang ipaliwanag sa akin ng sinuman kung paano gumagana ang "kondisyon ng koneksyon". Kung isusulat mo ang Source Attributes = Receiver Attributes doon, hindi ito gagana. Siyempre, ang kundisyon ay maaaring isulat sa patlang na "Expression" - sa karamihan ng mga kaso ito ay sapat na... ngunit sa paanuman ay hindi ito gumagana nang napakadali.

Sa kabuuan, ang problemang ito ay dati nang nalutas sa isang lugar tulad nito:

Function InitializeDataSource()

DateStart = SettingsComposer.Settings.DataParameters.Items.Value;
DataCon = SettingsBuilder.Settings.DataParameters.Items.Value;
Kung ang DataCon > "20100101" Pagkatapos
DataCon = "20100101";
tapusin kung;

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

ArrayNumber = Bagong Array();
ArrayNumber.Add(Type("Number"));

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

ArrayData = Bagong Array();
ArrayDate.Add(Type("Date"));

//Pupunan namin ang accounting cost sa table
TypeNumber = Bagong Uri ng Paglalarawan(ArrayNumber, CN);
TypeString = Bagong TypeDescription(ArrayString, KS);
TypeDate = Bagong TypeDescription(ArrayDate);

//table para sa paglo-load ng data mula sa SQL
TZ = New ValueTable();
TK.Columns.Add("NomenclatureCode", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add("Period", DateType);

TK.Indices.Add("Panahon");

//Kumonekta sa SQL
String ng Koneksyon = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Pwd=;Data Source=;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=;Use Encryption para sa Data=False;Tag na may column collation kapag posible=False;Initial Catalog=Ulat";
Koneksyon = Bagong COMObject("ADODB.Connection");
Command = Bagong COMObject("ADODB.Command");
RecordSet = Bagong COMObject("ADODB.RecordSet");
Petsa = "";
Tangka
Connection.Open(AbbrLP(ConnectionString));
Command.ActiveConnection = Koneksyon;
Command.CommandText = "Piliin ang * mula sa PH kung saan ang period >= "" + String(Format(DateStart, "DF=yyyyMMdd")) + "" at period RecordSet = Command.Execute();
RecordSet.MoveFirst();
Exception
Pagbabalik ng mga teknikal na pagtutukoy;
EndAttempt;

Habang RecordSet.EOF = False Loop
Linya = TZ.Add();
Row.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Value;
Row.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Value;
Row.Period = RecordSet.Fields(RecordSet.Fields.Item(13).Name).Value;
RecordSet.MoveNext();
EndCycle;

Kahilingan = Bagong Kahilingan();
VrTable = Bagong TemporaryTableManager();
Query.SetParameter("vrDataTable", TK);
Query.SetParameter("Petsa ng Pagsisimula", Petsa ng Pagsisimula);
Request.SetParameter("DataCon", DateCon);
Query.Text = "PUMILI
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Period
|Place DataTable
|MULA
| &vDataTable BILANG vrDataTable
|SAAN
| vrDataTable.Period >= &DateStart
| At vrDataTable.Period Query.Execute();
TZ = Hindi Natukoy;

Kahilingan = Bagong Kahilingan;
Query.TemporaryTableManager = VrTable;
Query.Text = "Narito ang isang query na kinasasangkutan ng variable na talahanayan";

Resulta = Query.Run();
Resulta ng Pagbabalik;

EndFunction

ExternalSet = InitializeDataSource();
DataSet = bagong Structure();
DataSet.Insert("SQL Table", ExternalSet);
TypicalReports.GenerateTypicalReport(ThisObject, Resulta, Decryption Data, OutputToReportForm, DataSet);

Sa totoo lang, walang maraming linya ng code at medyo karaniwan ang mga ito... sa kasong ito, maaari mong gamitin ang buong pag-andar ng taga-disenyo ng query, at ibigay lamang ang DATA COMPOSITION function sa ACS

Ngunit tiyak na hindi ito maganda... at sa bawat oras na kailangan mong magsulat ng code upang mag-upload ng mga halaga sa isang talahanayan at suriin kung nagkamali ka sa pangalan ng mga detalye... at kung ano ang ibinigay sa amin Mukhang half-hearted si 1C. Hindi pa ako nakakapagdesisyon kung alin ang mas convenient gamitin. Magpasya ka, at magsulat tungkol sa iyong mga desisyon at kung ano ang nag-udyok sa iyo sa kanila.

[kailangan mong magparehistro para matingnan ang link]

Bakit ang pagkakataong ito ay interesado? Ang sinumang tao na naka-program sa 1C at medyo pamilyar sa SQL at sa pangkalahatan ay pamilyar sa arkitektura at mga prinsipyo ng pagbuo ng iba pang mga platform ng teknolohiya para sa mga application ng negosyo ay magsasabi sa iyo nang may matatag na kumpiyansa kung ano ang pinakagusto niya tungkol sa 1C. Siyempre, ang tagabuo ng query ay ang pinaka-maginhawa at maalalahanin na mekanismo para sa pagsulat ng mga query para sa pagkuha ng data mula sa mga istrukturang may kaugnayan na personal kong nakatagpo. At ngayon ay binigyan kami ng 1C ng napakagandang pagkakataon na gamitin ito hindi lamang sa 1C, kundi pati na rin sa anumang iba pang mga talahanayan. Kaya lang ang "barrel of honey" na ito ay maraming "langaw sa ointment". Mga unang bagay muna:

1) I-setup at gamitin- kung walang "pagsasayaw na may tamburin" hindi ito gagana
a) Magdagdag ng external na data source - mukhang hindi ito kumplikado
b) suriin ang checkbox na "Pumili mula sa listahan" - sapilitan - ito ay kinakailangan upang suriin ang pag-andar sa simula at i-save ka mula sa hindi kinakailangang mga problema
c) - siguraduhing i-click ang "..." - ang koneksyon ay ODBC. Hindi OLEDB tulad ng nakasanayan nating lahat, ngunit isang antas na mas mababa

D) Ngunit narito maging MAINGAT.

Ito ay isang driver ng ODBC - kung gagamitin mo ang bersyon ng client-server, dapat itong nasa server. Kung ikaw ay bumubuo sa isang sistema at nagtatrabaho sa isa pa (tulad ng karaniwang nangyayari), siguraduhing walang mga sorpresa na naghihintay para sa iyo. Isang kakaibang rekomendasyon, ngunit piliin ang pinakaluma o pinakakaraniwang driver kung hindi ka partikular na nag-aalala tungkol sa bilis at hindi nilalayong lumampas sa mga kakayahan ng pamantayan ng SQL92. Bibigyan ka nito ng mas mahusay na pagiging tugma. Halimbawa, para sa SQL Server 2008, ang pinakamahusay na driver ay ang SQL Server Native Client 11, ngunit inirerekumenda kong piliin lamang ang SQL Server, kung hindi, ang mismong katutubong client na ito ay kailangang mai-install alinman sa server o sa lahat ng mga client machine (kung ginagamit ang bersyon ng file), at ang benepisyo ay espesyal para sa simpleng hindi ka niya bibigyan ng anumang mga gawain.
e) Mga karaniwang dialog ng pagpili ng Server

E) Inirerekomenda kong sagutin ang "oo" sa tanong tungkol sa pag-save ng password, kung hindi, hindi mo masisimulan ang negosyong ito.
g) Piliin ang talahanayan at mga detalye... isang magandang pagkakataon - maaari mo itong palitan kaagad ng pangalan ayon sa gusto mo (at ang mga detalye din), at sa mga katangian makikita mo ang mga pangalan ng mga field ng data source

Z) Ngayon ilunsad mo ito, buksan ang taga-disenyo ng query - tanga na piliin ang lahat ng mga tala mula sa talahanayan at OPA - isang error. Anong gagawin? Kung mayroon kang pinamamahalaang interface, tingnan ang menu ng serbisyo, at kung regular...
Personal kong ginamit ang code na ito:
Code 1C v 8.x Mga Parameter = ExternalDataSources.DAX.GetGeneralConnectionParameters();
Parameters.AuthenticationStandard = True;
Parameters.UserName = "sa";
Parameters.Password = "pas";
Parameters.ConnectionString = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;DATABASE=database";
Parameters.DBMS = "MSSQLServer";

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

ExternalDataSources.DAX.SetConnection();
Maaaring hindi kailangan ang ilang piraso, ngunit gumagana ito.
Kailangan mong patakbuhin ang code ONCE. Pagkatapos nito ay magiging normal na ang kumonekta... mistisismo siyempre - kung bakit ito kinakailangan ay hindi malinaw...

2) Read-only na data source- Oo, ang mga himala ay hindi nangyayari ... ngunit kung minsan ay gusto mo ito ...

3) HINDI SILA MAAARING GAMITIN KASAMA SA INTERNAL DATA SOURCES
Sa personal, ang katotohanang ito ay pinatay ako sa lugar.

Paano kaya ito... kung ano ang hinihintay namin at naisip na namin at nagdila sa aming mga labi tungkol sa kung paano namin ngayon pagsasamahin ang aming data sa 1C sa isang kahilingan, i-collapse ito - pangkatin ito, ipasok ito sa ulat, ngunit hindi iyon ang kaso...
Ngunit siyempre hindi ito humihinto sa mga taong may karanasan... ano ang pumasok sa isip? Tama iyon - mga pansamantalang talahanayan:

4) HINDI SILA MAAARING GAMITIN KASAMA NG PANSAMANTALA TABLES

Ngunit hindi na ito mukhang mga teknolohikal na paghihirap, ngunit mukhang katulad ng gusto nilang gawin natin "upang ang buhay ay hindi parang paraiso" :).

5) Magagamit lamang sa mga koneksyon sa ACS
Para sa mga hindi nakakaalam, ito ay nasa ACS sa tab na "Mga Link sa Set ng Data". Madalas mo bang ginagamit ang mga ito? Komportable? Tila gusto nilang pilitin kaming gamitin ang mga ito nang mas madalas. Mayroon lamang column na "Kondisyon ng komunikasyon" at "Parameter ng komunikasyon". Wala akong nakitang halimbawa ng kanilang paggamit sa anumang karaniwang pagsasaayos, at sa anumang paraan ang lahat ay hindi malinaw sa dokumentasyon at sa gawain ni Khrustaleva. Maaari bang ipaliwanag sa akin ng sinuman kung paano gumagana ang "kondisyon ng koneksyon". Kung isusulat mo ang Source Attributes = Receiver Attributes doon, hindi ito gagana. Siyempre, ang kundisyon ay maaaring isulat sa patlang na "Expression" - sa karamihan ng mga kaso ito ay sapat na... ngunit sa paanuman ay hindi ito gumagana nang napakadali.

Sa kabuuan, ang problemang ito ay dati nang nalutas sa isang lugar tulad nito:
Code 1C v 8.x Function InitializeDataSource()

DateStart = SettingsComposer.Settings.DataParameters.Items.Value;
DataCon = SettingsBuilder.Settings.DataParameters.Items.Value;
Kung ang DataCon > "20100101" Pagkatapos
DataCon = "20100101";
tapusin kung;

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

ArrayNumber = Bagong Array();
ArrayNumber.Add(Type("Number"));

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

ArrayData = Bagong Array();
ArrayDate.Add(Type("Date"));

//Pupunan namin ang accounting cost sa table
TypeNumber = Bagong Uri ng Paglalarawan(ArrayNumber, CN);
TypeString = Bagong TypeDescription(ArrayString, KS);
TypeDate = Bagong TypeDescription(ArrayDate);

//table para sa paglo-load ng data mula sa SQL
TZ = New ValueTable();
TK.Columns.Add("NomenclatureCode", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add("Period", DateType);

TK.Indices.Add("Panahon");

//Kumonekta sa SQL
String ng Koneksyon = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Pwd=;Data Source=;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=;Use Encryption para sa Data=False;Tag na may column collation kapag posible=False;Initial Catalog=Ulat";
Koneksyon = Bagong COMObject("ADODB.Connection");
Command = Bagong COMObject("ADODB.Command");
RecordSet = Bagong COMObject("ADODB.RecordSet");
Petsa = "";
Tangka
Connection.Open(AbbrLP(ConnectionString));
Command.ActiveConnection = Koneksyon;
Command.CommandText = "S_elect * mula sa PH kung saan ang panahon >= "" + String(Format(DateStart, "DF=yyyyMMdd")) + "" at tuldok<= "" + Строка(Формат(ДатаКон, "ДФ=ггггММдд")) + """;
RecordSet = Command.Execute();
RecordSet.MoveFirst();
Exception
Pagbabalik ng mga teknikal na pagtutukoy;
EndAttempt;

Habang RecordSet.EOF = False Loop
Linya = TZ.Add();
Row.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Value;
Row.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Value;
Row.Period = RecordSet.Fields(RecordSet.Fields.Item(13).Name).Value;
RecordSet.MoveNext();
EndCycle;

Kahilingan = Bagong Kahilingan();
VrTable = Bagong TemporaryTableManager();
Query.SetParameter("vrDataTable", TK);
Query.SetParameter("Petsa ng Pagsisimula", Petsa ng Pagsisimula);
Request.SetParameter("DataCon", DateCon);
Query.Text = "PUMILI
| vrDataTable.NomenclatureCode,
| vrDataTable.Qnty,
| vrDataTable.Period
|Place DataTable
|MULA
| &vDataTable BILANG vrDataTable
|SAAN
| vrDataTable.Period >= &DateStart
| At vrDataTable.Period<= &ДатаКон";
Request.Run();
TZ = Hindi Natukoy;

Kahilingan = Bagong Kahilingan;
Query.TemporaryTableManager = VrTable;
Query.Text = "Narito ang isang query na kinasasangkutan ng variable na talahanayan";

Resulta = Query.Run();
Resulta ng Pagbabalik;

EndFunction

ExternalSet = InitializeDataSource();
DataSet = bagong Structure();
DataSet.Insert("SQL Table", ExternalSet);
TypicalReports.GenerateTypicalReport(ThisObject, Resulta, Decryption Data, OutputToReportForm, DataSet);

Sa totoo lang, walang maraming linya ng code at medyo karaniwan ang mga ito... sa kasong ito, maaari mong gamitin ang buong pag-andar ng taga-disenyo ng query, at ibigay lamang ang DATA COMPOSITION function sa ACS

Ngunit tiyak na hindi ito maganda... at sa bawat oras na kailangan mong magsulat ng code upang mag-upload ng mga halaga sa isang talahanayan at suriin kung nagkamali ka sa pangalan ng mga detalye... at kung ano ang ibinigay sa amin Mukhang half-hearted si 1C. Hindi pa ako nakakapagdesisyon kung alin ang mas convenient gamitin. Magpasya ka, at magsulat tungkol sa iyong mga desisyon at kung ano ang nag-udyok sa iyo sa kanila.

Ang impormasyon na kinuha mula sa site

Panlabas na data source 1C - isang medyo bagong metadata object 1C 8.3 at 8.2, kung saan posible na kumonekta sa 1C external na pinagmumulan ng data: SQL table, Excel, Access, FoxPro (dbf), isa pang 1C database, Oracle, Paradox (db) , - at maging ang pagbabasa mula sa mga simpleng txt/csv file.

Nagbibigay ito ng maraming posibilidad sa iba pang mga system. Tingnan natin nang maigi.

Pagse-set up ng external na data source sa 1C 8

Ang pag-set up ng mga panlabas na mapagkukunan ay indibidwal para sa bawat uri ng system. Ngunit, bilang panuntunan, ang pangkalahatang bahagi ng pag-setup ay pareho - ito ay nagtatakda ng string ng koneksyon:

Kumuha ng 267 video lesson sa 1C nang libre:

Kung ang string ng koneksyon ay tinukoy nang tama, ipo-prompt ka ng system na piliin ang nais na talahanayan mula sa database. Bilang resulta, makakakuha tayo ng isang yari na talahanayan kung saan matutukoy natin ang pangunahing field (isang natatanging field) at ang field ng presentasyon (kung paano makikita ang tala sa 1C):

Paggamit ng external na data source sa 1C 8.3

Ang mga panlabas na mapagkukunan ng data sa 1C ay maaaring gamitin tulad ng iba pang mga talahanayan ng database. Ang platform ay awtomatikong bumubuo ng isang form para sa kanila kung ang isa ay hindi tinukoy. Posible ring gumamit ng data mula sa mga panlabas na mapagkukunan sa mga query.


Isara