كانت هناك فكرة هنا لتهنئة كبير المحاسبين لدينا بطريقة أصلية أو أقل ، على سبيل المثال ، بمساعدة برنامج 1C المفضل لديها؟ لكن كيف؟
بعد تفكير ، أصبحت الفكرة تستخدم لتهاني الخلفية ، صورة الخلفية في منطقة العميل الخاصة بالأشكال التقليدية للتكوينات في 1C77-1C82 أو في نافذة خارجية للنماذج المدارة 1C82 وفي جميع الحالات لل 1 C83. على ذلك ، عرض الرسالة المطلوبة وإعطاء روابط إلى الفيديو التهنئة ، كما هو مبين في الشكل.

الجزء الأول - النتيجة
من الواضح أن هذه الفكرة ليست جديدة. لذلك ، في عام 2011 ، تم اقتراح
حل مماثل على أساس
FormEx.dll ، بواسطة Aleksey Fedorov المعروف أيضًا باسم ALF . وطرحت أسئلة حول
كيفية تحقيق ذلك مرة أخرى في عام 2008.
في وقت واحد ، استخدمنا هذا المكون أيضًا لتحميل صورة الخلفية في 1C77. ولكن تنزيل ملفات bmp الكبيرة (ولم يكن من الممكن استخدام ملفات أخرى) كان بطيئًا (وبسبب هذا ، تم استخدام الصور الصغيرة المزودة بالبلاط) ، لذلك كانت هناك رغبة في كتابة مكون خارجي خاص بك (VK) ، والذي سيؤدي فقط إلى تنزيل الصور الضرورية وليس أكثر ، إلا إذا ماذا يكون بعض اختبار الأرض للتجارب.
تمت كتابة هذا المكون (أيضًا ، لملفات bmp فقط ، باستخدام التبليط إذا لزم الأمر). تم استخدام الدالة
WinAPI LoadImage () هناك. لم يتعارض هذا دلل مع FormEx.dll ، كان بسيط وسريع بما فيه الكفاية وخدم لفترة طويلة.
كل هذا كان رائعًا ، ولكن حان الوقت لتوسيع قدراتها ، وهنا كانت هناك حاجة إلى نهج مختلف.
في هذه المقالة ، لا نعالج مشكلات إنشاء ملفات الوسائط المتعددة. هذا ليس تخصصنا. نحن نحصر أنفسنا فقط في بعض الفروق الدقيقة في برمجة المكونات الخارجية لـ 1C.
1C77
نظرًا لأن إصدارات النظام الأساسي 1C يمكن أن تكون مختلفة ، يمكن أن يكون هناك العديد من الحلول. في حالتنا ، كانت هذه التكوينات على 1C77 (الشكل 1).

التين. 1. تهنئة صورة في تكوين الاختبار على 1C77.
يتم الحصول على الفيديو هنا ، رغم أنه خاص به ، ولكن فكرة إنشائه من
Anna Shiyanova ، تحت الاسم المستعار "حالة خاصة" . هذه الفتاة لديها موهبة ، ويمكن تقليدها ، لكن لا يمكن تكرار الأسلوب تمامًا. في هذه الحالة ، أردت فقط على الأقل بعض عناصر الإبداع.
إذا كان أحد الزملاء قد سئم بالفعل من النظر في تهنئة الآخرين ، فبإمكانهم زيادة تحميل الصورة بـ "
Alt + I " (الشكل 2-3).

التين. 2. تحديد صورة خلفية مختلفة في قائمة "File / Select Background" أو عن طريق "Alt + I".
وفي الوقت نفسه ، انظر المعلومات حول الوحدة المستخدمة من قبل "
Alt + L " (الشكل 3).

التين. 3. صورة خلفية محمّلة إلى جانب معلومات حول البرنامج ("Help / About the LionExt32.dll module" أو "Alt + L").
1C82 الأشكال التقليدية
بطبيعة الحال ، يتم توجيه الأغلبية الآن نحو G8 (1C8x). ومع ذلك ، يكون العمل مع صورة الخلفية في 1C ممكنًا فقط على النماذج العادية في الإصدار 8.2 وأقل ، وإذا لم تستخدم أي معالجة تبدأ في وضع "سطح المكتب" ، والذي سيتداخل ببساطة مع خلفياتنا (الشكل 4).

