يفتح
يغلق

مصادر البيانات الخارجية 1S 8.2. مصادر البيانات الخارجية. مثال سلسلة الاتصال

للعمل مع بيانات غير 1C، على سبيل المثال: قاعدة بيانات SQL، وقاعدة بيانات Access، وملف Excel وغيرها الكثير، تم تقديم آلية (كائن) تسمى مصادر البيانات الخارجية في النظام الأساسي للتكنولوجيا، بدءًا من الإصدار 8.2.14.

في هذه المقالة، دعونا نلقي نظرة على كيفية تفاعل هذا الكائن مع ملف Excel الذي اعتدنا عليه. على سبيل المثال، هناك حاجة لقراءة البيانات من ملف *.xls إلى قاعدة بيانات 1C في بعض الفواصل الزمنية. إذا كنا بحاجة في وقت سابق إلى التهيئة باستخدام كائنات Com، ثم قم بإنشاء جدول قيم، وقراءة سطر البيانات بسطر، والآن تختفي هذه التلاعبات ببساطة. عند استخدام مصدر بيانات خارجي، يمكننا الاستعلام عن البيانات واسترجاعها على الفور.

لنفترض أن لدينا مصنف Excel بالمحتوى التالي. والتي نحتاج إلى قراءة البيانات منها.

أولاً، في وضع المكوّن، قم بإضافة مصدر بيانات جديد وقم بتسميته Excel.

الآن نحن بحاجة إلى إضافة البيانات، جدول مع الحقول التي سيكون لدينا في 1C. لنقم بإنشائها بنفس طريقة تسمية الأعمدة الموجودة في الملف. للقيام بذلك، انتقل إلى الكائن الذي تم إنشاؤه وفي علامة التبويب "بيانات"، انقر فوق "إضافة". هنا أوصي بشدة بإنشائه يدويًا، لأنه غالبًا ما تكون هناك مشكلات عندما يحاول 1c-ina تكوينه تلقائيًا بنفسه.

دعونا نسمي جدولنا DataTable. بعد ذلك، انتقل إلى علامة التبويب "البيانات" وقم بإنشاء حقول (مماثلة للملف).

في خصائص كل حقل، يجب عليك تحديد الاسم والنوع والاسم في مصدر البيانات (مطابق للملف).
تعيين اسم في مصدر البيانات. نشير هنا إلى اسم الورقة بتنسيق *. xls مع إضافة "$" في النهاية. لدينا List1$.
تأكد من تحديد الحقول الرئيسية. هنا، من نظرية قاعدة البيانات، من الضروري الإشارة إلى المجال الذي سيكون الصف فريدًا تمامًا من خلاله.
حقل العرض - نشير إلى الحقل الذي سيقدم تمثيلاً موجزًا ​​للخط، في حالتنا التسميات.

الجميع! هذا هو في الواقع الإعداد بأكمله. بعد ذلك، تحتاج فقط إلى تحديد سلسلة الاتصال في أي إجراء وبعد الاتصال، يمكنك العمل مع مصدر البيانات.

سلسلة الاتصال لملفات XLSX (Office 2007 والإصدارات الأحدث)

Driver=(برنامج تشغيل Microsoft Excel (*.xls, *.xlsx, *.xlsm, *.xlsb));DBQ=D:\FileExcel.xlsx;

سلسلة الاتصال لـ XLS والملفات السابقة.

Driver=(برنامج تشغيل Microsoft Excel (*.xls)); معرف السائق=790; DBQ=D:\FileExcel.xls;

لنقم بإنشاء معالجة خارجية جديدة من شأنها الاتصال والإبلاغ عن الاتصال.

الإجراء ButtonExecutePress(Button)ConnectionParameters = NewConnectionParametersExternalDataSource; معلمات الاتصال. سلسلة الاتصال = "برنامج التشغيل = ( برنامج تشغيل Microsoft Excel (*.xls) ) ؛ معرف السائق = 790 ; DBQ= D:\fruit. XLS؛ "؛ مصادر البيانات الخارجية. اكسل. Set GeneralConnectionParameters(ConnectionParameters) ; مصادر البيانات الخارجية. اكسل. إنشاء اتصال () ؛ ( طلب = طلب جديد ()؛ طلب. النص = "حدد | جدول البيانات. الكود | جدول البيانات. التسميات، | جدول البيانات. الوحدة، | جدول البيانات. الكمية | من | مصدر البيانات الخارجية. اكسل. طاولة. DataTable AS DataTable"; المعارف التقليدية = طلب. ينفذ

) . تفريغ () ؛ تقرير("متصل"); EndProcedure

وإذا وضعنا نقطة توقف ونظرنا إلى ما لدينا في المواصفات الفنية سنرى ما يلي:

ملاحظة. يجب ألا يكون هناك أي أسطر فارغة في ملف Excel نفسه قبل أسماء الحقول، وإلا سيحدث خطأ odbc. sqlstate 07002 (برنامج تشغيل odbc excel يحتوي على عدد قليل جدًا من المعلمات).

مصادر البيانات الخارجية 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 من برنامج 1C، أضاف المطورون إلى الوظيفة القدرة على توصيل قواعد بيانات الطرف الثالث والحصول على المعلومات منها مباشرة من المكوّن، دون استخدام اتصالات COM وكائنات OLE. يتم تنفيذ هذه الميزة باستخدام كائن جديد - "مصادر البيانات الخارجية"

يمكن استخدام مصادر البيانات الخارجية في 1C بنفس طريقة استخدام الجداول الأخرى في النظام:

  1. عند إنشاء التقارير والحسابات باستخدام نظام تكوين البيانات (DCS)؛
  2. للحصول على روابط للمعلومات المخزنة في مصادر خارجية؛
  3. لتغيير البيانات المخزنة في الجداول؛
  4. عند توليد الطلبات.

من المهم أن تعرف أن هذه الآلية غير مصممة للعمل مع قواعد بيانات 1C الأخرى، حيث أن نموذج التشغيل 1C.Enterprise نفسه لا يعني التداخل مع البيانات على مستوى الجداول المادية.

إنشاء مصدر جديد

تتم إضافة مصدر خارجي جديد إلى البرنامج في وضع "Configurator". يوجد فرع مناظر في شجرة التكوين (الشكل 1)

سيتعين عليك العمل بجد عند إنشاء مصدر جديد، على الرغم من أن شكل الكائن الجديد يحتوي على أربع علامات تبويب فقط:

  1. أساسي؛
  2. بيانات؛
  3. المهام؛
  4. حقوق.

تحتوي علامة التبويب الأولى على معلمة واحدة فقط مثيرة للاهتمام - وضع التحكم في القفل. إذا لم تكن لديك أي أسئلة حول حظر البيانات في المعاملات أو تعقيدات موازنة تدفقات المعلومات، فيمكنك ترك هذا الخيار في وضع الحظر التلقائي. ومع ذلك، يمكن أن يؤدي هذا النهج إلى قيود مفرطة (على سبيل المثال، عندما يقوم البرنامج، بدلا من سجل منفصل، بتأمين الجدول الفعلي بأكمله، مما يحرم المستخدمين الآخرين من القدرة على العمل معه).

تستخدم الأقفال المُدارة، على عكس الأقفال التلقائية، آلية المعاملات المتأصلة في البرنامج نفسه، وليس في نظام إدارة قواعد البيانات (DBMS)، مما يسمح بنقل لقطات الجدول إلى مستوى أقل بكثير.

من خلال تعيين هذه المعلمة على "تلقائي ومُدار"، فإننا نوفر للنظام القدرة على تحديد الوضع الذي سيتم استخدامه من خلال الوصول المباشر إلى خاصية مشابهة لكل جدول محدد.

علامة التبويب "البيانات" في نموذج خصائص المصدر الخارجي

يظهر شكل علامة التبويب "البيانات" في الشكل. 2

أرز. 2

هنا يمكننا إضافة جداول ومكعبات مصدر خارجي. هناك طريقتان لإضافة جدول:

  1. يدويًا، سيتم فتح نموذج إضافة جدول أمامنا (الشكل 3)؛

أرز. 3

  1. أو اختر من قائمة جداول المصدر المادية (الشكل 4)، وفي هذه الحالة يتم فتح مُنشئ خاص أمامنا.

أرز. 4

دعونا نلقي نظرة فاحصة على النموذج الخاص بإضافة جدول. يتم استخدام خاصية "الاسم" لتعريف كائن في التكوين بشكل فريد.

تتم مقارنة كائن البيانات الوصفية والجدول الفعلي النهائي من خلال خاصية "الاسم في مصدر البيانات" الموجودة في علامة التبويب "خيارات متقدمة" (الشكل 5)

أرز. 5

بعد ذلك يجب علينا تحديد نوع الجدول، أو بالأحرى موضوعيته. إذا كان من الممكن تعريف البيانات المخزنة في البنية بشكل فريد من خلال أي حقل واحد، فيمكن أن يكون الجدول كائنًا واحدًا. إذا تم تحديد خصوصية السجل من خلال مجموعة من الحقول الأساسية، فيجب أن يحتوي الجدول على نوع غير كائن.

وبمقارنة هذه الجداول مع كائنات البيانات الوصفية الأخرى، يمكن إعطاء القياس التالي:

  • تعتبر جداول الكائنات بمثابة كتب مرجعية؛
  • تلك غير الكائنية هي سجلات المعلومات.

يتم تعريف مجموعة الحقول الرئيسية في معلمة النموذج التالية ("الحقول الرئيسية"). هذا الحقل مطلوب؛ إذا تركته فارغًا، فسوف يفشل حفظ التكوين.

كما يتبين من الشكل 5، بعض حقول وأزرار النموذج غير قابلة للتحرير:

  • التعبير في مصدر البيانات؛
  • نوع بيانات الجدول؛
  • مجال العرض
  • عرض المعالجات.

لا يمكن استخدامها إلا بعد ملء حقول الجدول وتحديد نوعها وتعيين معرفات لها (الشكل 6)

أرز. 6

هنا يجب عليك الانتباه إلى المعلمة "Allow Null"؛ إذا تم تحديد خانة الاختيار هذه، فلا يُنصح باستخدام هذا الحقل كمفتاح.

منشئ الجدول

ربما تكون النقطة الأكثر أهمية وإثارة للاهتمام في العمل مع المصادر الخارجية هي إنشاء سلسلة اتصال. يتم فتح مُنشئه إذا قمت بالنقر فوق الزر الذي يحتوي على ثلاث نقاط بجوار معلمة "سلسلة الاتصال".

أولاً، سيُطلب منا تحديد برنامج التشغيل الذي سيتم استخدامه للاتصال (الشكل 7)

أرز. 7

لن يسمح لك التعريف غير الصحيح لهذه المعلمة بالاتصال بقاعدة معلومات تابعة لجهة خارجية. يجب أن تفهم أيضًا أنه لا يمكن استخدام كافة برامج التشغيل المحددة في القائمة المنسدلة لإنشاء سلسلة اتصال تلقائيًا. إذا قام النظام الأساسي بإنشاء خطأ (الشكل 8)، فيجب إدخال سلسلة الاتصال يدويًا.

الشكل 8

أرز. 9

الخط نفسه عبارة عن بناء منظم بشكل صارم.

مثال سلسلة الاتصال

لنفكر في قاعدة بيانات تابعة لجهة خارجية تم إنشاؤها في Microsoft Access وتقع في جذر محرك الأقراص D. لتوصيل قاعدة البيانات هذه، يجب علينا استخدام برنامج التشغيل المناسب، ولكن تحديده في مُنشئ الصف يؤدي إلى الخطأ في الشكل 8.

سنقوم بإعداد معلمات الاتصال بأنفسنا.

Driver=(Microsoft Access Driver (*.mdb)) – هذا ما يبدو عليه الجزء الأول من السطر. في الأقواس المتعرجة قمنا بتعريف السائق.

بالنسبة لملفات Excel سيبدو مثل (Microsoft Excel Driver (*.xls))، بالنسبة لملفات Excel التي تم إنشاؤها في مكتب أقدم من 2003، سيبدو سطر برنامج التشغيل (Microsoft Excel Driver (*.xls، *.xlsx، *. xlsm، *.xlsb)).

بفصل هذه المعلمة عن المعلمة التالية بفاصلة، يجب علينا إدخال عنوان وحدة التخزين الخاصة بنا (في حالتنا DBQ=D:\Database1.mdb).

بإضافة هاتين المعلمتين، نحصل على Driver=(Microsoft Access Driver (*.mdb));DBQ=D:\Database1.mdb. من خلال كتابة هذه المعلمة، نحصل على إمكانية الوصول إلى الهياكل الداخلية لقاعدة البيانات هذه.

بالنسبة لكائن "المصدر الخارجي"، لا يكفي مجرد إنشائه في التكوين؛ بل يجب أيضًا أن يكون متصلاً في وضع "المؤسسة". يمكن القيام بذلك من القائمة "جميع الوظائف"->المصادر الخارجية. عندما ندخل جدولنا لأول مرة، نحتاج إلى إدخال نفس سلسلة الاتصال في وضع "المؤسسة".

لماذا تحظى هذه الفرصة بمثل هذا الاهتمام؟ أي شخص قام بالبرمجة في 1C وهو على دراية تامة بـ SQL وعلى الأقل بشكل عام على دراية بهندسة ومبادئ تطوير منصات التكنولوجيا الأخرى لتطبيقات الأعمال، سيخبرك بثقة تامة بما يحبه أكثر في 1C. بالطبع، يعد منشئ الاستعلامات هو الآلية الأكثر ملاءمة ومدروسة لكتابة الاستعلامات لاستعادة البيانات من الهياكل العلائقية التي واجهتها شخصيًا على الإطلاق. والآن منحتنا 1C فرصة رائعة لاستخدامها ليس فقط مع 1C، ولكن أيضًا مع أي جداول أخرى. إنه مجرد أن هناك الكثير من "الذباب في المرهم" يُسكب في "برميل العسل" هذا. اهم الاشياء اولا:

1) الإعداد والاستخدام- بدون "الرقص بالدف" لن ينجح الأمر
أ) أضف مصدر بيانات خارجي - لا يبدو الأمر معقدًا
ب) حدد مربع الاختيار "تحديد من القائمة" - إلزامي - يعد هذا ضروريًا للتحقق من الوظيفة في البداية وسيوفر عليك المشاكل غير الضرورية
ج) - تأكد من النقر فوق "..." - الاتصال هو ODBC. ليس OLEDB كما اعتدنا جميعًا، ولكن بمستوى أقل

د) ولكن هنا كن حذرًا جدًا.

هذا هو برنامج تشغيل ODBC - إذا كنت تستخدم إصدار خادم العميل، فيجب أن يكون موجودًا على الخادم. إذا كنت تقوم بالتطوير على نظام واحد وتعمل على نظام آخر (كما هو الحال عادة)، فتأكد من عدم وجود مفاجآت في انتظارك. توصية غريبة، لكن اختر برنامج التشغيل الأقدم أو الأكثر شيوعًا إذا لم تكن مهتمًا بشكل خاص بالسرعة ولا تنوي تجاوز قدرات معيار SQL92. سيعطيك هذا توافقًا أفضل. على سبيل المثال، بالنسبة لـ SQL Server 2008، سيكون أفضل برنامج تشغيل هو SQL Server Native Client 11، لكنني أوصي باختيار SQL Server فقط، وإلا فسيتعين تثبيت هذا العميل الأصلي إما على الخادم أو على جميع الأجهزة العميلة (في حالة استخدام نسخة الملف)، والفائدة خاصة بالبساطة فهو لن يعطيك أي مهام.
هـ) مربعات حوار اختيار الخادم القياسي

هـ) أوصي بالإجابة بـ "نعم" على سؤال حفظ كلمة المرور، وإلا فلن تتمكن من بدء هذا العمل.
ز) حدد الجدول والتفاصيل... فرصة رائعة - يمكنك إعادة تسميته على الفور كما تريد (والتفاصيل أيضًا)، وفي الخصائص سترى أسماء حقول مصدر البيانات

Z) الآن بعد تشغيله، افتح مصمم الاستعلام - حدد بغباء جميع السجلات من الجدول وOPA - خطأ. ما يجب القيام به؟ إذا كانت لديك واجهة مُدارة، فانظر إلى قائمة الخدمة، وإذا كانت عادية...
أنا شخصياً استخدمت هذا الكود:
Code 1C v 8.x Parameters = 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(Parameters);

ExternalDataSources.DAX.SetConnection();
قد لا تكون بعض القطع ضرورية، ولكنها تعمل.
تحتاج إلى تشغيل الكود مرة واحدة. بعد ذلك سيكون من الطبيعي الاتصال... التصوف بالطبع - لماذا كان ذلك ضروريًا غير واضح...

2) مصادر البيانات للقراءة فقط- نعم المعجزات لا تحدث...ولكن في بعض الأحيان تريد ذلك...

3) لا يمكن استخدامها مع مصادر البيانات الداخلية
شخصيا، هذه الحقيقة قتلتني على الفور.

كيف يمكن أن يكون هذا... ما كنا ننتظره وتخيلناه بالفعل ولعقنا شفاهنا حول كيفية قيامنا الآن بدمج بياناتنا مع 1C في طلب واحد، وطيها - تجميعها، وإدراجها في التقرير، ولكن هذا ليس هو الحال ...
لكن بالطبع هذا لا يمنع أصحاب الخبرة... ما الفكرة التي تبادرت إلى ذهنهم؟ هذا صحيح - الجداول المؤقتة:

4) لا يمكن استخدامها مع الجداول المؤقتة

لكن هذا لم يعد يبدو كصعوبات تكنولوجية، بل يشبه إلى حد كبير ما يريدون منا أن نفعله "حتى لا تبدو الحياة مثل الجنة" :).

5) لا يمكن استخدامه إلا في اتصالات ACS
بالنسبة لأولئك الذين لا يعرفون، هذا موجود في ACS في علامة التبويب "روابط مجموعة البيانات". هل تستخدمها في كثير من الأحيان؟ مريح؟ يبدو أنهم يريدون إجبارنا على استخدامها في كثير من الأحيان. يوجد فقط عمود "حالة الاتصال" و"معلمة الاتصال". لم أجد مثالاً لاستخدامها في أي تكوين قياسي، وبطريقة ما، كل شيء غير شفاف في الوثائق وفي عمل خروستاليفا أيضًا. هل يمكن لأحد أن يشرح لي كيف تعمل "حالة الاتصال". إذا كتبت سمات المصدر = سمات المتلقي هناك، فإنه لا يعمل. بالطبع، يمكن كتابة الشرط في حقل "التعبير" - وهذا يكفي في معظم الحالات... ولكن بطريقة ما لا يتم حل الأمر بسهولة.

في المجمل، تم حل هذه المشكلة سابقًا في مكان ما على النحو التالي:
الكود 1C v 8.x الوظيفةInitializeDataSource()

DateStart =SettingsComposer.Settings.DataParameters.Items.Value;
DataCon =SettingsBuilder.Settings.DataParameters.Items.Value;
إذا كان DataCon> "20100101" إذن
DataCon = "20100101";
إنهاء إذا؛

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

ArrayNumber = New Array();
ArrayNumber.Add(Type("الرقم"));

ArrayString = New Array();
ArrayString.Add(Type("سلسلة"));

ArrayData = New Array();
ArrayDate.Add(Type("التاريخ"));

// سنقوم بملء التكلفة المحاسبية في الجدول
TypeNumber = New descriptionTypes(ArrayNumber, CN);
TypeString = New TypeDescription(ArrayString, KS);
TypeDate = New TypeDescription(ArrayDate);

// جدول تحميل البيانات من SQL
TZ = New ValueTable();
TK.Columns.Add("NomenclatureCode", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add("الفترة"، DateType);

TK.Indices.Add("الفترة");

// الاتصال بـ SQL
سلسلة الاتصال = "الموفر=SQLOLEDB.1؛معلومات الأمان المستمرة=صحيح؛معرف المستخدم=sa؛Pwd=؛مصدر البيانات=؛إجراء الاستخدام للتحضير=1؛الترجمة التلقائية=صحيح؛حجم الحزمة=4096؛معرف محطة العمل=؛الاستخدام تشفير البيانات = خطأ؛ وضع علامة مع ترتيب الأعمدة عندما يكون ذلك ممكنًا = خطأ؛ الكتالوج الأولي = التقارير"؛
Connection = New COMObject("ADODB.Connection");
Command = New COMObject("ADODB.Command");
RecordSet = New COMObject("ADODB.RecordSet");
التاريخ = "";
محاولة
Connection.Open(AbbrLP(ConnectionString));
Command.ActiveConnection = Connection;
Command.CommandText = "S_elect * fr om PH حيث توجد الفترة >= "" + String(Format(DateStart, "DF=yyyyMMdd"))) + "" والفترة<= "" + Строка(Формат(ДатаКон, "ДФ=ггггММдд")) + """;
RecordSet = Command.Execute();
RecordSet.MoveFirst();
استثناء
إعادة المواصفات الفنية؛
this.EndAttempt;

بينما RecordSet.EOF = حلقة خاطئة
Line = 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();
EndCycle;

طلب = طلب جديد ()؛
VrTable = New TemporaryTableManager();
Query.SetParameter("vrDataTable", TK);
Query.SetParameter("تاريخ البدء"، تاريخ البدء)؛
Request.SetParameter("DataCon"، DateCon);
استعلام.نص = "حدد
| vrDataTable.NomenclatureCode،
| vrDataTable.Qnty،
| vrDataTable.Period
|مكان DataTable
|من
| &vDataTable AS vrDataTable
|أين
| vrDataTable.Period >= &DateStart
| وvrDataTable.Period<= &ДатаКон";
طلب.تشغيل();
TZ = غير محدد؛

طلب = طلب جديد؛
Query.TemporaryTableManager = VrTable;
Query.Text = "هذا استعلام يتضمن جدول متغير"؛

النتيجة = Query.Run();
نتيجة العودة؛

وظيفة النهاية

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

في الواقع، لا يوجد الكثير من أسطر التعليمات البرمجية وهي قياسية تمامًا... في هذه الحالة، يمكنك استخدام الوظيفة الكاملة لمصمم الاستعلام، وإعطاء وظيفة DATA COMPOSITION فقط إلى ACS

لكنها بالتأكيد لا تبدو جميلة... وفي كل مرة تحتاج إلى كتابة تعليمات برمجية لتحميل القيم في جدول والتحقق مما إذا كنت قد ارتكبت خطأً في اسم التفاصيل... وما الذي قدمناه فيه 1C يبدو فاترا إلى حد ما. لم أقرر بعد أيهما أكثر ملاءمة للاستخدام. أنت تقرر، وتكتب عن قراراتك وما الذي دفعك إليها.

المعلومات مأخوذة من الموقع

الإصدار 8.2.14.533 هو أخيرًا إصدار أكثر أو أقل استقرارًا من الإصدار الرابع عشر من النظام الأساسي. وأخيرا، سنحت الفرصة لتجربة فرصة رائعة - "مصادر البيانات الخارجية".

لماذا تحظى هذه الفرصة بمثل هذا الاهتمام؟ أي شخص قام بالبرمجة في 1C وهو على دراية تامة بـ SQL وعلى الأقل بشكل عام على دراية بهندسة ومبادئ تطوير منصات التكنولوجيا الأخرى لتطبيقات الأعمال، سيخبرك بثقة تامة بما يحبه أكثر في 1C. بالطبع، يعد منشئ الاستعلامات هو الآلية الأكثر ملاءمة ومدروسة لكتابة الاستعلامات لاستعادة البيانات من الهياكل العلائقية التي واجهتها شخصيًا على الإطلاق. والآن منحتنا 1C فرصة رائعة لاستخدامها ليس فقط مع 1C، ولكن أيضًا مع أي جداول أخرى. إنه مجرد أن هناك الكثير من "الذباب في المرهم" يُسكب في "برميل العسل" هذا. اهم الاشياء اولا:

1) الإعداد والاستخدام - بدون "الرقص بالدف" لن ينجح الأمر

أ) أضف مصدر بيانات خارجي - لا يبدو الأمر معقدًا
ب) حدد مربع الاختيار "تحديد من القائمة" - إلزامي - يعد هذا ضروريًا للتحقق من الوظيفة في البداية وسيوفر عليك المشاكل غير الضرورية
الخامس)
(IMG:http://pics.livejournal.com/comol/pic/0000cr1r.png)
- تأكد من النقر فوق "..." - الاتصال هو ODBC. ليس OLEDB كما اعتدنا جميعًا، ولكن بمستوى أقل

لكن كن هنا حذر جدا.

هذا هو برنامج تشغيل ODBC - إذا كنت تستخدم إصدار خادم العميل، فيجب أن يكون موجودًا على الخادم. إذا كنت تقوم بالتطوير على نظام واحد وتعمل على نظام آخر (كما هو الحال عادة)، فتأكد من عدم وجود مفاجآت في انتظارك. توصية غريبة، لكن اختر برنامج التشغيل الأقدم أو الأكثر شيوعًا إذا لم تكن مهتمًا بشكل خاص بالسرعة ولا تنوي تجاوز قدرات معيار SQL92. سيعطيك هذا توافقًا أفضل. على سبيل المثال، بالنسبة لـ SQL Server 2008، سيكون أفضل برنامج تشغيل هو SQL Server Native Client 11، لكنني أوصي باختيار SQL Server فقط، وإلا فسيتعين تثبيت هذا العميل الأصلي إما على الخادم أو على جميع الأجهزة العميلة (في حالة استخدام نسخة الملف)، والفائدة خاصة بالبساطة فهو لن يعطيك أي مهام.

هـ) مربعات حوار اختيار الخادم القياسي

ز) حدد الجدول والتفاصيل... فرصة رائعة - يمكنك إعادة تسميته على الفور كما تريد (والتفاصيل أيضًا)، وفي الخصائص سترى أسماء حقول مصدر البيانات

Z) الآن بعد تشغيله، افتح مصمم الاستعلام - حدد بغباء جميع السجلات من الجدول وOPA - خطأ. ما يجب القيام به؟ إذا كانت لديك واجهة مُدارة، فانظر إلى قائمة الخدمة، وإذا كانت عادية...
أنا شخصياً استخدمت هذا الكود:

Parameters = 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(Parameters);

ExternalDataSources.DAX.SetConnection();

قد لا تكون بعض القطع ضرورية، ولكنها تعمل. تحتاج إلى تشغيل الكود مرة واحدة. بعد ذلك سيكون من الطبيعي الاتصال... التصوف بالطبع - لماذا كان ذلك ضروريًا غير واضح...

2) مصادر البيانات للقراءة فقط
نعم المعجزات لا تحدث ولكن في بعض الأحيان تريدها بهذه الطريقة....

3) لا يمكن استخدامها مع مصادر البيانات الداخلية
شخصيا، هذه الحقيقة قتلتني على الفور.

كيف يمكن أن يكون هذا... ما كنا ننتظره وتخيلناه بالفعل ولعقنا شفاهنا حول كيفية قيامنا الآن بدمج بياناتنا مع 1C في طلب واحد، وطيها - تجميعها، وإدراجها في التقرير، ولكن هذا ليس هو الحال ...

لكن بالطبع هذا لا يمنع أصحاب الخبرة... ما الفكرة التي تبادرت إلى ذهنهم؟ هذا صحيح - الجداول المؤقتة:

4) لا يمكن استخدامها مع الجداول المؤقتة

لكن هذا لم يعد يبدو كصعوبات تكنولوجية، بل يشبه إلى حد كبير ما يريدون منا أن نفعله "حتى لا تبدو الحياة مثل الجنة" (IMG:).

5) لا يمكن استخدامه إلا في اتصالات ACS

بالنسبة لأولئك الذين لا يعرفون، هذا موجود في ACS في علامة التبويب "روابط مجموعة البيانات". هل تستخدمها في كثير من الأحيان؟ مريح؟ يبدو أنهم يريدون إجبارنا على استخدامها في كثير من الأحيان. يوجد فقط عمود "حالة الاتصال" و"معلمة الاتصال". لم أجد مثالاً على استخدامها في أي تكوين قياسي، وبطريقة ما، كل شيء غير شفاف في الوثائق وفي عمل خروستاليفا أيضًا. هل يمكن لأحد أن يشرح لي كيف تعمل "حالة الاتصال". إذا كتبت سمات المصدر = سمات المتلقي هناك، فإنه لا يعمل. بالطبع، يمكن كتابة الشرط في حقل "التعبير" - وهذا يكفي في معظم الحالات... ولكن بطريقة ما لا يتم حل الأمر بسهولة.

في المجمل، تم حل هذه المشكلة سابقًا في مكان ما على النحو التالي:

الدالة تهيئة مصدر البيانات ()

DateStart =SettingsComposer.Settings.DataParameters.Items.Value;
DataCon =SettingsBuilder.Settings.DataParameters.Items.Value;
إذا كان DataCon > "20100101" إذن
DataCon = "20100101";
إنهاء إذا؛

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

ArrayNumber = New Array();
ArrayNumber.Add(Type("الرقم"));

ArrayString = New Array();
ArrayString.Add(Type("سلسلة"));

ArrayData = New Array();
ArrayDate.Add(Type("التاريخ"));

// سنقوم بملء التكلفة المحاسبية في الجدول
TypeNumber = New descriptionTypes(ArrayNumber, CN);
TypeString = New TypeDescription(ArrayString, KS);
TypeDate = New TypeDescription(ArrayDate);

// جدول تحميل البيانات من SQL
TZ = New ValueTable();
TK.Columns.Add("NomenclatureCode", TypeString);
TK.Columns.Add("Qnty", TypeNumber);
TK.Columns.Add("الفترة"، DateType);

TK.Indices.Add("الفترة");

// الاتصال بـ SQL
سلسلة الاتصال = "الموفر=SQLOLEDB.1؛معلومات الأمان المستمرة=صحيح؛معرف المستخدم=sa؛Pwd=؛مصدر البيانات=؛إجراء الاستخدام للتحضير=1؛الترجمة التلقائية=صحيح؛حجم الحزمة=4096؛معرف محطة العمل=؛الاستخدام تشفير البيانات = خطأ؛ وضع علامة مع ترتيب الأعمدة عندما يكون ذلك ممكنًا = خطأ؛ الكتالوج الأولي = التقارير"؛
Connection = New COMObject("ADODB.Connection");
Command = New COMObject("ADODB.Command");
RecordSet = New COMObject("ADODB.RecordSet");
التاريخ = "";
محاولة
Connection.Open(AbbrLP(ConnectionString));
Command.ActiveConnection = Connection;
Command.CommandText = "اختر * من PH حيث الفترة >= "" + String(Format(DateStart, "DF=yyyyMMdd")) + "" والفترة RecordSet = Command.Execute();
RecordSet.MoveFirst();
استثناء
إعادة المواصفات الفنية؛
this.EndAttempt;

بينما RecordSet.EOF = حلقة خاطئة
Line = 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();
EndCycle;

طلب = طلب جديد ()؛
VrTable = New TemporaryTableManager();
Query.SetParameter("vrDataTable", TK);
Query.SetParameter("تاريخ البدء"، تاريخ البدء)؛
Request.SetParameter("DataCon"، DateCon);
استعلام.نص = "حدد
| vrDataTable.NomenclatureCode،
| vrDataTable.Qnty،
| vrDataTable.Period
|مكان DataTable
|من
| &vDataTable AS vrDataTable
|أين
| vrDataTable.Period >= &DateStart
| و vrDataTable.Period Query.Execute();
TZ = غير محدد؛

طلب = طلب جديد؛
Query.TemporaryTableManager = VrTable;
Query.Text = "هذا استعلام يتضمن جدول متغير"؛

النتيجة = Query.Run();
نتيجة العودة؛

وظيفة النهاية

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

في الواقع، لا يوجد الكثير من أسطر التعليمات البرمجية وهي قياسية تمامًا... في هذه الحالة، يمكنك استخدام الوظيفة الكاملة لمصمم الاستعلام، وإعطاء وظيفة DATA COMPOSITION فقط إلى ACS

لكنها بالتأكيد لا تبدو جميلة... وفي كل مرة تحتاج إلى كتابة تعليمات برمجية لتحميل القيم في جدول والتحقق مما إذا كنت قد ارتكبت خطأً في اسم التفاصيل... وما الذي قدمناه فيه 1C يبدو فاترا إلى حد ما. لم أقرر بعد أيهما أكثر ملاءمة للاستخدام. أنت تقرر، وتكتب عن قراراتك وما الذي دفعك إليها.

[يجب عليك التسجيل لمشاهدة الرابط]