Гэр / Интернет / Терминал дахь гадаад бүрэлдэхүүн хэсгүүдийг бүртгэхтэй холбоотой асуудлыг шийдвэрлэх. 1c жижиглэнгийн худалдааны терминалд гадны бүрэлдэхүүн хэсгүүдийг бүртгэхтэй холбоотой асуудлыг шийдэж чадаагүй байна

Терминал дахь гадаад бүрэлдэхүүн хэсгүүдийг бүртгэхтэй холбоотой асуудлыг шийдвэрлэх. 1c жижиглэнгийн худалдааны терминалд гадны бүрэлдэхүүн хэсгүүдийг бүртгэхтэй холбоотой асуудлыг шийдэж чадаагүй байна

Асуулт: Гадаад бүрэлдэхүүн хэсгийг суулгаж байна


Гадны бүрэлдэхүүн хэсгийг хэрхэн суулгах талаар надад хэлж өгнө үү. Дараах кодыг гүйцэтгэх үед алдаа гарна. Зохион байгуулалтаас NameDecl.dll-г олоорой

SetExternalComponent ("GeneralLayout.Layout"); Exception EndTry;
Алдаа: Plugin суулгаж чадсангүй!

Хариулт: ()
ConnectExternalComponent("GeneralLayout.Layout", "NameDecl", ExternalComponentType.Native) нь FALSE-г буцаана,
Шинэ("AddIn.NameDecl.CNameDecl", Тодорхойгүй) = (()): Төрөл тодорхойлогдоогүй (AddIn.NameDecl.NameDecl)

Асуулт: 1s 8.3.6 болон Win8 дээр гадаад бүрэлдэхүүн хэсгийг холбож байна


Энэ нь vk_rs232.dll ExternalComponent-ийг өөрөө бичсэн тохиргоонд холбох шаардлагатай. Regsvr32.exe-ээр бүртгүүлсэн шиг. Би "бүртгэл бүртгэгдсэн, гэхдээ галт хананд ямар нэг зүйл буруу байна" гэсэн мессеж ирсэн тул "Энэ нь харагдаж байна". Зурвасын эхний хагаст тулгуурлан би кодыг 1 секундээр бичдэг
AfterConnection = New NotificationDescription("AfterConnectionVK", ThisForm); StartExternalComponentInstallation(,"C:\Controller\vk_rs232.dll"); StartConnectingExternalComponent(AfterConnecting,"C:\Controller\vk_rs232.dll","DLL_Scales");
тэгээд би ийм алдааг олж авдаг
"Гадаад бүрэлдэхүүн хэсгийг суулгаж чадсангүй! Таны ашиглаж буй клиент програмын бүрэлдэхүүн хэсэг байхгүй байж магадгүй!".

Тэгээд одоо би ойлгохгүй байна
1. Бүрэлдэхүүн хэсэг нь бүртгэлд бүртгэгдээгүй байж магадгүй - би тэнд яаж шалгах вэ?
2. Магадгүй түүний "хувилбар" нь Win8-д ажиллахгүй байж магадгүй ч надад 32-бит байгаа.
3. Магадгүй 1s өөрөө хэтэрхий шинэ, i.e. Тиймээс энэ dll-тэй ажиллах боломжгүй байна уу?
4. Яахав улиг болсон - Би буруу юм бичиж байна.

Хариулт:Энэ бүхэн намайг ийм байдалд хүргэсэн дараагийн асуудал. VneshComp суулгасан, одоо та үүнийг холбох хэрэгтэй. Мөн энд хоёр сонголт байна.
ConnectExternalComponent("C:\Controller\vk_rs232.dll","Масштаб")
ConnectExternalComponent("GeneralLayout.Layout","Scales")

ХУДАЛ гарга!!!

Асуулт: Гадаад komponent.dll


Бүгдэд нь энэ өдрийн мэнд.
Нэг асуулт.
dll бүрэлдэхүүн хэсэг нь 1С 7.7 дээр сайн ажилладаг
1s-д 8.1 огт ачаалахыг хүсэхгүй байна ...
Үүнийг C:\Program Files\1cv81\bin\cache1c.dll-д буулгаж үзсэн.
Би regsvr32 "C:\Program Files\1cv81\bin\cache1c.dll" ашиглан бүртгүүлэх гэж оролдсон.
Асуудалгүй бүртгүүлсэн.
Би үүнд хандахыг оролдох үед би алдааны мессежийг хүлээн авдаг:

Гадаад бүрэлдэхүүн хэсгийг ачаалахад алдаа гарлаа! cache1c.dll
Процедур Гүйцэтгэх товчийг дарах(товчлуур) Гадаад бүрэлдэхүүн хэсгийг ачаалах оролдлого( "C:\Program Files\1cv81\bin\cache1c.dll"); Онцгой байдлын тайлан( "Гадаад бүрэлдэхүүн хэсгийг ачаалахад алдаа гарлаа!"+ "cache1c.dll"); оролдлогын төгсгөл; оролдлого // Бүрэлдэхүүн хэсэг объектыг авах. // m = Шинэ ("cache1c.GTMcmd" ); m = Шинэ COMObject("cache1c.GTMcmd" ); Онцгой байдлын тайлан(); оролдлогын төгсгөл; Төгсгөлийн процедур

Хариулт:Боломжгүй болтлоо улиг болсон...
Дуудлагын хоорондох завсарлага (миллисекунд) байх шаардлагатай...
Процедур ButtonExecuteClick(Button) оролдлого // Бүрэлдэхүүн хэсэг объектыг авах. m = Шинэ COMObject("cache1c.GTMcmd" ); Онцгой байдлын тайлан( "Гадаад бүрэлдэхүүн хэсгийн объектыг үүсгэж чадсангүй"); оролдлогын төгсгөл; m.RemoteHost = "192.168.1.101" ; m.RemotePort = 6330; m.Connect(); m.pause(100); ...... гэх мэт
1s 7.7-ийн хувьд - энэ нь шаардлагагүй, цусны эргэлт илүү хурдан болж байна.

Асуулт: 1С 8.3 дээрх Linux (Ubuntu x64)-д зориулсан C++-ийн гадаад уугуул Api бүрэлдэхүүн хэсэг


Би VK бичиж байна, би ubuntu дээр 1s-тэй холбогдож чадахгүй байна. 1-ийн жишээ хүртэл холбогдоогүй байна. Тиймээс энэ тухай асуулт:

1) Би нийтлэлд өгөгдсөн VNCOMPS жишээнээс VK-г холбохыг оролдож байна

(холбоосыг хамгийн төгсгөлд нь олж болно: "Хуулбарлах").
Дотооддоо NativeApi төсөл нь makefile-тэй. Үүний тусламжтайгаар би Ununtu дээр .so номын сан байгуулдаг.
Харин "Гадаад бүрэлдэхүүн хэсгийг холбох" дээр 1 хөөрдөг.
Үүнтэй адилаар, хэрэв би "build.sh" (төслийн үндэс) ашиглан бүтээх юм бол.

Makefile дотроо би тугийг m32-оос m64 болгон өөрчилдөг, учир нь 1c ба x64 систем өөрөө. (m32 параметртэй бол энэ нь ямар ч байсан авахгүй)
1С 8.3-аас VK руу залгах жишээ энд байна.
Холболт дууссан = Гадаад бүрэлдэхүүн хэсгийг холбоно уу("/home/alexeyubuntux64-20 gb/Documents/VNCOMP83/example/NativeAPI/AddInNative.so", "AddInNative", ExternalComponentType.Native); Яг энэ сэдвээр нийтлэл байна.
Гэхдээ миний харж байгаагаар эдгээр бүх зүйлийг VNCOMPS жишээн дээр аль хэдийн анхаарч, зассан болно.

Гэхдээ үнэн хэрэгтээ эмхэтгэлийн параметрүүдийн хувьд бизнес. MB 32 битийн гадаад бүрэлдэхүүн хэсэг нь ихэвчлэн 32 бит 1c хүртэл холбогддог, гэхдээ би Ubuntu x64 1c enterprise83 8.3.5-1486 amd64 дээр суулгасан. Би түүнд VK авахыг хүсч байна.

Энэ асуудлыг хэрхэн шийдэх талаар ямар нэгэн санаа байгаа хүн байна уу?
VNCOMPS жишээ ажиллах ёстой, гэхдээ бүтээх параметрүүдийг засах шаардлагатай эсвэл миний туршиж байгаа платформ өөрөө буруу байна.

Хариулт:Сонирхолтой нь Java хэл дээр гадаад бүрэлдэхүүн хэсэг бичих боломжтой юу?

Асуулт: 1С сервертэй гадаад бүрэлдэхүүн хэсгийн ажил ...


Өдрийн мэнд,

C ++ хэл дээр бичигдсэн гадаад бүрэлдэхүүн хэсэг байдаг бөгөөд түүний даалгавар нь мэдээлэл хүлээн авах явдал юм гадаад суурьөгөгдөл болон асуулгын үр дүнг 1С дахь утгын хүснэгт хэлбэрээр буцаана.
Одоогийн байдлаар утгуудын хүснэгтийг бүрдүүлэхийн тулд Init() функцэд параметр болгон хүлээн авсан IDispatch* pBackConnection интерфейсийг ашигладаг. Цаашилбал, би зүгээр л 1С функцуудыг ашиглан утгуудын хүснэгтийг бүрдүүлж, бөглөж, CallAsFunc (...) дахь хоёр дахь параметр рүү буцаана.
руу шилжсэнээс л асуудал эхэлсэн нимгэн үйлчлүүлэгчид 1С. Серверийн тал дээр гадаад бүрэлдэхүүн хэсэг нь үнэхээр эхлэхгүй байна. Та үүнийг үйлчлүүлэгчийн тал дээр ажиллуулж болно, гэхдээ энэ нь бүгд таяг шиг харагдаж, 1С-ийн ерөнхий "клиент-сервер" логикоос унадаг. Жишээлбэл, үйлчлүүлэгч утгын хүснэгт гэж юу болохыг ойлгодоггүй, "глобал" хувьсагчидтай холбоотой асуудлууд, сессүүд гэх мэт.
NativeAPI нь үүнтэй холбоотойгоор бүр ч тасарсан.
Хэнгэрэгтэй бүжиглэснээр би 1С серверийн дор гадны бүрэлдэхүүн хэсгийг ажиллуулж чадсан ч pBackConnection дээр Invoke руу залгах оролдлого хийх хүртэл ажил үргэлжилдэг. Сервер 8.2-ын 64 битийн хувилбар нь хугацаа дуусах хүртэл ямар нэгэн зүйл хийхийг оролддог бол 32 битийн хувилбар (VK угаасаа 32 бит) нь шууд унадаг.
1С сервер энэ горимд үйлчилдэггүй гэж би бодож байна.
Үүний дагуу асуултууд гарч ирдэг, энэ нь түр зуурынх уу эсвэл 1С-ийн логик нь энэхүү ажлын схемийг цуцлахад хүргэсэн үү? Хэрэв ийм байдлаар 1С (утгагийн хүснэгт) дотоод бүтцийг бий болгох боломжгүй бол C + дээр үүсгэхийг оролдохын тулд системийн түвшинд утгын хүснэгт гэж юу болох талаар зарчмын тайлбар бий юу? +, үүнийг бөглөж, дараа нь буцах параметр болгон 1С-ийг зүгээр л гулсуулна уу? Ядаж аль зүгт ухах чиглэлээ гаргамаар байна.

Баярлалаа.

Хариулт:

Та нэг зүйлийг бичиж, өөр зүйлийг хэлж байна.
1С орчинд өөр өөр сессүүдэд харагдах хувьсагчдыг зарлах нь одоо боломжгүй зүйл биш бөгөөд өмнө нь боломжгүй байсан. Өөр сесс бол бие махбодийн хувьд өөр үйл явц юм.
Session нь мэдээллийн баазын холболтын сесс, i.e. хэрэглэгчийн сесс. Эсвэл та өөрийн гэсэн зүйл, энэ үзэл баримтлалыг тавьдаг уу?

Нэг сессийн дотор өөр өөр газраас сесс дотор харагдах, амьдрах хувьсагчдыг сессийн модульд зарлах боломжтой байсан бөгөөд одоо ч боломжтой болсон ... үнэндээ эдгээрийн 4 нь байдаг.
- хуралдааны модуль;
- Тогтмол хэрэглээний модуль;
- Удирдлагын програмын модуль;
- Гадаад холболтын модуль.

Мэдээжийн хэрэг та нөхцөл байдлын талаар санах хэрэгтэй. Серверийн контекст нь үйлчлүүлэгчийн талд шууд хандах боломжгүй ба эсрэгээр.

Ерөнхийдөө 1С архитектур нь өгөгдөл солилцох ажлыг дараах байдлаар үргэлжлүүлнэ.
- процедур/функцын параметрүүд / өгөөжийн тусламжтайгаар;
- сессийн параметрүүдийн тусламжтайгаар (тэдгээр нь объект байж болохгүй, та үүнийг палитр дээрээс харж болно).

Маягт дээрх хүснэгт ... мөн энэ нь ямар нэгэн объектын хүснэгттэй (жишээлбэл, боловсруулалт) холбогдсон байна уу? эсвэл биш. Хэрэв тийм бол энэ нь сервер (&AtServer) дээр бас боломжтой бөгөөд тэнд засварлана....

Тиймээ, ValueTable нь үйлчлүүлэгчийн тал дээр хэт ягаан туяанд байхгүй. За, 1С тэгж шийдсэн.

Аливээ! Энд Excel-тэй ажилладаг, FSO болон бусад бүх зүйлтэй ажилладаг, гэхдээ энд ажиллахгүй байна. Алдааг олж, дүн шинжилгээ хийнэ үү....

оролдлого
...
таны үйлдэл
...
Үл хамаарах зүйл
str = Тайлбар алдаа();
оролдлогын төгсгөл;

Орчин үеийн техник хангамжийн чадавхитай бол энэ нь огт маргаан биш юм.

Зөвхөн таны хувийн бодол. Бодит байдалтай ямар ч холбоогүй. Ямар ч байдлаар биш. Би дахин давтан хэлье, 1С нь COM-той маш сайн ажилладаг. In-proc болон out-proc хоёулаа.

ВК-д байршуулж, хэрэглэх кодоо өг.

Дашрамд хэлэхэд, VK ... таны хувьд COM эсвэл Native API уу?
Хэрэв COM бол regsvr32-ээр дамжуулан... гэж бүртгүүлсэн бол битийн гүнийн асуудлыг хэрхэн "шийдвэрлэх" вэ?

Асуулт: 1С8 ба төрөлх төрлийн гадаад бүрэлдэхүүн хэсэг


Өдрийн мэнд.
BP 3.0.50.12-ийн тохиргоо байдаг бөгөөд UniServerAuto ашиглан Scales-Soft компаниас жинлэхийг хэрэгжүүлэх хүсэл байдаг.
Хөгжүүлэгчид Windows 32 болон 64-д зориулсан Native бүрэлдэхүүн хэсгийг эмхэтгэж, хамгийн том файлтай архивт оруулсан. Мөн 1С-ийн жинг хэрхэн тооцоолох жишээ байдаг. Үүнд, хоёртын өгөгдөл бүхий байршлын тусламжтайгаар энэ архивыг миний ойлгож байгаагаар зааж өгсөн болно. Жишээн дээр бүх зүйл хэвийн байна: бүрэлдэхүүн хэсэг нь суулгаж, холбогдсон, дараа нь холболтыг тогтоож, жинг уншина.
Гэхдээ та өөрийгөө 1С руу шилжүүлж эхэлмэгц жинг уншдаггүй. Бүх зүйл зүгээр л бичсэн юм шиг санагдаж байна, гэхдээ би тармуур хаана байгааг ойлгохгүй байна.
Хэнд бага зэрэг хугацаа байх вэ - туслаач, нэг нүдээрээ хараарай, магадгүй шийдэл нь гадаргуу дээр байгаа ч би хаа нэгтээ буруу газар алхаж, буруу зүйл хийж байна. Би өмнө нь Native технологитой ажиллаж байгаагүй...

Мөн хавсралтад миний боловсруулах текст байна

Хариулт:

За, надад мэдээ байна ...
Энэ нь ямар үед бүтэлгүйтэж байгааг алхам алхмаар харж эхэлсэн. Үүнийг хийхийн тулд би хоосон мэдээллийн сан үүсгэж, командын тусламжтайгаар боловсруулалт хийсэн. Нийлүүлэгчийн жишээтэй ижил төстэй байдлаар би байршлыг шинэ тохиргоонд шилжүүлсэн - энэ нь хоёр дахь удаагаа ажиллаж байна. Тэдгээр. Эхний удаа үгүй, хоёр дахь удаагаа тийм. Энэ нь түүнийг боловсруулах явцад бүрэлдэхүүн хэсэг болон объектын холболтыг өөр өөр журмын дагуу салгах шаардлагатай хэвээр байх болно гэсэн санааг төрүүлэв.
Дараа нь би үүнийг байршлын холболтоор өөрийн мэдээллийн сан руу шилжүүлсэн - энэ нь ажилладаг. Фүх, энэ нь аль хэдийн сайн байна .... Гэхдээ би тохиргоонд өөрчлөлт оруулахгүй байхыг хүсч байна, тиймээс цааш явцгаая

Би боловсруулалтанд бүдүүвч нэмэхийг оролдож байна. Түүний хэмжээ тэр даруй 10кб-аас 3мб хүртэл нэмэгдэж, мэдэгдэхүйц удаашрал ажиглагдаж байна - энэ нь тохирохгүй байна. Би бүрэлдэхүүн хэсгийг dll-ээр дамжуулан холбохыг ухаж эхэлдэг. Тэдгээр. үндсэндээ таны эхлүүлсэнтэй ижил. Гэхдээ нэг "ГЭХДЭЭ" байгаа: хэрэглэгчийн хавтас дахь dll-ийн нэрээр хайлт хийснээр би энэ dll нь 1С-д бүртгэгдсэн dll-үүдийг (миний ойлгож байгаагаар) хаана байгааг анзаарсан.
C:\Users\USER\AppData\Roaming\1C\1cv8\ExtCompT
Үүний дагуу dll-ийн бүрэн замыг ашиглах шаардлагагүй, та зүгээр л нэрийг нь бичиж болно:
ConnectExternalComponent("Add1CUniServerAuto32.dll", "UniServerAuto", ExternalComponentType.Native);

Би оролдох ... бүртгэл дээр тангараг өргөх боловч жинлэлтийн үр дүнг буцааж өгдөг. Dll аль хэдийн бүртгэгдсэн байгаа тул та үүнийг холбох хэрэгтэй гэсэн үг юм. Би үүнийг устгаад бүх зүйл ажилладаг.
Би дүгнэж хэлэхэд:
1. Процедур дахь жинг боловсруулахдаа нээх үед би гаднах бүрэлдэхүүн хэсгийн холболт болон объектын холболтыг нэмсэн.
2. dll-ийн замыг би бичээгүй, зүгээр л нэрийг нь зааж өгсөн.

Одоо би 1С-д dll хэзээ суулгасан бэ гэж бодоод сууж байна. Програм хангамж суулгах үед? Бараг л... Энэ dll-ийн хөгжүүлэгчийн тохиргоог ажиллуулах үед маягтыг нээх үед хаана тохируулдаг вэ? Мэдэхгүй л дээ, гэхдээ надад ойр юм шиг байна... Чи юу гэж бодож байна?
Хоёрдугаарт, шинэ газар, ижил терминал суурилуулах шаардлагатай үед бүх зүйлийг ажиллуулахын тулд юу хийх хэрэгтэй вэ? Програм хангамжийг бүрэн суулгаж, нийлүүлэгчийн тохиргоог ажиллуулж ажлыг шалгаад дараа нь (онолын хувьд) миний боловсруулалт ажиллах ёстой юу? Бага зэрэг төвөгтэй зүйл байна ... Эсвэл миний боловсруулалтанд програм хангамжийг суулгасны дараа, InstallExternalComponent-ийг нэг удаа хийх үү?

Энэ талаар таны бодлыг сонсохыг хүсч байна ...

Асуулт: Кодын хэсгийг гадаад бүрэлдэхүүн хэсэг рүү шилжүүлэх


Боловсруулалтын хамгаалалтын талаархи олон нийтлэлд кодын нэг хэсгийг гадны бүрэлдэхүүн хэсэг рүү шилжүүлдэг гэж тайлбарласан байдаг боловч програмист ийм тохиолдолд яг яаж ажилладаг нь тодорхойгүй байна.
Үүнийг хийж байсан эсвэл үүнтэй төстэй асуудал тулгарсан хэн бүхэн тайлбарлана уу. энгийн жишээзарчим нь өөрөө. Гадны бүрэлдэхүүн хэсгүүдийн холболтоор бүх зүйл тодорхой харагдаж байна.

// Утгын хүснэгтийг бөглөх жишээ TK.Clear(); Хүсэлт = Шинэ хүсэлт; Query.Text = "СОНГОХ | Нэршил.Холбоос ХЭРХЭН Нэршил | FROM | Directory.Nomenclature AS Nomenclature"; QueryResult = Query.Execute(); Sampling = QueryResult.Select(); While Sampling.Next() Loop Str = TK.Add(); FillPropertyValues(Pr, Sampling); EndCycle;
Кодын ямар хэсгийг ихэвчлэн хасдагийг энэ жишээгээр тайлбарлаж өгнө үү. Хүсэлт бүхий хэсгийг гаргаж авах нь логик байх болно, гэхдээ бид платформыг алгасаж, гадаад бүрэлдэхүүн хэсгээс мэдээллийн санд хэрхэн нэвтрэх вэ? Текст нь утгагүй юм. Эсвэл хүснэгтийн хэсгийн хэлбэрийг гаргаж аваарай. Энэ талаар туршлагаасаа хуваалцана уу.

Хариулт:Тэгээд "Тохиромжгүй" гэдэг нь дандаа "Муу" гэсэн утгатай байдаг юм уу? Тийм ээ, хэрэв би өөрийн хэв маягийг "1С: Байгаль дээр байдаг (уран зохиолын хэл рүү орчуулсан) скриптийн систем дээрх хамгийн муу програмчлал" гэж нэрлэвэл надад санагдаж байна. тэгээд энэ араатныг шалгахыг хүсэгчид гарцаагүй олдоно. Энэ нь сонгодог шиг харагдаж байна: "Би Пастернакийг уншаагүй, гэхдээ би түүнтэй огт санал нийлэхгүй байна!" :)

Асуулт: Delphi дээрх гадаад бүрэлдэхүүн хэсэг r 1C-г холбож чадахгүй байна


Гадаад бүрэлдэхүүн хэсгийн жишээ төслийг эмхэтгэсэн

DLL авлаа.
Үүнийг системд бүртгүүлсэн (Regsvr32 testvk.dll)
Одоо та үүнийг 1С-д ашиглах хэрэгтэй. Үүнийг хийхийн тулд би гадаад боловсруулалтыг бичсэн бөгөөд үүнд:

&AtClient
Процедурын тушаал1(Тушаал)
path="C:\1\VK Template\TestVK\DLL\testvk.dll";
a=IncludeExternalComponent(PATH);
LoadExternalComponent(Path);
ABOUT = Шинэ ("Addln.TestVK"); Асуулт: 1 секундын гадаад бүрэлдэхүүн хэсгүүд 7.7


Сайн уу. Би c# хэл дээр 1c7.7-д зориулсан бүрэлдэхүүн хэсэг бичиж байна, би үүнийг 1c-тэй холбосон бүх зүйл зүгээр, гэхдээ би 1c-д зориулсан аргууд эсвэл шинж чанаруудыг дуудмаар байвал дибаггерээр дамжуулан "нийтлэг объектын талбар олдсонгүй" гэж бичсэн байна. ILanguageExtender интерфейсийн аргуудыг дууддаггүй тул IInitDone интерфэйсийг хэрэгжүүлсний дараа үүнийг дахин бүтээгч ангийн бүрэлдэхүүн хэсгүүд гэж нэрлэдэг бөгөөд гадаад бүрэлдэхүүн хэсгүүдийг бичих онолын дагуу 1С, VK нь дор хаяж хоёр интерфейсийг хэрэгжүүлэх ёстой - IInitDone ба ILanguageExtender, I тэдгээрийг хэрэгжүүлэх, гэхдээ би асуудал юу болохыг ойлгохгүй байна. Магадгүй хэн нэгэнд санаа байгаа байх ???

Хариулт:Сэдэв хаагдсан, асуудал шийдэгдсэн.

Асуулт: v7: C# хэл дээрх 1С7-д зориулсан гадаад бүрэлдэхүүн хэсэг


Visual studio 2010-аас эхлэн C # хэл дээр 1C7-д зориулсан бүрэлдэхүүн хэсэг үүсгэх энгийн жишээг хаанаас харж болох вэ?

Хариулт:

Хараач
C# хэл дээр гадаад бүрэлдэхүүн хэсгүүдийг хурдан бүтээх. Глобал контекст, IAsyncEvent, IEextWndsSupport, WinForms болон WPF жишээнүүд

/
Хэрэглэгчийн интерфейсийг хөгжүүлэх

Гадаад бүрэлдэхүүн хэсгүүд болон платформын өргөтгөлүүдийг суулгах

1.1. Платформын гаднах бүрэлдэхүүн хэсгүүд болон өргөтгөлүүдийг суурилуулах нь интерактив байх ёстой. Суулгах талаар хэрэглэгч өөрөө шийдвэр гаргах ёстой. Суулгах харилцах цонх нь бүрэлдэхүүн хэсэг (өргөтгөлүүд) юунд зориулагдсан, суулгаагүй тохиолдолд юу ажиллахгүй болохыг зааж өгөх ёстой.

Жишээлбэл, хэлбэрийн бүтцийг ашиглах нь буруу юм

Хэрэв ConnectExternalComponent(…) биш бол SetExternalComponent(…)

Хэрэглэгчээс тодорхой асуулт асуух нь зөв:

Та үргэлжлүүлэн ажиллахын тулд гадны бүрэлдэхүүн хэсгийг суулгах хэрэгтэй. Гадны бүрэлдэхүүн хэсэг нь тайлантай ажиллах боломжийг танд олгоно. Бүрэлдэхүүнийг суулгахын тулд "Суулгах" дээр дарна уу. Суулгац дууссаны дараа "Үргэлжлүүлэх" дээр дарна уу.

  • Хэрэглэгч тайлан илгээх командыг ашигласан
  • Энэ тохиргоо нь зарим гадны бүрэлдэхүүн хэсгүүдийг суулгахыг шаарддаг.
  • Тохиргоо нь бүрэлдэхүүн хэсэг суулгасан эсэхийг шалгадаг.
  • Хэрэв бүрэлдэхүүн хэсэг суулгаагүй бол тайланг илгээхийн тулд бүрэлдэхүүн хэсгийг суулгах шаардлагатай гэсэн мэдээллийг хэрэглэгчдэд харуулдаг бөгөөд уг бүрэлдэхүүн хэсгийг суулгахад хүргэдэг товчлуур гарч ирнэ.
  • Хэрэглэгч товчлуур дээр дарахад суулгац хийгдэнэ.
  • Суулгасны дараа хэрэглэгч "Тайланг үргэлжлүүлэн илгээх" товчийг дарна.
  • Хөтөлбөр тайлангаа илгээсээр байна.

Ийм хувилбар нь хөтчийг оруулаад бүх дэмжигдсэн хөтчүүд дээр бүрэлдэхүүн хэсгүүдийг (өргөтгөлүүд) асуудалгүйгээр суулгасан байх болно. firefox.

2. Хэрэглээний шийдэл нь хэрэглэгчийг ажлын аль ч үед гадны бүрэлдэхүүн хэсгүүд болон өргөтгөлүүдийг суулгах хэрэгслүүдээр хангах ёстой. Тиймээс тэдгээрийг зөвхөн зарим ажлыг шийдвэрлэх явцад төдийгүй тусдаа үйлдэл болгон (захиргааны горимоос) суулгаж болно.

Тохиргоонд ашиглах үед Стандарт дэд системийн номын сангуудфайлуудтай ажиллах өргөтгөлийг суулгах зорилготой ерөнхий тушаал ExtensionWorkingFiles суулганаХэрэглэгчийн хувийн тохиргооны маягтанд оруулахыг зөвлөж байна (ерөнхий маягтыг үзнэ үү _DemoMySettingsДемо тохиргоонд). Үүнтэй ижил хэлбэрээр хэрэглэгчийн ажлын явцад шаардлагатай байж болох гадаад бүрэлдэхүүн хэсгүүдийг суулгах командуудыг байрлуулахыг зөвлөж байна.


Энэ нь ConnectExternalComponent() глобал контекст функцийн зарим онцлогтой холбоотой юм.

Ихэнхдээ програмистууд гадны бүрэлдэхүүн хэсгүүдийг (жишээлбэл, драйверууд) холбоход бэрхшээлтэй байдаг арилжааны тоног төхөөрөмж), хэрэглэгчид 1С-тэй ажиллах үед серверт терминалаар холбогддог.

Энэ тохиолдолд хэрэглэгчид жишээлбэл дараах зургийг харна.

Хамт ажиллаж байхдаа орон нутгийн компьютеруудГадны бүрэлдэхүүн хэсгүүдийг холбоход ямар ч асуудал байхгүй.

Энэ нь юутай холбоотой вэ? Учир нь хэрэглэгчид Терминал серверээр дамжуулан ажиллахдаа локал компьютер дээр ажиллаж байснаасаа бага эрхтэй байдаг.

Хэрэв та доорх терминалын сервер рүү очвол үүнийг шалгахад хялбар байдаг дансзахиргааны эрхтэй.

Энэ ялгааны шалтгаан нь хэрэглэгч терминал дээр ердийн эрхээр ажиллаж байх үед 1С нь гадаад бүрэлдэхүүн хэсгийг бүртгэлд бүртгэж чадахгүй байгаатай холбоотой юм. энгийн хэрэглэгч салбар руу бичих эрхгүй системийн бүртгэл HKEY_CLASSES_ROOT.

Терминал дахь гадаад бүрэлдэхүүн хэсгүүдийг холбох сэдвээр гарсан нийтлэлүүдэд хамгийн их өөр өөр аргуудэнэ асуудлын шийдлүүд.

Жишээлбэл, эдгээр:

1. Захиргааны эрхийн дагуу 1С-г анх удаа ажиллуул.

Энэ сонголт үргэлж ажилладаггүй. Яагаад гэдгийг би доор тайлбарлах болно.

2. Терминалын жирийн хэрэглэгчдэд системийн бүртгэлийн салбар руу бичих эрхийг олгох HKEY_CLASSES_ROOT.

Хангалттай "дэвшилтэт" хэрэглэгчид үүнийг хийх ёсгүй, эс тэгвээс асуудал гарч болзошгүй.

3. Төрөл бүрийн "гаджет" ашиглах нь бүрэн эрхтэй хэрэглэгчийн нэрийн өмнөөс VK-г бүртгүүлэх.

Бас идэх ч сайн биш.

Тэгэхээр энэ байдлаас гарах хамгийн сайн арга юу вэ?

Би энэ асуудлын шийдлийг санал болгож байна. Миний бодлоор - энгийн бөгөөд үзэсгэлэнтэй.

Энэ асуудлыг судалж байхдаа би гайхсан - 1С яагаад VK-г шинэ замаар бүртгүүлэхийг оролддог вэ? Эцсийн эцэст энэ нь системд аль хэдийн бүртгэгдсэн байна.

Хамгийн гол нь ердийн 1С тохиргоонд (жишээлбэл, "Худалдааны менежмент") ConnectExternalComponent() дэлхийн контекст аргын дараах синтаксийг ашигладаг болсон.

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

Таны харж байгаагаар VK драйвер нь "Холбогдсон тоног төхөөрөмж" лавлахын "DriverATOLScannerBarcode" байршлаас холбогдсон байна.

Дараа нь юу болох вэ?

1С нь бүрэлдэхүүн хэсгийг хэрэглэгчийн түр хавтсанд хадгалдаг, жишээлбэл "C:\Documents and Settings\User\Local Settings\Temp\1032\v8_4_12.tmp"

мөн бүртгэлийн салбарт бүртгүүлэхийг оролддог HKEY_CLASSES_ROOTяг энэ зам дагуу.

Терминал дээр энгийн хэрэглэгчид энэ бүртгэлийн салбарыг өөрчлөх эрхгүй тул бүрэлдэхүүн хэсэг нь тэдэнд холбогдоогүй байна.

Одоо энэ байдлаас хэрхэн гарах талаар.

Глобал контекст арга ConnectExternalComponent() нь синтаксийн хэд хэдэн сонголттой. Үүнийг бид ашиглах болно.

Тиймээс, алхам алхмаар:

1. Терминал серверийн regsvr32.exe хэрэгслийг ашиглан 32 битийн үйлдлийн системд зориулсан C:\WINDOWS\SYSTEM32 хавтсанд эсвэл 64 битийн үйлдлийн системд зориулсан C:\WINDOWS\SYSWOW64 хавтсанд гадаад бүрэлдэхүүн хэсгийг бүртгүүлнэ үү.

2. ConnectExternalComponent() аргын хоёр нэмэлт синтакс сонголтын аль нэгийг ашиглана уу:

Сонголт 1:

ConnectExternalComponent("C:\WINDOWS\SysWOW64\Scaner1C.dll", "ATOLScanner", ExternalComponentType.COM);

DriverObject = Шинэ("AddIn.ATOLScanner.Scanner45");

Сонголт 2:

ProgID = "AddIn.Scanner45";

Гадаад бүрэлдэхүүн хэсгийг холбох (ProgID);

DriverObject = Шинэ(ProgID);

Миний бодлоор №2 хувилбар нь илүү дээр юм.

Үүний зэрэгцээ 1С нь VC-г бүртгэлийн шинэ замаар дахин бүртгүүлэхийг оролддоггүй бөгөөд ингэснээр бүх асуудал шийдэгддэг.

За тэгээд л болоо. Ажилд нь амжилт хүсье!

[Та холбоосыг үзэхийн тулд бүртгүүлэх шаардлагатай]

Хэрэглэгчид терминалаар дамжуулан серверт холбогдох замаар 1С-тэй ажиллах үед програмистууд ихэвчлэн гадаад бүрэлдэхүүн хэсгүүдийг (жишээлбэл, арилжааны тоног төхөөрөмжийн драйверууд) холбоход бэрхшээлтэй байдаг.

Энэ нь ConnectExternalComponent() глобал контекст функцийн зарим онцлогтой холбоотой юм.

Үүний зэрэгцээ хэрэглэгчид, жишээлбэл, нийтлэлийн зарлал дээр үзүүлсэн зургийг хардаг.

Орон нутгийн компьютерээс ажиллах үед гадны бүрэлдэхүүн хэсгүүдийг холбоход асуудал гардаггүй.

Энэ нь юутай холбоотой вэ? Учир нь хэрэглэгчид Терминал серверээр дамжуулан ажиллахдаа локал компьютер дээр ажиллаж байснаасаа бага эрхтэй байдаг.

Хэрэв та терминалын серверт админ эрх бүхий бүртгэлээр нэвтэрсэн бол үүнийг шалгахад хялбар байдаг.

Энэ ялгааны шалтгаан нь хэрэглэгч терминал дээр ердийн эрхээр ажиллаж байх үед 1С нь гадаад бүрэлдэхүүн хэсгийг бүртгэлд бүртгэж чадахгүй байгаатай холбоотой юм. энгийн хэрэглэгч системийн бүртгэлийн салбар руу бичих зөвшөөрөлгүй байдаг HKEY_CLASSES_ROOT.

Терминал дахь гадаад бүрэлдэхүүн хэсгүүдийг холбох сэдэвт нийтлэлд энэ асуудлыг шийдэх олон янзын аргыг санал болгож байна.

Жишээлбэл, эдгээр:

1. Захиргааны эрхийн дагуу 1С-г анх удаа ажиллуул.

Энэ сонголт үргэлж ажилладаггүй. Яагаад гэдгийг би доор тайлбарлах болно.

2. Терминалын жирийн хэрэглэгчдэд системийн бүртгэлийн салбар руу бичих эрхийг олгох HKEY_CLASSES_ROOT.

Хангалттай "дэвшилтэт" хэрэглэгчид үүнийг хийх ёсгүй, эс тэгвээс асуудал гарч болзошгүй.

3. Төрөл бүрийн "гаджет" ашиглах нь бүрэн эрхтэй хэрэглэгчийн нэрийн өмнөөс VK-г бүртгүүлэх.

Бас идэх ч сайн биш.

Тэгэхээр энэ байдлаас гарах хамгийн сайн арга юу вэ?

Би энэ асуудлын шийдлийг санал болгож байна. Миний бодлоор - энгийн бөгөөд үзэсгэлэнтэй, өмнө нь Lancer дээр санал болгож байгаагүй.

Энэ асуудлыг судалж байхдаа би гайхсан - 1С яагаад VK-г шинэ замаар бүртгүүлэхийг оролддог вэ? Эцсийн эцэст энэ нь системд аль хэдийн бүртгэгдсэн байна.

Хамгийн гол нь ердийн 1С тохиргоонд (жишээлбэл, "Худалдааны менежмент") дэлхийн контекст аргын дараах синтаксийг ашигладаг. ConnectExternalComponent():

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

Таны харж байгаагаар VK драйвер нь "Холбогдсон тоног төхөөрөмж" лавлахын "DriverATOLScannerBarcode" байршлаас холбогдсон байна.

Дараа нь юу болох вэ?

1С нь бүрэлдэхүүн хэсгийг хэрэглэгчийн түр хавтсанд хадгалдаг, жишээлбэл "C:\Documents and Settings\User\Local Settings\Temp\1032\v8_4_12.tmp"

мөн энэ замын дагуух HKEY_CLASSES_ROOT бүртгэлийн салбарт бүртгүүлэхийг оролдоно.

Терминал дээр энгийн хэрэглэгчид энэ бүртгэлийн салбарыг өөрчлөх эрхгүй тул бүрэлдэхүүн хэсэг нь тэдэнд холбогдоогүй байна.

Одоо энэ байдлаас хэрхэн гарах талаар.

Глобал контекст арга ConnectExternalComponent() нь хэд хэдэн синтакс сонголттой. Үүнийг бид ашиглах болно.

Тиймээс, алхам алхмаар:

1. Терминал серверийн regsvr32.exe хэрэгслийг ашиглан 32 битийн үйлдлийн системд зориулсан C:\WINDOWS\SYSTEM32 хавтсанд эсвэл 64 битийн үйлдлийн системд зориулсан C:\WINDOWS\SYSWOW64 хавтсанд гадаад бүрэлдэхүүн хэсгийг бүртгүүлнэ үү.

2. ConnectExternalComponent() аргын хоёр нэмэлт синтакс сонголтын аль нэгийг ашиглана уу:

Сонголт 1:

ConnectExternalComponent("C:\WINDOWS\SysWOW64\Scaner1C.dll", "ATOLScanner", ExternalComponentType.COM);

DriverObject = Шинэ("AddIn.ATOLScanner.Scanner45");

Сонголт 2:

ProgID = "AddIn.Scanner45";

Гадаад бүрэлдэхүүн хэсгийг холбох (ProgID);

DriverObject = Шинэ(ProgID);

Миний бодлоор №2 хувилбар нь илүү дээр юм.

Үүний зэрэгцээ 1С нь VC-г бүртгэлийн шинэ замаар дахин бүртгүүлэхийг оролддоггүй бөгөөд ингэснээр бүх асуудал шийдэгддэг.

За тэгээд л болоо. Ажилд нь амжилт хүсье!