التين. 4. تهنئة صورة في تكوين الاختبار على النماذج المعتادة 1C82.
لاحظ أن الروابط إلى الشكل. 4 لا تشير إلى الفيديو الخاص بنا. يتم عرضها فقط للاختبار.
في النماذج العادية ، لم يعد 1C82 يوفر الطريقة القياسية للوصول إلى القائمة ، لأنه ليس نظاميًا ، كما هو الحال في "السبعة" ، ولكن "الخاصة" (على الرغم من إمكانية إنشاء النظام ، ولكن لماذا نحتاج إلى قائمتين أساسيتين؟). ومع ذلك ، يمكن استخدام مفاتيح الاختصار. على نفس المنوال ، "Alt + I" ، في مكوننا ، نستدعي مربع حوار ، كما في الشكل 2 ، ونحمل خلفية أخرى (الشكل 5).

التين. 5. صورة خلفية محمّلة بأشكال 1C82 "كثيفة".
وبالمثل ، يمكنك الحصول على معلومات حول الوحدة عن طريق الضغط على مفتاح "Alt + L" ، كما في الشكل. 3.
1C82 النماذج المدارة
بالنسبة للنماذج التي تتم إدارتها في 1C82 ، لا يزال بإمكانك العثور على النافذة التي نحتاجها في مستوى التعشيش السابع ، مثل "
V8FormElement " والرسم عليها ، ولكنها بطريقة ما ليست مثيرة للاهتمام.
بالنسبة لنا ، من خلال هذه الاعتبارات ، يكون من الأسهل إنشاء نافذة خارجية برسالة تهنئة (الشكل 6) بدلاً من التعامل مع كل حالة على حدة. يمكن إغلاق النافذة نفسها أو تصغيرها بواسطة "
Esc " أو "
Ctrl + F4 " أو "
Alt + F4 " أو بالنقر على "
التقاطع ".

التين. 6. تهنئة صورة في تكوين اختبار على النماذج المدارة 1C82.
علاوة على ذلك ، يمكن توسيع النافذة المصغرة (الشكل 7) مرة أخرى.

التين. 7. صورة مصغرة للإطار الخارجي على النماذج المدارة 1C82.
يمكن تغيير أبعاد النافذة الخارجية وموضعها النسبي ، كل شيء هنا كالمعتاد (انظر الصور الموسعة للنوافذ الخارجية في الشكل 6 والشكل 10). لاحظ أن مفاتيح الاختصار تعمل فقط إذا كانت النافذة الخارجية نشطة.
1C83 الأشكال التقليدية
في 1C83 لم تعد هناك نوافذ فرعية على الإطلاق ، والتي يمكن أن تكون بمثابة معيار للإصدار 1C في دلل لدينا. علاوة على ذلك ، فإن النماذج "السميكة" هي إطار إطار (الشكل 8) ، والنماذج المدارة هي بدون إطار (الشكل 9). أي أنه يمكن إعادة رسم كل شيء ليس إطارًا. يمكن أيضًا إعادة رسم الإطار ، ولكن فقط كعنصر نظام.
أنشأنا هنا نافذة اختبار باستخدام مكتبة ديناميكية وخضعنا لإطار 1C الرئيسي. يظهر الاختلاف في السلوك في الأرقام.
1C83 النماذج المدارة
في حالة 1C83 ، كما هو الحال في النماذج المدارة 1C82 ، سنوجه تهانينا ليس على الخلفية ، ولكن في نافذة منفصلة ، يظهر النموذج الأولي لها في الشكل. 8-9. نتيجة لذلك ، فإن المكون المطلوب (
LionExt32.dll أو
LionExt64.dll ) سيعطي النتيجة التالية (الشكل 10-12).

التين. 10. صورة الخلفية في النافذة الخارجية للنماذج التقليدية 1C83.

التين. 11. صورة الخلفية في الإطار الخارجي للنماذج المدارة 1C83 ، الإصدار 14 ، إصدار 64 بت.

التين. 12. صورة الخلفية في الإطار الخارجي للنماذج المدارة 1C83 ، الإصدار 15 ، إصدار 64 بت.
النتائج الأولية
تم استخدام هذا المكون بالفعل في الممارسة (الشكل 1) ، وكان كبير المحاسبين راضيا ، كل شيء سار بشكل رائع. على طول الطريق ، اتضح أن المستخدمين يفضلون اختيار صور الخلفية الخاصة بهم ، في هذه الحالة ، للعمل على "السبعة". بالنسبة لمجموعة الثماني ، يتم تكييف مكوننا مع احتياطي للمستقبل ، في حين ينبغي اعتباره نسخة تجريبية.
كان الاهتمام هنا أن
هذا المكون لا يتطلب الامتثال لتكنولوجيا إنشاء مكونات خارجية من 1C . ربما ستظهر أفكار إضافية لتوسيع قدراتها. على سبيل المثال ، بالنسبة للتكوينات المدعومة بالكامل ، لا تريد إجراء تغييرات على الكود 1C دون الحاجة الخاصة. في هذه الحالة ، يمكن للمرء أن يقدم خيار التحميل الخارجي دلل التعسفي في مساحة العنوان 1C. ولكن هذا هو موضوع مقال آخر.
من الابتكارات التقنية ، تم استخدام قفل لتفريغ مكوننا مع منصة 1C (لأنه لا يتوافق مع تنسيق VK). بالإضافة إلى ذلك ، أتاحت حيلة أخرى تعيين
قائمة محلية للإطار الفرعي ، نظرًا لأن نظام تشغيل Windows يمنع إنشاء مثل هذه القائمة للإطارات الثانوية. لذلك ، لن ترى القوائم المحلية في نفس
واجهة MDI (واجهة المستندات المتعددة) في أي مكان. يتم استبداله بلوحات الأوامر وأشرطة الأدوات وقائمة السياق. لا تزال هناك لحظة لتحديث النوافذ. في بعض الأحيان يحدث أن لا يعمل
UpdateWindow () أو
InvalidateRect () بشكل صحيح. لكن وظيفتين في هذه الحالة ناجحتان:
ShowWindow(hWnd, SW_HIDE); ShowWindow(hWnd, SW_SHOW);
تجدر الإشارة أيضًا إلى أن مكوننا قد يتعارض مع الآخرين ، على سبيل المثال ، مع FormEx.dll لـ 1C77. في هذه الحالة ، يجب أن يتم تحميله آخر مرة.
بالمناسبة ، يلاحظ أنه إذا قمت بإنشاء تكوين في الإصدار 1C-8.3.14 وأعلى ، فلن يتم تحميل المكون بأي طريقة منتظمة. ولكن إذا تم إنشاء قاعدة البيانات في إصدار سابق من 1C ، وفتح في أحدث الإصدارات ، فلا توجد مشاكل في تحميل VK لدينا. يشير هذا مرة أخرى إلى الحاجة إلى إنشاء أداة تحميل خارجية.
يستخدم هذا المشروع النظام الفرعي
WinAPI GDI + . باستخدامه ، يمكنك عرض صور بتنسيقات مختلفة:
bmp ، jpg ، gif ، png ، tif وغيرها. في نفس الترتيب ، يحاول المكون تحميل أول ملف
رئيسي متاح
. * ملف من دليل
Pics المحلي في التكوين الحالي. إذا لم يتم العثور على أي من هذه الملفات ، فسيتم استخدام صورة خلفية بسيطة من موارد المكون. في التين. يُظهر الشكل 13 صورة الخلفية هذه للأشكال المعتادة من 64 بت 1C83 ، الإصدار 15. من أجل التغيير ، تم توسيع النافذة الخارجية للعامية
وإضافة صورة أخرى من ملف
Main1.png ، الذي تم
تجانبه ، إلى خلفيته.

التين. 13. صورة الخلفية الافتراضية للأشكال المعتادة من 64 بت 1C83 ، الإصدار 15. بالإضافة إلى ذلك ، تمت إضافة صورة أخرى من ملف Main1.png ، "التبليط".
لا يوجد فرق في تشغيل المكون في أوضاع البت المختلفة.
يمكن أيضًا ملاحظة أن الفئات الفرعية المكونة لدينا هي النافذة الرئيسية 1C وعميل MDI الخاص بها ، إن وجد. هذا ، على ما يبدو ، بمثابة مصدر تعارض مع FormEx.dll عند تحميله الأخير (في 1C77).
الجزء الثاني - التقنية
يمكن العثور على المشروع نفسه على الروابط التالية:
يمكن تكييف مشروع
C ++ بسهولة مع الإصدار
10 إذا تم استبدال السلسلة "
v120 " بـ "
v100 " في ملفات التكوين
واستبدال "
ToolsVersion =" 12.0 "
بـ "
ToolsVersion = "4.0 ".
رمز الإصدارين
32 بت و
64 بت من
1C هو نفسه ويمكن تجميعه في نفس الوقت.
يتم تحديد الإصدار 1C77 في المكون الخارجي بواسطة
مقبض وظيفة GetMenu
() غير صفري والإصدار 1C83 ، بسبب عدم وجود إطارات تابعة في الإطار الرئيسي ، يتم تحديد المؤشر بواسطة الدالة
GetForegroundWindow () .
حول تكنولوجيا إنشاء مكونات خارجية ل 1 C
على أقراص ITS التابعة لشركة 1C ، وعلى الإنترنت ، يمكن للمرء بسهولة العثور على معلومات حول إنشاء VC والقوالب المقابلة بلغات البرمجة المختلفة. ومع ذلك ، في أوقات 1C77 ، هذه الأنماط راضية "ليس الجميع فقط".
إذا نظرت إلى بعض المكونات المستخدمة على نطاق واسع ، خاصة بالنسبة لـ 1C77 ، فسترى أن مؤلفيها يستخدمون غالبًا طرق برمجة خاصة لتوسيع قدرات تصميماتهم.
ربما كان أحد المكونات الخارجية الأولى مثل
"RAINBOW ADDIN 2000 for 1C: Enterprise 7.7 .
" ربما كان الأهم هنا هو تغلغل أعمق في "السبعة" أكثر من تقنية VK الرسمية المسموح بها ، على الرغم من أنها اتبعت تنسيق VK. تم تحقيق ذلك نظرًا للطرق المتلقاة ، وربما غير القياسية ، للرؤوس (* .h) من ملفات مكتبة 1C77 المستخدمة في المشروعات الأخرى المعروفة على نطاق واسع.
في الواقع ، إذا كانت وظائف 1C مثل
LoadExternalComponent () و
ConnectExternalComponent () تسمح لك بتضمين
dlls خارجية في مساحة العنوان الخاصة بك (أولاً وقبل كل شيء ، والتي تلبي تنسيق تكنولوجيا VK) ، فلماذا لا تستسلم برامج المستخدم للإغراء وتحاول الوصول إلى البرامج الأخرى المخفية من لهم ، والإجراءات وغيرها من الأشياء في النظام الأساسي الهدف؟ تم توضيح هذا النهج بنجاح بواسطة المكون
Rainbow.dll .
في وقت لاحق ، تم اعتماد آلية مماثلة من قبل مؤلفين آخرين من المكون 1C الإصدار 7.7. من الجدير بالذكر هو مكون "السبعة"
1C ++. Dll به ، كما كان ، حالة خاصة
FormEx.dll .
ولكن النهج غير التافه لتصميم المكونات الخارجية ل 1 C77 لم تنته عند هذا الحد. على ما يبدو ، كان ينبغي لأحدهم أن يقول: "لماذا نحتاج إلى حداد؟ لا نحتاج إلى حداد! " هنا ، بعبارة "الحداد" نعني تكنولوجيا COM من MicroSoft ، والتي ، تبعًا لذلك ، تبعتها تقنية VK لـ "السبعة". لا ، حسنًا ، لماذا نحتاج إلى تسجيل إذا قمنا بتنزيل إصدار VK الخاص بنا مباشرةً؟ قد يكون هذا منطقيًا لمتصفحات الويب التي تعمل مع الإنترنت ، ولكن من أجل التشغيل المحلي ، يكون استخدام السجل ضروريًا بشكل واضح. على الأقل ، هذا لا ينبغي أن يكون شرطا مسبقا. علاوة على ذلك ، لتحرير السجل ، فإنك تحتاج إلى حقوق إدارية.
لاحظ أن 1C كان مولعًا جدًا بهذه التقنية (على الأقل حتى نقل 1C إلى Linux). تعاملنا معها رائع جدا. COM مناسب لاستخدام مكون ActiveX وهذا أمر طبيعي ، حيث تم تطوير الأخير في الأصل للإنترنت.
ومع ذلك ، في أحدث الإصدارات ، أضافت 1C القدرة على استخدام تقنية
Native API ، مما يلغي الحاجة إلى التسجيل. من حيث المبدأ ، هذا هو ما نحتاج إليه ، فيما عدا أن هذه التكنولوجيا غير قابلة للتطبيق في "السبعة" ، وأنها ، بالنسبة للبعض ، لا تزال صالحة.
لكن في بعض الأحيان تنشأ مهام بسيطة نسبيًا عندما لا ترغب في استخدام مجموعة من التعليمات البرمجية لـ boilerplate لـ VK ومن المستحسن العمل مع 1C من جانب المكون الخارجي فقط. كما ، على سبيل المثال ، في حالتنا ، عرض صورة تهنئة في منطقة العميل أو ، إذا لزم الأمر ، في نافذة منفصلة ، التكوين 1C.
بمعنى آخر ، إذا لم نتبادل البيانات مباشرةً بين 1C و VK ، فسنكون سعداء للغاية بإصدار أبسط وأكثر عالمية للمكون الخارجي لـ 1C. البساطة هنا سوف تتحقق بسبب عدم وجود كود النمطي.
تقنية بديلة لإنشاء VK ل 1 C
نظرًا لأن VK for 1C هي حالة خاصة
لخادم COM (قبل تقنية
Native API ) ، كان هناك مطورو VK قالوا: "COM - لا!". النشاط في هذا الاتجاه من
الكسندر Orefkov ملحوظ بشكل خاص. لا تستخدم مكوناته "
1sqlite.dll " و "
TurboMD.dll " ، وربما مكونات أخرى ، COM من كلمة "بالكامل". تطوير مكون
Yoksel ("
SpreadSheet.dll ") أيضًا على طول هذا المسار.
لكن كيف يمكن للودر VK من 1C77 تحميل هذه المكونات؟ بعد كل شيء ، حتى أنهم لا يحاولون تقليد نوع من COM هناك. في الواقع ، إذا حاولنا أن ننزلق بصراحة بعض dll القياسي الذي تم إنشاؤه بواسطة ، على سبيل المثال ، معالج
MS VC ++ في الدالة
LoadExternalComponent () ،
فسنحصل على المشكله.
في "السبعة" ، نحصل على رسالة مثل:
حدث خطأ أثناء إنشاء كائن من المكون .dll <Full Path \ Component Name> (CLSID مفقود)
في عميل "سميكة" 32 بت من رسالة "ثمانية" ستكون مماثلة. سوف نفس دلل يسبب أداء اليمين الدستورية مماثلة (الشكل 15):
خطأ في استدعاء طريقة السياق (تحميل المكون الخارجي): خطأ في تحميل المكون الخارجي
ومع ذلك ، كيف تحل المكتبات المذكورة هذه المشكلة؟ عند دراسة نصوص برامج Orefkov و Yoksel ، نخلص في النهاية إلى أن "
الخطوط السحرية " التالية في ملف الموارد (* .rc أو * .rc2) هي "اللوم":
STRINGTABLE DISCARDABLE BEGIN 100 "\0sd" // 1sqlite.dll 100 "\0tmd" // TurboMD.dll 100 "\0f" // SpreadSheet.dll END
أي بدون فشل ، يوجد في موارد البرنامج سطر مع المعرف
100 وبعض قيمة السلسلة ، الحرف الأول هو صفر. يمكنك تجربة أشكال مختلفة من هذه السلاسل ، لكن السلسلة "
\ 0L " جيدة معي. وبالتالي ، نقوم بإنشاء ملف مورد وكتابة خطوط مثل هذا:
STRINGTABLE DISCARDABLE BEGIN 100 "\0L" // 1 ! END
نحن نربط هذا الملف بأبسط مشروع dll الذي تم إنشاؤه بواسطة معالج MS C ++ ، أضف الكود:
BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved) { switch(dwReason) { case DLL_PROCESS_ATTACH: MessageBox(NULL, ", DllMain()!", "", MB_OK); break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: break; }
ومراقبة (الشكل 14).

التين. 14. استخدام أبسط "VK" في 1C82.
بدون "خطوط سحرية" في ملف الموارد ، يتم إلغاء تحميل dll الخاص بنا ، فور ظهور MessageBox ، لعنة من 1C (الشكل 15).

التين. 15. خطأ في تحميل دلل العادية في 1C82.
أي أن هذه الخطوط لها تأثير سحري على محمل المكونات 1C الخارجية.
الأول ، على ما يبدو ، تم وصف "الخطوط السحرية" في مقاله القديم من قبل
أليكسي فيدوروف (ALF) ، ولكن الارتباط به لم يعد متاحًا ، ولا يرى المؤلف النقطة في إعادة نشرها. علاوة على ذلك ،
استخدمهم ألكسندر أوريفكوف بشكل مكثف ، وعلى ما يبدو ، من تقديمه ، كان المؤلف
يوكسل . لذلك ، سنتحدث عن
الخطوط "السحرية" لفيدوروف-أوريفكوف . معناها هو منع تفريغ ملفات dll غير القياسية (من وجهة نظر 1C) بواسطة الدالة
LoadExternalComponent () . علاوة على ذلك ، كما نرى ، تعمل هذه التقنية ليس فقط في 1C77 ، ولكن أيضًا في أشكال 1C82 "الكثيفة".
ومع ذلك ، في النماذج المدارة 1C82 وفي جميع إصدارات 1C83 ، تم بالفعل كسر هذه الميزة بالكامل (ظهر محمل آخر أيضًا -
ConnectExternalComponent () ).
وبالتالي ، في الإصدارات الحديثة من 1C ، تحتاج إلى البحث عن بدائل أخرى بسيطة للخطوط "السحرية" ل Fedorov-Orefkov.
وهذا البديل سهل العرض. النقطة بسيطة. يقوم المُحمل 1C بإلغاء تحميل المكون "خاطئ" إذا ألقى استثناءً عند محاولة الوصول إليه باستخدام البروتوكول المحدد ، على سبيل المثال ، عند طلب إصدار المكون. بطبيعة الحال ، ليس لدينا أي شيء من هذا النوع ، والذي يعد بمثابة الأساس لتفريغ dll غير قياسي. ولكن يمكن تجاهل متطلبات 1C لنظام التشغيل لتفريغ هذه المكتبة الحيوية من قبل النظام إذا كان هذا VK لا يزال يستخدم في مكان ما. بدلاً من الحذف نفسه ، يقوم النظام ببساطة بتقليل عداد استخدام الوحدة النمطية المطلوبة. وحذف جسديا في وقت سابق من هذا العداد هو إعادة تعيين. لذلك ، مهمتنا هي زيادة هذه العداد بشكل مصطنع.
للقيام بذلك ، يمكنك الاتصال بوظيفة dll الخاصة بنا WinAPI
LoadLibrary () مرة أخرى في قسم
DLL_THREAD_ATTACH BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved) { switch(dwReason) { case DLL_PROCESS_ATTACH: { WCHAR szDllName[_MAX_PATH] = {0};
هذا كل شئ! تم حل المشكلة. سيؤدي استدعاء نفس المكتبة الديناميكية إلى زيادة عداد الاستخدام الخاص به واحدًا ، وسيقلل التحميل (مع وصول أولي إلى قسم
DLL_THREAD_DETACH ) بمقدار واحد. المجموع لدينا
2 - 1 = 1> 0 ، وبالتالي ، فإن نظام التشغيل لن تفريغ دلل لدينا. علاوة على ذلك ، المهم ، لن يتم إجراء تهيئة لقسم
DLL_PROCESS_ATTACH .
من هذا ، بالمناسبة ، يمكن للمرء أن يرى كيف يمكن لـ 1C التعامل مع حيلة مماثلة في أحدث إصداراتها (وعلى ما يبدو ، تقوم بذلك بالفعل في التكوينات التي تم إنشاؤها في 1C-8.3.14 وما بعدها). يمكنه استخدام الدالة
LoadLibraryEx () مع معلمة تمنع تنفيذ قسم التهيئة
DLL_PROCESS_ATTACH ، وبعد ذلك سوف تقوم على الفور بالاتصال بالوظائف المصدّرة الضرورية. وبالفعل ، إذا نظرت إلى رمز مثال VK لواجهة برمجة التطبيقات الأصلية ، يمكنك أن ترى أنه ليست هناك حاجة لاستدعاء رمز التهيئة ، لأنه يجب أن يكون فارغًا بتنسيق VK.
فيما يتعلق بأمثلة استخدام تقنية COM ، من الواضح أن تنفيذ قسم التهيئة
DLL_PROCESS_ATTACH ضروري هناك ، وبالتالي ، في الإصدارات الجديدة من 1C ، وبشكل أكثر دقة ، في التكوينات التي تم إجراؤها في 1C-8.3.13 وتحت ، فإن أداة التحميل 1C مناسبة لنا:
(, , .COM);
هنا يمكن إزالة المعلمة الأخيرة ، لأنها ضمنية بشكل افتراضي. في الوقت نفسه ، يمكن فتحها بشكل طبيعي في أي إصدار أعلى. في الإصدارات 1C83 ، لم تعد أداة تحميل التشغيل السابقة
LoadExternalComponent (عنوان المكون) مناسبة لنا (على التوالي ، "الخطوط السحرية" لـ Fedorov-Orefkov لا تعمل هناك).
في الحالة العامة ، كما سبق ذكره ، يمكن حل المشكلة باستخدام أداة تحميل خارجي. أو ، من الطبيعي جدًا ، أن نلاحظ ، إلى حد ما أو آخر ، تكنولوجيا المكونات الخارجية لـ 1C.
تجدر الإشارة أيضًا إلى أن التجارب التي أجريناها في إصدارات ملفات 1C مع أعماق بت مختلفة. لتنزيل المكون الخاص بنا ، قد تحتاج إلى تعيين خاصية "
وضع استخدام المكالمة المتزامنة " على "
استخدام " في التكوين.
يجب أيضًا أن تفهم أنك تنفذ استخدام مثل هذه التقنية على مسؤوليتك الخاصة ، أو جرب مقدمًا تكوينات الاختبار أو نسخ من العمال لتجنب المشاكل المحتملة في البرامج الرئيسية.
تحديث من 09/11/2019
اتضح أنني كنت قلقًا من دون جدوى: "في الإصدارات 1C-8.3.14 وأعلى ، لم يعد قسم التهيئة في المكون الخارجي يُنفذ من كلمة" بالكامل "."
اتضح أن رسالة الإرجاع في دالة
ConnectExternalComponent () لا تحتاج إلى معالجة. علاوة على ذلك ، بغض النظر عن نوع المكون الذي نحدده:
COM أو
Native API .
وبالتالي ، يمكنك إنشاء تكوين في جميع الإصدارات المتاحة حاليًا من 1C ، يجب أن يعمل المكون لدينا بشكل جيد في كل مكان ، وسيكون إنشاء محمل إقلاع خارجي مناسبًا ، ما لم يكن الأمر كذلك عندما لا ترغب في تغيير التكوين ، وهو مدعوم بالكامل.
في هذا الصدد ، تم تغيير الكود في تكوينات الاختبار لـ 1C82 و 1C83 قليلاً ، على الرغم من أن الاختلافات بينهما لم تعد أساسية.
في نفس الوقت ، ملاحظتنا بأن شركة 1C يمكنها بسهولة حظر تنفيذ رمز التهيئة في أي VK ، على الأقل للمكونات الخارجية مثل
واجهة برمجة تطبيقات Native ، من الواضح أنها تظل صالحة ، نظرًا لأن هذا النموذج ليس ضروريًا. بالنسبة لـ VK type
COM ، هناك حاجة كبيرة حتى الآن ، لكن ما الذي يمنعها من التخلص منها؟ في الوقت نفسه ، دعونا نرى ما إذا كانوا سيأخذون هذه المعلومات في الاعتبار؟