1s бастап com қосылымы арқылы деректерді қабылдау. V8: COM қосылымы. COM қосылымы арқылы санауды қабылдау және салыстыру

Сұрақ: COM IE 11 арқылы сайтты талдау


Қайырлы күн.!
Сұрақ өте белгілі, сіз сайттан ақпаратты алуыңыз керек. Бірақ нюанстар бар:
1. Авторизация бетіне тікелей өту мүмкіндігі жоқ (алдымен басты бетке өтіп, Кіру сілтемесін басыңыз, авторизация формасын алыңыз, содан кейін ғана жүйеге кіріңіз).
2. арқылы веб-сайтқа кіру керек іздеу жолағыдеректерді іздеңіз, содан кейін оны оқыңыз және қайта іздеңіз (деректер орыс және ағылшын тілдерінде болуы мүмкін, яғни іздейтін деректер орыс тілінде болса, сайттың «орысша нұсқасынан» іздеу керек, бұл басқа сілтеме басқа бетке. Бұл ағылшын тіліндегі мәселе).

Ақырында:
- басты бетке өтіңіз - жүйеге кіріңіз - деректерді іздеңіз - (қажет болса сайттың басқа нұсқасына өтіңіз) - оны алыңыз.

Мәселе:
Сілтемені орындау кезінде деректер "құжат" сипатында оқылмайды.
Ол екі нүктеде орын алады:
- жүйеге кіру үшін сілтемені орындаған кезде (бұл түйме емес, жай сілтеме);
- сайттағы тілді өзгерткен кезде (сонымен қатар сілтеме).

Ескерту
Егер авторизация сатысында сілтемені орындамас бұрын, сіз сілтеме алсаңыз, com сайтын жауып, оны IE.navigate("link") әдісі арқылы өту арқылы қайта ашсаңыз, онда "document" сипатындағы деректер қалыпты жүреді. Бірақ сіз сайттағы тілді өзгерткен кезде дәл солай істей алмайсыз, себебі... Маған қайта кіру керек және мен бұл мәселені дәл осылай шешкім келмейді.

Міне код:

&Клиент процедурасында SetWaitingIE(IE, SecondCall=False) Егер IE ЕМЕС.Бос емес болса, D = CurrentDate() + 3; While D >= CurrentDate() циклі Егер IE.Bosy болса, онда тоқтатыңыз; endIf; EndCycle; endIf; While IE.Busy Loop EndLoop; IE.ReadyState кезінде< 4 Цикл КонецЦикла; Попытка Если IE.Document.ReadyState = Null Тогда IE.Refresh(); УстановитьОжиданиеИЕ(IE); КонецЕсли; Пока IE.Document.ReadyState <>«толық» Cycle EndCycle; Ерекшелік, егер SecondCall Содан кейін қайтару; Басқа сілтеме = IE.LocationURL; IE.Quit(); IE = GetCOM («InternetExplorer.Application»); IE.Navigate(Сілтеме); SetExpectIE(IE, True); endIf; EndAttempt; EndProcedure &OnClient функциясы PerformUserAuthorization(IE, Link, Login, Password, Authorized=False, SC=0) Әрекет элементтері = IE.Document.GetElementsByName("username"); Егер Elements.Length = 1 болса, онда әрбір El Of Elements циклі үшін El.Value = Кіру; EndCycle; endIf; Elements = IE.Document.GetElementsByName("құпия сөз"); Егер Elements.Length = 1 болса, онда әрбір El Of Elements циклі үшін El.Value = Құпия сөз; EndCycle; endIf; IE.Document.GetElementById("ID").Click(); SetWaitingIE(IE); Авторизацияланған = Рас; Ерекшелік Егер CN > 3 болса, False мәнін қайтарыңыз; endIf; IE.Quit(); IE.Navigate(Сілтеме); SetWaitingIE(IE); MF = MF + 1; PerformUserAuthorization(IE, Link, Login, Password, SCH) болса, True мәнін қайтарыңыз; endIf; EndAttempt; Return Authorized; EndFunction &OnClient процедурасын жүктеп салу(пәрмен) SpTables = GetListTablesForUpload(); SpTables = False болса, онда қайтарыңыз; endIf; IE = GetCOM («InternetExplorer.Application»); SpTable.SOURCE_LIST ішінен әрбір жол үшін RA циклі = Row.ID; Ресурс = String.RESOURCE; IE.Navigate(Ресурс); SetWaitingIE(IE); Көріңіз, егер Line.NEW_PAGE_IN_LOGIN = 1 Содан кейін Сыныптар = IE.Document.GetElementsByClassName("ClassName"); Егер Classes.Length = 1 болса, онда әрбір сынып үшін сыныптардан цикл ресурсы = Class.All(0).Href; Тоқтату; EndCycle; IE.Quit(); IE = IE.Navigate(Ресурс); SetWaitingIE(IE); Ерекшелік туралы есеп("" +String.NAME + "" сайтына қосылу орындалмады!"); Тоқтату; EndAttempt; Әйтпесе Report("" +String.NAME + "" сайтына қосылу орындалмады!"); Тоқтату; endIf; endIf; Егер орындалмасаUserAuthorization(IE, Ресурс, String.LOGIN, String.PASSWORD) Одан кейін есеп ("" + String.NAME + "" сайтындағы пайдаланушы авторизациясы аяқталмады!"); Тоқтату; endIf; Ресурс = IE.LocationURL; Тұлғалар тізімі = SpTable.FACE_CODES.FindLines(New Structure("SOURCE", RA)); ListNotFound = Жаңа массив; Әрбір адам үшін Тұлғалар тізімінен Цикл АдамАты = Адам.NAME_IN_SITE; Бұл орыс = CharacterCode(PersonName, 1) >= 1040; TechResource = ?(Бұл орысша, StrReplace(Ресурс, "en_US", "ru_RU"), StrReplace(Ресурс, "ru_RU", "en_US")); Егер TekResurs<>IE.LocationURL Содан кейін RootClasses = IE.Document.GetElementsByClassName("СыныпАты"); Егер RootClasses.Length = 1 болса, онда әрбір RootClasses үшін RootClasses циклінің сыныптары = RootClass.Children; Тоқтату; EndCycle; AmGroup = False; RuGroup = False; Әрбір сынып үшін сыныптар циклі HPreg(Class.ClassName) = "ашылмалы тақырып" болса, AmGroup = Find(Class.InnerText, "Americans") > 0; RuGroup = Табу(Class.InnerText, "Еуропа") > 0; ElseIf HPreg(Class.ClassName)<>"таңдалған" Содан кейін AmGroup And Find(Class.All(0).InnerText, "English") > 0 НЕМЕСЕ RuGroup And Find(Class.All(0).InnerText, "Russia") > 0 Содан кейін IE.Navigate(Class) .All(1).Href); SetWaitingIE(IE); Тоқтату; endIf; endIf; EndCycle; endIf; endIf; IE.Document.GetElementById("ID").Мән = Адам аты; FindButton = IE.Document.GetElementById("ID"); FindButton.Focus(); FindButton.Click(); Expect(IE) орнату әрекеті; //Қабылданған деректерді тізбектеу ExceptionListNotFound.Add(Person); Жалғастыру; EndAttempt; EndCycle; Ерекшелік туралы есеп («Қате:» + Symbols.PS + ErrorDescription()); Тоқтату; EndAttempt; EndCycle; IE.Quit(); Процедураның соңы

Жауап:

Тақырып өте қызықты, бірақ, өкінішке орай, менде бұл мәселені түсінуге тәжірибе де, тіпті мүмкіндігі де жоқ. Егер сіз осы тақырып бойынша ақпарат таба алсаңыз, оны бөлісіңіз.
--- Қауымдастықхабарламалар, 2016 жылдың 29 сәуірі ---

Менің түсінуімше, SQl дерекқорына кіру мүмкіндігі жоқ па?

--- Хабарларды біріктіру, 2016 жылдың 29 сәуірі ---

Ал, егер талдау жасалса, онда қандай қолжетімділік?

Сұрақ: COM қосылымы 1C 8.3 - 1C 8.3 Қосылымда отладчикті енгізу мүмкін бе?


Мен форум мүшелерінен 8.3.6 платформасындағы (BP 3.0) бір дерекқордан өздігінен жазылған дерекқордың сыртқы қосылым модуліне (сонымен бірге іске қосылған) өңдеуді пайдалана отырып, COM қосылымы арқылы қосылған кезде мүлде жөндеуге болатынын сұрағым келді. платформасында 8.3.6) және өңдеуді пайдалана отырып одан процедураларды экспорттауды шақыру? Деректер базалары қазіргі уақытта файлға негізделген және бір компьютерде орналасқан, бірақ сервер нұсқасы жоспарланған. Осы уақытқа дейін мен төмендегі конструкцияларды COM қосылымы арқылы орындау үшін ерікті кодты жіберу, сондай-ақ қателерді тіркеу үшін қолдандым. Міне, сыртқы қосылым модуліндегі өздігінен жазылған дерекқордағы процедуралардың фрагменттері:

Функция ExecuteIn(CodeExecute, көмекші параметр = "") Экспорттау
Қауіпсіздікті тексеру(); // Басқа пайдаланушы атынан сыртқы қосылу кезінде зиянды кодты орындау әрекеттерінен қорғауЖауабы = «0» //Ештеңені қайтару қажет болмаса, кодта қателер болмаса  // жай ғана қайтарады  //Себебі Жіберілген кодта қателер болуы мүмкін, содан кейін біз оның орындалуын әрекетке орап аламыз.Орындауға тырысыңыз(CodeExecute); // COM қосылымы арқылы кодты басқа компьютерде жол ретінде орындаңыз (Libra Base сыртқы қосылым модулі)Ерекшелік   //қате болса, оның мәтінін қайтарыңызЖауап = ErrorDetailView(ErrorInfo()); EndAttempt; Жауапты қайтару; EndFunction функциясы TestConnection(InParameter, OutParameter) ExportSecurityCheck(); // Басқа пайдаланушы атынан сыртқы қосылу кезінде зиянды кодты орындау әрекеттерінен қорғау. OutParameter = "COM қосылымы арқылы масштаб негізімен байланыс бар!"; Қайтару True ; EndFunction
BP 3.0-ден мен келесі фрагментті орындаймын:
Әрекет
Com = Жаңа COMObject("V83.COMConnector"); Қосылым = Com.Connect ("Файл=""C:\1 c\Base_1C\Libra""; Usr=""ComExchange""; Pwd=""1"";"); TellUser("Сынақтан өтті! Масштаб дерекқорына қосылым бар"); Ерекшелік қатесі = ErrorDetailView(ErrorInfo()); TellUser("Libra базасына COM қосылымы жоқ! Мәліметтер"+Қате); Com=Анықталмаған; Қайтару; EndAttempt; Out = ""; In = «1»; Connection.Communication Test(In, Out) болса TellUser("Шкала конфигурациясы бар байланыс сынағы сәтті өтті! Жауап: "+Out); Әйтпесе TellUser("Шкал конфигурациясы бар байланыс сынағы сәтсіз аяқталды! Жауап: "+Шығып); EndIf;
Мен, әрине, Execute(CodeString1C8) операторын енгізу мүмкін болмайтынын түсінемін, бірақ қашықтағы модуль процедурасын шақырғанда мұндай мүмкіндік бар ма? сыртқы байланысНегізгі дерекқордан Connection.TestConnections(In, Out) оның кодын олардың шақыру процедурасының Security Check() функциясына бірдей отладчик сеансына енгізу керек пе?
Мен осы мәселе бойынша таба алатын құжаттаманы қарап шықтым. Мен екі конфигурацияда барлық жерде отладка мен үзіліс нүктелерін қосу опцияларын орнаттым. Мен екі конфигураторды да іске қостым.
Бұл жағдайда сыртқы қосылым модулінің жағындағы Security Check() процедурасын одан әрі жөндеу мүмкін бе?

Сұрақ: COM қосылымында қате IP мекенжайы


Серверлер арасында V83.ComConnector арқылы құжаттарды тасымалдайтын өңдеу бар. 1-сервер (1С нұсқасы 8.2.19.90) әрқашан 2-серверге қосылады (8.3.8.2033 нұсқасы). Қосылу желісінде 2-сервердің IP мекенжайы болды және бәрі жақсы жұмыс істеді. 1-сервердің өзінде мен орнатылған платформаны 2-сервердегідей көрдім, 8.3.9.2033 нұсқасы (егер бұл маңызды болса).

Мәселе мынада, 2-серверде IP мекенжайы өзгерді, өңдеу, әрине, жұмысын тоқтатты, және мен қосылым жолына жаңа IP енгізген кезде, өңдеу қатені тудырады, оның сипаттамасы әлі де ескі IP (!) және мәтін. «Қосылым орнату әрекеті сәтсіз аяқталды, себебі қажетті жауап басқа компьютерден қажетті уақыт ішінде алынбады немесе байланыс орнатылғанәлдеқашан қосылған компьютердің дұрыс емес жауабына байланысты».

Олар барлығын қайта жүктеді, кэштерді тазартты және т.б., админдер өз тарапынан бәрі жақсы деп ант береді, бір серверден екіншісіне RDP арқылы кіруге болады, т.б.

Не қате болуы мүмкін, оны қалай шешуге болады? Мен бүкіл интернетті қарап шықтым, мұндай жағдайды таба алмадым!

Жауап:() 100% сенімді! Екінші күні, мен жазғандай, мен оны отладчикпен қараймын, тіпті қосылым сынағы үшін ақымақ бір ұяшықты өңдеуді жасадым, бұл қате пайда болады және бәрі аяқталды.

Сұрақ: Әр түрлі нұсқаларға COM қосылымы


Бәріңе сәлем.
Менде әртүрлі дерекқорлардан әртүрлі деректерді жинайтын және барлығын бір қадаға біріктіретін «Консолидация» дерекқорым бар. Мәселе мынада, сіз бұл дерекқорларға com арқылы қосылуыңыз керек, бірақ олар әртүрлі нұсқалар, сондықтан мен соңында қате пайда болады.
Қосылым қатесі!(ExternalProcessing.TransferHistory.Form.Form.Form(12)): Мәтінмәндік әдісті шақыру кезінде қате (Connect) : Ерекше жағдай орын алды (V83.COMConnector. 1 ) : Клиент пен сервер нұсқалары 1 арасындағы сәйкессіздік C:Enterprise Client нұсқалары әртүрлі және сервер (8.3. 8.1964 - 8.3. 6.2332), клиенттік қолданба: COM қосылымы

Мен бір қосылым орнаттым, екіншісі үзіліп қалды...

Мен қандай да бір түрде құрамдас қызмет арқылы әрбір нұсқа үшін «өз сыныптарыңызды (қосқыштарыңызды)» жасап, содан кейін сыныптың платформа нұсқасына сәйкес Жаңа COM нысанын жасауға болатынын білемін... мүмкін мен қателескен шығармын.

Маған бұл мәселені жеңуге көмектесіңіз ...

Жауап:Болды... сұрақты алып тастаймын..

Сұрақ: Толтыруды өңдеудегі қате


Сәлеметсіз бе.
8.2 Бөлшек сауда 1.
Мен 8.1-ге қосыламын Әдеттегі конф.
com арқылы дерекқорға қосыламын және құжатты жасауға тырысамын, бірақ «CreateDocument()» немесе «GetObject()» шақыру кезінде процедурада қате пайда болады. ӨңдеуТолтыру. суретті қараңыз.

Мен 8.1 дерекқорының өзінде бірдей әрекетті қолданып көремін, бірақ қате жоқ, сонымен қатар толтыру өңдеуге кірмеймін.
Не қате болуы мүмкін?

Жауап: турбок, қисық жазылған құжат модулі!

5 минуттан кейін қосылады
Оны шақырмайды! Ол құрастыруға тырысады! Бірақ ComConnector арқылы қосылу кезінде Диалог режимі мәселесі ЖОҚ БОЛМАЙДЫ, құжат модулін құрастыру мүмкін емес.
Мұндай жағдайларда, объект модулінде диалогпен жұмысты орындау қажет болғанда, препроцессорға нұсқауларды пайдаланыңыз.

Бұл сіздің қателігіңіз емес, сіз қосылып жатқан дерекқордағы құжат модуліндегі қате.

Мәліметтер базасында код клиентте орындалады және диалог режимі бар, сондықтан бәрі қатесіз өтеді.

Қосылу үшін ComConnector, V8.Application қолданбаңыз, сонда интерфейс заттары сізге қолжетімді болады

5 минуттан кейін қосылады
=======================================================================================================================
сыртқы қосылымның сипаттамасынан (СП) Мен ComConnections туралы не оқу керек екенін қалың қаріппен белгіледім

Сипаттама:

Жалпы алғанда, 1С: Кәсіпорын 8-мен сыртқы қосылым арқылы жұмыс істеу серверді автоматтандыру режимінде 1С: Кәсіпорынмен жұмыс істеуге ұқсас. Негізгі айырмашылықтар келесідей:

  • Автоматтандыру сервері жағдайында толыққанды 1C: Enterprise 8 қосымшасы іске қосылады, ал сыртқы қосылым жағдайында салыстырмалы түрде шағын процесстегі COM сервері іске қосылады.
  • Сыртқы қосылым арқылы жұмыс істегенде қол жетімді емес функционалдылық, 1C:Enterprise 8 пайдаланушы интерфейсін ұйымдастырумен байланысты бір немесе басқа әдіс;
  • Сыртқы қосылымды іске қосу кезінде басқарылатын қолданба модулі (модуль тұрақты қолдану) конфигурация 1С:Кәсіпорын 8. Сыртқы қосылыммен жұмыс істеу кезінде оның рөлін сыртқы қосылым модулі атқарады.
Сыртқы қосылымды пайдалану кезінде автоматтандыру серверін пайдаланумен салыстырғанда келесі артықшылықтар бар:
  • Жылдамырақ қосылым орнату, өйткені бөлек процесс жасаудың қажеті жоқ операциялық жүйе, және барлық әрекеттер шақыру процесінде орындалады;
  • 1С:Кәсіпорын нысандарының қасиеттері мен әдістеріне жылдамырақ қол жеткізу, өйткені қол жеткізуді ұйымдастыру процессаралық байланысты қажет етпейді;
  • Операциялық жүйе ресурстарын аз тұтыну.
1С: Enterprise 8 деректеріне сыртқы қосылым арқылы қол жеткізуді ұйымдастыру үшін келесі әрекеттер тізбегі орындалады:
  • COM қосылым менеджері құрылады, оның көмегімен байланыс орнатылады;
  • COM қосылым менеджерінің Connect әдісіне қоңырау шалылады. Connect әдісі сыртқы қосылымды қайтарады ақпараттық база 1С: Кәсіпорын 8;
  • сыртқы қосылым арқылы байланыс орнатылған инфобазаның жарамды әдістеріне, қасиеттеріне және объектілеріне қол жеткізу.
Маңызды! Пайдаланушы интерфейсінің болмауына байланысты барлық объектілерді, қасиеттерді және әдістерді сыртқы байланыста қолдануға болмайды.
Сыртқы біріктіру қамтамасыз етеді толық қолжетімділіконың жаһандық контекстіне. Сондықтан сыртқы байланыс оның әдістері ретінде болуы мүмкін: жүйелік константалар, конфигураторда көрсетілген объектілердің мәндері, оларға қол жеткізу менеджерлердің көмегімен жүзеге асырылады (мысалы, тұрақтылар, тізімдер, каталогтар, құжаттар, құжат журналдары, есептер , өңдеу, сипаттамалар түрлерінің жоспарлары, шоттардың жоспарлары , есептеу түрлерінің жоспарлары, регистрлер), сондай-ақ Экспорт кілт сөзімен сыртқы қосылым модулінде жарияланған айнымалылар.

Қол жетімділік:

Интеграция.

Сұрақ: COM қосылымы, сипаттамалар түрі жоспары


Тапсырма COM қосылымы арқылы сипаттамалық типтердің белгілі жоспарында жаңа элементті бағдарламалық түрде жасау болып табылады. Байланыс орнатылды, мұнда бәрі жақсы.

Мен былай жазамын:

TypeDescriptionTech = Жаңа TypeDescription("DirectoryLink. Қарсы тараптар"); МақсатҚасиеттері = Қосылым. Сипаттама түрлерінің жоспарлары. Объектілер категорияларының қасиеттерінің мақсаттары. FindByName(«Жеке тұлғалар» анықтамалығы»); NewElement = Қосылым. Сипаттама түрлерінің жоспарлары. Нысан сипаттары. CreateItem(); Жаңа элемент. Name = PropertyName; Жаңа элемент. PropertyAssignment = PropertyAssignment; Жаңа элемент. ValueType = DescriptionTypesTech;

Соңғы жол жұмыс істемейді. Және бұл түсінікті, ол 1С жұмыс істейтін деректер қорының түрін табады, бірақ маған тіркелген деректер қорының түрі қажет. Оны қалай алуға болады?

Менің нұсқамда «Пайдаланушы тізім» мән түрі бар элемент жай ғана жасалады. Бұл принцип бойынша жұмыс істейді, бірақ қандай да бір түрде ұсқынсыз.

Платформа 8.3. COM қосылымы міндетті шарт болып табылады. Оны қолданбайтын шешімдер қызығушылық тудырмайды.

Жауап:

Роликтер. Рахмет, ол жұмыс істеді.

Сұрақ: COM қосылымы. Параметр мәселесін сұрау


Қайырлы күн.
COM қосылымы арқылы сұрауға қатысты мәселе.

Перем ТК; ArrayItems = COM.NewObject («Массив»); TZNomenclature циклінің номенклатурасының әрбір жолы үшін = COM.Directories.Nomenclature.GetLink(COM.NewObject("UniqueIdentifier", Abbr(String.Nomenclature.Identifier))); Nomenclature Array.Add(Номенклатура); EndCycle; Егер ArrayItems.Quantity()<>0 Содан кейін Сұраныс = COM.NewObject("Сұраныс"); Request.Text = "ТАҢДАУ |БағаларІtemsSliceLast.Commodities AS номенклатурасы, |PricesItemsSliceLast.SalePrice AS Баға, |PricesItemsSliceLast.RateQS, |PricesItemsSliceLast.RateNP |FROM |Register.PricesSliceLast.RateNP |FROM |Register.PricesSlice. ТүріБағалар |Және инвентарлық қор В ( &Номенклатура массиві) |Және түгендеу және материалдар.Бұл топ = ЖАЛҒАН |Және тіркеуші LINK құжаты.Сату бағасын орнату) AS НоменклатураБағаларСliceLast"; Request.SetParameter («Элемент массиві», Элемент массиві); Request.SetParameter("DataDoc", EndDay(ParametersStructure.DataDoc)); Request.SetParameter("PriceType", COM.Directories.PriceTypes.GetRef(COM.NewObject("UniqueIdentifier", ParameterStructure.PriceType.Identifier))); TZ = COM.NewObject("Мәндер кестесі"); TK = Request.Run().Upload(); Әйтпесе TK = Жаңа мәндер кестесі; TK.Columns.Add("Номенклатура"); TK.Columns.Add("Баға"); TK.Columns.Add("Процент"); TK.Columns.Add("ҚҚС мөлшерлемесі"); endIf;

Мәселе дәл элементте немесе элементтер массивінде; егер сіз оларды параметр ретінде орнатсаңыз, сұрау бос бағаларды қайтарады; егер бұл параметрді мүлде көрсетпесеңіз, сұрау дұрыс деректерді қайтарады.
Сол сыртқы дерекқордың сұрау консолінде барлығы еш қиындықсыз өңделеді.
Не қате болуы мүмкін?

Жауап:

Оны VremTable арқылы жасап көріңіз. Бағандары бар мәндер кестесін жасаңыз. сияқты, оны толтырыңыз, сұрауға тартыңыз, содан кейін оны ішкі қосылыммен қолданыңыз.

Сұрақ: Файлдық дерекқордан файлдық дерекқорға Com қосылымы


Қайырлы таң. Менде 8.3 файлдық дерекқорым бар, одан com қосылымын пайдаланып басқа файлдық дерекқорға қосылуға тырысамын:

Каталог = "C:\Users\1C\Workflow (сынақ)"; Пайдаланушы = «Әкімші»; Құпия сөз = ""; Қосылым параметрлері = "Файл="+Каталог+";Usr="+Пайдаланушы+";Pwd="+Пароль+";"; V83 = Жаңа COMObject("V83.COMConnector"); Қосылу әрекеті = V83.Connect(ConnectionParameters); Ерекшелік туралы есеп («Құжат ағынына қосылу мүмкін болмады!»); EndAttempt;


Ерекшелік қате сипаттамасынсыз шығарылады.
Екі дерекқор да 8.3-те іске қосылуға мәжбүр. Каталог пен пайдаланушы дұрыс көрсетілген. Мұның себебі не болуы мүмкін?

Жауап:

Мен V82 кодының жолын жазамын = Жаңа COMObject(" V83.COMConnector"); ал кодтың қалған бөлігі өзгеріссіз төменде көрсетілген.

Бастапқы және тағайындалған платформалардың нұсқалары әртүрлі болған кезде қате орын алады.

Кітапхананың қай нұсқасын тіркеу керек және оны қайда тіркеу керек екені белгісіз?

Менің ойымша, кітапхананы тіркеу керек, 8.2.18.61 нұсқасы және мен мұны bat файлы арқылы жасаймын

regsvr32 /n /i:пайдаланушы "C:\Program Files (x86)\1cv82\8.2.18.61\bin\comcntr.dll"
үзіліс

msk-test1c:1641 -- бұл сервер 8.3.5.1098
V82 = Жаңа COMObject("V82. COMConnector"); Есеп («Бухгалтерия 3.0 жүйесіне қосылу...»); Қосылу әрекеті = V82. Connect("srvr = ""msk- test1c:1641""; ref = ""db_test""; usr = ""Әкімші""; pwd = ""123"""); Хабарландыру («Қызық байланыс орнатылды!»); Ерекшелік туралы есеп («Дерекқорға қосылым жоқ!»); Report(ErrorDescription()); // Ақпарат = Қате туралы ақпарат(); // Есеп («Сипаттамасы= "" + Ақпарат. Сипаттама + """); // Есеп ("ModuleName= "" + Info.ModuleName + """); // Есеп ("LineNumber=" + Info.LineNumber); // Есеп ("SourceLine=" "" + Info.SourceString + """); Қайтару; EndAttempt;

Кітапхананы қайда тіркеу керек, клиентте, 8.2 серверінде, 8.3 серверінде? Төмендегі сурет.
(клиент-сервер нұсқасы және 1С дерекқорының файлдық нұсқасы үшін)

Жауап:Бір терминалмен веб-сервис арқылы байланысу тапсырмасы болды. Негізі, жеңіл салмақ делік. Сондай-ақ 0,5 немесе жылдам?

Айтуға қиын - менде деректер жеткіліксіз. Бізге 0,5 секунд риза болды, минус үшінші тарап машинасындағы қажетсіз 1С клиенті, минус 1С қозғалтқышын жаңартқаннан кейін кітапхана нұсқаларының синхронизациясы, минус құдайдың қарғыс атқан комсаферлік массиві, қалыпты атаулар мен өріс түрлері... Ол бізді ойлады. екінші жағы (1С-пен біріктірілген жүйе) 1С қоңырауларын жаңа «жүйелік коммуникация үлгісіне» қайта жазу қажет болған кезде «олар түсінбейді». Бірақ сынақ деректер базасында бір функцияны бір рет қолданып көргеннен кейін, енді біз «қызметке мүмкіндігінше тезірек ауысайық» деп мазақтадық.

Сұрақ: TypeContains for Com нысандарын қалай пайдалануға болады?


Attribute.Type.ContainsType(Type("DirectoryLink.Nomenclature")) болса, онда IsNomenclature = True; endIf;

«Reps» басқа 1c дерекқорымен com қосылымынан алынды. Салыстыру кезінде қате пайда болады:

(ExternalProcessing.Coefficient Recalculation.Form.Form.Form(183)): Мәтінмәндік әдісті шақыру кезінде қате (ContainsType)
Егер Attribute.Type.ContainsType(Type("DirectoryLink.Nomenclature")) Содан кейін
себебі:
Ерекше жағдай орын алды (1C: Enterprise 8.3.8.1964): Түр сәйкессіздігі (параметр нөмірі «1»)

Мен оны com түрімен салыстыру керек деп ойлаймын? Түрін қалай дұрыс тексеруге болады?

Жауап:

Ол айналдырмайды. Мен мәселені келесідей шешдім:
Сыртқы қосылым құсбелгісі қойылған жалпы модульдегі қабылдағыш дерекқорында код келесідей:

Функция CheckAttributeType(Атрибут, Түр) Экспортты қайтару Attribute.Type.ContainsType(Type(Type)); EndFunction

Мен қосылатын дерекқорда процедураны Com арқылы шақырамын:

ComConnection.Avis_ExchangeProcedures.CheckAttributeType(Атрибут, "DirectoryLink.Nomenclature")

Басып шығару (Ctrl+P)

