Про заболевания ЖКТ

Один из вариантов обмена данными между базами 1С это обмен через COM соединение.

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

Можно создать два вида COM объектов для приложения 1С. Это V82.Application и V82.COMConnector . В случае с V82.Application запускается практически полноценный экземпляр приложения 1С. в случае использования V82.COMConnector запускается небольшая серверная часть.
Скорость работы в этом случае выше, но некоторые функции могут быть недоступны. В частности работа с формами и с общими модулями для которых не установлено свойство работы с внешними соединениями. Преимущественно надо использовать V82.COMConnector и только в случае нехватки функционала V82.Application . Особенно сильно разница в скорости работы может быть заметна на базах большого объема.

Итак, приступим

  1. Создадим COM объект
    • для V82.Application Соединение = Новый COMОбъект("V82.Application" ) ;
    • для V82.COMConnector Соединение = Новый COMОбъект("V82.COMConnector" ) ;
  2. Сформируем строку подключения
    • для серверного варианта базы СтрокаСоединения = "Srvr = " "ИмяСервера" ";Ref = " "ИмяБазы" ;
    • для файлового варианта базы СтрокаСоединения = "File = " "ПутьКБазе" "; Usr = ИмяПользователя; Pwd = Пароль" ;
  3. Выполняем подключение к базе Попытка Подключение = Соединение. Connect(СтрокаСоединения) ; Исключение Сообщение = Новый СообщениеПользователю; Сообщение. Текст = + ОписаниеОшибки() ; Сообщение. Сообщить() ; КонецПопытки ;
  4. Разрываем соединение с базой Соединение = Неопределено ;

    Для объекта V82.Application выполнять разрыв соединения обязательно, в противном случае останется висеть незавершенный сеанс, который потом придется удалять вручную. В случае с V82.COMConnector соединение разрывается автоматически при завершении процедуры в которой выполнялось подключение.И есть еще один маленький момент.

    Для пользователя под которым выполняется подключение должен быть отключен флажок «Запрашивать подтверждение при закрытии программы» в его настройках.

А теперь соберем весь код в кучу

Соединение = Новый COMОбъект("V82.Application" ) ; //Соединение = Новый COMОбъект("V82.COMConnector"); СтрокаСоединения = "Srvr = " "Server1C" ";Ref = " "MyBase" "; Usr = Петя; Pwd = 123" ; //СтрокаСоединения = "File = ""С:\MyBase""; Usr = Петя; Pwd = 123"; Попытка Подключение = Соединение. Connect(СтрокаСоединения) ; Исключение Сообщение = Новый СообщениеПользователю; Сообщение. Текст = "Не удалось подключиться к базе" + ОписаниеОшибки() ; Сообщение. Сообщить() ; КонецПопытки ; Соединение = Неопределено ;

Для вида подключения V82.Application метод применяется для COM объекта, который создавался изначально, а для V82.COMConnector метод применяется к подключению. далее работа с запросом идет стандартными средствами 1С. в коде это выглядит так:

Запрос = Подключение. NewObject("Запрос" ) ; // для V82.COMConnector Запрос = Соединение. NewObject("Запрос" ) ; // для V82.Application Запрос. Текст = "ВЫБРАТЬ | ДолжностиОрганизаций.Код, | ДолжностиОрганизаций.Наименование |ИЗ | Справочник.ДолжностиОрганизаций КАК ДолжностиОрганизаций" ; Результат = Запрос. Выполнить () ; Выборка = Результат. Выбрать() ; Пока Выборка. Следующий() Цикл КонецЦикла ;

Для версии 1С:Предприятие 8.3 все остается без изменений за исключением того, что при создании COMОбъектов надо использовать «V83.COMConnector» или «V83.Application» .

)Все верно

Одновременно, я видел не раз, когда просто "взлетали" публикации которые не тянули даже на 10 баллов.
Почему так происходило? Видимо потому, что кому то они явно пришлись по душе.


Я про это и говорю, что было бы неплохо не читая статью по рейтингу понять насколько она тебе нужна, или оценить ее не так примитивно +/-. Насчет пришлась по душе я бы скорректировал так: она так много набрала из-за того что так звезды сложились и на сайте собралось много народу и многим понравилось, сами понимаете это дело случая т.к. как только статья уходит с главной страницы то ее уже можно найти только по запросу, а так голосуют все мимо проходящие. И поддерживать на главной, насколько я понимаю, позволяют как раз постоянные комментарии = раскрутка статьи.
Именно для этого и ставят магазины на проходных улицах - ведь часто важно не качество и актуальность товара, а проходимость места, люди гуляя часто покупают то что выкинут на следующий день, просто ради процесса. Это давно всем известная болезнь - шопомания. Или просто увеличения потока увеличивает вероятность нужного покупателя.

А плюсы и минусы... - это всего лишь некое "спасибо" за потраченное время и труд


Т.е. минус тоже считается за "спасибо"? Я вот и хотел узнать ваше отношение к тому нужно ли ставить в таких случаях его, и как интересно считают другие? Ставить ли его когда статья вредная/плохая или когда она тебе просто бесполезная/пустая.
На мой взгляд статья смахивает на просто повышение рейтинга, т.к.:
1. Приведенные мной проблема с типами вообще проигнорирована автором, хотя он не поленился написать кучу комментов.
2. В статье явная неточность: сказано что можно только так

V82 = Новый COMобъект("V82.ComConnector"); Код = КонтрагентСОМ.Code;


а вот я спокойно делаю при помощи обработки вот так:

Сообщить(База.Справочники.Контрагенты.НайтиПоНаименованию("ООО").Код);


и все нормально! А подключение выбираю V82.ComConnector
Странно как-то что автору совершенно плевать на то что его статья содержит такие проблемы на которые указали, а он не реагирует никак.
3. А ведь есть еще проблема когда выскакивает ошибка "Класс не существует"
4. А есть проблема когда установлена 8.2, а потом установлена 8.1 - попробуйте-ка обменяться по ОЛЕ/COM типовым обменом УТ-БП!
5. Могли бы указать основные обработки на сайте которые позволяют универсально подключаться по ОЛЕ/COM чтобы новички не тратили времени, вы же для них пишите! Та же кстати ее картинка почему то у вас красуется, с чего бы?. А в результате 2 слова по существу, и еще 6 за кадром.

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


Ключевые слова: COM, соединение, внешнее, OLE, Automation, Connect, ComConnector, Srvr

При использовании для доступа к данным 1С:Предприятия 8.0 COM -соединения имеются следующие преимущества по сравнению с использованием Automation сервера:

  1. Более быстрая установка соединения, так как не требуется создания отдельного процесса операционной системы, а все действия производятся в рамках вызывающего процесса;

  2. Более быстрое обращение к свойствам и методам объектов 1C:Предприятия, так как для организации обращения не требуется организации межпроцессной коммуникации;
  3. Меньший расход ресурсов операционной системы.

В общем и целом работа с 1С:Предприятием 8.0 через COM -соединение подобна работе с 1С:Предприятием в режиме Automation сервера. Основные отличия заключаются в следующем:

  1. В случае Automation сервера запускается полноценное приложение 1С:Предпприятия 8.0, а в случае COM -соединения запускается относительно небольшой внутрипроцессный COM -сервер.

  2. При работе через COM -соединение недоступны функциональные возможности так или иначе связанные с организацией пользовательского интерфейса 1С:Предприятия 8.0;
  3. При работе COM -соединения не используется модуль приложения конфигурации 1С:Предприятия 8.0. Его роль при работе с COM -соединением играет модуль внешнего соединения.

1.1 Порядок установки COM-соединения

Для организации доступа к данным 1С:Предприятия 8.0 через COM -соединение, выполняется следующая последовательность действий:

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

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

Важно! В связи с отсутствием пользовательского интерфейса в COM-соеденении не все объекты, а также свойства и методы можно использовать в COM -соединении.

Объекты 1С:Предприятия, доступные извне через COM -соединение:

  1. Экспортируемые переменные и процедуры/функции модуля внешнего соединения

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

  4. Включение и исключение фрагментов общих модулей с помощью препроцессора
  5. Глобальный контекст 1С:Предприятия 8.0, за исключением объектов, жестко связанных с клиентским приложением (ТекстовыйДокумент, ТабличныйДокумент, ...)

1.2 Модуль внешнего соединения

Как уже отмечалось обязанности модуля приложения при работе через COM -соединение, выполняет модуль внешнего соединения. Данный модуль может иметь процедуры-обработчики событий ПриНачалеРаботыСистемы() и ПриЗавершенииРаботыСистемы(), в которых могут быть размещены действия, выполняемые при инициализации и завершении соединения, соответственно.

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

1.3 Общие модули

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

1.4 Объект "V8.COMConnector"

Единственная задача, решаемая COM -объектом V8.COMConnector – установка COM -соединения с информационной базой 1С:Предприятия 8.0. С помощью одного экземпляра объекта V8.COMConnector может быть установлено неограниченное число соединений. Объект V8.COMConnector имеет один-единственный метод Connect , предназначенный для установки COM -соединения с информационной базой 1С:Предприятия 8.0.

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

Строка соединения с ИБ представляет собой цепочку фрагментов вида Параметр=Значение. Фрагменты отделяются друг от друга символами ";". Если значение содержит пробельные символы, то оно должно быть заключено в двойные кавычки (").

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

Usr - имя пользователя;
Pwd - пароль.

Для файлового варианта определен параметр:

File - каталог информационной базы.

Для клиент-серверного варианта определены параметры:

Srvr - имя сервера 1С:Предприятия;
Ref - имя информационной базы на сервере.

Метод Connect устанавливает COM -соединение с информационной базой 1С:Предприятия 8.0 и возвращает ссылку на объект COM -соединение.

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

1.5 Объект "COM-соединение"

COM -соединение с информационной базой 1С:Предприятия предоставляет полный доступ к своему глобальному контексту (см. «Контекст выполнения программного модуля»). Поэтому COM -соединение в качестве своих методов может иметь: системные константы, значения заданных в конфигураторе объектов, доступ к которым осуществляется с помощью менеджеров (например, константы, перечисления, справочники, документы, журналы документов, отчеты, обработки, планы видов характеристик, планы счетов, планы видов расчета, регистры), а также переменные, объявленные в модуле внешнего соединения с ключевым словом Экспорт.

Кроме того, COM -соединение имеет дополнительный метод NewObject, с помощью которого можно создавать значения определенных типов.

тз = Соединение. NewObject ("ТаблицаЗначений");

Метод String Позволяет получать строковые представления значений 1С:Предприятия.

Представление = Соединение.String(Данные.УникальныйИдентификатор());

1.6. Особенности работы с COM -соединением

В Automation и в COM -соединении TRUE и FALSE имеют соответственно значения: -1 (минус единица) и 0.

Имеется возможность организации пула COM-соединений. При этом на принимающей на сервере 1С:Предприятия ЗАРАНЕЕ создаются несколько объектов COM-соединения и на установку соединения требуется еще меньше времени, поскольку не нужно создавать новый объект.

Реализован новый объект ПостроительЗапроса, предназначенный для генерации текстов запросов на основании указанных настроек. Данный объект поддерживает функциональность построителя отчета, не относящуюся к выводу отчета в табличный документ и другим задачам, связанным с пользовательским интерфейсом. Данный объект может использоваться на сервере 1С:Предприятия и в COM -соединении.

Доступно использование COM -объектов при работе встроенного языка на сервере 1С:Предприятия.

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

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

Вопрос: Парсинг сайта через COM IE 11


Доброго времени суток.!
Вопрос до боли известный, необходимо забрать инфу с сайта. Но есть нюансы:
1. Нет возможности зайти сразу на страницу авторизации (сначала заходим на домашнюю страницу, нажимаем ссылку LogIn, получаем форму авторизации и только потом логинимся).
2. На сайте нужно через поисковую строку искать данные, далее читать их и искать еще (данные могут быть на русском и английском, т.е. если данные для поиска на русском, то искать нужно в "русской версии" сайта, а это еще один переход по ссылке на другую страницу. С английским такая же тема).

В итоге:
- заходим на домашнюю страницу - логинимся - ищем данные - (переходим на др. версию сайта, если нужно) - забираем их.

Проблема:
Не считываются данные в свойство "document" при переходе по ссылке.
Возникает в двух моментах:
- когда переходим по ссылке, чтобы залогиниться (это не кнопка, а просто ссылка);
- когда меняем язык на сайте (тоже ссылка).

Примечание
Если перед переходом по ссылке на этапе авторизации получить ссылку, закрыть ком и открыть снова с переходом через метод IE.navigate("ссылка"), тогда данные в свойство "document" ложатся нормально. Но проделать тоже самое при смене языка на сайте уже не получится, т.к. нужно логиниться снова и плюс не хотелось бы вот именно так решать эту задачку.

Вот код:

&НаКлиенте Процедура УстановитьОжиданиеИЕ(IE, ВторойВызов=Ложь) Если НЕ IE.Busy Тогда Д = ТекущаяДата() + 3; Пока Д >= ТекущаяДата() Цикл Если IE.Busy Тогда Прервать; КонецЕсли; КонецЦикла; КонецЕсли; Пока IE.Busy Цикл КонецЦикла; Пока IE.ReadyState < 4 Цикл КонецЦикла; Попытка Если IE.Document.ReadyState = Null Тогда IE.Refresh(); УстановитьОжиданиеИЕ(IE); КонецЕсли; Пока IE.Document.ReadyState <> "complete" Цикл КонецЦикла; Исключение Если ВторойВызов Тогда Возврат; Иначе Ссылка = IE.LocationURL; IE.Quit(); IE = ПолучитьCOM("InternetExplorer.Application"); IE.Navigate(Ссылка); УстановитьОжиданиеИЕ(IE, Истина); КонецЕсли; КонецПопытки; КонецПроцедуры &НаКлиенте Функция ВыполнитьАвторизациюПользователя(IE, Ссылка, Логин, Пароль, Авторизован=Ложь, СЧ=0) Попытка Elements = IE.Document.GetElementsByName("username"); Если Elements.Length = 1 Тогда Для Каждого El Из Elements Цикл El.Value = Логин; КонецЦикла; КонецЕсли; Elements = IE.Document.GetElementsByName("password"); Если Elements.Length = 1 Тогда Для Каждого El Из Elements Цикл El.Value = Пароль; КонецЦикла; КонецЕсли; IE.Document.GetElementById("ID").Click(); УстановитьОжиданиеИЕ(IE); Авторизован = Истина; Исключение Если СЧ > 3 Тогда Возврат Ложь; КонецЕсли; IE.Quit(); IE.Navigate(Ссылка); УстановитьОжиданиеИЕ(IE); СЧ = СЧ + 1; Если ВыполнитьАвторизациюПользователя(IE, Ссылка, Логин, Пароль, СЧ) Тогда Возврат Истина; КонецЕсли; КонецПопытки; Возврат Авторизован; КонецФункции &НаКлиенте Процедура Закачать(Команда) СпТаблиц = ПолучитьСписокТаблицДляЗагрузки(); Если СпТаблиц = Ложь Тогда Возврат; КонецЕсли; IE = ПолучитьCOM("InternetExplorer.Application"); Для Каждого Строка Из СпТаблиц.SOURCE_LIST Цикл РА = Строка.ID; Ресурс = Строка.RESOURCE; IE.Navigate(Ресурс); УстановитьОжиданиеИЕ(IE); Попытка Если Строка.NEW_PAGE_IN_LOGIN = 1 Тогда Classes = IE.Document.GetElementsByClassName("ИмяКласса"); Если Classes.Length = 1 Тогда Для Каждого Class Из Classes Цикл Ресурс = Class.All(0).Href; Прервать; КонецЦикла; Попытка IE.Quit(); IE = IE.Navigate(Ресурс); УстановитьОжиданиеИЕ(IE); Исключение Сообщить("Подключение к сайту «" +Строка.NAME + "» не удалось!"); Прервать; КонецПопытки; Иначе Сообщить("Подключение к сайту «" +Строка.NAME + "» не удалось!"); Прервать; КонецЕсли; КонецЕсли; Если НЕ ВыполнитьАвторизациюПользователя(IE, Ресурс, Строка.LOGIN, Строка.PASSWORD) Тогда Сообщить("Авторизация пользователя на сайте «" + Строка.NAME + "» не выполнена!"); Прервать; КонецЕсли; Ресурс = IE.LocationURL; СписокЛиц = СпТаблиц.FACE_CODES.НайтиСтроки(Новый Структура("SOURCE", РА)); СписокНеНайденных = Новый Массив; Для Каждого Лицо Из СписокЛиц Цикл ИмяЛица = Лицо.NAME_IN_SITE; ЭтоРусский = КодСимвола(ИмяЛица, 1) >= 1040; ТекРесурс = ?(ЭтоРусский, СтрЗаменить(Ресурс, "en_US", "ru_RU"), СтрЗаменить(Ресурс, "ru_RU", "en_US")); Если ТекРесурс <> IE.LocationURL Тогда RootClasses = IE.Document.GetElementsByClassName("ИмяКласса"); Если RootClasses.Length = 1 Тогда Для Каждого RootClass Из RootClasses Цикл Classes = RootClass.Children; Прервать; КонецЦикла; AmGroup = False; RuGroup = False; Для Каждого Class Из Classes Цикл Если НРег(Class.ClassName) = "dropdown-header" Тогда AmGroup = Найти(Class.InnerText, "Americans") > 0; RuGroup = Найти(Class.InnerText, "Europe") > 0; ИначеЕсли НРег(Class.ClassName) <> "selected" Тогда Если AmGroup И Найти(Class.All(0).InnerText, "English") > 0 ИЛИ RuGroup И Найти(Class.All(0).InnerText, "Russia") > 0 Тогда IE.Navigate(Class.All(1).Href); УстановитьОжиданиеИЕ(IE); Прервать; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; IE.Document.GetElementById("ИД").Value = ИмяЛица; FindButton = IE.Document.GetElementById("ИД"); FindButton.Focus(); FindButton.Click(); Попытка УстановитьОжиданиеИЕ(IE); //Обход полученных данных Исключение СписокНеНайденных.Добавить(Лицо); Продолжить; КонецПопытки; КонецЦикла; Исключение Сообщить("Ошибка:" + Символы.ПС + ОписаниеОшибки()); Прервать; КонецПопытки; КонецЦикла; IE.Quit(); КонецПроцедуры

Ответ:

Тема очень интересная, но вот лично у меня, к сожалению, нет ни опыта, ни даже возможности хоть как то разобраться в этой проблеме. Если сможете раздобыть информацию на эту тему, то поделитесь ей пожалуйста.
--- Объединение сообщений, 29 апр 2016 ---

Я так понимаю доступа к SQl базе нет?

--- Объединение сообщений, 29 апр 2016 ---

Ну хотя если парсинг, то какой доступ

Вопрос: COM-соединение 1С 8.3 - 1С 8.3 Есть ли возможность зайти в отладчик в соединении


Хотел спросить форумчан если ли вообще такая возможность отладки когда подключаюсь по СОМ-соединению с помощью обработки из одной базы на платформе 8.3.6 (БП 3.0) к модулю внешнего соединения самописной базы (тоже работающей на платформе 8.3.6) и вызываю из него экспортные процедуры с помощью обработки? Базы пока файловые и находятся на одном ПК, но планируется серверный вариант. До этого времени использовал конструкции приведенные ниже для передачи на выполнение произвольного кода по СОМ-соеднению, а также регистрации ошибок. Вот фрагменты процедур в самописной базе в модуле внешнего соединения:

Функция ИсполнитьВн(КодВыполнить, ВспомПараметр= "") Экспорт
ПроверкаБезопасности();// Защита от попытки выполнения вредоносного кода при внешнем подключении от имени другого пользователя Ответ = "0 "//Если ничего не нужно будет возвращать, то при отсутствии ошибок в коде  //вернется просто ОК  //Т.к. переданный код может быть с ошибками, то завернем его исполнение в попытку. Попытка Выполнить(КодВыполнить);// Выполнение кода как строки на другом компьютере по COM-Соединению (Модуль внешнего соединения базы Весы) Исключение  //если все таки ошибка, то вернем ее текст Ответ = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); КонецПопытки ; Возврат Ответ; КонецФункции Функция ТестСвязи(ВхПараметр, ВыхПараметр) Экспорт ПроверкаБезопасности();// Защита от попытки выполнения вредоносного кода при внешнем подключении от имени другого пользователя. ВыхПараметр = "Есть связь с базой весы по COM-Соединению!"; Возврат Истина ; КонецФункции
Из БП 3.0 выполняю такой фрагмент:
Попытка
Ком = Новый COMObject("V83.COMConnector"); Соединение = Ком.Connect ("File=""C:\1 c\Базы_1С\Весы""; Usr =""КомОбмен""; Pwd =""1 "";"); СказатьПользователю("Тест пройден! Есть соедение с базой весов"); Исключение Ошибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); СказатьПользователю("Нет КОМ-соединения с базой Весов! Подробно "+Ошибка); Ком=Неопределено ; Возврат ; КонецПопытки ; Вых = ""; Вх = "1 "; Если Соединение.ТестСвязи(Вх, Вых) Тогда СказатьПользователю("Тест связи с конфигурацией весы успешный! Ответ: "+Вых); Иначе СказатьПользователю("Тест связи с конфигурацией весы неудачный! Ответ: "+Вых); КонецЕсли ;
Понимаю, конечно что в оператор Выполнить(СтрокаКода1С8) зайти не удастся, но есть ли такая возможность при вызове удаленной процедуры модуля внешнего подключения из основной базы Соединение.ТестСвязи(Вх, Вых) зайти в ее код в этой же сессии отладчика в функцию ПроверкаБезопасности() их вызывающей процедуры?
Уже смотрел документацию что смог найти по этому вопросу. Ставил везде в обоих конфигурациях опции по разрешению отладки и точки останова. Запускал оба конфигуратора.
Есть ли вообще такая возможность в данной ситуации отладить допустим процедуру ПроверкаБезопасности() и дальше на стороне модуля внешнего подключения?

Вопрос: Неправильный IP-адрес в COM соединении


Есть обработка, которая перекидывает документы через V83.ComСonnector между серверами. Сервер 1 (версия 1С 8.2.19.90) всегда подключается к Серверу 2 (версия 8.3.8.2033). В строке соединения прописан IP адрес сервера 2 и работало все хорошо. На самом сервере 1 видел также установленную платформу как на сервере 2, версии 8.3.9.2033 (если это важно).

Проблема в том, что на Сервере 2 поменялся IP адрес, обработка конечно же перестала работать и когда я прописал новый IP в строке подключения, обработка выдает ошибку, в описании которой по-прежнему старый IP (!) и текст "Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера."

Все перезагружали, чистили кеши и тд, админы клянутся что с их стороны все ок, по RDP можно зайти с одного сервера на другой и тд.

Что может быть, как решить? Весь интернет перерыл, такой ситуации не нашел!

Ответ: () 100% уверен! Второй день пробую, как и писал, отладчиком смотрю, даже создал одноклеточную обработку тупо для теста коннекта, вываливается та ошибка и все

Вопрос: COM соединение к разным версиям


Всем привет.
Имею базу аля "Консолидация", которая с разных баз собирает разные данные и сводит все в одну кучу. Проблема в том, что необходимо через com подключатся к этим базам, но они разных версий, соответственно в конечном итоге ловлю ошибку типа
Ошибка подключения!{ ВнешняяОбработка. ПереносИстории. Форма. Форма. Форма(12 )} : Ошибка при вызове метода контекста (Connect) : Произошла исключительная ситуация (V83. COMConnector. 1 ) : Несоответствие версий клиента и сервера 1 С:Предприятия Различаются версии клиента и сервера (8.3 . 8.1964 - 8.3 . 6.2332 ), клиентское приложение: COM- соединение

настрою одно соединение, отваливается другое...

Знаю что как то через службу компонентов можно создавать "свои классы (конекторы)" для каждой версии и потом создавать Новый COMОбъект соответствующего версии платформы класса... может я и ошибаюсь.

Помогите, победить эту проблемку...

Ответ: все... вопрос снимаю..

Вопрос: Com Ошибка в ОбработкаЗаполнения


Привет.
8.2 Розница 1.
коннектюсь к 8.1 Не типовая конфа.
Подключаюсь по com к базе и пытаюсь создать документ, но при вызове "СоздатьДокумент()" или "ПолучитьОбъект()" происходит ошибка процедуре ОбработкаЗаполнения . см рис.

Пробую то же самое в самой базе 8.1 но ни какой ошибки нет, и в ОбработкаЗаполнения тоже не вхожу.
В чем косяк то может быть?

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

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

Это не твоя ошибка, а ошибка модуля документа в базе к которой ты подключаешься.

В базе код исполняется на клиенте и РежимДиалогаВопрос есть поэтому все происходит без ошибок

Используй не ComConnector, V8.Application для подключения, тогда тебе будут доступны интерфейсные вещи

Добавлено через 5 минут
=======================================================================================================================
из описания внешнего соединения (СП) Жирным выделил что тебе следует почитать про КомСоединения

Описание :

В общем и целом работа с 1С:Предприятием 8 через внешнее соединение подобна работе с 1С:Предприятием в режиме Automation сервера. Основные отличия заключаются в следующем:

  • В случае Automation сервера запускается полноценное приложение 1С:Предприятия 8, а в случае внешнего соединения запускается относительно небольшой внутрипроцессный COM-сервер.
  • При работе через внешнее соединение не доступны функциональные возможности, так или иначе связанные с организацией пользовательского интерфейса 1С:Предприятия 8;
  • При работе внешнего соединения не используется модуль управляемого приложения (модуль обычного приложения) конфигурации 1С:Предприятия 8. Его роль при работе с внешним соединением играет модуль внешнего соединения.
При использовании внешнего соединения имеются следующие преимущества по сравнению с использованием Automation сервера:
  • Более быстрая установка соединения, так как не требуется создания отдельного процесса операционной системы, а все действия производятся в рамках вызывающего процесса;
  • Более быстрое обращение к свойствам и методам объектов 1C:Предприятия, так как для организации обращения не требуется организации межпроцессной коммуникации;
  • Меньший расход ресурсов операционной системы.
Для организации доступа к данным 1С:Предприятия 8 через внешнее соединение, выполняется следующая последовательность действий:
  • создается менеджер COM-соединений, с помощью которого производится установка соединения;
  • производится обращение к методу Connect менеджера COM-соединений. Метод Connect возвращает внешнее соединение с информационной базой 1С:Предприятия 8;
  • через внешнее соединение производится обращение к допустимым методам, свойствам и объектам информационной базы, с которой установлено соединение.
Важно! В связи с отсутствием пользовательского интерфейса не все объекты, а также свойства и методы можно использовать во внешнем соединении.
Внешнее соединение предоставляет полный доступ к своему глобальному контексту. Поэтому внешнее соединение в качестве своих методов может иметь: системные константы, значения заданных в конфигураторе объектов, доступ к которым осуществляется с помощью менеджеров (например, константы, перечисления, справочники, документы, журналы документов, отчеты, обработки, планы видов характеристик, планы счетов, планы видов расчета, регистры), а также переменные, объявленные в модуле внешнего соединения с ключевым словом Экспорт.

Доступность:

Интеграция.

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


Задача – программно создать новый элемент в известном плане видов характеристик через COM соединение. Соединение установлено, тут всё нормально.

Я пишу так:

ОписаниеТиповТек = Новый ОписаниеТипов ("СправочникСсылка. Контрагенты"); НазначениеСвойства = Соединение. ПланыВидовХарактеристик. НазначенияСвойствКатегорийОбъектов. НайтиПоНаименованию ("Справочник ""Физические лица"""); НовыйЭлемент = Соединение. ПланыВидовХарактеристик. СвойстваОбъектов. СоздатьЭлемент (); НовыйЭлемент. Наименование = НаименованиеСвойства; НовыйЭлемент. НазначениеСвойства = НазначениеСвойства; НовыйЭлемент. ТипЗначения = ОписаниеТиповТек;

Последняя строка не срабатывает. И это понятно, он находит такой тип для базы, где 1С запущен, но мне-то нужен тип для присоединённой базы. А как его получить?

В моём варианте просто создаётся элемент с типом значения «Произвольный список». Оно работает в принципе, но некрасиво как-то.

Плватформа 8.3. COM-соединение – непременное условие. Решения без его использования не интересуют.

Ответ:

Прокатывает. Спасибо, оно заработало.

Вопрос: COM соединение. Проблема с параметром запроса


Доброго времени суток.
Проблема с запросом по COM-соединению.

Перем ТЗ; МассивНоменклатуры = COM.NewObject("Массив"); Для Каждого Строка из ТЗНоменклатуры Цикл Номенклатура = COM.Справочники.Номенклатура.ПолучитьСсылку(COM.NewObject("УникальныйИдентификатор", СокрЛП(Строка.Номенклатура.Идентификатор))); МассивНоменклатуры.Add(Номенклатура); КонецЦикла; Если МассивНоменклатуры.Количество() <> 0 Тогда Запрос = COM.NewObject("Запрос"); Запрос.Текст = "ВЫБРАТЬ |ЦеныНоменклатурыСрезПоследних.ТМЦ КАК Номенклатура, |ЦеныНоменклатурыСрезПоследних.ОтпускнаяЦена КАК Цена, |ЦеныНоменклатурыСрезПоследних.СтавкаНДС, |ЦеныНоменклатурыСрезПоследних.СтавкаНП |ИЗ |РегистрСведений.ЦеныТМЦ.СрезПоследних(|&ДатаДок, |ТипЦены = &ТипЦены |И ТМЦ В (&МассивНоменклатуры) |И ТМЦ.ЭтоГруппа = ЛОЖЬ |И Регистратор ССЫЛКА Документ.УстановкаОтпускныхЦен) КАК ЦеныНоменклатурыСрезПоследних"; Запрос.УстановитьПараметр("МассивНоменклатуры", МассивНоменклатуры); Запрос.УстановитьПараметр("ДатаДок", КонецДня(СтруктураПараметров.ДатаДок)); Запрос.УстановитьПараметр("ТипЦены", COM.Справочники.ТипыЦен.GetRef(COM.NewObject("УникальныйИдентификатор", СтруктураПараметров.ТипЦены.Идентификатор))); ТЗ = COM.NewObject("ТаблицаЗначений"); ТЗ = Запрос.Выполнить().Выгрузить(); Иначе ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Номенклатура"); ТЗ.Колонки.Добавить("Цена"); ТЗ.Колонки.Добавить("Процент"); ТЗ.Колонки.Добавить("СтавкаНДС"); КонецЕсли;

Проблема именно с номенклатурой или массивом номенклатуры, если их задать в качестве параметра - запрос возвращает пустые цены, если не же не задавать этот параметр вообще, то запрос возвращает правильные данные.
В консоли запросов той самой внешней базы всё отрабатывается без проблем.
В чём может быть сбой?

Ответ:

Попробуйте через ВремТабл сделать. Создайте таблицу значений с колонками соотв. типа, заполните её, подтяните в запрос, и потом наложите обор соединением внутренним.

