ويرجع ذلك إلى بعض خصائص وظيفة السياق العام ConnectExternalComponent().

غالبًا ما يواجه المبرمجون مشكلات في توصيل المكونات الخارجية (على سبيل المثال، برامج تشغيل المعدات التجارية) عندما يعمل المستخدمون مع 1C، ويتصلون بالخادم من خلال محطة طرفية.

في هذه الحالة، يرى المستخدمون، على سبيل المثال، هذه الصورة:

أثناء العمل من أجهزة الكمبيوتر المحلية، لا توجد مشاكل في توصيل المكونات الخارجية.

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

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

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

تقدم المنشورات حول موضوع توصيل المكونات الخارجية في الجهاز مجموعة متنوعة من الطرق لحل هذه المشكلة.

على سبيل المثال، هذه:

1. إطلاق 1C لأول مرة بموجب الحقوق الإدارية.

هذا الخيار لا يعمل دائما. سأشرح السبب أدناه.

2. امنح مستخدمي المحطة العاديين الإذن بالكتابة إلى فرع تسجيل النظام HKEY_CLASSES_ROOT.

لا ينبغي للمستخدمين المتقدمين بما فيه الكفاية عدم القيام بذلك، وإلا فقد تكون هناك مشاكل.

3. باستخدام الأدوات الذكية المختلفة، قم بتسجيل VK نيابة عن مستخدم يتمتع بالحقوق الكاملة.

انها ليست جيدة سواء.

إذن ما هي أفضل طريقة للخروج من هذا الوضع؟

أنا أقدم الحل لهذه المشكلة. في رأيي - بسيطة وجميلة.

أثناء البحث عن هذه المشكلة، سألت نفسي السؤال: لماذا تحاول 1C تسجيل VK باستخدام مسار جديد؟ بعد كل شيء، هي مسجلة بالفعل في النظام.

اتضح أنه في تكوينات 1C النموذجية (على سبيل المثال، "إدارة التجارة") يتم استخدام بناء الجملة التالي لطريقة السياق العام Connect External Component():

ConnectExternalComponent("Directory.ConnectedEquipment.Layout.DriverATOLBarcodeScanner", "ATOLScanner");

كما ترون، فإن برنامج التشغيل VC متصل من تخطيط "ATOLBarcode Scanner Driver" في دليل "المعدات المتصلة".

ماذا يحدث بعد ذلك؟

يحفظ 1C المكون في المجلد المؤقت للمستخدم، على سبيل المثال "C:\Documents and Settings\User\Local Settings\Temp\1032\v8_4_12.tmp"

ويحاول تسجيله في فرع التسجيل HKEY_CLASSES_ROOTبالضبط على هذا الطريق.

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

الآن دعونا نتحدث عن كيفية الخروج من هذا الوضع.

يحتوي أسلوب السياق العام ConnectExternalComponent() على العديد من خيارات بناء الجملة. هذا هو ما سوف نستخدمه.

لذلك، خطوة بخطوة:

1. قم بتسجيل المكون الخارجي باستخدام الأداة المساعدة regsvr32.exe على الخادم الطرفي في المجلد C:\WINDOWS\SYSTEM32 لنظام تشغيل 32 بت أو في المجلد C:\WINDOWS\SYSWOW64 لنظام تشغيل 64 بت.

2. استخدم أحد خياري بناء الجملة الإضافيين للأسلوب ConnectExternalComponent():

الخيار 1:

ConnectExternalComponent("C:\WINDOWS\SysWOW64\Scaner1C.dll"، "ATOLScanner"، ExternalComponentType.COM)؛

DriverObject = New("AddIn.ATOLScanner.Scaner45");

الخيار 2:

ProgID = "AddIn.Scaner45";

ConnectExternalComponent(ProgID);

DriverObject = New(ProgID);

في رأيي، الخيار رقم 2 هو الأفضل.

في الوقت نفسه، لا يحاول 1C إعادة تسجيل VK باستخدام مسار جديد في التسجيل وبالتالي يتم حل جميع المشكلات.

حسنا، هذا كل شيء. حظا سعيدا في عملك!

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

سؤال: تركيب مكون خارجي


من فضلك قل لي كيفية تثبيت مكون خارجي. عند تنفيذ التعليمات البرمجية التالية، يتم طرح خطأ. في التخطيط، ابحث عن NameDecl.dll

محاولة SetExternalComponent("generalLayout.Layout");
استثناء EndTry؛

خطأ: فشل تثبيت المكون الخارجي! ()
إجابة:
ConnectExternalComponent(" GeneralLayout.Layout"، "NameDecl"، ExternalComponentType.Native) يُرجع FALSE.

جديد ("AddIn.NameDecl.CNameDecl"، غير محدد) = (()): اكتب غير محدد (AddIn.NameDecl.NameDecl)


السؤال: توصيل مكون خارجي في 1s 8.3.6 وWin8
AfterConnecting = New Alert description("AfterConnectingVK", ThisForm);
StartInstallingExternalComponents("C:\Controller\vk_rs232.dll");
StartConnectingExternalComponents(AfterConnecting,"C:\Controller\vk_rs232.dll"،"DLL_Scales");

وأحصل على الخطأ ذلك
"فشل تثبيت مكون خارجي! قد يكون أحد مكونات تطبيق العميل الذي تستخدمه مفقودًا!".
والآن لا أفهم:
1. ربما لم يتم تسجيل المكون في التسجيل - كيف يمكنني التحقق من ذلك هناك؟
2. ربما لا تعمل "النسخة" الخاصة به ضمن نظام التشغيل Win8، على الرغم من أنني أملكه 32 بت.

خطأ: فشل تثبيت المكون الخارجي! 3. ربما يكون 1C نفسه جديدًا جدًا، أي. وبناء على ذلك، فإنه لا يمكن أن تعمل مع هذا دلل؟
4. حسنًا، هذا أمر تافه - أنا أكتب شيئًا خاطئًا.
وكل هذا قادني إلى المشكلة التالية. تم تثبيت VneshComp، والآن تحتاج إلى توصيله. وهنا كلا الخيارين

ConnectExternalComponent("C:\Controller\vk_rs232.dll"، "Libra")

ConnectExternalComponent("generalLayout.Layout"، "Libra")


يعطون خطأ!!!
السؤال: مكون خارجي.dll
يوم جيد للجميع.
مثل هذا السؤال.
مكون dll يعمل بشكل رائع في 1C 7.7
1s 8.1 لا يريد التمهيد على الإطلاق ...
لقد حاولت لصقه في C:\Program Files\1cv81\bin\cache1c.dll
حاولت التسجيل باستخدام regsvr32 "C:\Program Files\1cv81\bin\cache1c.dll"

يسجل دون مشاكل.
عندما أريد الوصول إليه تظهر لي رسالة خطأ: خطأ في تحميل المكون الخارجي! Cache1c.dllالإجراء ButtonExecutePress(Button) محاولة تحميل المكون الخارجي( "C:\ملفات البرنامج\1cv81\bin\cache1c.dll"); تقرير الاستثناء(

خطأ: فشل تثبيت المكون الخارجي!"خطأ في تحميل المكون الخارجي!"
+ "cache1c.dll" ); this.EndAttempt; محاولة // الحصول على الكائن المكون.
// م = جديد ("cache1c.GTMcmd" ); m = New COMObject("cache1c.GTMcmd" ); تقرير الاستثناء () ؛ this.EndAttempt; نهاية الإجراءالأمر تافه لدرجة الاستحالة..
تحتاج إلى التوقف مؤقتًا بين المكالمات (مللي ثانية)...

الإجراء ButtonExecutePress(Button) محاولة // الحصول على كائن مكون.


m = New COMObject("cache1c.GTMcmd" ); تقرير الاستثناء(

"فشل في إنشاء كائن مكون خارجي"

); this.EndAttempt;
يوجد ملف تعريف داخل مشروع NativeApi. بمساعدتها أقوم بإنشاء مكتبة .so على Ununtu.
ولكن عندما يتعطل "توصيل المكون الخارجي" 1C.
وبالمثل، إذا قمت بالبناء باستخدام "build.sh" (في جذر المشروع).

في ملف makefile نفسه أقوم بتغيير العلامة من m32 إلى m64، لأن 1C ونظام x64 نفسه. (مع المعلمة m32 لا يتصل على أي حال)
فيما يلي مثال للاتصال بـ VK من 1C 8.3:
تم الاتصال = ConnectExternalComponent("/home/alexeyubuntux64-20 gb/Documents/VNCOMP83/example/NativeAPI/AddInNative.so"، "AddInNative"، ExternalComponentType.Native)؛
هناك مقال فقط حول هذا الموضوع.

ولكن، بقدر ما أرى، تم بالفعل أخذ كل هذه النقاط في الاعتبار وتصحيحها في مثال VNCOMPS.

لكن الأمر يتعلق في الأساس بمعلمات التجميع. يتصل المكون الخارجي 32 بت ميغابايت بـ 1c 32 بت بشكل طبيعي، لكنني قمت بنشره على Ubuntu x64 1c Enterprise83 8.3.5-1486 amd64. وأريد التواصل معها على VK.
هل لدى أي شخص أي أفكار حول كيفية حل هذه المشكلة؟)

خطأ: فشل تثبيت المكون الخارجي!يجب أن يعمل مثال VNCOMPS، ولكن يجب تعديل معلمات البناء، أو أن النظام الأساسي نفسه الذي أقوم بالاختبار عليه غير صحيح.

وأتساءل هل من الممكن كتابة مكون خارجي في جافا؟


سؤال: العمل مع مكون خارجي مع خادم 1C...

مساء الخير،
يوجد مكون خارجي مكتوب بلغة C++، مهمته الحصول على المعلومات من قاعدة بيانات خارجية وإرجاع نتيجة الاستعلام على شكل جدول قيم في 1C.
لإنشاء جدول القيم في الوقت الحالي، يتم استخدام واجهة IDispatch* pBackConnection، التي يتم تلقيها كمعلمة في وظيفة Init(). بعد ذلك، أستخدم ببساطة وظائف 1C لإنشاء جدول قيم، وتعبئته وإعادته إلى المعلمة الثانية في CallAsFunc(...).
بدأت المشاكل مع الانتقال إلى عملاء 1C الرقيقين. على جانب الخادم، لا يبدأ المكون الخارجي فعليًا. يمكنك تشغيله من جانب العميل، ولكن يبدو كل شيء مثل العكازات ويخرج عن منطق "خادم العميل" العام في 1C. على سبيل المثال، لا يفهم العميل ما هو جدول القيمة، أو مشاكل المتغيرات "العالمية"، أو الجلسات، وما إلى ذلك.
NativeAPI أكثر محدودية في هذا الصدد.
أدى الرقص مع الدف إلى حقيقة أنني تمكنت من تشغيل مكون خارجي ضمن خادم 1C، ولكن يستمر العمل حتى تتم محاولة الاتصال بـ Invocation على pBackConnection. يحاول الإصدار 64 بت من الخادم 8.2 القيام بشيء ما حتى تنتهي المهلة، أما الإصدار 32 بت (VK هو أيضًا بطبيعة الحال 32 بت) فيسقط على الفور.
وعليه تطرح أسئلة: هل هذا مؤقت أم أن منطق 1C يتلخص في إلغاء مخطط العمل هذا؟ إذا كان من المستحيل إنشاء هياكل 1C داخلية (جدول قيم) بهذه الطريقة، فهل يوجد، من حيث المبدأ، وصف لما هو جدول القيم على مستوى النظام لمحاولة إنشائه في C++، املأها، ثم أدخلها ببساطة في 1C كمعلمة إرجاع؟ أود على الأقل الحصول على الاتجاه الذي يجب أن أحفر فيه.

شكرًا لك.

خطأ: فشل تثبيت المكون الخارجي!

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

خلال جلسة واحدة كان من الممكن، ومن الممكن الآن، الإعلان عن المتغيرات في وحدة الجلسة التي ستعيش وتكون مرئية داخل الجلسة من أماكن مختلفة... في الواقع، هناك 4 منها.
- وحدة الجلسة؛
- وحدة التطبيق العادية.
- وحدة التطبيق المدارة.
- وحدة الاتصال الخارجية.

حسنًا، بالطبع، عليك أن تتذكر السياق. لا يمكن الوصول إلى سياق الخادم مباشرة من جانب العميل والعكس صحيح.

في الواقع، تنص بنية 1C على أن تبادل البيانات سيتم على النحو التالي:
- عن طريق المعلمات/إرجاع الإجراءات/الوظائف؛
- عن طريق ما يسمى بمعلمات الجلسة (لا يمكن أن تكون كائنات، ولكنها مرئية بالفعل في اللوحة).

جدول في النموذج... هل هو متصل ببعض جدول الكائنات (المعالجة، على سبيل المثال)؟ أم لا. إذا كانت الإجابة بنعم، فهو متاح على الخادم (&OnServer) ويتم تحريره هناك....

ومع ذلك، نعم، جدول القيمة غير متوفر في الأشعة فوق البنفسجية من جانب العميل. حسنًا، هذا ما قررته شركة 1C.

تعال! إنه يعمل مع Excel، ويعمل مع FSO ومجموعة من الأشياء الأخرى، لكنه لا يعمل هنا. اكتشف الخطأ وحلله....

محاولة
...
أفعالك
...
استثناء
str = ErrorDescription();
this.EndAttempt;

مع قدرات الأجهزة الحديثة، هذه ليست حجة على الإطلاق.

محض رأيك الشخصي. لا علاقة له بالواقع. ليس بأي شكل من الأشكال. أكرر مرة أخرى، 1C يعمل بشكل رائع مع COM. سواء مع داخل بروك أو خارج بروك.

يرجى تقديم الرمز الذي تستخدمه للتنزيل والاتصال بـ VK.

بالمناسبة، VK... في حالتك، هل هو COM أم Native API؟
إذا كان COM، فقم بتسجيله كـ... عبر regsvr32... فكيف يمكنك إذن "حل" مشكلة عمق البت؟

السؤال: 1C8 ومكون خارجي من النوع الأصلي


مساء الخير.
لدي تكوين BP 3.0.50.12 وأرغب في تنفيذ الوزن من شركة Vesy-Soft باستخدام UniServerAuto فيه.
قام المطورون بتجميع المكون باللغة الأصلية لنظامي التشغيل Windows 32 و64، وأرشفته باستخدام الملف الأكثر خطورة. يوجد أيضًا مثال لـ 1C لكيفية حساب الوزن. في ذلك، باستخدام تخطيط مع البيانات الثنائية، تتم الإشارة إلى هذا الأرشيف، كما أفهمها. في المثال، كل شيء على ما يرام: تم تثبيت المكون، وتوصيله، ثم يتم إنشاء الاتصال وقراءة الوزن.
ولكن بمجرد البدء في نقله إلى 1C، لا تتم قراءة الوزن. يبدو أن كل شيء مكتوب ببساطة، لكنني لا أفهم أين أشعل النار.
من لديه القليل من الوقت - ساعدني، ألقِ نظرة بعين واحدة، ربما يكون الحل على السطح، لكنني أذهب إلى مكان ما في المكان الخطأ وأقوم بالشيء الخطأ. لم أضطر مطلقًا إلى العمل مع التكنولوجيا الأصلية من قبل ...

وفي المرفق نص المعالجة الخاص بي

خطأ: فشل تثبيت المكون الخارجي!

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

أحاول إضافة التخطيط إلى المعالجة. يزداد حجمه على الفور من 10 كيلو بايت إلى 3 ميجابايت ويلاحظ تباطؤ كبير في التشغيل - وهو غير مناسب. لقد بدأت في البحث عن توصيل المكونات عبر dll. أولئك. في الأساس نفس المكان الذي بدأت فيه. ولكن هناك واحد "ولكن": عند البحث عن اسم dll في مجلد المستخدم، لاحظت أن ملف dll هذا موجود حيث (كما أفهمها) تتم إضافة ملفات dll المسجلة في 1C:
C:\المستخدمين\USER\AppData\Roaming\1C\1cv8\ExtCompT
وبناءً على ذلك، ليست هناك حاجة لاستخدام المسار الكامل لملف dll؛ يمكنك ببساطة إدخال اسمه:
ConnectExternalComponent("Add1CUniServerAuto32.dll"، "UniServerAuto"، ExternalComponentType.Native)؛

أحاول... إنه يقسم عند التسجيل، لكنه يعيد نتيجة الوزن. اتضح أن ملف dll مسجل بالفعل وهذا يعني أنك تحتاج فقط إلى توصيله. أقوم بإزالته ويعمل كل شيء.
لتلخيص ذلك:
1. في معالجة الوزن، يتضمن إجراء الفتح توصيل مكون خارجي والاتصال بكائن ما.
2. المسار إلى ملف dll لم أكتبه، لقد أشرت فقط إلى اسمه.

الآن أجلس وأفكر، متى تم تثبيت ملف dll في 1C؟ في وقت تثبيت البرنامج؟ بالكاد... في وقت بدء تكوين المطور لملف dll هذا، أين يتم تثبيته عند فتح النموذج؟ لا أعلم، لكن يبدو أنه قريب مني... ما رأيك؟
وثانيًا، في مكان جديد، عندما تكون هناك حاجة لتثبيت نفس الجهاز، ما الذي يجب فعله حتى يعمل كل شيء؟ هل يجب أن أقوم بتثبيت البرنامج بالكامل، وتشغيل تكوين البائع للتحقق من العملية ثم (نظريًا) هل يجب أن تعمل المعالجة الخاصة بي؟ هناك شيء معقد إلى حد ما... أم هل يجب أن أقوم بتثبيت المكون الخارجي مرة واحدة أثناء المعالجة بعد تثبيت البرنامج؟

أود أن أسمع أفكاركم حول هذا الموضوع...

سؤال: نقل جزء من الكود إلى مكون خارجي


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

// مثال لملء جدول القيم TK.Clear(); طلب = طلب جديد؛
Query.Text = "حدد |

خطأ: فشل تثبيت المكون الخارجي! Nomenclature.Link كيف التسميات |من | Directory.Nomenclature AS Nomenclature"; نتيجة الطلب = Request.Execute(); التحديد = نتيجة الطلب.Select(); while Selection.Next() Cycle Page = TK.Add(); ملء inPropertyValues(Page, Selection); EndCycle;

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


وأن كلمة "غير متوافق" تعني دائمًا كلمة "سيئ"؟ نعم، يبدو لي أنه إذا أطلقت على أسلوبي اسم "1C: أسوأ برمجة على محرك البرمجة النصية هذا موجود في الطبيعة (مترجم إلى لغة أدبية)!" ومن المحتمل أن يكون هناك أشخاص يريدون التحقق من هذا الوحش. ويبدو وكأنه كلاسيكي: "لم أقرأ باسترناك، لكنني أختلف معه تماما!"

سؤال: المكون الخارجي في دلفي لا أستطيع توصيل r 1C
تجميع مشروع مثال للمكون الخارجي
حصلت على DLL.

تم تسجيله في النظام (Regsvr32 testvk.dll)
الآن أنت بحاجة إلى استخدامه في 1C. للقيام بذلك، كتبت المعالجة الخارجية وفيها:
&OnClient
أمر الإجراء1(الأمر)
المسار = "C:\1\VK Template\TestVK\DLL\testvk.dll";
OB = جديد ("Addln.TestVK")؛ سؤال: المكونات الخارجية لـ 1s 7.7


مرحبًا. أنا أكتب مكونًا لـ 1c7.7 في c#، وأقوم بتوصيله بـ 1c، كل شيء على ما يرام، ولكن عندما أرغب في استدعاء الأساليب أو الخصائص لـ 1c، تظهر لي رسالة "لم يتم العثور على حقل الكائن التجميعي"، من خلال اكتشف مصحح الأخطاء أن أساليب واجهة ILanguageExtender لم يتم استدعاؤها، بعد تنفيذ واجهة IInitDone، تم استدعاء مكونات فئات المنشئ مرة أخرى، وفقًا لنظرية كتابة المكونات الخارجية 1C، يجب على VK تنفيذ واجهتين على الأقل - IInitDone و ILanguageExtender، أنا تنفيذها، ولكن لا أستطيع أن أفهم ما هي المشكلة ربما شخص ما لديه أي أفكار؟؟؟

خطأ: فشل تثبيت المكون الخارجي!تم إغلاق الموضوع، وتم حل المشكلة.

السؤال: الإصدار 7: المكون الخارجي لـ 1C7 في C#


أين يمكنني إلقاء نظرة على مثال بسيط لإنشاء مكونات لـ 1C7 في C# بدءًا من Visual Studio 2010؟؟

خطأ: فشل تثبيت المكون الخارجي!

ينظر
قم بإنشاء مكونات خارجية بسرعة في C#. أمثلة على استخدام السياق العام، وIAsyncEvent، وIExtWndsSupport، وWinForms، وWPF

غالبًا ما يواجه المبرمجون مشكلات في توصيل المكونات الخارجية (على سبيل المثال، برامج تشغيل المعدات التجارية) عندما يعمل المستخدمون مع 1C، ويتصلون بالخادم من خلال محطة طرفية.

ويرجع ذلك إلى بعض خصائص وظيفة السياق العام ConnectExternalComponent().

وفي هذه الحالة، يرى المستخدمون، على سبيل المثال، الصورة المعروضة في إعلان المقالة.

أثناء العمل من أجهزة الكمبيوتر المحلية، لا توجد مشاكل في توصيل المكونات الخارجية.

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

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

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

تقدم المنشورات حول موضوع توصيل المكونات الخارجية في الجهاز مجموعة متنوعة من الطرق لحل هذه المشكلة.

على سبيل المثال، هذه:

1. إطلاق 1C لأول مرة بموجب الحقوق الإدارية.

هذا الخيار لا يعمل دائما. سأشرح السبب أدناه.

2. امنح مستخدمي المحطة العاديين الإذن بالكتابة إلى فرع تسجيل النظام HKEY_CLASSES_ROOT.

لا ينبغي للمستخدمين المتقدمين بما فيه الكفاية عدم القيام بذلك، وإلا فقد تكون هناك مشاكل.

3. باستخدام الأدوات الذكية المختلفة، قم بتسجيل VK نيابة عن مستخدم يتمتع بالحقوق الكاملة.

انها ليست جيدة سواء.

إذن ما هي أفضل طريقة للخروج من هذا الوضع؟

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

أثناء البحث عن هذه المشكلة، سألت نفسي السؤال: لماذا تحاول 1C تسجيل VK باستخدام مسار جديد؟ بعد كل شيء، هي مسجلة بالفعل في النظام.

وتبين أن النقطة هي أنه في تكوينات 1C النموذجية (على سبيل المثال، "إدارة التجارة") يتم استخدام بناء الجملة التالي لطريقة السياق العالمي كونيكتيكسترنالكومبونينت ():

ConnectExternalComponent("Directory.ConnectedEquipment.Layout.DriverATOLBarcodeScanner", "ATOLScanner");

كما ترون، فإن برنامج التشغيل VC متصل من تخطيط "ATOLBarcode Scanner Driver" في دليل "المعدات المتصلة".

ماذا يحدث بعد ذلك؟

يحفظ 1C المكون في المجلد المؤقت للمستخدم، على سبيل المثال "C:\Documents and Settings\User\Local Settings\Temp\1032\v8_4_12.tmp"

ويحاول تسجيله في مفتاح التسجيل HKEY_CLASSES_ROOT على طول هذا المسار.

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

الآن دعونا نتحدث عن كيفية الخروج من هذا الوضع.

طريقة السياق العالمي يحتوي ConnectExternalComponent() على العديد من خيارات بناء الجملة. هذا هو ما سوف نستخدمه.

لذلك، خطوة بخطوة:

1. قم بتسجيل المكون الخارجي باستخدام الأداة المساعدة regsvr32.exe على الخادم الطرفي في المجلد C:\WINDOWS\SYSTEM32 لنظام تشغيل 32 بت أو في المجلد C:\WINDOWS\SYSWOW64 لنظام تشغيل 64 بت.

2. استخدم أحد خياري بناء الجملة الإضافيين للأسلوب ConnectExternalComponent():

الخيار 1:

ConnectExternalComponent("C:\WINDOWS\SysWOW64\Scaner1C.dll"، "ATOLScanner"، ExternalComponentType.COM)؛

DriverObject = New("AddIn.ATOLScanner.Scaner45");

الخيار 2:

ProgID = "AddIn.Scaner45";

ConnectExternalComponent(ProgID);

DriverObject = New(ProgID);

في رأيي، الخيار رقم 2 هو الأفضل.

في الوقت نفسه، لا يحاول 1C إعادة تسجيل VK باستخدام مسار جديد في التسجيل وبالتالي يتم حل جميع المشكلات.

حسنا، هذا كل شيء. حظا سعيدا في عملك!

/
تطوير واجهة المستخدم

تثبيت المكونات الخارجية وملحقات النظام الأساسي

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

على سبيل المثال، من غير الصحيح استخدام الإنشاءات مثل

إذا لم تقم بتوصيل المكون الخارجي (...) فقم بتثبيت المكون الخارجي (...)

من الصحيح طرح سؤال على المستخدم صراحةً:

لمواصلة العمل، تحتاج إلى تثبيت مكون خارجي. سيسمح لك المكون الخارجي بالعمل مع التقارير. لتثبيت المكون، انقر فوق "تثبيت". بمجرد اكتمال التثبيت، انقر فوق "متابعة".

  • استخدم المستخدم أمر "إرسال تقرير".
  • يتطلب هذا التكوين تثبيت بعض المكونات الخارجية.
  • يتحقق التكوين من تثبيت المكون.
  • إذا لم يتم تثبيت المكون، فسيتم عرض معلومات للمستخدم تفيد بضرورة تثبيت المكون لإرسال تقرير، بالإضافة إلى زر يؤدي إلى تثبيت المكون.
  • يقوم المستخدم بالضغط على الزر، ويتم إجراء التثبيت.
  • بعد التثبيت، يقوم المستخدم بالنقر على زر "متابعة إرسال التقرير".
  • ويستمر البرنامج في إرسال التقرير.

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

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

عندما تستخدم في التكوين مكتبات النظام الفرعي القياسيةلتثبيت ملحق للعمل مع الملفات، استخدم الأمر العام InstallExtensionWorking مع الملفات، والذي يوصى بوضعه في نموذج الإعدادات الشخصية للمستخدم (انظر النموذج العام _DemoMySettingsفي التكوين التجريبي). وبنفس النموذج يوصى بوضع أوامر لتثبيت المكونات الخارجية التي قد يحتاجها المستخدم أثناء عمله.