1С дерекқорлары арасында деректер алмасу нұсқаларының бірі COM қосылымы арқылы алмасу болып табылады. COM қосылымын пайдаланып, бір 1С дерекқорынан екіншісіне қосылуға және деректерді оқуға немесе жазуға болады. Бұл әдісті дерекқорлардың клиент-сервер нұсқаларында да, файлдық дерекқорларда да қолдануға болады. Бұл мақалада 8.3 платформасындағы қосылымдардың осы түрлері талқыланады

com қосылымы

1С қолданбасы үшін COM нысандарының екі түрін жасауға болады. Бұл байланыстар V83. Қолданба және com қосылымдары V83.COMConnector . болған жағдайда V83. Қолданба 1С қосымшасының толықтай дерлік көшірмесі іске қосылды. Қолдану жағдайында V83.COMConnectorШағын сервер бөлігі іске қосылады. Бұл жағдайда жұмыс жылдамдығы жоғарырақ, бірақ кейбір функциялар қол жетімді болмауы мүмкін. Атап айтқанда, сыртқы қосылымдармен жұмыс істеу қасиеті орнатылмаған пішіндермен және жалпы модульдермен жұмыс істеу. Көбінесе пайдалану керек V83.COMConnectorжәне функционалдық жеткіліксіз болған жағдайда ғана V83. Қолданба. Жұмыс жылдамдығының айырмашылығы үлкен көлемді дерекқорларда әсіресе байқалуы мүмкін. 8.2 платформасы үшін пайдаланылады V82.Application немесе V82.COMConnector

OLE қосылымын орнатыңыз

Қосылым = Жаңа COMObject(“V83.Application” );

COM қосылымын орнатыңыз

Қосылым = Жаңа COMObject(“V83.COMConnector” );

Қосылу жолы

//Клиент-сервер опциясы үшін
Қосылым жолы= “Srvr = ““СерверАты” “;Ref = “ “НегізгіАты” ;
//Файл режимі опциясы үшін:
Қосылым жолы= "Файл = ""PathKBase" «; Usr = Пайдаланушы аты; Pwd = Құпия сөз»;
Әрекет
Қосылым = Байланыс . Қосылу(ConnectionString);
Ерекшелік
Message = New MessageToUser;
Хабар . Мәтін = «Дерекқорға қосылу мүмкін болмады» + СипаттамаҚателер(); Хабар . Есеп беру ();
EndAttempt;

Ажырату

Қосылым = Анықталмаған;
Объект үшін V83. ҚолданбаҚосылымды тоқтату қажет, әйтпесе аяқталмаған сеанс қалады, содан кейін оны қолмен жою керек. болған жағдайда V83.COMConnectorқосылым орындалған процедура аяқталғаннан кейін қосылым автоматты түрде үзіледі және тағы бір кішкентай нүкте бар. Қосылым жасалып жатқан пайдаланушы үшін оның параметрлерінде «Бағдарламаны жабу кезінде растауды сұрау» құсбелгісін өшіру керек.

NewObject() әдісі

Жаңа нысан жасау үшін NewObject() әдісін қолдануға болады, мысалы:

Үшін V83.COMConnector

RequestCOM = Байланыс. NewObject( «Сұраныс») ;
TableCOM = Байланыс. NewObject( «Мәндер кестесі») ;
ArrayCOM = Қосылым. NewObject («Массив» );

ViewCOM =Connection.NewObject

Үшін V83. Қолданба

RequestOLE = Байланыс. NewObject(" сұрау») ;
TableOLE = Қосылым. NewObject(«Мәндер кестесі») ;
ArrayOLE = Connection.NewObject(«Массив»);
ViewCOM =Connection.NewObject(«UniqueIdentifier», StringUID);

RequestCOM . Мәтін =«ТАҢДАУ
| Ұйымдардың лауазымдары.Кодекс,
| Ұйымдардың лауазымдары.Аты
|FROM | Анықтамалық. Ұйымдардың лауазымдары
ҰЙЫМДАРДЫҢ ОРНЫН ҚАЛАЙ ОРЫНДАУ КЕРЕК»;

Нәтиже = RequestCOM. Run();
Үлгі = Нәтиже. Таңдау () ;
Қош бол таңдау. Келесі()Цикл
EndCycle;
Сондай-ақ конфигурация объектісі менеджерлерін пайдалануға болады:
DirectoryCOM = Қосылым. Анықтамалар. DirectoryName;
DocumentCOM = Байланыс. Құжаттама. DocumentName;
RegisterCOM = Қосылым. Ақпараттық регистрлер. RegisterName;

COM қосылымы арқылы санауды қабылдау және салыстыру

Конфигурацияда анықталған санау элементтерінің мәндерін салыстыру үшін бұл элементтерді салыстыру оңай қарапайым түрлердің біріне түрлендіру қажет. Мұндай типтер сандық тип немесе жолдық тип болуы мүмкін. Санақ элементінің мәнін келесідей сандық түрге түрлендіруге болады:

Enum элементі = Connection.Directories.Directory1.FindByCode(1).Props1;

PossibleValues ​​= Enum Element.Metadata().Enum мәндері;

EnumerationElementNumber = PossibleValues.Index(PossibleValues.Find(Connection.XMLString(EnumerationElement)));

EnumerationItemNumber = 0 болса, онда есеп( «сандық мән1»);

ElseIfEnumerationItemNumber = 1 Содан кейінЕсеп («Есептік мән 2»);

endIf;

Идентификатор арқылы COM арқылы нысанды шығарып алу

Конфигурация нысанының менеджерлері арқылы біз com нысанын аламыз, мысалы:
DocumentCOM = Байланыс. Құжаттама. DocumentName;

Содан кейін біз бірегей идентификатор жолын аламыз:

StringUID =Connection.string ( DocumentCOM.UniqueIdentifier())

Идентификатор = Жаңа U бірегейидентификатор(StringUID);
МЕН linkByIdentifier = Documents[DocumentName].GetLink(Идентификатор);

com нысанын құжат бойынша идентификатор бойынша табу қажет болса, келесідей жазу керек:

WidCOM = Connection.NewObject(«UniqueIdentifier», StringUID);
LinkByIdentifier = Connection.Documents[DocumentName].GetLink(WidCOM);

Деректерді бір 1С конфигурациясынан екіншісіне тасымалдаудың бір жолы - COM көмегімен бағдарламалық құралды қосу. Көптеген компаниялар бірнеше түрлі деректер қорын пайдаланады, олардың арасында белгілі бір байланыстар мен тәуелділіктер болуы керек. Егер деректерді тасымалдау ғана емес, сонымен қатар белгілі бір деректерді өңдеуді орындау қажет болса, онда COM қосылымы оңтайлы механизм болады. Басқа 1С дерекқорынан деректерді талдау мүмкіндігі кез келген әзірлеушіге пайдалы.

Біз COM арқылы 1С деректер базасына қосыламыз

1С жүйесінде COM қосылымын жүзеге асыру үшін COMConnector деп аталатын арнайы механизм қолданылады. Бұл нысан платформамен бірге орнатылады және инфобазаларды қосу үшін қолданылады. Айта кету керек, 8.2 және 8.3 нұсқалары үшін әртүрлі атаулары бар нысандар пайдаланылады - тиісінше «V82.COMConnector» және «V83.COMConnector».

Дерекқорға COM қосылымының ұзақтығы лицензияны талап ететінін есте сақтаңыз - бірнеше қосылымдарды бір уақытта орындаумен айналыспаңыз. Бұл лицензиялардың шектеулі саны бар ұйымдар үшін өте маңызды. Бұл мәселені ақпараттық базаға белсенді пайдаланушы қосылымдары болмаған кезде орындалатын әдеттегі тапсырмалардың көмегімен шешуге болады.

Басқа дерекқорға қосылу және қажетті ақпаратты сұрау үшін келесі деректерді білу қажет:

  1. Бұл қандай тип – файл немесе клиент-сервер;
  2. Қай жерде орналасқан;
  3. Жүйеге кіру үшін қандай ат пен парольді қолдануға болады?
  4. Сізді қандай деректер қызықтырады?

Алғашқы үш нүктеден бастап COM қосылымын жүзеге асыру үшін параметрлер жолын жасау керек. Ақпаратты қорғау түріне байланысты ол әр түрлі болады сыртқы түрі. Алынған жолдың көмегімен қосылым жасалады, оның көмегімен кез келген әдістерді қолданып талдау және өңдеу үшін басқа деректер базасынан деректерді жинауға болады.

Connection ParametersFileIB = "Файл=""Дерекқорға_жол""; Usr=""Пайдаланушы_аты"";Pwd=""Пароль"""; Connection ParametersClientServerIB = "Srvr=""Server_Name""; Ref=""Дерекқор_атауы""; Usr=""Пайдаланушы_аты""; Pwd=""Пароль""";

Қосылым функциясы қарапайым және барлық параметрлер дұрыс көрсетілген болса, ешқандай сұрақ тудырмауы керек. Түзету мен талдауды жылдамдату үшін мүмкін қателерқосылымды «Байқап көр» конструкциясына салған дұрыс. Функция қажетті деректерді алу үшін жұмыс істейтін «COM нысаны» түрінің мәнін қайтарады.

&OnServer функциясы ConnectToBase() exportConnectionIB Параметрлері = "Файл=""E:\1c дерекқор\ERP""; Usr=""Әкімші"";Pwd=""1"""; V83COMCon= Жаңа COMObject("V83.COMConnector"); V83COMCon.Connect қайтару әрекеті(IB қосылым параметрлері); Ерекшелік туралы есеп(ErrorDescription()); Анықталмаған қайтару; EndAttempt; EndFunction

COM қосылымы арқылы деректерді таңдап қана қоймай, оны қосылып жатқан дерекқорға қосуға болады. Есіңізде болсын, біз COM нысаны арқылы 4 қарапайым деректер түрін тасымалдай аламыз. Басқа түрлерді платформаның кірістірілген іздеу функциялары арқылы көрсету керек. Ғаламдық платформа функциялары COM қосылымы арқылы да шақырылатынын ескеріңіз.

Біз 1С деректер базасынан деректерді аламыз

Қажетті нысанды алғаннан кейін басқа дерекқордан деректерді оқу керек. Мұны істеу үшін біз функциядан «COM нысаны» түрінің алынған мәнін пайдаланып, 1С 8.3 жүйесінде COM қосылымы арқылы сұрауды қолданамыз. Алдымен дерекқорға қосылу, содан кейін сұранысты орындау маңызды. Орындау «Сұраныс» параметрі ретінде жол түрінде нысан түрін көрсете отырып, NewObject әдісі арқылы жүзеге асырылады.

&OnServer процедурасы TestCOMOnServer() Қосылым = ConnectToBase(); TypeValue(Connection) Type("Анықталмаған") болса, RequestBPZO = Connection.NewObject("Сұраныс"); RequestBPZO.Text = "Алғаш 15 ТАҢДА | DirectoryUser.Name AS Name |FROM | Directory.users AS DirectoryUser"; Select = RequestBPZO.Execute().select(); While Selection.next() циклі Report(Selection.Number); EndCycle; endIf; Процедураның соңы >

Мысалы, белгілі бір бөлімнің пайдаланушылары туралы ақпаратты алу үшін параметрлер арқылы сұрауда шарт қоямыз. Бір параметр қарапайым типті болады – жол, ал бөлім «Кәсіпорын құрылымы» каталог элементіне сілтеме болады. Сұрау нәтижесі COM қосылымы орын алған дерекқорда бар түрдегі тізімделген өрістері бар кесте болып табылады. Оларды басқа түрлерге түрлендіру қажет болса, стандартты платформа функцияларын пайдаланыңыз:

  • Түзу();
  • Number();
  • Күні().
RequestBPZO = Connection.NewObject("Сұраныс"); RequestBPZO.Text = "Алғаш 15 ТАҢДА | DirectoryUser.Name AS Name | FROM | Directory.Users AS DirectoryUser I ҚАЙДА | DirectoryUser.Department = &RequiredDepartment | Және DirectoryUser.Name сияқты ""%"" + &RequiredName+ ""%""" ; Request BPZO.SetParameter("Қажетті бөлім", Қосылым. Анықтамалар. Кәсіпорын құрылымы. Код бойынша табу("00-000023")); RequestBPZO.SetParameter("ҚажеттіАты","Екатерина"); Select = RequestBPZO.Execute().select(); While Selection.next() циклі Report(Selection.Name); EndCycle;

Бірнеше параметрлерге, мысалы, бөлімдерге негізделген таңдау үшін массивді дерекқорға тасымалдау қажет болса, NewObject командасы да қолданылады. Сол сияқты, қосылым арқылы оларды басқа дерекқордың элементтерімен толтыра отырып, тізімді немесе мәндер кестесін беруге болады. Іздеу үшін барлығы қол жетімді бар әдістерплатформа объектілері мен механизмдері.

RequestBPZO = Connection.NewObject.("Сұраныс"); RequestBPZO.Text = "Алғаш 15 ТАҢДА | DirectoryUser.Name AS Name | FROM | Directory.Users AS DirectoryUser I ҚАЙДА | DirectoryUser.Department B (&NecessaryDepartment) | Және DirectoryUser.Name ""%"" + &NecessaryName+ ""%" " "; Бөлімдердің массиві = Connection.NewObject("Массив"); Бөлімдердің массиві.Қосу(Connection.Directories.Кәсіпорын құрылымы.Код бойынша табу("00-000023")); Бөлімдердің массиві.Қосу(Connection.Directories.Кәсіпорын құрылымы.Код бойынша табу("00-000038")); Бөлімдердің массиві.Қосу(Connection.Directories.Кәсіпорын құрылымы.Код бойынша табу("00-000046")); BPZO.SetParameter сұранысы («Қажетті бөлім», Бөлімдердің массиві); RequestBPZO.SetParameter("ҚажеттіАты","Екатерина"); Select = RequestBPZO.Execute().select(); While Selection.next() циклі Report(Selection.Name); EndCycle;

Құжаттарды немесе каталог элементтерін тасымалдау кезінде әрқашан белгілі бір объектінің берілуін бақылау туралы сұрақ туындайды. COM қосылымдарының көмегімен мұндай мәселелерді бірегей идентификатор арқылы шешуге болады. «GetLink» функциясын пайдаланып, идентификаторды жол ретінде пайдалана отырып, ағымдағы ақпараттық қауіпсіздіктен идентификатор бойынша қосылатын модуль дерекқорындағы нысанды табу керек. Егер біреуі табылмаса, оны COM қосылымы арқылы жасауға болады.

StrIdent = Жол(Directories.Users.FindByCode("00-0000313").UniqueIdentifier()); Егер ValueFilled NOT (Connection.Directories.Users.GetLink(Connection.NewObject("UniqueIdentifier", StrIdent))) болса, NewUser = Connection.Directories.Users.CreateItem(); NewUser.Name = Directories.Users.FindByCode("00-0000313").Аты; NewUser.Individual = Directories.Users.FindByCode("00-0000313").Жеке; NewUser.Write(); endIf;

Сондай-ақ, COM қосылымы «Сыртқы қосылым» қасиеті қосылған жалпы 1С модульдеріндегі процедуралар мен функцияларды пайдалануға құқылы. Осы шартқа қосымша шақырылатын функция немесе процедура экспортталатын болуы және серверде орындалатын интерактивті әрекеттерді қамтымауы керек. Әйтпесе, операция жарамсыз екендігі туралы қатені көресіз.

Құрама..; VariableFunction = Қосылым..; функция шақыру>жалпы модуль аты>процедураны шақыру>жалпы модуль аты>

1С-те басқа дерекқормен сыртқы қосылу мүмкіндіктері өте кең және көптеген тапсырмаларды орындауға мүмкіндік береді. Құралдарды дұрыс бағалай білу және оңтайлы шешімді таңдай білу маңызды. Көп жағдайда бұл дағды тәжірибе немесе тәжірибелі мамандардың жұмысының мысалдарын зерттеу арқылы ғана пайда болады.


Түйін сөздер: COM, қосылым, сыртқы, OLE, Automation, Connect, ComConnector, Srvr

Деректерге қол жеткізу үшін 1С: Enterprise 8.0 COM қосылымдарын пайдалану кезінде автоматтандыру серверін пайдаланумен салыстырғанда келесі артықшылықтар бар:

  1. Қосылымды тезірек орнату, өйткені операциялық жүйенің бөлек процесін жасаудың қажеті жоқ және барлық әрекеттер шақыру процесінде орындалады;

  2. 1С:Кәсіпорын нысандарының қасиеттері мен әдістеріне жылдамырақ қол жеткізу, өйткені қол жеткізуді ұйымдастыру процессаралық байланысты қажет етпейді;
  3. Операциялық жүйе ресурстарын аз тұтыну.

Жалпы алғанда, COM қосылымы арқылы 1C: Enterprise 8.0 бағдарламасымен жұмыс істеу серверді автоматтандыру режимінде 1С: Enterprise бағдарламасымен жұмыс істеуге ұқсас. Негізгі айырмашылықтар келесідей:

  1. Автоматтандыру сервері жағдайында толыққанды 1C: Enterprise 8.0 қосымшасы іске қосылады, ал COM қосылымы жағдайында салыстырмалы түрде шағын процесстегі COM сервері іске қосылады.

  2. COM қосылымы арқылы жұмыс істегенде, 1С: Enterprise 8.0 пайдаланушы интерфейсін ұйымдастыруға қатысты қандай да бір жолмен функционалдылық қол жетімді емес;
  3. COM қосылымын пайдалану кезінде 1C: Enterprise 8.0 конфигурациясының қолданбалы модулі пайдаланылмайды. COM қосылымымен жұмыс істеу кезінде оның рөлін сыртқы қосылым модулі атқарады.

1.1 COM қосылымын орнату тәртібі

COM қосылымы арқылы 1С: Enterprise 8.0 деректеріне қол жеткізуді ұйымдастыру үшін келесі әрекеттер тізбегі орындалады:

  1. COM объектісі V8.COMConnector идентификаторымен құрылады, оның көмегімен байланыс орнатылады;

  2. бұрын жасалған V8.COMConnector нысанының Connect әдісі шақырылады. Connect әдісі 1C:Enterprise 8.0 ақпараттық базасы бар COM қосылым нысанына сілтемені қайтарады;
  3. Алынған COM қосылым нысаны арқылы байланыс орнатылған инфобазаның жарамды әдістеріне, қасиеттеріне және нысандарына қол жеткізіледі.

Маңызды! COM қосылымында пайдаланушы интерфейсінің болмауына байланысты COM қосылымында барлық нысандарды, қасиеттерді және әдістерді пайдалану мүмкін емес.

1С: COM қосылымы арқылы сырттан қол жеткізуге болатын кәсіпорын объектілері:

  1. Экспортталған айнымалылар және сыртқы біріктіру модулінің процедуралары/функциялары

  2. Экспортталған айнымалылар және жалпы модульдердің процедуралары/функциялары
  3. Жалпы модульдердің сипаттарын орнату арқылы толық модульдерді қосу және шығару

  4. Препроцессордың көмегімен жалпы модульдердің фрагменттерін қосу және шығару
  5. Жаһандық контекст 1С: Enterprise 8.0, клиенттік қосымшамен тығыз байланысты нысандарды қоспағанда (TextDocument, TabularDocument, ...)

1.2 Сыртқы қосылым модулі

Жоғарыда айтылғандай, COM қосылымы арқылы жұмыс істеу кезінде қолданбалы модульдің жауапкершілігі сыртқы қосылым модулімен орындалады. Бұл модульде SystemStarts() және WhenSystemCompletes() оқиғалар өңдегіш процедуралары болуы мүмкін, олар сәйкесінше қосылымды инициализациялау және тоқтату кезінде орындалатын әрекеттерді қамтуы мүмкін.

Экспорт кілт сөзімен сыртқы біріктіру модулінде анықталған процедуралар, функциялар және жаһандық айнымалылар қолданбалы модуль жағдайындағыдай жаһандық мәтінмәннің бөлігі болады.

1.3 Жалпы модульдер

Жалпы модульдер үшін «Клиент», «Сервер» және «Сыртқы қосылым» қасиеттері енгізілген. Олар конфигурацияда модульдерді клиент-сервер нұсқасында және COM қосылу режимінде пайдалануды анықтауға арналған.

1.4 "V8.COMConnector" нысаны

V8.COMConnector COM нысанымен шешілетін жалғыз тапсырма 1С: Enterprise 8.0 ақпараттық базасымен COM байланысын орнату болып табылады. V8.COMConnector нысанының бір данасын пайдаланып қосылымдардың шексіз санын орнатуға болады. V8.COMConnector нысанында 1С: Enterprise 8.0 ақпараттық базасымен COM қосылымын орнатуға арналған жалғыз Connect әдісі бар.

<СтрокаСоединенияИБ>

Ақпараттық қауіпсіздік жүйесімен байланыс желісі Параметр=Мән түріндегі фрагменттердің тізбегі болып табылады. Фрагменттер бір-бірінен «;» арқылы бөлінеді. Егер мәнде бос орын болса, ол ішіне қосылуы керек қос тырнақша (").

Жалпы параметрлер:

Usr - пайдаланушы аты;
Pwd - құпия сөз.

Файл нұсқасы үшін келесі параметр анықталған:

Файл – ақпараттық база каталогы.

Клиент-сервер опциясы үшін келесі параметрлер анықталған:

Srvr - 1C: Кәсіпорын серверінің атауы;
Ref - сервердегі ақпараттық базаның атауы.

Connect әдісі 1С: Enterprise 8.0 ақпараттық базасына COM қосылымын орнатады және COM қосылым нысанына сілтемені қайтарады.

// Коннектор нысаны жасалды
V8 = Жаңа COMObject("V8.COMConnector");
// COM қосылым нысаны жасалады
Қосылым = V8.Connect("Файл=""c:\InfoBases\Trade""; Usr=""Директор"";")

1.5 COM қосылым нысаны

1С: Enterprise ақпараттық базасына COM қосылымы оның ғаламдық контекстіне толық қол жеткізуді қамтамасыз етеді («Бағдарлама модулін орындау контекстін» қараңыз). Сондықтан, COM қосылымы оның әдістері ретінде болуы мүмкін: жүйелік константалар, басқарушылар арқылы қол жеткізілетін объектілер конфигураторында көрсетілген мәндер (мысалы, тұрақтылар, тізімдер, каталогтар, құжаттар, құжат журналдары, есептер, өңдеу, типтердің жоспарлары. сипаттамалар, жоспарлар шоттары, есептеу түрлерінің жоспарлары, регистрлер), сондай-ақ Export кілт сөзімен сыртқы қосылым модулінде жарияланған айнымалылар.

Сонымен қатар, COM қосылымында белгілі бір түрлердің мәндерін жасау үшін пайдалануға болатын қосымша NewObject әдісі бар.

tk = Қосылым. NewObject («Мәндер кестесі»);

Жолдық әдіс 1С:Кәсіпорын мәндерінің жолдық көріністерін алуға мүмкіндік береді.

Көрініс = Connection.String(Data.UniqueIdentifier());

1.6. COM қосылымымен жұмыс істеу ерекшеліктері

Автоматтандыруда және COM қосылымында TRUE және FALSE келесі мәндерге ие: -1 (минус бір) және 0.

COM қосылымдарының пулын ұйымдастыруға болады. Бұл ретте 1С: Enterprise қабылдаушы серверінде бірнеше COM қосылым нысандары АЛДЫДА құрылады және қосылымды орнатуға бұдан да аз уақыт кетеді, өйткені жаңа нысан жасаудың қажеті жоқ.

Көрсетілген параметрлер негізінде сұрау мәтіндерін құруға арналған жаңа Query Builder нысаны енгізілді. Бұл нысанэлектрондық кесте құжатына есепті шығаруға және мыналарға қатысты басқа тапсырмаларға қатысы жоқ есеп құрастырушы функционалдығын қолдайды. пайдаланушы интерфейсі. Бұл нысанды 1С: Enterprise серверінде және COM қосылымында пайдалануға болады.

1С: Enterprise серверінде ендірілген тілді іске қосу кезінде COM объектілерін пайдалануға болады.

COM қателері ендірілген тіл ерекшеліктеріне түрлендіріледі.

Егер конфигурация жарамсыз нысанды жасауға әрекеттенсе, мысалы. электрондық кесте құжаты, сыртқы қосылым модулінде, ортақ модульде немесе нысан модулінде COM қосылымы ерекше жағдай ретінде орнатылмауы немесе үзілуі мүмкін.

1С дерекқорлары арасында деректер алмасу нұсқаларының бірі COM қосылымы арқылы алмасу болып табылады.

COM қосылымын пайдаланып, бір 1С дерекқорынан екіншісіне қосылуға және деректерді оқуға немесе жазуға болады. Бұл әдісті дерекқорлардың клиент-сервер нұсқаларында да, файлдық дерекқорларда да қолдануға болады. Бұл мақалада біз қосылымның осы түрінің мысалдарын қарастырамыз. Мысалдар 8.2 платформасын пайдаланады.

1С қолданбасы үшін COM нысандарының екі түрін жасауға болады. Бұл V82. ҚолданбаЖәне V82.COMConnector. болған жағдайда V82. Қолданба 1С қосымшасының толықтай дерлік көшірмесі іске қосылды. пайдаланған жағдайда V82.COMConnectorШағын сервер бөлігі іске қосылады.
Бұл жағдайда жұмыс жылдамдығы жоғарырақ, бірақ кейбір функциялар қол жетімді болмауы мүмкін. Атап айтқанда, сыртқы қосылымдармен жұмыс істеу қасиеті орнатылмаған пішіндермен және жалпы модульдермен жұмыс істеу. Көбінесе пайдалану керек V82.COMConnectorжәне функционалдық жеткіліксіз болған жағдайда ғана V82. Қолданба. Жұмыс жылдамдығының айырмашылығы үлкен көлемді дерекқорларда әсіресе байқалуы мүмкін.

Ендеше, бастайық

  1. COM объектісін жасайық
    • Үшін V82. ҚолданбаҚосылым = Жаңа COMObject("V82.Application" ) ;
    • Үшін V82.COMConnectorҚосылым = Жаңа COMObject("V82.COMConnector" );
  2. Қосылым жолын жасайық
    • дерекқордың сервер нұсқасы үшін ConnectionString = "Srvr = " "ServerName" ";Ref = " "BaseName" ;
    • дерекқордың файлдық нұсқасы үшін ConnectionString = "Файл = " "PathKBase" "; Usr = Пайдаланушы аты; Pwd = Құпия сөз";
  3. Дерекқорға қосылуҚосылу әрекеті = Қосылу. Connect(ConnectionString) ; Ерекшелік хабары = Жаңа MessageToUser; Хабар. Мәтін = + ErrorDescription() ; Хабар. Есеп беру (); EndAttempt;
  4. Дерекқордан ажыратылудаҚосылым = Анықталмаған;

    Объект үшін V82. ҚолданбаҚосылымды тоқтату қажет, әйтпесе аяқталмаған сеанс қалады, содан кейін оны қолмен жою керек. болған жағдайда V82.COMConnectorқосылым орындалған процедура аяқталғаннан кейін қосылым автоматты түрде үзіледі және тағы бір кішкентай нүкте бар.

    Қосылым жасалып жатқан пайдаланушы үшін оның параметрлерінде «Бағдарламаны жабу кезінде растауды сұрау» құсбелгісін өшіру керек.

Енді барлық кодты біріктірейік

Қосылым = Жаңа COMObject("V82.Application" ) ; //Connection = Жаңа COMObject("V82.COMConnector"); ConnectionString = "Srvr = " "Server1C" ";Ref = " "MyBase" "; Usr = Петя; Pwd = 123" ; //ConnectionString = "Файл = ""С:\MyBase""; Usr = Петя; Pwd = 123";Қосылу әрекеті = Қосылу. Connect(ConnectionString) ; Ерекшелік хабары = Жаңа MessageToUser; Хабар. Мәтін = «Дерекқорға қосылу мүмкін болмады»+ DescriptionError(); Хабар. Есеп беру (); EndAttempt; Қосылым = Анықталмаған;

Қосылым түрі үшін V82. Қолданбаәдіс бастапқыда жасалған COM нысаны үшін және үшін пайдаланылады V82.COMConnectorқосу әдісі қолданылады. сұраныспен одан әрі жұмыс стандартты құралдар 1С. кодта бұл келесідей көрінеді:

Сұраныс = Қосылым. NewObject("Сұраныс" ); // Үшін V82.COMConnector Сұраныс = Қосылым. NewObject("Сұраныс" ); // Үшін V82. Қолданба Сұраныс. Мәтін = «ТАҢДАУ | Ұйымдардың лауазымдары.Кодекс, | Ұйымдардың лауазымдары.Аты|FROM | Анықтамалық.Ұйымдар лауазымдары AS Ұйымдардың лауазымдары»; Нәтиже = Сұраныс. Run(); Үлгі = Нәтиже. Таңдау() ; Қош бол таңдау. Next() Loop EndLoop ;

1C: Enterprise 8.3 нұсқасы үшін барлығы өзгеріссіз қалады, тек COM нысандарын жасау кезінде сіз пайдалануыңыз керек. "V83.COMConnector"немесе "V83. Қолданба".




Жоғарғы