Вопрос: Com соединение из файловой базы к файловой


Доброе утро. Есть файловая база 8.3, из нее по comсоединению пытаюсь подключиться к другой файловой базе:

Каталог = "C:\Users\1C\Документооборот (тест)"; Пользователь = "Администратор"; Пароль = ""; ПараметрыПодключения = "File="+Каталог+";Usr="+Пользователь+";Pwd="+Пароль+";"; V83 = Новый COMОбъект("V83.COMConnector"); Попытка Соединение = V83.Connect(ПараметрыПодключения); Исключение Сообщить("Не удалось соединится с документооборотом!"); КонецПопытки;


Вызывается исключение, без описания ошибки.
Обе базы принудительно запускаются в 8.3. Каталог и пользователь - указаны верно. В чем может быть причина?

Ответ:

Пишу строку кода V82 = Новый COMОбъект("V83 .COMConnector"); а остальной код как ниже, без изменений.

Когда версии у платформ источника и приёмника различные, возникает ошибка.

Не понятно какой версии регистрировать библиотеку и где её регистрировать?

Думаю нужно регистрировать библиотеку, версии 8.2.18.61, и делаю это через bat-файл

regsvr32 /n /i:user "C:\Program Files (x86)\1cv82\8.2.18.61\bin\comcntr.dll"
pause

msk-test1c:1641 -- это сервер 8.3.5.1098
V82 = Новый COMОбъект ("V82. COMConnector"); Сообщить ("Подключение к Бухгалтерии 3. 0 ... "); Попытка Connect = V82. Connect ("srvr = ""msk- test1c:1641""; ref = ""db_test""; usr = ""Администратор""; pwd = ""123"""); Сообщить ("УРА подключение установлено! "); Исключение Сообщить ("Нет подключения к базе данных! "); Сообщить (ОписаниеОшибки ()); // Инфо = ИнформацияОбОшибке (); // Сообщить ("Описание="" + Инфо.Описание + "" "); // Сообщить ("ИмяМодуля="" + Инфо.ИмяМодуля + "" "); // Сообщить ("НомерСтроки=" + Инфо. НомерСтроки); // Сообщить ("ИсходнаяСтрока="" + Инфо.ИсходнаяСтрока + "" "); Возврат; КонецПопытки;

Где регистрировать библиотеку, на клиенте, на сервере 8.2., на сервере 8.3 ? рис.ниже.
(для клиент-серверного варианта, и для файлового варианта базы 1С)

Ответ: Появилась задача через вебсервис сделать общение с одним терминалом. База - нууу допустим легкая ут. Тоже 0.5 или быстрее?

сложно сказать - у меня мало данных. Нас и 0,5 сек порадовали и минус ненужный клиент 1с на сторонней машине, минус синхронизация версий библиотек после обновления движка 1с, минус проклятые богом comsafearray, нормальные имена и типы полей... Думал нас с другой стороны (система которая интегрируется с 1С) "не поймут" когда выяснится, что надо переписывать вызовы 1С у себя на новую "модель общения систем". Но попробовав раз в тестовой базе одну функцию теперь нас теребят "давайте скорее на сервис переходить".

Вопрос: Как использовать ТипСодержит для объектов Com?


Если Реквизит.Тип.СодержитТип(Тип("СправочникСсылка.Номенклатура")) Тогда ЕстьНоменклатура = Истина; КонецЕсли;

"Реквизит" получен из com-соединения с другой базой 1с. Вываливается при сравнении ошибка:

{ВнешняяОбработка.ПересчетКоэффициента.Форма.Форма.Форма(183)}: Ошибка при вызове метода контекста (СодержитТип)
Если Реквизит.Тип.СодержитТип(Тип("СправочникСсылка.Номенклатура")) Тогда
по причине:
Произошла исключительная ситуация (1C:Enterprise 8.3.8.1964): Несоответствие типов (параметр номер "1")

Я так подозреваю надо сравнивать с типом в соm? Как правильно проверить тип?

Ответ:

Не не катит. Решил вопрос так:
В базе приемнике в общем модуле с галкой внешнее соединение код:

Функция ПроверитьТипРеквизита(Реквизит, Тип) Экспорт Возврат Реквизит.Тип.СодержитТип(Тип(Тип)); КонецФункции

В базе из которой подключаюсь вызываю процедуру через Com:

ComConnection.Авис_ПроцедурыОбмена.ПроверитьТипРеквизита(Реквизит, "СправочникСсылка.Номенклатура")



Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
ПОДЕЛИТЬСЯ: