За стомашно-чревни заболявания

Една от възможностите за обмен на данни между бази данни 1C е обменът чрез COM връзка.

С помощта на COM връзка можете да се свържете от една 1C база данни към друга и да четете или записвате данни. Този метод може да се използва както в клиент-сървър версии на бази данни, така и във файлови бази данни. В тази статия ще разгледаме примери за този тип връзка. Примерите използват платформа 8.2.

Можете да създадете два типа COM обекти за приложението 1C. Това V82.ПриложениеИ V82.COMConnector. В случай на V82.ПриложениеСтартира се почти пълноценно копие на приложението 1C. в случай на използване V82.COMConnectorСтартира се малка сървърна част.
Скоростта на работа в този случай е по-висока, но някои функции може да не са налични. По-специално, работа с формуляри и общи модули, за които не е зададено свойството да работят с външни връзки. Най-вече трябва да използвате V82.COMConnectorи то само при липса на функционалност V82.Приложение. Разликата в скоростта на работа може да бъде особено забележима при бази данни с голям обем.

Така че да започваме

  1. Нека създадем COM обект
    • За V82.ПриложениеВръзка = Нов COMObject("V82.Application" ) ;
    • За V82.COMConnectorВръзка = Нов COMObject("V82.COMConnector" ) ;
  2. Нека създадем низ за свързване
    • за сървърната версия на базата данни ConnectionString = "Srvr = " "ServerName" ";Ref = " "BaseName" ;
    • за файловата версия на базата данни ConnectionString = "File = " "PathKBase" "; Usr = потребителско име; Pwd = парола";
  3. Свързване към базата данниОпит за свързване = Връзка. Connect(ConnectionString) ; Съобщение за изключение = New MessageToUser; Съобщение. Text = + ErrorDescription() ; Съобщение. Докладвам() ; EndAttempt ;
  4. Прекъсване на връзката с базата данниВръзка = Недефинирана;

    За обект V82.ПриложениеНеобходимо е да прекратите връзката, в противен случай ще остане незавършена сесия, която след това ще трябва да бъде изтрита ръчно. В случай на V82.COMConnectorвръзката се прекъсва автоматично, когато процедурата, в която е направена връзката, е завършена. И има още една малка точка.

    За потребителя, под който се осъществява връзката, квадратчето „Искане на потвърждение при затваряне на програмата“ трябва да бъде деактивирано в настройките му.

Сега нека съберем целия код

Връзка = Нов COMObject("V82.Application" ) ; //Връзка = Нов COMObject("V82.COMConnector"); ConnectionString = "Srvr = " "Server1C" "; Ref = " "MyBase" "; Usr = Petya; Pwd = 123" ; //ConnectionString = "Файл = ""С:\MyBase""; Usr = Петя; Pwd = 123";Опит за свързване = Връзка. Connect(ConnectionString) ; Съобщение за изключение = New MessageToUser; Съобщение. Текст = „Не може да се свърже с базата данни“+ DescriptionError() ; Съобщение. Докладвам() ; EndAttempt ; Връзка = Недефинирана;

За тип връзка V82.Приложениеметодът се използва за COM обекта, който е създаден първоначално, и за V82.COMConnectorметодът се прилага към връзката. След това заявката се обработва с помощта на стандартни инструменти 1C. в кода изглежда така:

Заявка = Връзка. NewObject("Заявка"); // За V82.COMConnector Заявка = Връзка. NewObject("Заявка"); // За V82.Приложение Заявка. Текст = „ИЗБЕРЕТЕ | Позиции на организациите. | Позиции на организации. Име| ОТ | Справочник на позициите на организациите AS.; Резултат = Искане. Изпълнение(); Проба = Резултат. Избирам() ; Чао Избор. Next() Loop EndLoop ;

За версия 1C:Enterprise 8.3 всичко остава непроменено с изключение на това, че когато създавате COM обекти, трябва да използвате "V83.COMConnector"или "V83. Приложение".

) Това е вярно

В същото време съм виждал повече от веднъж, когато публикации, които дори не са достигнали 10 точки, просто „излитат“.
Защо се случи това? Явно защото някой явно ги е харесал.


Това е, което казвам, че би било хубаво да разберете колко имате нужда от него, без да четете статията за рейтинг, или да го оцените не толкова примитивно +/-. Колкото до това, което ми хареса, бих го коригирал по следния начин: спечели толкова много поради факта, че звездите се подредиха и много хора се събраха в сайта и много го харесаха, сами разбирате, че това е въпрос на случайност, защото Веднага след като дадена статия напусне главната страница, тя може да бъде намерена само по заявка и така всеки минаващ гласува. И, доколкото разбирам, постоянните коментари = популяризиране на статията ви позволяват да я поддържате на главната страница.
Точно затова те поставят магазини на обществени улици - в крайна сметка това, което често е важно не е качеството и уместността на стоките, а проходимостта на мястото; хората, които се разхождат, често купуват нещо, което просто ще изхвърлят на следващия ден в името на процеса. Това е отдавна позната на всички болест – пристрастяването към пазаруването. Или просто увеличаването на потока увеличава вероятността за правилния купувач.

И плюсовете и минусите... - това е просто един вид "благодаря" за отделеното време и труд


Тези. Минусът също ли се брои за „благодаря“? Исках да знам вашето мнение дали трябва да се използва в такива случаи и колко интересно е мнението на другите? Когато статията е вредна/лоша или просто безполезна/празна за теб да я сложиш?
Според мен статията изглежда като обикновено повишаване на рейтинга, защото:
1. Проблемът с типовете, който цитирах, беше напълно игнориран от автора, въпреки че не го мързеше да напише куп коментари.
2. В статията има очевидна неточност: твърди се, че това е единственият начин

V82 = Нов COMObject("V82.ComConnector"); Код = AccountCOM.Code;


но мога лесно да го направя, използвайки обработка като тази:

Доклад(База. Директории. Контрагенти. Търсене по име("LLC"). Код);


и всичко е наред! И избирам връзката V82.ComConnector
Някак странно е, че на автора изобщо не му пука, че статията му съдържа посочените проблеми, но не реагира по никакъв начин.
3. Но все още има проблем, когато се появи грешката „Класът не съществува“.
4. Но има проблем, когато се инсталира 8.2, а след това 8.1 - опитайте да обмените през OLE/COM със стандартен UT-BP обмен!
5. Бихте ли посочили основната обработка на сайта, която позволява универсално свързване през OLE/COM, така че начинаещите да не губят време, вие пишете за тях! Между другото, по някаква причина нейната снимка е на вашия дисплей, защо? И в резултат 2 думи по същество и още 6 зад кадър.

Като цяло не хвърлям кал, но посочвам конкретни пропуски, но няма реакция. Ако това е опитът, който споделяте, значи е някак погрешен и непълен.
Мисълта ми е, че ако авторът имаше желание да събере всички бъгове, той можеше поне да изслуша опита на други хора, а не да се заяжда с коментари. Веднага възниква ситуация, когато прочелият знае повече от автора, казват му (понякога неправилно), а той също отвръща. В резултат на това цялата информация не е в статията, а в коментарите! Забавен! Това често се случва, но не е нужно да се фокусирате върху факта, че сте искали най-доброто - аз показвам най-доброто, а другите го показват! Включете това в статията и ще си струва, не всеки има интерес да чете тази схватка.


Ключови думи: COM, свързване, външно, OLE, автоматизация, свързване, ComConnector, Srvr

Когато използвате 1C:Enterprise 8.0 COM връзки за достъп до данни, има следните предимства в сравнение с използването на сървър за автоматизация:

  1. По-бързо установяване на връзка, тъй като не е необходимо да се създава отделен процес на операционната система и всички действия се извършват в процеса на извикване;

  2. По-бърз достъп до свойствата и методите на обектите на 1C:Enterprise, тъй като организирането на достъп не изисква междупроцесна комуникация;
  3. По-малко потребление на ресурси на операционната система.

По принцип работата с 1C:Enterprise 8.0 чрез COM връзка е подобна на работата с 1C:Enterprise в режим на автоматизация на сървъра. Основните разлики са следните:

  1. В случай на сървър за автоматизация се стартира пълноценно приложение 1C:Enterprise 8.0, а в случай на COM връзка се стартира сравнително малък COM сървър в процеса.

  2. При работа чрез COM връзка не е налична функционалност, по един или друг начин свързана с организацията на потребителския интерфейс на 1C:Enterprise 8.0;
  3. При работа с COM връзка не се използва приложният модул за конфигуриране на 1C:Enterprise 8.0. Неговата роля при работа с COM връзка се играе от модула за външна връзка.

1.1 Процедура за установяване на COM връзка

За да организирате достъпа до данните на 1C:Enterprise 8.0 чрез COM връзка, се извършва следната последователност от действия:

  1. създава се COM обект с идентификатор V8.COMConnector, с помощта на който се осъществява връзката;

  2. извиква се методът Connect на предварително създадения обект V8.COMConnector. Методът Connect връща връзка към обект за COM връзка с информационната база 1C:Enterprise 8.0;
  3. Чрез получения обект за COM връзка се осъществява достъп до валидните методи, свойства и обекти на информационната база, с която се осъществява връзката.

важно!Поради липсата на потребителски интерфейс в COM връзка, не всички обекти, свойства и методи могат да се използват в COM връзка.

1C:Enterprise обекти, достъпни външно чрез COM връзка:

  1. Експортирани променливи и процедури/функции на външния модул за свързване

  2. Експортирани променливи и процедури/функции на общи модули
  3. Включване и изключване на цели модули чрез задаване на свойства на общи модули

  4. Включване и изключване на фрагменти от общи модули с помощта на препроцесор
  5. Глобален контекст 1C:Enterprise 8.0, с изключение на обекти, тясно свързани с клиентското приложение (TextDocument, TabularDocument, ...)

1.2 Модул за външна връзка

Както вече беше отбелязано, отговорностите на приложния модул при работа чрез COM връзка се изпълняват от модула за външна връзка. Този модул може да има процедури за манипулиране на събития When SystemStarts() и WhenSystemCompletes(), които могат да съдържат действия, извършвани съответно при инициализация и прекратяване на връзката.

Процедурите, функциите и глобалните променливи, дефинирани във външен модул за присъединяване с ключовата дума Export, стават, както в случая на приложен модул, част от глобалния контекст.

1.3 Общи модули

За общи модули са въведени свойствата "Клиент", "Сървър" и "Външна връзка". Те са предназначени да определят в конфигурацията използването на модули във версия клиент - сървър и в режим на COM връзка.

1.4 Обект "V8.COMConnector"

Единствената задача, решавана от COM обекта V8.COMConnector, е установяването на COM връзка с информационната база 1C:Enterprise 8.0. Могат да се установят неограничен брой връзки с помощта на един екземпляр на обекта V8.COMConnector. Обектът V8.COMConnector има един метод Connect, предназначен да установи COM връзка с информационната база 1C:Enterprise 8.0.

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

Линията на връзка със системата за сигурност на информацията е верига от фрагменти във формата Параметър=Стойност. Фрагментите са разделени един от друг с ";". Ако дадена стойност съдържа интервал, тя трябва да бъде затворена в двойни кавички (").

Общи параметри:

Usr - потребителско име;
Pwd - парола.

Следният параметър е дефиниран за версията на файла:

Файл - директория на информационната база.

За опцията клиент-сървър са дефинирани следните параметри:

Srvr - Име на сървъра на 1C:Enterprise;
Ref - име на информационната база на сървъра.

Методът Connect установява COM връзка към информационната база 1C:Enterprise 8.0 и връща връзка към обекта за COM връзка.

// Създава се обект на конектор
V8 = Нов COMObject("V8.COMConnector");
// създава се обект за COM връзка
Връзка = V8.Connect("File=""c:\InfoBases\Trade""; Usr=""Директор"";")

1.5 Обект за COM връзка

COM връзката към информационната база 1C:Enterprise осигурява пълен достъп до нейния глобален контекст (вижте „Контекст на изпълнение на програмен модул“). Следователно COM връзката може да има като свои методи: системни константи, стойности, посочени в конфигуратора на обекти, които са достъпни с помощта на мениджъри (например константи, изброявания, директории, документи, регистрационни файлове на документи, отчети, обработка, планове за типове характеристики, сметки за планове, планове за видове изчисления, регистри), както и променливи, декларирани в модула за външна връзка с ключовата дума Export.

В допълнение, COM връзката има допълнителен метод NewObject, който може да се използва за създаване на стойности от определени типове.

tz = Връзка. Нов обект ("Таблица със стойности");

String метод Позволява ви да получите низови представяния на стойностите на 1C:Enterprise.

Изглед = Connection.String(Data.UniqueIdentifier());

1.6. Характеристики на работа с COM връзка

При автоматизация и COM връзка TRUE и FALSE имат следните стойности: -1 (минус едно) и 0.

Възможно е да се организира пул от COM връзки. В същото време няколко обекта за COM връзка се създават ПРЕДВАРИТЕЛНО на приемащия сървър 1C:Enterprise и отнема още по-малко време за установяване на връзка, тъй като не е необходимо да се създава нов обект.

Въведен е нов обект Query Builder, предназначен да генерира текстове на заявки въз основа на посочените настройки. Този обект поддържа функционалност за създаване на отчети, която не е свързана с извеждане на отчета в документ с електронна таблица или други задачи, свързани с потребителския интерфейс. Този обект може да се използва на сървъра на 1C:Enterprise и в COM връзка.

Можете да използвате COM обекти, когато изпълнявате вградения език на сървъра на 1C:Enterprise.

COM грешките се преобразуват във вградени езикови изключения.

Ако конфигурацията се опита да създаде невалиден обект, като например документ с електронна таблица, във външен модул за присъединяване, в споделен модул или в модул на обект, COM връзката може да не бъде установена или може да бъде прекратена като изключение.

Въпрос: Разбор на сайт с помощта на COM IE 11


Добър ден.!
Въпросът е до болка известен, трябва да вземете информацията от сайта. Но има нюанси:
1. Няма начин да отидете директно на страницата за оторизация (първо отидете на началната страница, щракнете върху връзката Вход, вземете формуляра за оторизация и едва след това влезте).
2. На сайта трябва да потърсите данни през лентата за търсене, след това да ги прочетете и да потърсите отново (данните могат да бъдат на руски и английски, т.е. ако данните за търсене са на руски, тогава трябва да търсите в „ Руска версия” на сайта, а това също е едно кликване върху връзка към друга страница. Същият проблем е и с английски).

В крайна сметка:
- отидете на началната страница - влезте - потърсете данни - (отидете на друга версия на сайта, ако е необходимо) - вземете го.

проблем:
Данните не се четат в свойството "документ", когато следвате връзка.
Проявява се в две точки:
- когато следваме връзката за влизане (това не е бутон, а просто връзка);
- когато сменим езика на сайта (също и линк).

Забележка
Ако преди да следвате връзка на етапа на оторизация, получите връзка, затворете com и я отворете отново с прехода през метода IE.navigate("link"), тогава данните в свойството "document" вървят нормално. Но няма да можете да направите същото, когато промените езика на сайта, защото... Трябва да вляза отново и освен това не бих искал да разреша този проблем точно по този начин.

Ето кода:

&На клиентската процедура SetWaitingIE(IE, SecondCall=False) Ако НЕ IE.Busy Then D = CurrentDate() + 3; Докато D >= CurrentDate() Loop If IE.Busy Then Abort; endIf; EndCycle; endIf; Докато IE.Busy Loop EndLoop; Докато IE.ReadyState< 4 Цикл КонецЦикла; Попытка Если IE.Document.ReadyState = Null Тогда IE.Refresh(); УстановитьОжиданиеИЕ(IE); КонецЕсли; Пока IE.Document.ReadyState <>"завършен" цикъл EndCycle; Изключение If SecondCall Then Return; Друга връзка = IE.LocationURL; IE.Quit(); IE = GetCOM("InternetExplorer.Application"); IE.Навигация(Връзка); SetExpectIE(IE, True); endIf; EndAttempt; Функция EndProcedure &OnClient PerformUserAuthorization(IE, Link, Login, Password, Authorized=False, SC=0) Attempt Elements = IE.Document.GetElementsByName("username"); Ако Elements.Length = 1, тогава за всеки El от Elements Loop El.Value = Login; EndCycle; endIf; Elements = IE.Document.GetElementsByName("парола"); Ако Elements.Length = 1, тогава за всеки El от Elements Loop El.Value = Password; EndCycle; endIf; IE.Document.GetElementById("ID").Click(); SetWaitingIE(IE); Оторизиран = Вярно; Изключение Ако CN > 3 Тогава Върни False; endIf; IE.Quit(); IE.Навигация(Връзка); SetWaitingIE(IE); MF = MF + 1; Ако PerformUserAuthorization(IE, Link, Login, Password, SCH) Then Return True; endIf; EndAttempt; Разрешено връщане; EndFunction &OnClient Процедура Качване(Команда) SpTables = GetListTablesForUpload(); If SpTables = False Then Return; endIf; IE = GetCOM("InternetExplorer.Application"); За всеки ред от SpTable.SOURCE_LIST Цикъл RA = Row.ID; Ресурс = String.RESOURCE; IE.Навигация (ресурс); SetWaitingIE(IE); Опитайте If Line.NEW_PAGE_IN_LOGIN = 1 Then Classes = IE.Document.GetElementsByClassName("ClassName"); Ако Classes.Length = 1 Тогава за всеки клас от Classes Loop Resource = Class.All(0).Href; Прекратяване; EndCycle; Опитвам IE.Quit(); IE = IE.Навигация(Ресурс); SetWaitingIE(IE); Доклад за изключение ("Връзката към сайта "" +String.NAME + "" неуспешна!"); Прекратяване; EndAttempt; В противен случай Report("Връзката със сайта "" +String.NAME + "" неуспешна!"); Прекратяване; endIf; endIf; If NOT PerformUserAuthorization(IE, Resource, String.LOGIN, String.PASSWORD) Then Report("Упълномощаването на потребител на сайта "" + String.NAME + "" не е завършено!"); Прекратяване; endIf; Ресурс = IE.LocationURL; Списък с лица = SpTable.FACE_CODES.FindLines(Нова структура("ИЗТОЧНИК", RA)); ListNotFound = Нов масив; За всяко лице от списъка с лица Цикъл PersonName = Person.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, тогава за всеки RootClass от RootClasses Loop Classes = RootClass.Children; Прекратяване; EndCycle; AmGroup = False; RuGroup = False; За всеки клас от цикъл на класове If HPreg(Class.ClassName) = "dropdown-header" Then AmGroup = Find(Class.InnerText, "Americans") > 0; RuGroup = Find(Class.InnerText, "Europe") > 0; ElseIf HPreg(Class.ClassName)<>"selected" Then If AmGroup And Find(Class.All(0).InnerText, "English") > 0 ИЛИ RuGroup And Find(Class.All(0).InnerText, "Russia") > 0 Then IE.Navigate(Class .Всички(1).Href); SetWaitingIE(IE); Прекратяване; endIf; endIf; EndCycle; endIf; endIf; IE.Document.GetElementById("ID").Value = PersonName; FindButton = IE.Document.GetElementById("ID"); FindButton.Focus(); FindButton.Click(); Опитвайки се да SetExpect(IE); //Свързване на получените данни ExceptionListNotFound.Add(Person); Продължи; EndAttempt; EndCycle; Доклад за изключение ("Грешка:" + Symbols.PS + ErrorDescription()); Прекратяване; EndAttempt; EndCycle; IE.Quit(); Край на процедурата

Отговор:

Темата е много интересна, но лично аз, за ​​съжаление, нямам нито опит, нито дори възможност по някакъв начин да разбера този проблем. Ако можете да намерите информация по тази тема, моля, споделете я.
--- Обединяване на съобщения, 29 април 2016 г ---

Доколкото разбирам, няма достъп до SQl базата данни?

--- Обединяване на съобщения, 29 април 2016 г ---

Е, ако анализира, тогава какъв вид достъп?

Въпрос: COM връзка 1C 8.3 - 1C 8.3 Възможно ли е да въведете дебъгера във връзката


Исках да попитам членовете на форума дали изобщо е възможно да се отстраняват грешки, когато се свързвам чрез COM връзка, използвайки обработка от една база данни на платформа 8.3.6 (BP 3.0) към външния модул за връзка на самостоятелно написана база данни (също работеща на платформа 8.3.6) и извикване на експорти от него процедури с помощта на обработка? В момента базите данни са файлови и се намират на един компютър, но се планира сървърна версия. До този момент използвах конструкциите по-долу за предаване на произволен код за изпълнение през COM връзка, както и за регистриране на грешки. Ето фрагменти от процедури в самостоятелно написаната база данни в модула за външна връзка:

Функция Execute (Код за изпълнение, спомагателен параметър = "") Експортиране
Проверка за безопасност(); // Защита срещу опити за изпълнение на зловреден код при външно свързване от името на друг потребителОтговор = "0" //Ако нищо не трябва да се връща, тогава ако няма грешки в кода  //просто ще върне OK  //Защото Изпратеният код може да съдържа грешки, тогава ние ще приключим изпълнението му в опит.Опитайте се да изпълните (CodeExecute); // Изпълнение на кода като низ на друг компютър чрез COM връзка (модул за външна връзка Libra Base)Изключение   //ако има грешка, връща нейния текстОтговор = ErrorDetailView(ErrorInfo()); EndAttempt ; Връщане на отговор; EndFunction Функция TestConnection(InParameter, OutParameter) ExportSecurityCheck(); // Защита срещу опити за изпълнение на зловреден код при външно свързване от името на друг потребител. OutParameter = "Има връзка с базата на везната чрез COM връзка!"; Върнете вярно; EndFunction
От BP 3.0 изпълнявам следния фрагмент:
опит
Com = Нов COMObject("V83.COMConnector"); Връзка = Com.Connect ("File=""C:\1 c\Base_1C\Libra""; Usr=""ComExchange""; Pwd=""1"";"); TellUser("Тестът премина! Има връзка с базата данни на везната"); Изключение Error = ErrorDetailView(ErrorInfo()); TellUser("Няма COM връзка към базата Libra! Подробности"+Грешка); Com=Недефинирано; Връщане ;
EndAttempt ; Изход = ""; In = "1"; If Connection.Communication Test(In, Out) Then TellUser("Комуникационният тест с конфигурация на мащаба е успешен! Отговор: "+Out); В противен случай TellUser("Тестът за комуникация с конфигурацията на везната е неуспешен! Отговор: "+Out); EndIf ;
Разбирам, разбира се, че няма да може да се въведе оператор Execute(CodeString1C8), но има ли такава възможност при извикване на отдалечена процедура на модула за външна връзка от основната база данни Connection.TestConnection(In, Out) към въведете неговия код в същата сесия на дебъгера във функцията за проверка на сигурността ( ) тяхната извикваща процедура?
Вече разгледах документацията, която можах да намеря по този въпрос. Зададох опциите за разрешаване на отстраняване на грешки и точки на прекъсване навсякъде и в двете конфигурации. Пуснах и двата конфигуратора.

Възможно ли е дори в тази ситуация да се коригира допълнително процедурата за проверка на сигурността () от страна на модула за външна връзка?


Въпрос: Грешен IP адрес в COM връзката

Проблемът е, че на сървър 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 обект, съответстващ на версията на платформата на класа... може би греша.

Помогнете ми да преодолея този проблем...

Отговор:Това е... махам въпроса..

Въпрос: Грешка Com при обработката на попълването


Здравейте.
8.2 Търговия на дребно 1.
Свързвам се към 8.1 Не е типична конф.
Свързвам се чрез com към базата данни и се опитвам да създам документ, но когато извикам „CreateDocument()“ или „GetObject()“ възниква грешка в процедурата ОбработкаПопълване. виж фиг.

Пробвам същото в самата база данни 8.1, но няма грешка и също не влизам в Filling Processing.
Какво може да не е наред?

Отговор: turboq, криво написан модул за документи!

Добавено след 5 минути
Тя не се нарича! Тя се опитва да компилира! Но тъй като при свързване чрез ComConnector проблемът с диалоговия режим НЕ СЪЩЕСТВУВА, модулът за документи не може да бъде компилиран.
За такива случаи, когато е необходимо да се приложи работа с диалог в обектен модул, използвайте инструкции към препроцесора

Това не е ваша грешка, а грешка в модула за документи в базата данни, към която се свързвате.

В базата данни кодът се изпълнява на клиента и има диалогов режим, така че всичко се случва без грешки

Не използвайте ComConnector, V8.Application за връзка, тогава интерфейсните неща ще бъдат достъпни за вас

Добавено след 5 минути
=======================================================================================================================
от описанието на външната връзка (SP) Подчертах с удебелен шрифт това, което трябва да прочетете за ComConnections

Описание:

По принцип работата с 1C:Enterprise 8 чрез външна връзка е подобна на работата с 1C:Enterprise в режим на автоматизация на сървъра. Основните разлики са следните:

  • В случай на сървър за автоматизация се стартира пълноценно приложение 1C:Enterprise 8, а в случай на външна връзка се стартира сравнително малък COM сървър в процеса.
  • Когато работите чрез външна връзка, функционалността, която по един или друг начин е свързана с организацията на потребителския интерфейс на 1C:Enterprise 8, не е налична;
  • При работа с външна връзка не се използва модулът за управлявано приложение (обикновен модул за приложение) от конфигурацията на 1C:Enterprise 8. Неговата роля при работа с външна връзка се играе от модула за външна връзка.
Когато използвате външна връзка, има следните предимства в сравнение с използването на сървър за автоматизация:
  • По-бързо установяване на връзка, тъй като не е необходимо да се създава отделен процес на операционната система и всички действия се извършват в процеса на извикване;
  • По-бърз достъп до свойствата и методите на обектите на 1C:Enterprise, тъй като организирането на достъп не изисква междупроцесна комуникация;
  • По-малко потребление на ресурси на операционната система.
За да организирате достъпа до данните на 1C:Enterprise 8 чрез външна връзка, се извършва следната последователност от действия:
  • създава се мениджър на COM връзки, с помощта на който се осъществява връзката;
  • извиква се методът Connect на мениджъра на COM връзките. Методът Connect връща външна връзка към информационната база 1C:Enterprise 8;
  • чрез външна връзка се осъществява достъп до валидни методи, свойства и обекти на информационната база, с която се осъществява връзката.
важно! Поради липсата на потребителски интерфейс, не всички обекти, свойства и методи могат да се използват във външна връзка.
Външното присъединяване осигурява пълен достъп до своя глобален контекст. Следователно външната връзка като свои методи може да има: системни константи, стойности на обекти, посочени в конфигуратора, достъпът до които се осъществява с помощта на мениджъри (например константи, изброявания, директории, документи, регистрационни файлове на документи, отчети , обработка, планове за типове характеристики, сметкопланове, планове за изчисление, регистри), както и променливи, декларирани в модула за външна връзка с ключовата дума Export.

Наличност:

Интеграция.

Въпрос: COM връзка, характеристики тип план


Задачата е програмно да се създаде нов елемент в известен план от характерни типове чрез COM връзка. Връзката е установена, тук всичко е наред.

Пиша така:

TypeDescriptionTech = New TypeDescription("DirectoryLink. Контрагенти"); PurposeProperties = Връзка. Планове на видовете характеристики. Цели на свойствата на категориите обекти. FindByName(„Директория „Физически лица””); NewElement = Връзка. Планове на видовете характеристики. Свойства на обекта. Създаване на елемент(); НовЕлемент. Име = Име на свойството; НовЕлемент. PropertyAssignment = Присвояване на свойства; НовЕлемент. ValueType = DescriptionTypesTech;

Последният ред не работи. И това е разбираемо, той намира такъв тип за базата данни, в която работи 1C, но имам нужда от тип за прикачената база данни. Как да го получите?

В моята версия просто се създава елемент с тип стойност „Персонализиран списък“. Работи принципно, но е някак грозно.

Платформа 8.3. Предпоставка е COM връзка. Решенията без използването му не представляват интерес.

Отговор:

Ролки. Благодаря, получи се.

Въпрос: COM връзка. Проблем с параметрите на заявката


Добър ден.
Проблем със заявка през COM връзка.

Перем ТК; ArrayItems = COM.NewObject("Масив"); За всеки ред от номенклатурата на цикъла на TZNomenclature = COM.Directories.Nomenclature.GetLink(COM.NewObject("UniqueIdentifier", Abbr(String.Nomenclature.Identifier))); Номенклатура Array.Add(Номенклатура); EndCycle; Ако ArrayItems.Quantity()<>0 Тогава Заявка = COM.NewObject("Заявка"); Request.Text = "ИЗБЕРЕТЕ |PricesItemsSliceLast.Стоки AS Номенклатура, |PricesItemsSliceLast.SalePrice AS Цена, |PricesItemsSliceLast.Ставка на ДДС, |PricesItemsSliceLast.RateNP |ОТ |RegisterInformation.PricesSliceLast(|&DataDoc, | PriceType = &PriceType |И инвентар B ( &Масив на номенклатура) |И инвентар и материали.ThisGroup = FALSE |И документ за ВРЪЗКА към регистратора.Задаване на продажни цени) AS NomenclaturePricesSliceLast"; 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 = New ValueTable; 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:user "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"""); Уведомяване („Ура, връзката е установена!“); Доклад за изключение ("Няма връзка с базата данни!"); Доклад(Описание на грешка()); // Информация = InformationAboutError(); // Доклад("Описание= "" + Информация.Описание + """); // Доклад ("Име на модул= "" + Info.ModuleName + """); // Доклад ("LineNumber=" + Info.LineNumber); // Доклад ("SourceLine= "" + Info.SourceString + """); Връщане; EndAttempt;

Къде да регистрирам библиотеката, на клиента, на сървъра 8.2, на сървъра 8.3? Фигура по-долу.
(за версията клиент-сървър и за файловата версия на базата данни 1C)

Отговор:Имаше задача за комуникация с един терминал чрез уеб услуга. Основата е, добре, да кажем, че е лека. Също 0,5 или по-бързо?

Трудно е да се каже - нямам достатъчно данни. Бяхме доволни от 0,5 секунди, минус ненужния 1C клиент на машина на трета страна, минус синхронизацията на библиотечните версии след актуализиране на двигателя 1C, минус проклетия comsafearray, нормални имена и типове полета... Той се сети за нас от другата страна (система, която се интегрира с 1C) „няма да разберат“, когато се окаже, че трябва да пренапишат своите 1C повиквания към нов „комуникационен модел на системата“. Но след като опитахме една функция веднъж в тестовата база данни, сега ни дразнят с „нека преминем към услугата възможно най-скоро“.

Въпрос: Как да използвам TypeContains за Com обекти?


If Attribute.Type.ContainsType(Type("DirectoryLink.Nomenclature")) Then There IsNomenclature = True; endIf;

„Props“ е получено от com връзка с друга база данни 1c. Възниква грешка при сравняване:

(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(Тип(Тип)); EndFunction

В базата данни, от която се свързвам, извиквам процедурата чрез Com:

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



Ако забележите грешка, изберете част от текста и натиснете Ctrl+Enter
ДЯЛ: