منابع داده خارجی 1C 8.3 mysql. منابع داده های خارجی

20.10.2023 اپراتورهای تلفن همراه

با آنها در لیست ها در حالت 1C Enterprise کار کنید.

با این حال، در کار اغلب موقعیتی وجود دارد که بخشی از داده ها در جای دیگری ذخیره می شود.

  • فروشگاه آنلاین (معمولا داده ها را در یک پایگاه داده خارجی MySQL/SQL ذخیره می کند)
  • پایه دیگه

برای کار با چنین داده هایی که در سایر پایگاه های داده ذخیره شده اند، مکانیسم های خاصی باید ایجاد شود.

در نسخه 1C 8.2.14، منبع جدیدی به نام منابع داده خارجی 1C ظاهر شده است که کار برنامه نویس را بسیار تسهیل می کند، زیرا:

  • در حال حاضر نیازی به ایجاد مکانیسم های خاصی برای به دست آوردن داده ها نیست
  • به چنین داده هایی می توان به روش معمول دسترسی داشت
  • چنین داده هایی را می توان در لیست های 1C مشاهده کرد.
    • منبع داده خارجی 1C - پایگاه داده خارجی SQL

      فرض کنید یک پایگاه داده SQL داریم که داده های مورد نیاز ما در آن ذخیره می شود. بیایید سعی کنیم داده ها را با استفاده از مکانیسم منبع داده خارجی 1C بخوانیم.

      بیایید یک منبع داده خارجی 1C اضافه کنیم. شما باید به پیکربندی کننده بروید، منابع داده خارجی در پنجره پیکربندی، در پایین درخت قرار دارند.

      1. اتصال

      بیایید یک منبع داده خارجی جدید 1C اضافه کنیم، نام خودسرانه آن را نامگذاری کنیم.

      پایگاه داده از جداول تشکیل شده است. ما باید آنها را در منبع داده خارجی اضافه شده اضافه کنیم. روی آن کلیک راست کرده و Add Table را انتخاب کنید.

      اولین بار، از شما می خواهد که یک رشته اتصال را ارائه دهید. می توان آن را به صورت دستی وارد کرد یا با کلیک بر روی دکمه "…" تولید کرد.

      در مورد خاص ما، "SQL Server" را به عنوان درایور انتخاب می کنیم

      بیایید پارامترهای اساسی برای اتصال به SQL را پر کنیم. نام سرور را می توان وارد کرد یا از لیست انتخاب کرد.

      1C به SQL متصل می شود و پیشنهاد می کند یک پایگاه داده خاص را از لیست انتخاب کنید.

      پس از این، 1C لیستی از جداول این پایگاه داده و ستون های آنها را نمایش می دهد. برای انتخاب جداول مورد نیاز باید کادرها را علامت بزنید.

      جداول و ستون ها اضافه خواهند شد. نام‌ها همانی خواهند بود که در پایگاه داده راه دور تعریف شده‌اند. در 1C می توانید نام آنها را تغییر دهید (در خواص).

      در اینجا نمونه ای از جدول اضافه شده است:

      در اینجا یک نمونه از یک ستون اضافه شده است:

      برای اینکه پلت فرم 1C با یک جدول خارجی به همان روشی که با فهرست های 1C کار می کند، کار کند، می توانید پارامترهای اضافی را در جدول مشخص کنید:

      • در ویژگی Key Field، یکی از ستون هایی را مشخص کنید که یک شناسایی منحصر به فرد از سطر را ارائه می دهد. اگر چندین خط یکتایی را ارائه دهند، این روش کار نمی کند (مشابه با قسمت Code)
      • در ویژگی Presentation Field، یکی از ستون‌هایی را مشخص کنید که نمایش مختصری از خط را ارائه می‌کند (مشابه با فیلد Name)
      • در ویژگی نوع داده جدول، Object data را مشخص کنید.

      2. مشاهده کنید

      اتصال به پایه از راه دور به طور خودکار انجام نمی شود. برای اتصال، باید یک منوی استاندارد را انتخاب کنید.

      در شاخه استاندارد یک فرمان ویژه مدیریت منابع داده خارجی وجود دارد که به شما امکان می دهد پارامترهای اتصال (مخصوص حالت 1C Enterprise) را مشخص کنید و اتصال برقرار کنید.

      ابتدا باید پارامترهای اتصال به پایگاه داده را مشخص کنید.

      وقتی تنظیمات را در پیکربندی انجام دادید، در نتیجه رشته اتصال را به شما نشان داد. با کلیک مجدد روی افزودن جدول در پیکربندی، می توانید دوباره آن را ببینید.

      رشته اتصال را کپی کرده و آن را در حالت 1C Enterprise مشخص کنید.

      پس از این، باید اتصال واقعی را انجام دهید.

      پس از برقراری ارتباط، امکان کار با لیست ها وجود دارد.

      3. استفاده در زبان 1C

      اتصال را می توان از کد برنامه به زبان 1C نیز انجام داد.

      پارامترهای اتصال به صورت زیر مشخص می شوند:
      ConnectionParameters = ExternalDataSources.SourceNameConfigurator.GetGeneralConnectionParameters();

      ConnectionParameters.AuthenticationStandard = True;
      ConnectionParameters.UserName = "sa";
      ConnectionParameters.Password = "رمز عبور";
      ConnectionParameters.ConnectionString = "رشته اتصال از پیکربندی";
      ConnectionParameters.DBMS = "MSSQLServer";

      ExternalDataSources.SourceNameConfigurator.SetGeneralConnectionParameters(ConnectionParameters);
      ExternalDataSources.SourceNameConfigurator.SetUserConnectionParameters(UserName()، Parameters);
      ExternalDataSources.SourceNameConfigurator.SetSessionConnectionParameters(Parameters);
      ExternalDataSources.SourceNameConfigurator.SetConnection();

      شما می توانید داده ها را از یک پایگاه داده با استفاده از یک پرس و جو کنید. نمونه ای از متن پرس و جو برای منبع خارجی OurExternalSource و جداول ExternalSource Table:

      انتخاب کنید
      ExternalSourceTable.FieldName
      از جانب
      ExternalDataSource.OurExternalSource.Table.ExternalSourceTable"

      منبع داده خارجی 1C - کار با فایل اکسل

      بیایید گزینه دیگری را امتحان کنیم - کار با یک فایل اکسل از طریق یک منبع داده خارجی 1C.

      بیایید یک فایل اکسل ساده ایجاد کنیم.

      بیایید یک منبع خارجی اضافه کنیم، خودسرانه آن را FileExcel بنامیم. بیایید جدول "Sheet1$" را به آن اضافه کنیم. همانطور که به راحتی می بینید، این نام برگه در اکسل با اضافه کردن نماد "$" است.

      همانطور که در مورد SQL، اجازه دهید ستون ها را اضافه کنیم. آنها را می توان به صورت دستی اضافه کرد. مهم است که مطمئن شوید انواع ستون‌هایی که اضافه می‌کنید مطابقت دارند، در غیر این صورت ممکن است بعداً خطایی مانند «عدم تطابق نوع داده» دریافت کنید.

      برای ستون باید یک نام در 1C و یک نام در منبع داده مشخص کنید.

      یک ویژگی برای اکسل وجود دارد (خطایی مانند "پارامترهای خیلی کم. 3 مورد نیاز"):

      • اگر سطر اول جدول اکسل شامل نام ستون ها باشد، باید نام این ستون را به سادگی نشان دهید، به عنوان مثال "کد".
      • در غیر این صورت، باید نام کامل را با نام جدول "Sheet1$.Code" مشخص کنید، اما "HDR=NO;" را در پارامترها اضافه کنید.

      پارامترهای اتصال برای فایل اکسل به شکل زیر است:

      • فایل های XLSX (Office 2007 به بعد)
        Driver=(Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb));DBQ=D:\FileExcel.xlsx;
      • فایل های XLS (قبلا)
        Driver=(Microsoft Excel Driver (*.xls)); DriverID=790; DBQ=D:\FileExcel.xls;
        شما باید نام خود و مسیر فایل را مشخص کنید.

چرا این فرصت چنین مورد توجه است؟ هر فردی که در 1C برنامه نویسی کرده باشد و کاملاً با SQL آشنا باشد و حداقل به طور کلی با معماری و اصول توسعه سایر پلتفرم های فناوری برای برنامه های تجاری آشنا باشد، با اطمینان کامل به شما خواهد گفت که چه چیزی را در مورد 1C بیشتر دوست دارد. البته سازنده پرس و جو راحت ترین و متفکرترین مکانیسم برای نوشتن پرس و جوها برای بازیابی داده ها از ساختارهای رابطه ای است که من شخصاً با آن مواجه شده ام. و اکنون 1C چنین فرصت فوق العاده ای را به ما داده است تا از آن نه تنها با 1C، بلکه با هر جدول دیگری نیز استفاده کنیم. فقط این است که تعداد زیادی "مگس در پماد" در این "بشکه عسل" ریخته شده است. اول چیزهای مهم:

1) راه اندازی و استفاده- بدون "رقصیدن با تنبور" کار نخواهد کرد
الف) یک منبع داده خارجی اضافه کنید - پیچیده به نظر نمی رسد
ب) کادر "انتخاب از لیست" را علامت بزنید - اجباری - این برای بررسی عملکرد در ابتدا ضروری است و شما را از مشکلات غیر ضروری نجات می دهد
ج) - حتما روی "..." کلیک کنید - اتصال ODBC است. نه OLEDB همانطور که همه ما به آن عادت کرده ایم، بلکه یک سطح پایین تر

د) اما در اینجا بسیار مراقب باشید.

این یک درایور ODBC است - اگر از نسخه سرویس گیرنده-سرور استفاده می کنید، باید روی سرور باشد. اگر روی یک سیستم توسعه می‌دهید و روی سیستم دیگری کار می‌کنید (همانطور که معمولاً اتفاق می‌افتد)، مطمئن شوید که هیچ شگفتی در انتظار شما نیست. توصیه عجیبی است، اما اگر به طور خاصی نگران سرعت نیستید و قصد ندارید فراتر از قابلیت های استاندارد SQL92 بروید، قدیمی ترین یا رایج ترین درایور را انتخاب کنید. این به شما سازگاری بهتری می دهد. به عنوان مثال، برای SQL Server 2008، بهترین درایور SQL Server Native Client 11 خواهد بود، اما من توصیه می کنم فقط SQL Server را انتخاب کنید، در غیر این صورت این کلاینت بسیار بومی باید یا بر روی سرور یا روی همه ماشین های کلاینت نصب شود (در صورت استفاده از نسخه فایل)، و مزیت آن برای ساده است که او هیچ وظیفه ای به شما نمی دهد.
ه) دیالوگ های انتخاب سرور استاندارد

ه) توصیه می کنم به سؤال مربوط به ذخیره رمز عبور پاسخ «بله» بدهید، در غیر این صورت نمی توانید این تجارت را راه اندازی کنید.
g) جدول و جزئیات را انتخاب کنید ... یک فرصت فوق العاده - می توانید بلافاصله نام آن را به دلخواه تغییر دهید (و جزئیات را نیز) و در ویژگی ها نام فیلدهای منبع داده را مشاهده خواهید کرد.

Z) و اکنون آن را راه اندازی می کنید، طراح پرس و جو را باز می کنید - احمقانه تمام رکوردها را از جدول انتخاب می کنید و OPA - یک خطا. چه باید کرد؟ اگر یک رابط مدیریت شده دارید، به منوی سرویس نگاه کنید، و اگر یک رابط معمولی ...
من شخصا از این کد استفاده کردم:
کد 1C v 8.x پارامترها = ExternalDataSources.DAX.GetGeneralConnectionParameters();
Parameters.AuthenticationStandard = True;
Parameters.UserName = "sa";
Parameters.Password = "pas";
Parameters.ConnectionString = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;DATABASE=پایگاه داده";
Parameters.DBMS = "MSSQLServer";

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

ExternalDataSources.DAX.SetConnection();
برخی از قطعات ممکن است ضروری نباشد، اما کار می کند.
شما باید کد را یک بار اجرا کنید. بعدش طبیعی میشه وصل میشه...البته عرفان - چرا این لازم بوده معلوم نیست...

2) منابع داده فقط خواندنی- بله، معجزه اتفاق نمی افتد، اما گاهی اوقات شما آن را می خواهید ...

3) آنها را نمی توان همراه با منابع داده های داخلی استفاده کرد
شخصاً این واقعیت من را درجا کشت.

چطور ممکن است... چیزی که ما منتظرش بودیم و قبلاً تصور می کردیم و لب هایمان را لیس می زدیم که چگونه داده های خود را با 1C در یک درخواست ترکیب می کنیم، آن را جمع می کنیم - آن را گروه بندی می کنیم، در گزارش وارد می کنیم، اما اینطور نیست. ...
اما مطمئناً این افراد با تجربه را متوقف نمی کند ... چه فکری به ذهن شما خطور کرد؟ درست است - جداول موقت:

4) نمی توان آنها را همراه با میزهای موقت استفاده کرد

اما این دیگر مانند مشکلات تکنولوژیکی به نظر نمی رسد، بلکه بسیار شبیه کاری است که آنها می خواهند ما انجام دهیم "تا زندگی شبیه بهشت ​​به نظر نرسد" :).

5) فقط در اتصالات ACS قابل استفاده است
برای کسانی که نمی دانند، این در ACS در برگه "پیوندهای مجموعه داده" است. آیا شما اغلب از آنها استفاده می کنید؟ راحت؟ ظاهراً می خواهند ما را مجبور کنند که بیشتر از آنها استفاده کنیم. فقط یک ستون "شرایط ارتباط" و "پارامتر ارتباط" وجود دارد. من نمونه ای از استفاده آنها را در هیچ پیکربندی استاندارد پیدا نکردم، و به نوعی همه چیز در اسناد و در کار خروستالوا شفاف نیست. آیا کسی می تواند برای من توضیح دهد که چگونه "شرط اتصال" کار می کند. اگر در آنجا بنویسید Source Attributes = Receiver Attributes کار نمی کند. البته، شرط را می توان در قسمت "Expression" نوشت - در بیشتر موارد این کافی است ... اما به نوعی به راحتی کار نمی کند.

در کل، این مشکل قبلاً در جایی مانند این حل شده بود:
کد 1C v 8.x تابع InitializeDataSource()

DateStart = SettingsComposer.Settings.DataParameters.Items.Value;
DataCon = SettingsBuilder.Settings.DataParameters.Items.Value;
اگر DataCon > "20100101" سپس
DataCon = "20100101";
endIf;

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

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

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

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

//هزینه حسابداری را در جدول پر می کنیم
TypeNumber = New DescriptionTypes(ArrayNumber, CN);
TypeString = New TypeDescription(ArrayString, KS);
TypeDate = New TypeDescription(ArrayDate);

//table برای بارگیری داده ها از SQL
TZ = New ValueTable();
TK.Columns.Add("NomenclatureCode", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add("Period", DateType);

TK.Indices.Add("دوره");

//به SQL متصل شوید
Connection String = "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 رمزگذاری برای Data=False;در صورت امکان با دسته بندی ستون ها برچسب بزنید=False;Initial Catalog=Reports";
اتصال = COMObject جدید ("ADODB.Connection");
Command = New COMObject("ADODB.Command");
RecordSet = New COMObject("ADODB.RecordSet");
تاریخ = "";
تلاش
Connection.Open(AbbrLP(ConnectionString));
Command.ActiveConnection = اتصال;
Command.CommandText = "S_elect * fr om PH با دوره >= "" + String(Format(DateStart, "DF=yyyyMMdd"))) + "" و نقطه<= "" + Строка(Формат(ДатаКон, "ДФ=ггггММдд")) + """;
RecordSet = Command.Execute();
RecordSet.MoveFirst();
استثنا
بازگشت مشخصات فنی؛
EndAttempt;

در حالی که RecordSet.EOF = حلقه غلط
خط = TK.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();
چرخه پایان

Request = New Request();
VrTable = New TemporaryTableManager();
Query.SetParameter("vrDataTable", TK);
Query.SetParameter ("تاریخ شروع"، تاریخ شروع);
Request.SetParameter("DataCon"، DateCon);
Query.Text = "انتخاب کنید
| vrDataTable.NomenclatureCode،
| vrDataTable.Qnty،
| vrDataTable.Period
|Place DataTable
|از
| &vDataTable AS vrDataTable
| کجا
| vrDataTable.Period >= &DateStart
| و vrDataTable.Period<= &ДатаКон";
Request.Run();
TZ = تعریف نشده;

درخواست = درخواست جدید;
Query.TemporaryTableManager = VrTable;
Query.Text = "در اینجا یک درخواست شامل یک جدول متغیر است";

نتیجه = Query.Run();
نتیجه بازگشت؛

EndFunction

ExternalSet = InitializeDataSource();
DataSet = new Structure();
DataSet.Insert("جدول SQL"، ExternalSet);
TypicalReports.GenerateTypicalReport(This Object, Result, Decryption Data, OutputToReportForm, DataSet);

در واقع خطوط کد زیادی وجود ندارد و کاملا استاندارد هستند ... در این صورت می توانید از عملکرد کامل طراح پرس و جو استفاده کنید و فقط تابع DATA COMPOSITION را به ACS بدهید.

اما مطمئناً آنقدرها هم خوب به نظر نمی رسد ... و هر بار که باید کد بنویسید تا مقادیر را در جدول بارگذاری کنید و بررسی کنید که آیا در نام جزئیات اشتباه کرده اید ... و آنچه در آن به ما داده شده است. 1C به نوعی نیمه دل به نظر می رسد. من هنوز تصمیم نگرفته ام که استفاده از کدام راحت تر است. شما تصمیم می گیرید و در مورد تصمیمات خود و آنچه شما را به سمت آنها سوق داده می نویسید.

اطلاعات برگرفته از سایت

با شروع از نسخه 8.3.5، این پلتفرم قابلیت نوشتن داده در جداول منابع داده خارجی را پیاده سازی کرده است. مقاله این قابلیت را مورد بحث قرار می دهد، که قابلیت های موجود برای یکپارچه سازی پیکربندی با سیستم های شخص ثالث را گسترش می دهد.

قابلیت کاربرد

این مقاله پلتفرم 1C 8.3.5 را مورد بحث قرار می دهد. این مطالب همچنین برای نسخه‌های پلتفرم فعلی مرتبط است.

ضبط در منابع داده خارجی در 1C: Enterprise 8

در پلت فرم 8.2.14، یک شی جدید به درخت ابرداده اضافه شد - منابع داده خارجی. هدف از این مکانیسم به دست آوردن داده ها از پایگاه های داده خارجی در رابطه با 1C است.

با انتشار نسخه های جدید پلتفرم، منابع داده های خارجی تکامل یافته اند، به عنوان مثال، امکان قرار دادن آنها در جداول موقت و انجام اتصالات با جداول معمولی فراهم شده است.

در این مقاله به بررسی ابزارهایی خواهیم پرداخت که یک توسعه دهنده برای ضبط در منابع داده خارجی دارد.

تمام اقدامات در Microsoft SQL Server 2008 R2 DBMS انجام شد.

پلتفرم 8.3.4 قابلیت استفاده از توابع شرح داده شده در منابع داده خارجی را معرفی کرد.

این ویژگی به شما امکان می دهد تا رویه های ذخیره شده را در سمت SQL Server اجرا کنید و با کمک آنها به داده ها از منابع خارجی، از جمله نوشتن دسترسی پیدا کنید.

بیایید به یک مثال نگاه کنیم. با استفاده از SQL Management Studio، بیایید یک پایگاه داده جدید به نام kursy_test ایجاد کنیم. تمام آزمایشات بعدی روی آن انجام خواهد شد.

در این پایگاه داده ما یک جدول nomenklatura ایجاد می کنیم، برای این کار یک اسکریپت با محتوای زیر می نویسیم:

استفاده از [kursy_test]
برو
جدول [dbo] ایجاد کنید. [نامگذاری](
[id] [int] NOT NULL،
[ توضیحات ] [ nvarchar ](150) NOT NULL،
[قیمت] [عددی] (15، 2) NULL،
محدودیت [ PK_id ] PRIMARY KEY ([ id ])
برو

در نتیجه اجرا، جدولی با ساختار زیر ایجاد می شود:

اکنون باید دو رویه ذخیره شده ایجاد کنیم که با کمک آنها اصلاح داده ها انجام می شود.

اجازه دهید اولین رویه را insert_nomenklatura بنامیم. برای افزودن یک ردیف جدید به جدول طراحی خواهد شد. اسکریپت ایجاد آن به شکل زیر خواهد بود:

استفاده از [kursy_test]
برو
CREATE PROCEDURE insert_nomenklatura
@id int
@description nvarchar(150)،
@price عددی (15، 2)
مانند
شروع
INSERT INTO [kursy_test].dbo. [nomenklatura] ([ شناسه ]، [ توضیحات ]، [ قیمت ])
VALUES (id@، @description، @price)
پایان
برو

رویه دوم، به نام update_nomenklatura، یک رکورد موجود در جدول را به روز می کند. برای ایجاد آن، اسکریپت زیر راه اندازی شد:

در Object Browser، جدول ایجاد شده و دو رویه ذخیره شده به صورت زیر است:

ما تمام مراحل آماده سازی را در سمت Microsoft SQL Server انجام داده ایم، اکنون به پیکربندی 1C: Enterprise 8 می رویم.

یک منبع داده خارجی جدید به نام Nomenklatura ایجاد کنید. هنگام ایجاد یک جدول جدید در این منبع داده، پارامترهای زیر را برای اتصال به منبع داده مشخص می کنیم:

رشته اتصال زیر را مشخص می کنیم:

درایور = (SQL Server) ; سرور =(محلی); پایگاه داده = kursy_test ; شناسه کاربر = sa ; رمز عبور =;

اگر کاربر sa دارای رمز عبور است، باید در پارامتر Password خط اتصال مشخص شود.

اگر تمام پارامترهای اتصال به درستی مشخص شده باشند، با کلیک بر روی OK، پنجره ای باز می شود که شامل جداول موجود در منبع داده است:

فیلدهای جدولی که به ما علاقه دارند را علامت می زنیم. وقتی یک دکمه را فشار می دهید آمادهجدول dbo_nomenklatura در منبع داده خارجی Nomenklatura ایجاد می شود:

اکنون به تب "توابع" منبع داده خود می رویم.

با استفاده از یک جادوگر مشابه، دو رویه ذخیره شده را اضافه می کنیم:

ظاهر زیر را از تب "توابع" دریافت می کنیم:

حال اجازه دهید رابط کاربری را طوری برنامه ریزی کنیم که با یک منبع داده خارجی کار کند.

در فرم لیست در پنل فرمان، دکمه "افزودن" را با کنترل کننده زیر قرار می دهیم:

&OnClient
رویه افزودن()
هشدار = جدید توضیحات هشدارها("OpenTableComplete"، ThisObject )
OpenForm (
"ExternalDataSource.Nomenklatura.Table.dbo_nomenklatura.ObjectForm"
, , , , , ,
هشدار، FormWindowOpenMode.LockEntireInterface);
پایان رویه

&OnClient
ذخیره رویه (فرمان)
SaveOnServer();
پایان رویه &روی سرور
روش SaveOnServer()
اگر Object.Link.Empty() سپس
ExternalDataSources.Nomenklatura.dbo_insert_nomenklatura
در غیر این صورت
ExternalDataSources.Nomenklatura.dbo_update_nomenklatura
(Object.id، Object.description، Object.price)؛
EndIf
پایان رویه

در حالت Enterprise، فرم لیست به صورت زیر است:

شکل جسم در زیر نشان داده شده است:

برای بزرگنمایی روی تصویر کلیک کنید.

بنابراین، با استفاده از رویه های ذخیره شده، ضبط را در منابع داده خارجی پیاده سازی کردیم.

در پلت فرم 8.3.5، یک ویژگی جدید ظاهر شده است - نوشتن مستقیم به منابع داده خارجی، دور زدن مکانیسم رویه ذخیره شده که در بالا توضیح داده شد.

داده ها را می توان به صورت برنامه ای یا تعاملی ویرایش کرد. و برای مثال ما نیازی به متوسل شدن به پیکربندی نیست.

در پانل های فرمان و در منوی "بیشتر" می توانید دکمه های استاندارد مانند "ایجاد"، "کپی"، "ویرایش" و غیره را مشاهده کنید.

برای بزرگنمایی روی تصویر کلیک کنید.

و دکمه های "ذخیره" و "ذخیره و بستن" به شکل شی ظاهر می شوند:

همانطور که می بینید، اکنون کار با منابع خارجی مشابه کار با کتاب های مرجع، اسناد و ... است.

بیایید ببینیم چه تغییراتی در سطح ابرداده ایجاد شد تا امکان نوشتن در منابع داده خارجی فراهم شود.

یک ویژگی جدید به جدول داده ها اضافه شده است فقط خواندن(نوع - بولی).

اگر این ویژگی روی True تنظیم شود، نوشتن داده در این جدول با استفاده از ابزارهای پلتفرم غیرممکن است.

اکنون فیلد جدول داده دارای ویژگی های زیر است:

  • فقط خواندن(نوع – بولی) – آیا امکان تغییر داده در این قسمت وجود دارد؟
  • AllowNull(نوع – بولی) – آیا امکان ذخیره یک مقدار NULL در این قسمت وجود دارد یا خیر.

ویژگی فقط خواندنباید تنظیم شود درست است، واقعیبرای فیلدهای پایگاه داده با تغییرات خودکار، فیلدهای کلیدی تولید شده به صورت خودکار، فیلدهای محاسبه شده و غیره.

با استفاده از زبان داخلی می توانید داده ها را در منابع خارجی اضافه، تغییر و حذف کنید.

برای انجام این کار، اشیاء ExternalDataSourceTableRecordSetو ExternalDataSourceTable Objectروش های جدید اجرا شد نوشتن()و حذف().

بیایید به مثال اضافه کردن یک رکورد جدید برای یک منبع داده خارجی که در بالا به آن پرداخته شد، نگاه کنیم.

&OnClient
روش به صورت برنامه ای ایجاد کنید(تیم)
CreateProgrammaticallyOnServer();
پایان رویه &روی سرور

روش CreateProgrammaticallyOnServer()
Writable Object=
ExternalDataSources.Nomenklatura.Tables.dbo_nomenklatura.CreateObject();
WriteableObject.id= 5 ;
WriteableObject.description= "کمد لباس" ;
WritableObject.price= 5000 ;
WriteableObject.Write();
پایان رویه

در ماژول شیء جدول منبع داده خارجی، اکنون می توانید کنترل کننده رویداد نوشتن، مانند قبل از نوشتن (), OnWrite()و غیره.:

این مقاله دو گزینه را برای نوشتن داده ها در منابع داده خارجی - با استفاده از رویه های ذخیره شده و استفاده از مکانیسم های جدید پلت فرم 8.3.5 بررسی می کند.

بنابراین، پلتفرم اکنون مکانیسم هایی را برای یکپارچگی کامل با برنامه های کاربردی خارجی پیاده سازی می کند.

در نسخه 8.3.6، عملکردی که در بالا توضیح داده شد با کمک روش‌های ویژه جدید GetModifiableFields() و SetModifiableFields() گسترش یافت. با استفاده از آنها می توان عملیات نوشتن را در قسمت هایی از جدول VIEW که در پیکربندی به عنوان فقط خواندنی مشخص شده اند انجام داد. به لطف این، امکان اجرای سناریویی فراهم شد که در آن نوشتن در فیلدهای جداگانه جدول VIEW فقط در مواردی که مطابق با منطق تجاری برنامه ضروری باشد امکان پذیر است.

در نسخه 8.3.7، مکانیسم برای تعیین اینکه کدام فیلدهای خاص از جداول VIEW می تواند حاوی مقادیر NULL باشد، بهبود یافته است. تا این مرحله، تمام جداول VIEW می توانند این مقدار را بپذیرند. این تغییر به دلیل افزایش سرعت مرتب سازی در لیست های پویا توسط این فیلدها است.

در نسخه 8.3.8، سرانجام امکان تشخیص این واقعیت وجود داشت که یک منبع داده خارجی در حالت تراکنش است. این قابلیت با روش جدید ExternalDataSourceManager.TransactionActive () ارائه شده است.

در نتیجه، ما توجه می کنیم که برای منابع داده خارجی، همانطور که در بالا نشان داده شده است، جداول داده از مدل رابطه ای کلاسیک توضیح داده شده است. این پلتفرم از الگوی متفاوتی برای کار با داده ها استفاده می کند و مجموعه خاصی از انواع اشیاء برنامه (دایرکتوری ها، اسناد، ثبت و غیره) را به توسعه دهنده ارائه می دهد. به همین دلیل است که سیستم، هنگام کار با جداول منابع داده خارجی، از اکثر عملکردهای ذاتی اشیاء "بومی" خود پشتیبانی نمی کند. بنابراین، توصیه می شود از توسعه هرگونه منطق تجاری، با در نظر گرفتن استفاده از جداول VID، در صورتی که این امر مربوط به وظایف یکپارچه سازی با سیستم های موجود نیست، خودداری شود. یا به بیان ساده، باید سعی کنید از ذخیره داده هایی که به طور فعال در برنامه شما استفاده می شود در جدول دیگری از سیستم خارجی، در صورتی که توسط این سیستم استفاده نمی شود، خودداری کنید.

در مقاله بعدی به ادامه منطقی استفاده از فناوری منابع داده خارجی در سیستم 1C:Enterprise خواهیم پرداخت.

منابع داده خارجی 1C - یک شی فوق داده نسبتاً جدید 1C 8.3 و 8.2، که با آن امکان اتصال به منابع داده خارجی 1C وجود دارد: جداول SQL، Excel، Access، FoxPro (dbf)، پایگاه داده 1C دیگر، Oracle، Paradox (db) ، - و حتی خواندن از فایل های ساده txt/csv.

این امر امکانات زیادی را برای قابلیت همکاری با سایر سیستم ها می دهد. بیایید نگاه دقیق تری بیندازیم.

راه اندازی منابع داده خارجی در 1C 8

تنظیم منابع خارجی برای هر نوع سیستم فردی است. اما، به عنوان یک قاعده، بخش کلی تنظیمات یکسان است - این تنظیم رشته اتصال است:

267 درس ویدیویی را در 1C به صورت رایگان دریافت کنید:

اگر رشته اتصال به درستی مشخص شده باشد، سیستم از شما می خواهد که جدول مورد نظر را از پایگاه داده انتخاب کنید. در نتیجه، یک جدول آماده دریافت می کنیم که در آن می توانیم فیلد کلید (یک فیلد منحصر به فرد) و فیلد ارائه (نحوه نمایش رکورد در 1C) را مشخص کنیم:

استفاده از منابع داده خارجی در 1C 8.3

منابع داده خارجی در 1C را می توان مانند سایر جداول پایگاه داده استفاده کرد. پلتفرم به طور خودکار فرمی را برای آنها ایجاد می کند اگر یکی مشخص نشده باشد. همچنین امکان استفاده از داده های منابع خارجی در پرس و جو وجود دارد.

در پلتفرم نسخه 8.3.5.1068 (و بعد از آن) امکان افزودن، تغییر و حذف داده ها در منابع خارجی با استفاده از نرم افزار 1C فراهم شد. نمونه هایی از این ویژگی در این مقاله ارائه شده است.

به منظور امکان ضبط کردن در منابع خارجی، شرکت 1C ویژگی های جدیدی را به جداول داده ها و فیلدهای منابع خارجی اضافه کرد:

  • برای کل جدول - دارایی فقط خواندن. ReadOnly = درست استیعنی تغییر داده های این جدول غیرممکن است.
  • برای فیلدهای جداول جداگانه - خواص فقط خواندن, AllowNullو ارزش پر کردن:
    • ReadOnly = درست استبه این معنی که تغییر داده ها در این زمینه غیرممکن است.
    • AllowNull = درست استبه این معنی است که می توان یک مقدار در این فیلد نوشت خالی;
    • ارزش پر کردنحاوی مقدار پیش فرض این فیلد (در صورت وجود) است.

شما (هنگامی که جداول را به صورت دستی توصیف می کنید) یا پلتفرم (هنگام ایجاد جداول با استفاده از طراح) می توانید از این ویژگی ها به صورت زیر استفاده کنید.

  • ReadOnly = درست استبه عنوان مثال، برای نماها، جداول به دست آمده بر اساس یک عبارت (نتیجه تابع) و موارد مشابه را تنظیم کنید. داده های این جداول را نمی توان تغییر داد.
  • ReadOnly = درست استبرای فیلدهایی که به طور خودکار تنظیم می شوند ( افزایش خودکارفیلدهای محاسبه شده و مانند آن. داده ها در چنین زمینه هایی را نمی توان تغییر داد.
  • AllowNull = درست استبرای همه فیلدها به جز فیلدهای کلیدی و آنهایی که در منبع خارجی به عنوان توضیح داده شده اند تنظیم کنید تهی نیست;
  • ارزش پر کردنفیلدها باید در حالتی تنظیم شوند که منبع خارجی مقدار استاندارد این فیلد را مشخص کند (مقدار پیش فرض).

می توانید داده ها را در منابع خارجی با استفاده از زبان داخلی یا به صورت تعاملی اضافه کنید، تغییر دهید و حذف کنید. زبان داخلی برای این کار از روش های مدیریت جدول زیر استفاده می کند:

  • CreateRecordSet()- برای جداول غیر شی.
  • روش جدید CreateObject()- برای جداول شی

بر این اساس، اشیاء ExternalDataSourceTableRecordSetو ExternalDataSourceTable Objectروش های جدید ظاهر شده است نوشتن()و حذف().

افزودن داده ها

وقتی داده ها را به یک منبع خارجی اضافه می کنید، یک شی (یا مجموعه رکورد) ایجاد می کنید، مقادیر فیلد را تنظیم می کنید و می نویسید. با این حال، برخی از ویژگی ها وجود دارد که دانستن آنها مفید است.

به عنوان مثال، اگر سعی کنید مقدار فیلدی را تعیین کنید که دارد ReadOnly = درست است، یک خطا پرتاب می شود. و هنگام نوشتن مستقیم به پایگاه داده در عبارت درج کنیدچنین فیلدهایی حذف خواهند شد. فیلدهای باقیمانده حاوی مقادیری هستند که به آنها اختصاص داده اید. بنابراین ارزش ها خالیو مقادیر پیش فرض باید به طور صریح به فیلدها اختصاص داده شود.

  • شناسه(AllowNull = True)؛
  • نام(AllowNull = True)؛
mFeature = ExternalDataSources.TableIm.shop_feature.CreateObject(); mCharacteristic.id = کد; mCharacteristic.name = نام; mCharacteristic.Write();

اجرای بیانیه نوشتن()باعث می شود که اولین کنترل کننده رویداد فراخوانی شود قبل از ضبط، سپس یک ورودی فیزیکی به جدول منبع خارجی ایجاد می شود ( درج کنید)، سپس کنترل کننده رویداد فراخوانی می شود هنگام ضبط.

با فیلد کلید جدول منبع خارجی می توانید کارهای زیر را انجام دهید. اگر یک فیلد کلیدی قابل تغییر است، قبل از نوشتن مقدار آن را به صورت دستی تنظیم می کنید. اگر تغییر فیلد کلید ممنوع باشد، پلت فرم به طور مستقل کلید را دریافت می کند درج کنیدیا بلافاصله پس از آن با استفاده از روش می توانید در این فرآیند دخالت کنید SetLinkNew()قبل از ضبط فیزیکی (در کنترل کننده رویداد قبل از ضبط) یا بلافاصله پس از ضبط فیزیکی (در کنترل کننده رویداد هنگام ضبط).

تغییر داده ها

وقتی داده ها تغییر می کنند، مقادیر تمام فیلدهای جدولی که دارند ReadOnly = نادرست.

MFeature = ExternalDataSources.TableIm.shop_feature.FindByField("id",code); mObject = mCharacteristic.GetObject(); mObject.name = نام; mObject.Write();

اگر نیاز به ضبط فقط برخی از فیلدها دارید، می توانید لیستی از آنها را مستقیماً از زبان داخلی با استفاده از روش ها مشخص کنید. SetWritableFields()و GetWritableFields().

در حال حذف داده ها

حذف داده ها مستقیماً یک ردیف را از جدول پایگاه داده حذف می کند. در این حالت، جستجو برای ارجاع به شیء در حال حذف انجام نمی شود. در صورت نیاز به چنین عملکردی، می توانید آن را خودتان در مدیریت رویداد برنامه ریزی کنید قبل از حذف ().

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

معاملات

خواندن داده ها از منابع خارجی، مانند قبل، خارج از تراکنش انجام می شود و هنگام نوشتن، پلت فرم یک تراکنش ضمنی را باز می کند. در عین حال، می توانید هر دو خواندن و نوشتن را در تراکنش های صریح با استفاده از روش های شی انجام دهید ExternalDataSourceManager:

  • StartTransaction();
  • CommitTransaction();
  • CancelTransaction().

قفل

  • خودکار;
  • اداره می شود;
  • اتوماتیک و کنترل شده.

و همچنین ویژگی جدول منبع خارجی سطح جداسازی تراکنش:

علاوه بر این، می توانید به طور مستقل سطح قفل را در روش تنظیم کنید StartTransaction().

مثال‌هایی را به مقاله استاندارد اضافه کرده‌ام) اگر زمان بیشتری داشته باشم، نمونه‌های بیشتری اضافه خواهم کرد.