|
Интерактивные операции недоступны | ☑ | ||
---|---|---|---|---|
0
Mikhail Volkov
09.11.22
✎
17:04
|
Альфа-Авто и КА1 (УПП) когда-то работали на одной платформе 8.3.10.2466. В каждом справочнике в Альфа-Авто, в частности: Контрагенты, Договора... сделаны кнопки "Найти/Создать в КА", по которой находит или создает в КА1 данный элемент, и открывает его в КА1 по Com-соелинению. Теперь КА1 (УПП) кроме Альфа-Авто работает на более высокой платформе, и при нажатии этой кнопки выдает ошибку:
{Справочник.ДоговорыВзаиморасчетов.Форма.ФормаЭлемента.Форма(423)}: Ошибка при вызове метода контекста (ПолучитьФорму) Форма=СсылкаКА.ПолучитьФорму(); по причине: Произошла исключительная ситуация (1C:Enterprise 8.3.10.2466): Интерактивные операции недоступны Можно ли устранить ошибку, как? |
|||
1
vicof
09.11.22
✎
17:11
|
Под тонкийм клиентом запускаетесь?
|
|||
2
Mikhail Volkov
09.11.22
✎
17:34
|
(1) Нет, формы обычные.
Сама процедура: Процедура ДействияФормыСоздатьВКА(Кнопка) Если ЗначениеЗаполнено(Ссылка) Тогда ОбъектКА = мвДоработки.ВыполнитьПодключениеКА(Ссылка.Организация,,,, ЭтотОбъект); //+МВ 09.09.2013 Если ОбъектКА = Неопределено Тогда Сообщить("Ошибка подключения к базе " + мвДоработки.БазаОрганизации(Ссылка.Организация), СтатусСообщения.Внимание); Возврат; КонецЕсли; //-МВ IDАльфа=Ссылка.УникальныйИдентификатор(); СсылкаКА=ОбъектКА.Справочники.ДоговорыКонтрагентов.ПолучитьСсылку(ОбъектКА.NewObject("УникальныйИдентификатор",Строка(IDАльфа))); Если ЗначениеЗаполнено(СсылкаКА.Code) Тогда Состояние("Открыта модально форма найденного Com-объекта: '" + СокрЛП(Ссылка) + "' в " + мвДоработки.БазаОрганизации(мвДоработки.ОрганизацияТекущегоПодключенияКА())); СсылкаКА.ПолучитьФорму().ОткрытьМодально(); Иначе Состояние("Com-объект: '" + СокрЛП(Ссылка) + "' не найден в " + мвДоработки.БазаОрганизации(мвДоработки.ОрганизацияТекущегоПодключенияКА()) + ", создаем..."); ВладелецКА = мвДоработки.НайтиЭлементСправочникаКА(Ссылка.Владелец, "Контрагенты"); Если ВладелецКА = Неопределено Тогда Состояние("Владелец Com-объекта: '" + СокрЛП(Ссылка.Владелец) + "' не найден в " + мвДоработки.БазаОрганизации(мвДоработки.ОрганизацияТекущегоПодключенияКА())); Сообщить("Владелец: '" + СокрЛП(Ссылка.Владелец) + "' в базе " + мвДоработки.БазаОрганизации(Организация) + " не найден, создайте владельца", СтатусСообщения.Внимание); Возврат; КонецЕсли; Форма=СсылкаКА.ПолучитьФорму(); Форма.Code = Ссылка.Код; Форма.DeletionMark = Ссылка.ПометкаУдаления; Попытка Форма.Parent = ОбъектКА.Справочники.ДоговорыВзаиморасчетов.ПолучитьСсылку(ОбъектКА.NewObject("УникальныйИдентификатор",Строка(Родитель.УникальныйИдентификатор()))); Исключение КонецПопытки; Форма.Description = Ссылка.Наименование; Форма.Номер = Ссылка.НомерДоговора; Форма.Дата = Ссылка.ДатаНачала; Форма.СрокДействия = Ссылка.ДатаКонца; Форма.ПроцентПредоплаты = Ссылка.ПроцентПредоплаты; Форма.Комментарий = Ссылка.Комментарий; Форма.Владелец = ВладелецКА; Форма.Организация = мвДоработки.НайтиЭлементСправочникаКА(Ссылка.Организация, "Организации"); Форма.ВалютаВзаиморасчетов = мвДоработки.НайтиЭлементСправочникаКА(Ссылка.ВалютаВзаиморасчетов, "Валюты"); Если Ссылка.ВидДоговора = Перечисления.ВидыДоговоров.Покупка Тогда Форма.ВидДоговора = "СПоставщиком"; ИначеЕсли Ссылка.ВидДоговора = Перечисления.ВидыДоговоров.Продажа Тогда Форма.ВидДоговора = "СПокупателем"; ИначеЕсли Ссылка.ВидДоговора = Перечисления.ВидыДоговоров.Комиссия Тогда Форма.ВидДоговора = "СКомиссионером"; Иначе Если Ссылка.Владелец.ВидКонтрагента = Перечисления.ВидыКонтрагентов.Поставщик Тогда Форма.ВидДоговора = "СПоставщиком"; ИначеЕсли Ссылка.Владелец.ВидКонтрагента = Перечисления.ВидыКонтрагентов.Покупатель Тогда Форма.ВидДоговора = "СПокупателем"; Иначе Форма.ВидДоговора = "Прочее"; КонецЕсли; КонецЕсли; Форма.ДопустимаяСуммаЗадолженности = Ссылка.МаксимальныйКредит; Форма.ДопустимоеЧислоДнейЗадолженности = Ссылка.СрокОплатыЗадолженности; Форма.КонтролироватьСуммуЗадолженности = Ссылка.МаксимальныйКредит > 0; Форма.КонтролироватьЧислоДнейЗадолженности = Ссылка.СрокОплатыЗадолженности > 0; Форма.УстановитьСсылкуНового(СсылкаКА); Состояние("Открыта модально форма создания Com-объекта: '" + СокрЛП(Ссылка) + "' в КА " + СокрЛП(ОбъектКА.СтрокаСоединенияИнформационнойБазы())); Форма.ОткрытьМодально(); КонецЕсли; ИначеЕсли обЗначениеНеЗаполнено(Организация) Тогда //+МВ 24.01.2019 Предупреждение("Договор не записан, организация не указана!", 60); Иначе Ответ = Вопрос("Договор не записан!" + Символы.ПС + "Найти основной договор " + СокрЛП(Владелец) + " в " + мвДоработки.БазаОрганизации(Организация) + "," + Символы.ПС + "и присвоить его значения?", РежимДиалогаВопрос.ДаНет, 60); Если Ответ = КодВозвратаДиалога.Да Тогда ОбъектКА = мвДоработки.ВыполнитьПодключениеКА(Организация,,,, ЭтотОбъект); Если ОбъектКА = Неопределено Тогда Сообщить("Ошибка подключения к базе " + мвДоработки.БазаОрганизации(Организация), СтатусСообщения.Внимание); Возврат; КонецЕсли; ВладелецКА = мвДоработки.НайтиЭлементСправочникаКА(Владелец, "Контрагенты"); Если ВладелецКА <> Неопределено И ЗначениеЗаполнено(ВладелецКА.Code) Тогда СписокДоговоровКА = мвДоработки.НайтиДоговораКонтрагентаКА(ВладелецКА, Организация); Если СписокДоговоровКА.Количество() = 0 Тогда Состояние("Владелец Com-объекта: '" + СокрЛП(Владелец) + "' найден в " + мвДоработки.БазаОрганизации(мвДоработки.ОрганизацияТекущегоПодключенияКА()) + ", но не имеет договоров"); Сообщить("Владелец: '" + СокрЛП(Ссылка.Владелец) + "' в базе " + мвДоработки.БазаОрганизации(Организация) + " найден, но не имеет договоров", СтатусСообщения.Внимание); Возврат; ИначеЕсли СписокДоговоровКА.Количество() = 1 Тогда ДоговорКА = СписокДоговоровКА[0].Значение; Иначе ДоговорКА = ВладелецКА.ОсновнойДоговорКонтрагента; КонецЕсли; СсылкаДоговорКА = Справочники.ДоговорыВзаиморасчетов.ПолучитьСсылку(Новый УникальныйИдентификатор(ОбъектКА.XMLСтрока(ДоговорКА.УникальныйИдентификатор()))); ОбъектСсылки = СсылкаДоговорКА.ПолучитьОбъект(); Если ОбъектСсылки <> Неопределено Тогда Сообщить("Основной договор контрагента: '" + СокрЛП(Владелец) + "' найденного в базе " + мвДоработки.БазаОрганизации(Организация) + " существует в Альфа-Авто: '" + СокрЛП(ОбъектСсылки) + "' с кодом: " + СокрЛП(ОбъектСсылки.Код), СтатусСообщения.Внимание); Возврат; КонецЕсли; Код = СокрЛП(ДоговорКА.Код); Наименование = СокрЛП(ДоговорКА.Наименование); НомерДоговора = СокрЛП(ДоговорКА.Номер); ДатаНачала = ДоговорКА.Дата; ДатаКонца = ДоговорКА.СрокДействия; Комментарий = СокрЛП(ДоговорКА.Комментарий) + ?(ПустаяСтрока(ДоговорКА.Комментарий), "", ", ") + "Загружен из " + СокрЛП(мвДоработки.БазаОрганизации(Организация)); ВалютаВзаиморасчетов = Справочники.Валюты.НайтиПоКоду("643"); ВидДоговора = ?(ОбъектКА.XMLСтрока(ДоговорКА.ВидДоговора) = "СПокупателем", Перечисления.ВидыДоговоров.Продажа, Перечисления.ВидыДоговоров.Покупка); СпособЗакрытияСделок = Перечисления.СпособЗакрытияСделок.ПоРасчетнымДокументам; МаксимальныйКредит = ДоговорКА.ДопустимаяСуммаЗадолженности; СрокОплатыЗадолженности = ДоговорКА.ДопустимоеЧислоДнейЗадолженности; УстановитьСсылкуНового(СсылкаДоговорКА); Сообщить("Договор: " + СокрЛП(Наименование) + " контрагента: '" + СокрЛП(Владелец) + "' найденного в базе " + мвДоработки.БазаОрганизации(Организация) + " обновлен, GUID: " + СсылкаДоговорКА.УникальныйИдентификатор(), СтатусСообщения.Информация); Иначе Состояние("Владелец Com-объекта: '" + СокрЛП(Владелец) + "' не найден в " + мвДоработки.БазаОрганизации(мвДоработки.ОрганизацияТекущегоПодключенияКА())); Сообщить("Владелец: '" + СокрЛП(Владелец) + "' в базе " + мвДоработки.БазаОрганизации(Организация) + " не найден, создайте владельца", СтатусСообщения.Внимание); КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
3
Сергиус
10.11.22
✎
03:10
|
(0)[Теперь КА1 (УПП) кроме Альфа-Авто работает на более высокой платформе]
На какой платформе КА1? Судя по ошибке [Произошла исключительная ситуация (1C:Enterprise 8.3.10.2466)], для COM соединения используется comcntr.dll старого релиза. Надо как то подсунуть её родную. |
|||
4
Сергиус
10.11.22
✎
03:14
|
||||
5
Mikhail Volkov
10.11.22
✎
08:37
|
(4) > Возможно надо что-то типа такого делать..
А конкретно? |
|||
6
Mikhail Volkov
10.11.22
✎
10:06
|
(3) Пока на 8.3.19.1522, но менять буду.
(4) Что-то делал подобное Тип не определен (Запрос) Запрос = Новый <<?>>Запрос; (Проверка: Тонкий клиент) |
|||
7
Mikhail Volkov
10.11.22
✎
11:54
|
(3) А где, мвДоработки.ВыполнитьПодключениеКА()? При установки Com-соелинения пишет:
Начало подключения через COM-Объект 8.3.19.1522 COMОбъект: V83.COMConnector_8.3.19.1522 10.11.2022 13:35:30 Подключение выполнено к базе: 'Srvr="ANDROMEDA";Ref="PATRCA";' 10.11.2022 13:35:51 (писал давно для замера времени установки Com-соелинения) |
|||
8
vs7719
10.11.22
✎
12:00
|
Если ОбъектКА - COM, то попробуйте убрать СсылкаКА.ПолучитьФорму().ОткрытьМодально(); Во внешнем соединении это может не работать.
|
|||
9
vs7719
10.11.22
✎
12:02
|
+ Форма.ОткрытьМодально(); - тоже "в топку"
|
|||
10
vicof
10.11.22
✎
12:10
|
(6) Вы в (2) обманываете.
|
|||
11
Mikhail Volkov
10.11.22
✎
12:42
|
(8), (9) Что вместо них, как открыть форму с СсылкаКА, если ОбъектКА - COM?
(10) В чем? |
|||
12
vs7719
10.11.22
✎
13:46
|
Чтобы открыть окно другой базы 1С к ней нужно подключаться не через V83.COMConnector, а V83.Application
|
|||
13
Mikhail Volkov
10.11.22
✎
15:24
|
(12) Итак вроде Application или нет?
Попытка Сообщить("Начало подключения через COM-Объект " + ВерсияПриложения + " COMОбъект: " + "V8" + ?(Найти(ВерсияПриложения, "8.2") = 0, "3", "2") + ?(ПодключенаВысокаяВерсия(СтрокаПодключения), ".COMConnector_" + ВысокаяВерсия, ".Application") + " " + ТекущаяДата(), СтатусСообщения.Информация); БазаКА = Новый COMОбъект("V8" + ?(Найти(ВерсияПриложения, "8.2") = 0, "3", "2") + ?(ПодключенаВысокаяВерсия(СтрокаПодключения), ".COMConnector_" + ВысокаяВерсия, ".Application")); // БазаКА = Новый COMОбъект("V83.COMConnector_8.3.19.1522"); ТекCOMОбъект = БазаКА.Connect(СтрокаПодключенияБезПорта); СтрокаСообщенияОбОшибке = ""; Сообщить("Подключение выполнено к базе: '" + ?(ПодключенаВысокаяВерсия(СтрокаПодключения), Лев(СтрокаПодключенияБезПорта, Найти(СтрокаПодключенияБезПорта, "Usr=") - 1), СокрЛП(БазаКА.СтрокаСоединенияИнформационнойБазы())) + "' " + ТекущаяДата(), СтатусСообщения.Информация); Состояние("Соедининение с " + БазаОрганизации(Организация) + "через COM-Объект " + ?(ПодключенаВысокаяВерсия(), ВысокаяВерсия, ПрежняяВерсия) + " выполнено"); //+МВ 27.07.2022 Исключение Состояние("При попытке соединения" + ?(Организация = Неопределено, "", " с " + БазаОрганизации(Организация)) + " через COM-Объект произошла ошибка"); СтрокаСообщенияОбОшибке = "При попытке соединения с COM-сервером произошла следующая ошибка:" + Символы.ПС + ОписаниеОшибки(); //+МВ 27.07.2022 КонецПопытки; В любой платформе, а то сейчас просит не ниже 8.3.19.1665 Какая платформа нужна последнему релизу УПП? Как открыть форму зная ссылку объекта? ПоказатьЗначение(,СсылкаКА); и ОткрытьЗначение(СсылкаКА); - показывают, что COMОбъект - и все. |
|||
14
Mikhail Volkov
10.11.22
✎
15:35
|
(12) Вроде нет, а это возможно для разных платформ? (если базы находятся на разных платформах)
|
|||
15
Mikhail Volkov
10.11.22
✎
17:29
|
Повторюсь: Возможно ли открыть объект (по ссылке) в другой базе по Com-соелинению, если базы находятся на разных платформах?
|
|||
16
Сергиус
10.11.22
✎
23:24
|
(15)Раньше на одном релизе платформ это работало?
|
|||
17
Mikhail Volkov
11.11.22
✎
16:35
|
(16) Да
|
|||
18
Garykom
гуру
11.11.22
✎
16:44
|
(0) это логичный конец вашего изврата
|
|||
19
Garykom
гуру
11.11.22
✎
16:44
|
переписывай на http-сервисы
|
|||
20
Kassern
11.11.22
✎
17:10
|
(0) "получение формы на сервере не доступно ибо она там никому не нужна."
https://forum.infostart.ru/forum9/topic286325/ |
|||
21
Mikhail Volkov
11.11.22
✎
17:30
|
(20) Формы обычные, без разницы на сервере или на клиенте.
|
|||
22
Сергиус
11.11.22
✎
17:47
|
(17)Скорее всего, если оно работало в таком виде, то это была фича конкретной платформы.
|
|||
23
Mikhail Volkov
11.11.22
✎
17:52
|
(22) Нет, обычное Com-соелинение.
|
|||
24
Mikhail Volkov
11.11.22
✎
17:56
|
+ Проблема появилась когда базы стали работать на разных платформах.
|
|||
25
Kassern
11.11.22
✎
17:58
|
(24) А в чем проблема привести базы к одной платформе?
|
|||
26
Kassern
11.11.22
✎
17:59
|
Правильно вам советовали тут и в прошлых ветках - научитесь уже пользоваться веб/хттп сервисами и будет вам счастье.
|
|||
27
Mikhail Volkov
11.11.22
✎
18:14
|
А Com-соединение никак, или не знаешь?
|
|||
28
Сергиус
11.11.22
✎
18:14
|
(23)А что находится в ОбъектКА = мвДоработки.ВыполнитьПодключениеКА()? Сдается мне, там через Application делается.
|
|||
29
Сергиус
11.11.22
✎
18:15
|
+(28)Если так, то тогда только вариант (25) может помочь..
|
|||
30
Mikhail Volkov
11.11.22
✎
18:32
|
(28) См. (13), нет, а можно, как?
(29) Альфа-Авто не работает выше 8.3.10.2466. |
|||
31
Сергиус
11.11.22
✎
18:36
|
(30) БазаКА = Новый COMОбъект("V8" + ?(Найти(ВерсияПриложения, "8.2") = 0, "3", "2") + ?(ПодключенаВысокаяВерсия(СтрокаПодключения), ".COMConnector_" + ВысокаяВерсия, ".Application"));
Application и есть. |
|||
32
Сергиус
11.11.22
✎
18:37
|
(30)[Альфа-Авто не работает выше 8.3.10.2466]
Вы пробовали повысить версию? |
|||
33
Mikhail Volkov
11.11.22
✎
18:56
|
(31) Нет, ПодключенаВысокаяВерсия(СтрокаПодключения)=Истина, надо что-то в службе компонентов делать, что?
(32) Да, не работает. |
|||
34
Сергиус
11.11.22
✎
19:06
|
(33)Через ComConnector форму не откроет в любом случае.
|
|||
35
Сергиус
11.11.22
✎
19:08
|
(33)Что именно не работает после повышения версии? Возможно там надо сделать адаптацию кода.
|
|||
36
Сергиус
11.11.22
✎
19:11
|
(34)В дополнение к посту: "Объект V83.Application соответствует объекту V77.Aplication, а именно происходит загрузка сервера с интерфейсными библиотеками в режиме клиент, объект же V83.COMConnector при загрузке не имеет ничего из того что отвечает за интерфейс с пользователем, что повышает производительность при работе с внешним соединением."
|
|||
37
Mikhail Volkov
12.11.22
✎
09:27
|
Вроде нашел что-то https://infostart.ru/public/1042208/
|
|||
38
Сергиус
12.11.22
✎
14:06
|
(37)Судя по комментам, вы сами писали в этой теме еще в начале 20-го года)
|
|||
39
Сергиус
12.11.22
✎
14:10
|
+(38)Но судя по описанию, костыль еще тот предлагается..
|
|||
40
Сергиус
12.11.22
✎
14:14
|
+(39)В вашем случае надо скорее так: 1)Сначала получить нужные данные из другой базы(сомневаюсь, что нужна прямо вся инфа по документу, наверняка какие-то определенные показатели, поля и тп). Вопрос как получать, наверно вторичен(можно через COM, можно через HTTP запросы). 2)Вывести их на показ пользователю уже в текущей базе, используя локальную форму.
|
|||
41
Mikhail Volkov
12.11.22
✎
14:42
|
(40) В данном случае кнопка "Найти/Создать в КА" нужна для создания (переноса из Альфа-Авто) контрагента в КА1, если там его нет. Все его параметры и GUID должны быть такими же (скопированы), но некоторые параметры изменены пользователем.
|
|||
42
Mikhail Volkov
12.11.22
✎
15:06
|
(38) А где? Может что вспомню...
|
|||
43
Сергиус
12.11.22
✎
22:27
|
(41)Ну вполне решаемо в том варианте, что предложено в (40).
|
|||
44
Сергиус
12.11.22
✎
22:27
|
(42)Внизу статьи из (37)
|
|||
45
Mikhail Volkov
13.11.22
✎
16:54
|
(43) Возможно, но работы много... хотелось бы проще
(44) Да, припоминаю, даже в Альфа-Авто нашел: // Открытие объекта по ссылке в базе ERP/КА2, работающей на более высокой версии платформы // Процедура ОткрытьОбъектВБазеВысокойВерсии(Ссылка) Экспорт Если обЗначениеНеЗаполнено(Ссылка) Тогда Предупреждение("Объект в " + БазаОрганизации(ОрганизацияТекущегоПодключенияКА()) + "не найден!", 60); Возврат; КонецЕсли; ИмяСервера = Сред(ОбъектКА.СтрокаСоединенияИнформационнойБазы(), 7, Найти(ОбъектКА.СтрокаСоединенияИнформационнойБазы(), ";Ref=") - 8); // "andromeda:1641"; ИмяБазы = Сред(ОбъектКА.СтрокаСоединенияИнформационнойБазы(), Найти(ОбъектКА.СтрокаСоединенияИнформационнойБазы(), ";Ref=") + 6, СтрДлина(ОбъектКА.СтрокаСоединенияИнформационнойБазы()) - Найти(ОбъектКА.СтрокаСоединенияИнформационнойБазы(), ";Ref=") - 7); // "PatrERP"; Если Не БазаКАОткрытаПользователем() Тогда Предупреждение("База '" + ИмяБазы + "' не открыта под пользователем '" + СокрЛП(ПараметрыСеанса.Пользователь) + "'", 60); Возврат; КонецЕсли; Объект = Ссылка.ПолучитьОбъект(); ТипОбъекта = СокрЛП(Объект.Метаданные().ПолноеИмя()); GUID = ОбъектКА.XMLСтрока(Ссылка.УникальныйИдентификатор()); НавигационныйGUID = Сред(GUID, 20 ,4) + Сред(GUID, 25, 12) + Сред(GUID, 15, 4) + Сред(GUID, 10, 4) + Сред(GUID, 1, 8); ПутьОбъекта = "e1cib/data/" + ТипОбъекта + "?ref=" + НавигационныйGUID; НазваниеОкна = СокрЛП(ОбъектКА.Константы.ЗаголовокСистемы.Получить()); // "КА2 ИП Патрушева Г.М."; НазваниеОкна = СтрЗаменить(НазваниеОкна, """", """"""); НазваниеОкна = СтрЗаменить(НазваниеОкна, " ", """ """); СерверБаза = ИмяСервера + "\" + ИмяБазы; СерверБаза = "/S""" """" + СерверБаза + """" """/URL""" """" + ПутьОбъекта; // после СерверБаза? " /N""Администратор"" /P""2001221" ПутьКФайлу = "\\corp.akit\workspace$\1c\1с_Архивы\"; ПолныйПутьКФайлу = ПутьКФайлу + "ОткрытьСсылкуВДругойБазе.exe"; ПолныйПутьОткрытияОбъекта = """"""; // вроде не нужно СтрЗаменить("c:\Program Files\1cv8\common\1cestart.exe ENTERPRISE " + СерверБаза," ",""" """); Файл = Новый Файл(ПолныйПутьКФайлу); Если Не Файл.Существует() Тогда Сообщить("Файл: '" + ПолныйПутьКФайлу + "' не существует.", СтатусСообщения.Информация); Возврат; КонецЕсли; Приложение = ПолныйПутьКФайлу + " " + НазваниеОкна + " " + ПутьОбъекта + " " + СерверБаза + " " + ПолныйПутьОткрытияОбъекта; // Сообщить(Приложение, СтатусСообщения.Информация); ЗапуститьПриложение(Приложение); КонецПроцедуры // ОткрытьОбъектВБазеВысокойВерсии() // Возвращает Истина, если база, с которой установлено Com-соединение, открыта текущем пользователем // Функция БазаКАОткрытаПользователем() Экспорт Если ОбъектКА <> Неопределено Тогда ПользовательКА = НайтиЭлементСправочникаКА(ПараметрыСеанса.Пользователь, "Пользователи"); GUIDПользователяИБ = ОбъектКА.XMLСтрока(ПользовательКА.ИдентификаторПользователяИБ); МассивСоединений = ОбъектКА.ПолучитьСоединенияИнформационнойБазы(); Для Каждого Соединение Из МассивСоединений Цикл // Приложение = ПредставлениеПриложения(Соединение.ИмяПриложения); // Сообщить("Пользователь: " + Соединение.Пользователь.Имя + "/" + Соединение.Пользователь.ПолноеИмя + ", приложение: " + Приложение + "/" + СокрЛП(Соединение.ИмяПриложения) + ", GUID: " + ОбъектКА.XMLСтрока(Соединение.Пользователь.УникальныйИдентификатор) + "/" + СокрЛП(Соединение.Пользователь.УникальныйИдентификатор), СтатусСообщения.Информация); // Если Соединение.Пользователь.ПолноеИмя = ПользовательКА.Наименование // хотелось бы: Соединение.Пользователь = ПользовательКА Если ОбъектКА.XMLСтрока(Соединение.Пользователь.УникальныйИдентификатор) = GUIDПользователяИБ И Найти(ПредставлениеПриложения(Соединение.ИмяПриложения), "клиент") > 0 Тогда Возврат Истина; КонецЕсли; КонецЦикла; КонецЕсли; Возврат Ложь; КонецФункции // БазаКАОткрытаПользователем() Не помню отлажена ли она, вставил в свою форму Контрагенты (2), пишет: "База 'ИмяБазы' не открыта под пользователем 'Пользователь'" - разбираюсь... |
|||
46
Mikhail Volkov
13.11.22
✎
21:15
|
Пишу: Сообщить("Приложение: " + ПредставлениеПриложения(Соединение.ИмяПриложения)); - выводит: COM-соединение или Толстый клиент, а как вывести: Соединение.Пользователь, если просто без всего, то COMОбъект?
|
|||
47
Mikhail Volkov
14.11.22
✎
09:33
|
(46) Соединение.Пользователь.Имя (или ПолноеИмя). Функция БазаКАОткрытаПользователем() наверное сделана для проверки есть ли COM-соединение под ПараметрыСеанса.Пользователь, но к некоторым базам Альфа-Авто цепляется под служебным пользователем, в частности к КА1. Как установить COM-соединение под ПараметрыСеанса.Пользователь при АутентификацияWindows (или как достать пароль пользователя)?
|
|||
48
Mikhail Volkov
14.11.22
✎
13:42
|
(47) Отбой, исправил:
// Возвращает Истина, если база, с которой установлено Com-соединение, открыта текущем пользователем // Функция БазаКАОткрытаПользователем() Экспорт Если ОбъектКА <> Неопределено Тогда ИмяБазы = Сред(ОбъектКА.СтрокаСоединенияИнформационнойБазы(), Найти(ОбъектКА.СтрокаСоединенияИнформационнойБазы(), ";Ref=") + 6, СтрДлина(ОбъектКА.СтрокаСоединенияИнформационнойБазы()) - Найти(ОбъектКА.СтрокаСоединенияИнформационнойБазы(), ";Ref=") - 7); // "PatrERP"; ПользовательКА = НайтиЭлементСправочникаКА(?(ИмяБазы = ВРег("PatrCA"), Справочники.Пользователи.НайтиПоКоду("Администратор"), ПараметрыСеанса.Пользователь), "Пользователи"); GUIDПользователяИБ = ОбъектКА.XMLСтрока(ПользовательКА.ИдентификаторПользователяИБ); МассивСоединений = ОбъектКА.ПолучитьСоединенияИнформационнойБазы(); Для Каждого Соединение Из МассивСоединений Цикл Если ОбъектКА.XMLСтрока(Соединение.Пользователь.УникальныйИдентификатор) = GUIDПользователяИБ И (Найти(ПредставлениеПриложения(Соединение.ИмяПриложения), "COM-соединение") > 0 Или Найти(ПредставлениеПриложения(Соединение.ИмяПриложения), "клиент") > 0) Тогда Возврат Истина; КонецЕсли; КонецЦикла; КонецЕсли; Возврат Ложь; КонецФункции // БазаКАОткрытаПользователем() Ошибку преобразования данных XML дала строка: GUID = ОбъектКА.XMLСтрока(Ссылка.УникальныйИдентификатор()); - убрал ОбъектКА.XMLСтрока - зачем это? Ссылка.УникальныйИдентификатор() вроде строка. |
|||
49
Сергиус
14.11.22
✎
14:26
|
(48)Ссылка.УникальныйИдентификатор() это не строка, там Тип: УникальныйИдентификатор.
|
|||
50
Mikhail Volkov
14.11.22
✎
19:11
|
(49) Как правильно написать чтобы передать GUID?
|
|||
51
Сергиус
14.11.22
✎
22:12
|
(50)А вы уверены, что гуиды в разных базах будут совпадать для одних и тех же объектов?
|
|||
52
Mikhail Volkov
17.11.22
✎
13:51
|
(51) Да, в основном объекты в КА1 создаются обработкой УниверсальныйОбменДаннымиXML, если справочник по GUID не найден, то ищется по коду. Для контрагентов добавил поиск по ИНН. Но даже если ничего не найдет, то должна открыться пустая форма контрагента, заполненная параметрами контрагента из Альфа-Авто. А у меня этого не происходит, почему (даже ошибок сейчас нет)?
Изменения: Процедура ОткрытьОбъектВБазеВысокойВерсии(Ссылка) Экспорт Если обЗначениеНеЗаполнено(Ссылка) Тогда Предупреждение("Объект в " + БазаОрганизации(ОрганизацияТекущегоПодключенияКА()) + "не найден!", 60); Возврат; КонецЕсли; ИмяСервера = Сред(ОбъектКА.СтрокаСоединенияИнформационнойБазы(), 7, Найти(ОбъектКА.СтрокаСоединенияИнформационнойБазы(), ";Ref=") - 8); // "andromeda:1641"; ИмяБазы = Сред(ОбъектКА.СтрокаСоединенияИнформационнойБазы(), Найти(ОбъектКА.СтрокаСоединенияИнформационнойБазы(), ";Ref=") + 6, СтрДлина(ОбъектКА.СтрокаСоединенияИнформационнойБазы()) - Найти(ОбъектКА.СтрокаСоединенияИнформационнойБазы(), ";Ref=") - 7); // "PatrERP"; Если Не БазаКАОткрытаПользователем() Тогда Предупреждение("База '" + ИмяБазы + "' не открыта под пользователем '" + СокрЛП(ПараметрыСеанса.Пользователь) + "'", 60); Возврат; КонецЕсли; Объект = Ссылка.ПолучитьОбъект(); ТипОбъекта = СокрЛП(Объект.Метаданные().ПолноеИмя()); Если Найти(ТипОбъекта, "Справочник") = 0 Тогда GUID = ОбъектКА.XMLСтрока(Ссылка.УникальныйИдентификатор()); //+МВ ОбъектКА.XMLСтрока() - Ошибка преобразования данных XML Иначе СсылкаКА = НайтиЭлементСправочникаКА(Ссылка, СтрЗаменить(ТипОбъекта, "Справочник.", "")); GUID = ОбъектКА.XMLСтрока(СсылкаКА.УникальныйИдентификатор()); КонецЕсли; |
|||
53
Сергиус
18.11.22
✎
12:46
|
(52)ИД = СсылкаНаОбъект.УникальныйИдентификатор();
СсылкаОбъектаПриемника = Соединение.Справочники[ИмяОбъекта].ПолучитьСсылку(Соединение.NewObject("УникальныйИдентификатор",СокрЛП(ИД))); Примерно как то так надо гуид через COM соединение протаскивать. |
|||
54
Mikhail Volkov
18.11.22
✎
18:07
|
(53) Спс, но для обработке (45) нужно не только СсылкаОбъектаПриемника, но и его сам GUID, по нему вычисляется НавигационныйGUID.
|
|||
55
Сергиус
18.11.22
✎
21:27
|
(54)GUID = ОбъектКА.XMLСтрока(СсылкаОбъектаПриемника.УникальныйИдентификатор());
|
|||
56
Mikhail Volkov
21.11.22
✎
16:13
|
(55) Так уже было (45) дает: Ошибка преобразования данных XML, вроде исправил для справочников (52), для документов не проверял.
Сомнение вызывает НазваниеОкна, достаточно ли:? НазваниеОкна = СокрЛП(ОбъектКА.Константы.ЗаголовокСистемы.Получить()); // "КА2.5 ИП Патрушева Г.М."; НазваниеОкна = СтрЗаменить(НазваниеОкна, """", """"""); НазваниеОкна = СтрЗаменить(НазваниеОкна, " ", """ """); |
|||
57
Сергиус
21.11.22
✎
17:12
|
(56)В (45) идет без скобок () в конце УникальныйИдентификатор.
|
|||
58
Mikhail Volkov
21.11.22
✎
17:33
|
(57) Есть там скобки: GUID = ОбъектКА.XMLСтрока(Ссылка.УникальныйИдентификатор()); Или не надо?
|
|||
59
Kassern
21.11.22
✎
17:39
|
(58) А зачем писать Ссылка.УникальныйИдентификатор()? XMLСтрока(Ссылка) вернет ту же строку с гуидом, емнип.
|
|||
60
Kassern
21.11.22
✎
17:41
|
Вы уверены, что у вас в Ссылке действительно ссылка, а не объект к примеру?
Гляньте топик |
|||
61
Kassern
21.11.22
✎
17:41
|
||||
62
Kassern
21.11.22
✎
17:54
|
Погодите, а вы случайно не пытаетесь получить гуид ссылки из одной базы в другой? (52) смотрю я вашу поделку в коде и не понимаю, что у вас передается в ссылке. "Если Не БазаКАОткрытаПользователем() Тогда" -> а это зачем? У вас соединение может похерится за время работы кусков кода? А если соединения нет, то как вы выше получите ОбъектКА.СтрокаСоединенияИнформационнойБазы()? В общем одни вопросы к организации обменов.
|
|||
63
Сергиус
21.11.22
✎
22:04
|
(62)Там сразу было понятно, что эта схема работы будет кривая. Только через OLE можно сделать что-то удобоваримое.
|
|||
64
Mikhail Volkov
22.11.22
✎
11:42
|
(63) А OLE-соединение баз на разных платформах точно невозможно?
(62) БазаКАОткрытаПользователем() - неудачное название функции, писалась для проверки соединения с КА2 (в то время только КА2 работала на высокой платформе). |
|||
65
Kassern
22.11.22
✎
11:44
|
(64) Вы должны понимать, что ГУИД это не строка, а объект с типом Уникальный идентификатор. Передавать гуид из одной базы в другую вряд ли получится, только его строковое представление. Проверьте везде, что вы не пытаете сам гуид передать в базу приемник, либо с приемника вернуть гуид, а не строку.
|
|||
66
Сергиус
22.11.22
✎
12:11
|
(64)GUID = ОбъектКА.XMLСтрока(Ссылка.УникальныйИдентификатор()); Выдает Ошибку преобразования данных XML?
|
|||
67
Mikhail Volkov
22.11.22
✎
12:22
|
(66) После замены Ссылка на СсылкаКА нет.
|
|||
68
Kassern
22.11.22
✎
12:26
|
(67) Вы понимаете, что вы пытались сделать передав ссылку из одной базы в другую и пытаясь там использовать платформенное СтрокаXML привести гуид к строке и вернуть обратно в источник строковой гуид?))) Такое ощущение, что вы не осознаете, что делают эти строчки кода и как это дело обрабатывается. Старайтесь передавать из базы истончика в приемник и обратно только простые типы.
|
|||
69
Mikhail Volkov
22.11.22
✎
13:37
|
(68) Обработке ОткрытьСсылкуВДругойБазе.exe нужен не GUID, а НавигационныйGUID = Сред(GUID, 20 ,4) + Сред(GUID, 25, 12) + Сред(GUID, 15, 4) + Сред(GUID, 10, 4) + Сред(GUID, 1, 8); - строка.
|
|||
70
Сергиус
22.11.22
✎
13:41
|
(67)В итоге у вас в GUID должно быть строковое представление гуида из базы КА. А дальше уж можно пробовать делать по вашей схеме.
|
|||
71
Kassern
22.11.22
✎
14:07
|
(69) Оо ОткрытьСсылкуВДругойБазе.exe - это что-то новенькое) В 1с есть такая тема как навигационная ссылка
|
|||
72
Mikhail Volkov
22.11.22
✎
14:22
|
(71) https://infostart.ru/public/1042208/ - не работает с КА1 (УПП), почему? Раньше работала с КА2.
|
|||
73
Сергиус
23.11.22
✎
02:56
|
(72)Возможно НазваниеОкна не то передается. Какую то ошибку дает или просто не открывает и всё?
|
|||
74
Mikhail Volkov
23.11.22
✎
18:18
|
Нашел копию старой базы Альфа-Авто с времен, когда отлаживал открытие документов в КА2 из Альфа-Авто. Сейчас даже Com-соединение сделать не может: При попытке соединения с COM-сервером произошла следующая ошибка:
Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3): Недопустимая строка с указанием класса Тип не определен (Запрос) Запрос = Новый <<?>>Запрос; (Проверка: Тонкий клиент) |
|||
75
Сергиус
23.11.22
✎
20:59
|
(74)Это проблема с версией comcntr.dll, нужно сделать перерегистрацию от нужной платформы.
|
|||
76
Сергиус
23.11.22
✎
21:01
|
+(75)Хотя в данном случае возможно дело в том, что Новый Запрос на клиенте пытаетесь вызвать..
|
|||
77
Mikhail Volkov
24.11.22
✎
16:51
|
(75) Возможно, но вчера эта ошибка выскочила, когда в Альфа-Авто запустил обработку документов: сверить с КА, с какой именно - с КА2. А сегодня с КА1, обработка прошла успешно (по Com-соединению), оттуда открываю документ КА, и он открывается https://ibb.co/wMfCjSf , но не обработкой ОткрытьОбъектВБазеВысокойВерсии(СсылкаКА), а просто: СсылкаКА.ПолучитьФорму().ОткрытьМодально();
// Обработчик открытия документа в КА //+МВ 10.07.2014 Процедура ДокументыРезультатДокументКАОткрытие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ТекСтрока = ЭлементыФормы.ДокументыРезультат.ТекущаяСтрока; Если Элемент.Значение = Неопределено Или обЗначениеНеЗаполнено(ТекСтрока.ДокументКА) Или Найти(ТекСтрока.ДокументКА, "<Не найден>") > 0 Тогда Предупреждение("Документ " + ?(Элемент.Значение = Неопределено, "", СокрЛП(ТекСтрока.Документ)) + " в КА не найден!", 60); Возврат; КонецЕсли; СсылкаКА = мвДоработки.НайтиДокументКА(ТекСтрока.Документ); Если мвДоработки.ПодключенаВысокаяВерсия() Тогда мвДоработки.ОткрытьОбъектВБазеВысокойВерсии(СсылкаКА); ИначеЕсли обЗначениеНеЗаполнено(СсылкаКА.DataVersion) Тогда Предупреждение("Документ " + СокрЛП(ТекСтрока.Документ) + " в " + мвДоработки.БазаОрганизации(ТекСтрока.Организация) + "не найден!", 60); Иначе СсылкаКА.ПолучитьФорму().ОткрытьМодально(); КонецЕсли; КонецПроцедуры Функция ПодключенаВысокаяВерсия() работает по наличию порта: Возврат Найти(ОбъектКА.СтрокаСоединенияИнформационнойБазы(), ":1641") > 0; а там его не оказалось: Srvr="ANDROMEDA";Ref="PATRCA";!? Как формируется СтрокаСоединенияИнформационнойБазы()? |
|||
78
Сергиус
27.11.22
✎
12:46
|
(77)[СсылкаКА.ПолучитьФорму().ОткрытьМодально()] - значит через OLE идет открытие, иначе бы и не дал.
[ Возврат Найти(ОбъектКА.СтрокаСоединенияИнформационнойБазы(), ":1641") > 0] - значит через другой порт подключает в данном случае. Попробуйте сделать запись в Журнал, чтобы понять какой именно. |
|||
79
Mikhail Volkov
29.11.22
✎
13:44
|
(78) А возможно КА1 открылась (открыла свой документ https://ibb.co/wMfCjSf ) в той же версии 8.3.10.2466 (что и Альфа-Авто).
И что в ней фиксировать: ОбъектКА.СтрокаСоединенияИнформационнойБазы()? |
|||
80
Сергиус
29.11.22
✎
14:56
|
(79)Ну да, текущие параметры соединения.
|
|||
81
Mikhail Volkov
02.12.22
✎
12:34
|
(80) В ОбъектКА.СтрокаСоединенияИнформационнойБазы() содержится имена сервера и базы, возможно порт ":1641" - по его наличию определяю к какой версии КА подключились. Но нет уверенности в этом, хотелось бы как-то по-другому. Например, в текущей базе:
СисИнфо = Новый СистемнаяИнформация; ВерсияПриложения = СисИнфо.ВерсияПриложения; А для ОбъектКА как? |
|||
82
Mikhail Volkov
03.12.22
✎
09:13
|
Как определить версию платформы подключенную по com-соединению?
|
|||
83
Сергиус
03.12.22
✎
13:44
|
(82)ОбъектКАСистемнаяИнформация = ОбъектКА.NewObject("СистемнаяИнформация");
Сообщить(ОбъектКАСистемнаяИнформация.ВерсияПриложения); Так попробуйте. |
|||
84
Mikhail Volkov
03.12.22
✎
19:24
|
(83) Спс, так сработало: оказывается сейчас подключается на 8.3.10.2466. Это сомнение (81) у меня появилось, когда заметил, что из СтрокаПодключения вырезаю порт: СтрокаПодключенияБезПорта = СтрЗаменить(СтрокаПодключения, ":1641", ""); далее:
БазаКА = Новый COMОбъект("V83" + ?(ПодключенаВысокаяВерсия(СтрокаПодключения), ".COMConnector_" + ВысокаяВерсия, ".Application")); ТекCOMОбъект = БазаКА.Connect(СтрокаПодключенияБезПорта); Вырезать порт стал, когда видимо занимался этим Тип не определен (Запрос) Запрос = Новый <<?>>Запрос; (Проверка: Тонкий клиент) и забыл. А теперь СтрокаПодключения с портом дает ошибку: При попытке соединения с COM-сервером произошла следующая ошибка: {ОбщийМодуль.мвДоработки.Модуль(6652)}: Ошибка при вызове метода контекста (Connect): Произошла исключительная ситуация (V83.COMConnector.1): Несоответствие версий клиента и сервера 1С:Предприятия Различаются версии клиента и сервера (8.3.10.2466 - 8.3.19.1522), клиентское приложение: COM-соединение |
|||
85
Сергиус
04.12.22
✎
00:54
|
(84)Получается, что сервер 1с, где у вас КА стоит, на 8.3.19 платформе, соот-но об этом и ошибка.
|
|||
86
Mikhail Volkov
04.12.22
✎
09:49
|
(85) Раньше платформа 8.3.19 использовалась только для КА2, а КА1 работала 8.3.10, и без разницы было вырезается порт из СтрокаПодключения, или нет - его там не было. Но теперь все базы переведены на 8.3.19 (кроме Альфа-Авто), почему СтрокаПодключения с портом дает ошибку (84)?
|
|||
87
Сергиус
04.12.22
✎
12:59
|
(86)Ошибка - недопустимая строка с указанием класса? Попробуйте сделать regsv32 для comcntr.dll, на том компе, откуда идет вызов. Соот-но делать из папки bin нужной версии платформы, запустив cmd с правами адм-ра.
|
|||
88
Mikhail Volkov
04.12.22
✎
13:48
|
(87) Не, При попытке соединения с COM-сервером произошла следующая ошибка:
{ОбщийМодуль.мвДоработки.Модуль(6652)}: Ошибка при вызове метода контекста (Connect): Произошла исключительная ситуация (V83.COMConnector.1): Несоответствие версий клиента и сервера 1С:Предприятия Различаются версии клиента и сервера (8.3.10.2466 - 8.3.19.1522), клиентское приложение: COM-соединение |
|||
89
Сергиус
04.12.22
✎
13:52
|
(88)Получается у вас текущий вызов из 8.3.10 идёт, о чем собственно и пишет. У модуля мвДоработки какие галки стоят?
|
|||
90
Mikhail Volkov
04.12.22
✎
15:52
|
(89) Сервер, Клиент (обычное приложение) и Вызов сервера.
|
|||
91
Сергиус
04.12.22
✎
17:07
|
(90)У вас же в режиме управляемых форм запущено? тогда получается, что сервер, на котором всё крутится, имеет версию 8.3.10
|
|||
92
Mikhail Volkov
04.12.22
✎
21:14
|
(91) В режиме УФ только КА2, Альфа-Авто и КА1 - обычные формы, на сервере две платформы: 8.3.10 на 15хх стандартных портах (без портов), 8.3.19 на портах 16хх.
|
|||
93
Сергиус
05.12.22
✎
03:26
|
(92)Что то путаница какая-то. У вас вызов COM соединения идет из Альфа-авто в КА, так? получается, если судить по тексту ошибки в (88), АА работает именно на платформе 8.3.10(ну или правильней сказать, для связи через COM, используется компонента версии 8.3.10). Поэтому и предлагаю вам попробовать сделать перерегистрацию comcntr.dll на сервере из папки bin 8.3.19
|
|||
94
Mikhail Volkov
07.12.22
✎
12:36
|
(93) Наверное ты прав, сейчас все базы кроме Альфа-Авто работаю на 8.3.19, и можно сделать перерегистрацию comcntr.dll (как?). Но сейчас, пока не разобрался с ошибкой (88), сейчас хоть по COM-соединению 8.3.10 Альфа-Авто каждый день получает данные из КА1 для банковской выписки. Потом наверное можно убрать это https://ibb.co/3cGhCXr ?
|
|||
95
Сергиус
07.12.22
✎
14:26
|
(94)Сделайте в коде поиск по имени COMConnector_8.3.10. Так увидите, где оно используется в явном виде.
|
|||
96
Mikhail Volkov
07.12.22
✎
16:24
|
(95) Нигде не используется, вместо этого (84):
БазаКА = Новый COMОбъект("V83" + ?(ПодключенаВысокаяВерсия(СтрокаПодключения), ".COMConnector_" + ВысокаяВерсия, ".Application")); СтрокаПодключения содержит имя сервера с портом, поэтому ПодключенаВысокаяВерсия(СтрокаПодключения) = Истина; |
|||
97
Сергиус
07.12.22
✎
16:37
|
(95)Тогда странно. По идее высокая версия это же "8.3.19" должно быть. Попробуйте в настройках службы компонентов выбрать нужную dll еще раз.
|
|||
98
Mikhail Volkov
07.12.22
✎
18:28
|
(97) Как?
|
|||
99
Сергиус
07.12.22
✎
22:10
|
(98)Удалить и создать заново например.
|
|||
100
Mikhail Volkov
08.12.22
✎
08:35
|
(99) Где, в службе компонентов?
|
|||
101
arsik
гуру
08.12.22
✎
08:37
|
Да уж. Месяц прошел.
|
|||
102
Сергиус
08.12.22
✎
13:41
|
(100)Именно.
|
|||
103
Сергиус
08.12.22
✎
13:41
|
(101)"Солдат спит, а служба идёт")
|
|||
104
Mikhail Volkov
08.12.22
✎
15:43
|
(102) Кажется нашел статью, по которой делал V83.COMConnector_8.3.19.1522 https://infostart.ru/public/610960/ - COM соединения с базами 1С на различных версиях платформы "Без перерегистрации и СМС" (СМС - ?). Тогда ее использовал при Com-соелинении с КА2, а КА1 работала на той же версии платформы, что Альфа-Авто. Сейчас, когда все базы работают на этой платформе (кроме Альфа-Авто), то наверное мне нужно сделать перерегистрацию, но как?
|
|||
105
Kassern
08.12.22
✎
15:51
|
(104) "мне нужно сделать перерегистрацию, но как?" - regsvr32 "ПутьДоКомКоннектор.длл"
|
|||
106
Kassern
08.12.22
✎
15:52
|
Далее в службу компонентов и там выбрать нужную библиотеку комконнектора для обертки (если у вас 64х клиент)
|
|||
107
Mikhail Volkov
08.12.22
✎
16:09
|
(105) Понял https://vipasoft.com/oshibca-com-podcliucenia/, а (106) нет, у меня х64.
|
|||
108
Сергиус
08.12.22
✎
17:28
|
(107)Для 64х так делается C:\WINDOWS\SysWow64\regsvr32 <путь к dll из папки bin нужно платформы>
|
|||
109
Mikhail Volkov
08.12.22
✎
17:57
|
(102) Кажется нашел свою ошибку в V83.COMConnector_8.3.19.1522 - в ней указана: C:\Program Files\1cv8\8.3.10.2466\bin\comcntr.dll низкая версия платформы Альфа-Авто, как мне заменить на версию 8.3.19.1522? Сделал все по https://infostart.ru/public/610960/: 8. Открываем "regedit" через пуск или команду "Выполнить", нажимаем F3 и указываем для поиска строку с наименованием созданой нами обертки, например "V83.COMConnector_8.3.9.2033". Или использум для поиска CLSID созданной обертки. В ветке "InprocServer32" меняем значение у меня, "C:\Program Files (x86)\1cv8\8.3.10.2168\bin\comcntr.dll" на путь к нужной версии длл, в данном случае "C:\Program Files (x86)\1cv8\8.3.9.2033\bin\comcntr.dll". https://ibb.co/Sy93yrY Но все так же: При попытке соединения с COM-сервером произошла следующая ошибка:
{ОбщийМодуль.мвДоработки.Модуль(6652)}: Ошибка при вызове метода контекста (Connect): Произошла исключительная ситуация (V83.COMConnector.1): Несоответствие версий клиента и сервера 1С:Предприятия Различаются версии клиента и сервера (8.3.10.2466 - 8.3.19.1522), клиентское приложение: COM-соединение |
|||
110
Сергиус
08.12.22
✎
20:39
|
(109)После изменений в реестре, делали перезапуск системы?
|
|||
111
Mikhail Volkov
09.12.22
✎
10:07
|
(110) А как сделать перезапуск службы компонентов? После ночной перезагрузки сервера стало все нормально: в свойствах V83.COMConnector_8.3.19.1522 указана DDL C:\Program Files\1cv8\8.3.19.1522\bin\comcntr.dll и Альфа-Авто: Подключение выполнено к базе: 'Srvr="ANDROMEDA:1641";Ref="PATRCA";' версии: 8.3.19.1522 09.12.2022 11:16:22
|
|||
112
Сергиус
09.12.22
✎
12:08
|
(111)Так и логично, после перезапуска применилось.
|
|||
113
Mikhail Volkov
09.12.22
✎
12:15
|
(112) Значит никак, только сервер перезагружать?
|
|||
114
Сергиус
09.12.22
✎
21:51
|
(113)Так вы уже пишите что применилось. Или на будущее? Можно попробовать службу перезапустить, если перезагрузка критична.
|
|||
115
Mikhail Volkov
10.12.22
✎
09:16
|
(114) Точно не знаешь как службу компонентов перезапустить?
|
|||
116
Сергиус
10.12.22
✎
12:53
|
(115)Можно попробовать зайти в ее свойства, там стоит галка Включить. Её снять, применить. Потом зайти заново и поставить, применить.
|
|||
117
Mikhail Volkov
13.12.22
✎
16:42
|
(116) А на какой вкладке эта галка Включить?
|
|||
118
Сергиус
14.12.22
✎
01:34
|
(117)Посмотрел - нет такой что-то там. Тогда попробуйте перезапустить в Службах - Системное приложение COM+, но надежней конечно саму винду рестартнуть.
|
|||
119
Mikhail Volkov
14.12.22
✎
12:39
|
Пользователь опять прислал ошибку типа (88), только наоборот (версии клиента и сервера): При попытке соединения с COM-сервером произошла следующая ошибка:
{ОбщийМодуль.мвДоработки.Модуль(6653)}: Ошибка при вызове метода контекста (Connect): Произошла исключительная ситуация (V83.COMConnector.1): Несоответствие версий клиента и сервера 1С:Предприятия Различаются версии клиента и сервера (8.3.19.1522 - 8.3.10.2466), клиентское приложение: COM-соединение Думал что-то вроде (109), но в свойствах V83.COMConnector_8.3.19.1522 DLL C:\Program Files\1cv8\8.3.19.1522\bin\comcntr.dll, и в реестре HKEY_CLASSES_ROOT\CLSID\{CE6B6970-AB08-455B-A369-9DEF9CD4D4DB}\InprocServer32 тоже значение. Где еще смотреть? |
|||
120
Kassern
14.12.22
✎
12:44
|
(119) Да причем тут это. Вам же ошибка пишет, что к чему. Вы пытаетесь подключиться по ком к базе которая на одной платформе с базы на другой платформе, если я правильно понял
|
|||
121
Mikhail Volkov
14.12.22
✎
15:06
|
(120) Да, все правильно, а что нельзя? И главное, у меня нет таких ошибок (119), а другого пользователя есть!?
|
|||
122
Kassern
14.12.22
✎
15:14
|
(121) как вызываете ком соединение, когда ошибка происходит? Через Aplication, или ComСonnector ?
Читали эту статью? https://infostart.ru/1c/articles/387577/ |
|||
123
Сергиус
14.12.22
✎
20:15
|
(119)Похоже он пытается подключиться к серверу с более старой версией, тут только отладкой с его машины смотреть.
|
|||
124
JeHer
15.12.22
✎
06:45
|
А не проще на сервере 8.3.10.2466 с другим портом зарегистрировать нужную базу КА и ломиться туда по КОМ, если напряжно поменять платформу для Альфа-авто?
|
|||
125
Mikhail Volkov
15.12.22
✎
11:17
|
(122) Да, читал (для меня это что-то инопланетное), даже вопросы задавал: можно ли V83.Application использовать для OLE-подключения к базе на другой платформе. Но утвердительного ответа не получил, видимо нет. Но V83.COMConnector_8.3.14.1779 работало (в то время, сейчас обновил платформу на 8.3.19.1522).
(123) Почему подключиться к серверу с более старой версией, к 8.3.19.1522. (124) Не понял твоего предложения, желательно подробнее... |
|||
126
Mikhail Volkov
16.12.22
✎
16:35
|
(123) А какой фрагмент смотреть, этот (команду Сообщить("Начало подключения через COM-Объект... вставил для замера времени COM-соединения):
Попытка Сообщить("Начало подключения через COM-Объект " + ВерсияПриложения + " COMОбъект: " + "V83" + ?(ПодключенаВысокаяВерсия(СтрокаПодключения), ".COMConnector_" + ВысокаяВерсия, ".Application") + " " + ТекущаяДата(), СтатусСообщения.Информация); // БазаКА = Новый COMОбъект("V8" + ?(Найти(ВерсияПриложения, "8.2") = 0, "3", "2") + ?(ПодключенаВысокаяВерсия(СтрокаПодключения), ".COMConnector_" + ВысокаяВерсия, ".Application")); //+МВ 09.02.2016 С переходом на версию 8.3 (если файловые остаются на 8.2, то добавить: И Не СтруктураПодключения.ФайловыйРежим //+МВ 15.07.2017) БазаКА = Новый COMОбъект("V83.COMConnector_8.3.19.1522"); ТекCOMОбъект = БазаКА.Connect(СтрокаПодключения); Оба пользователя его проходят, но у пользователя он с ошибкой: Различаются версии клиента и сервера, а у меня выполняется без ошибок!? Такую ошибку вроде (не уверен, давно было) встречал, когда переустанавливал платформу, и на одном из серверов (их два: SQL и Терминальный) что-то делал неправильно. Кто знает что происходит в реестре (какие значения меняются) при регистрации comcntr.dll другой версии платформы? |
|||
127
JeHer
17.12.22
✎
03:51
|
(125) ну на том же сервере 1С, где крутится Альфа-авто, добавить базу КА, путь к SQL прописать боевой и т.п.
|
|||
128
Mikhail Volkov
17.12.22
✎
09:55
|
(127) Так и есть: "на том же сервере 1С, где крутится Альфа-авто, добавить базу КА, путь к SQL прописать боевой". База КА на другой более высокой платформе 8.3.19.1522, которая установлена на том же сервере, в другом диапазоне портов 16хх. "и т.п."?
|
|||
129
Сергиус
18.12.22
✎
00:46
|
(125)[Почему подключиться к серверу с более старой версией, к 8.3.19.1522.]
[Различаются версии клиента и сервера (8.3.19.1522 - 8.3.10.2466), клиентское приложение: COM-соединение] Ну как бы сообщение об ошибке об этом говорит в данном случае. Клиент версии 19, а сервер 10-й. |
|||
130
Mikhail Volkov
18.12.22
✎
09:38
|
(129) И что надо сделать, чтобы запускалась нужная версия для Com-соединения?
|
|||
131
Сергиус
19.12.22
✎
03:01
|
(130)Судя по описанию ошибки из (119), клиент с платформы 19 пытается подключиться к серверу на 10-й, о чем собственно и ошибка. Поэтому, надо добиться чтобы соответствовало. Т.е. чтобы клиент дергал библиотеку comcntr.dll от 10-й версии. Она у него есть на компе?
|
|||
132
Mikhail Volkov
19.12.22
✎
12:21
|
(131) А надо чтобы подключался в серверу на 19 платформе. Добавил порт ":1641" к имени сервера в строке подключения, и вроде заработало как надо! Посмотрим...
|
|||
133
Сергиус
19.12.22
✎
12:45
|
(132)Логично, видно по стандартному порту как раз старый сервер и висит.
|
|||
134
Mikhail Volkov
19.12.22
✎
14:06
|
Вернемся к первоначальному вопросу, или OLE-соединение (V83.Application) с другой версией платформы невозможно?
|
|||
135
Сергиус
19.12.22
✎
15:22
|
(134)Нет, вы же об этом и получаете сообщение в (0)
|
|||
136
Сергиус
19.12.22
✎
15:26
|
+(135)Точнее вы получите сообщение о разных версиях клиента и сервера при попытке подключиться.
|
|||
137
Mikhail Volkov
19.12.22
✎
18:14
|
(136) Да, когда-то спрашивал на https://infostart.ru/public/1279439/: Возможно ли подключение к другой базе по OLE обычным пользователям (без административных прав), если подключаемая база работает на другой, более высокой версии платформы 8.3? Суть проблемы https://i.ibb.co/pdrH9Wy/COM.jpg - не получил ответа, не помню: добавлял ли порт в строке подключения как в (132).
|
|||
138
Mikhail Volkov
21.12.22
✎
17:42
|
Вроде нашел: "C:\Program Files\1cv8\[версия платформы]\bin\1cv8.exe" /regserver https://forum-1c.ru/index.php?topic=45679.0
Тогда вместо БазаКА = Новый COMОбъект("V83.COMConnector_8.3.19.1522"); Com-соединения пишу: БазаКА = Новый COMОбъект("V83.Application"); OLE-соединение (вроде оно более полное, чем Com), и должно работать. Но толи сервер надо перегружать, толи платформу менять (не хотелось бы) из-за предупреждения Какая платформа нужна последнему релизу УПП? |
|||
139
Mikhail Volkov
22.12.22
✎
17:50
|
После замены: БазаКА = Новый COMОбъект("V83.COMConnector_8.3.19.1522"); на: БазаКА = Новый COMОбъект("V83.Application"); не работает как ожидалось (сервера перезагрузил, проблему с предупреждением КА1 вроде решил).
После выполнения команд: БазаКА = Новый COMОбъект("V83.Application"); ТекCOMОбъект = БазаКА.Connect(СтрокаПодключения); почему-то открывается КА1 (УПП), далее у меня пописано типа (83) для определения версии базы подключения, так выскакивает из попытки подключения. После я эти команды закомментировал, пишет: Подключение выполнено к базе: 'Srvr="ANDROMEDA:1641";Ref="PATRCA";' в 22.12.2022 18:41:37, но затем: Значение не является значением объектного типа (NewObject) Запрос = ОбъектКА.NewObject("Запрос"); - это уже исполнение самого кода, раньше при Com-соединении (БазаКА = Новый COMОбъект("V83.COMConnector_8.3.19.1522");) такого не было!? OLE-соединение ведь более полное, чем Com-соединение (доступны лишь функции сервера). Даже не знаю что дальше делать? Как определить версию платформы базы OLE-соединения? |
|||
140
JeHer
23.12.22
✎
04:42
|
||||
141
Сергиус
23.12.22
✎
05:14
|
(139)[почему-то открывается КА1 (УПП)] - а что должно открываться? смотря что у вас в СтрокаПодключения
[Значение не является значением объектного типа (NewObject) Запрос = ОбъектКА.NewObject("Запрос");] Смотрите отладчиком, что в ОбъектКА. |
|||
142
Mikhail Volkov
23.12.22
✎
10:20
|
(140) Сделал бы (делаю), но как?
(141) СтрокаПодключения та же самая: Srvr="ANDROMEDA:1641";Ref="PATRCA";Usr="Администратор";Pwd="пароль"; А ТекCOMОбъект = БазаКА.Connect(СтрокаПодключения); - Истина (не COMОбъект, как при БазаКА = Новый COMОбъект("V83.COMConnector_8.3.19.1522"); или для OLE-соединения СтрокаПодключения другая, какая?)!? Раньше (в одной версии) работало же? |
|||
143
Сергиус
23.12.22
✎
12:17
|
(142)Ref="PATRCA" это КА1 или нет? Почему вы тогда удивляетесь, что именно она открывается)
|
|||
144
Сергиус
23.12.22
✎
12:19
|
+(143)Для "V83.Application" строка подключения точно такая же, как для "V83.COMConnector". Да и судя по тому, что у вас [ТекCOMОбъект = БазаКА.Connect(СтрокаПодключения); - Истина], подключение проходит.
|
|||
145
Mikhail Volkov
23.12.22
✎
17:08
|
(143) Удивляюсь, почему полное окно базы КА открывается? Раньше только окно нужного справочника (например, контрагента) открывалось... https://ibb.co/K6Y859f
(144) Да, строка подключения точно такая же. Но глобальная переменная БазаКА для OLE (V83.Application) и Com (V83.COMConnector_8.3.19.1522) разные. Пришлось добавить переменную OLE функции ПодключитсяКА(), и дописать: Возврат ?(OLE, БазаКА, ТекCOMОбъект); Может Com-соединение больше не нужно, если есть OLE-соединение? |
|||
146
Kassern
23.12.22
✎
17:15
|
(145) "Удивляюсь, почему полное окно базы КА открывается" - потому что ОЛЕ, потому что Application. Вы пишите код и совсем не понимаете, что он делает и какая разница между Application и COMConnector
|
|||
147
Kassern
23.12.22
✎
17:16
|
А ведь вам норм статью скидывали, где все это дело разжевано. За то время, которое вы ковыряли КОМ, можно было первоклассный веб сервис замутить и уже не зависеть ком соединения, версий платформы и прочих косяков.
|
|||
148
Сергиус
23.12.22
✎
17:30
|
(145)[Но глобальная переменная БазаКА для OLE (V83.Application) и Com (V83.COMConnector_8.3.19.1522) разные] У вас одновременно может быть оба вида подключения? Если нет, то какая разница, что будет в общей переменной.
|
|||
149
Mikhail Volkov
23.12.22
✎
18:20
|
(147) А можно ссылку на эту статью?
(148) Не знаю одновременно ли... пока так оставлю. |
|||
150
Сергиус
23.12.22
✎
18:25
|
(145)[ Удивляюсь, почему полное окно базы КА открывается] - вы уверены, что это через OLE? Насколько помню, у вас была какая-то сторонняя программа, которая запускала новый сеанс 1с. Возможно это она.
|
|||
151
Mikhail Volkov
23.12.22
✎
18:45
|
(150) Где я такое писал? не помню...
|
|||
152
Сергиус
23.12.22
✎
18:51
|
(151)В (69) идет речь про ОткрытьСсылкуВДругойБазе.exe
|
|||
153
Mikhail Volkov
24.12.22
✎
10:43
|
(152) Пробовал ее вставить в форму контрагентов в Процедуру ДействияФормыСоздатьВКА(Кнопка) см. (2), но этот фрагмент закомментировал, ОткрытьСсылкуВДругойБазе.exe здесь ни причем:
// Если мвДоработки.ПодключенаВысокаяВерсия() Тогда // Если ЗначениеЗаполнено(Ссылка) Тогда // мвДоработки.ОткрытьОбъектВБазеВысокойВерсии(Ссылка); // Иначе // Предупреждение("Контрагент не записан!", 60); // КонецЕсли; // Иначе |
|||
154
Mikhail Volkov
05.01.23
✎
12:22
|
Бухгалтер в УПП делала отчет Сведения о застрахованных лицах СЗВ-стаж, и у нее выскочила: Ошибка SDBS Выход за пределы размерности результата, и 2 кнопки: Завершить работу и Перезапустить. Сейчас на платформе 8.3.19.1522. Платформу менять, например, на 8.3.21.1644 от 13.12.22 (пока отложил, она стоит 2-й на сервере), или что другое?
|
|||
155
Mikhail Volkov
05.01.23
✎
19:11
|
Сделал отчет Сведения о застрахованных лицах СЗВ-стаж под собой, сохранил его. А бухгалтер не может его открыть: Ошибка SDBS Ожидается выражение (pos=314)?
|
|||
156
Сергиус
05.01.23
✎
22:22
|
(154)Это связано с обращением к другой базе или нет?
|
|||
157
Сергиус
05.01.23
✎
22:23
|
(155)У вас какая платформа?
|
|||
158
Mikhail Volkov
06.01.23
✎
12:40
|
(156) Нет.
(157) Сейчас пока на платформе 8.3.19.1522, но думаю менять. Если не будет дельных советов. |
|||
159
Mikhail Volkov
06.01.23
✎
12:48
|
В сентябре было подобное, когда бухгалтер пробовала создать справку 2-НДФЛ, не помню как исправил...
|
|||
160
Mikhail Volkov
06.01.23
✎
12:52
|
||||
161
Сергиус
06.01.23
✎
19:41
|
(160)Если чистка не помогает, то пробовать менять платформу на туже 21-ю.
|
|||
162
Mikhail Volkov
10.01.23
✎
14:21
|
Обновляю 2-ю платформу на 8.3.21.1644
|
|||
163
Mikhail Volkov
10.01.23
✎
14:21
|
скачал ее, разархивировал, вроде установил, но где картинка с галочкой Установить сервер 1С как сервис Windows https://tavalik.ru/wp-content/uploads/2014/07/zapusk-neskolkix-serverov-1spredpriyatiya-raznyx-versij_03.png , которую надо снять? Напомните...
|
|||
164
Mikhail Volkov
10.01.23
✎
15:00
|
На первой картинке не указал: Сервер 1С:Преприятиие, сейчас вроде нормально - картинка (163) появилась.
|
|||
165
Mikhail Volkov
10.01.23
✎
19:31
|
Читаю https://tavalik.ru/zapusk-neskolkix-serverov-1spredpriyatiya-raznyx-versij/ не пойму как службе другое имя дать, отличное от 1C:Enterprise 8.3 Server Agent (x86-64)?
|
|||
166
Mikhail Volkov
11.01.23
✎
08:55
|
Из (165): Для регистрации сервера с данными параметрами выполним команду
.\ragent.exe -instsrvc -port 2540 -regport 2541 -range 2560:2591 -usr .\USR1CV8 -pwd UsrPass8 -d "C:\Program Files\1cv8\srvinfo" у меня подозрение, что установка 2-й службы с тем же именем портит 1-ю!? |
|||
167
Mikhail Volkov
11.01.23
✎
09:15
|
Во всяком случае 2-я служба не ставится, почему?
|
|||
168
Mikhail Volkov
11.01.23
✎
14:26
|
Похоже нельзя переименовывать службы 1С. Установил обе версии стандартно с галочкой Установить сервер 1С как сервис Windows (см. 163): одна служба получила стандартное имя: 1C:Enterprise 8.3 Server Agent (x86-64), а 2-я: 1C:Enterprise 8.3 Server Agent (без скобок), у обоих служб одинаковые параметры. У одной из служб заменил на нужные мне параметры: "C:\Program Files\1cv8\8.3.21.1644\bin\ragent.exe" -srvc -agent -regport 1641 -port 1640 -range 1660:1691 -d "C:\Program Files\1cv8\srvinfo_1641" вручную в реестре, а также Description и DisplayName Агент: сервера 1С:Предприятия 8.3.21 (x64), хотел переименовать службу в 1C:Enterprise 8.3.21 Server Agent (x64), но в службах в поле Description появляется ошибка: Failed to Read Description. Error Code: 2
Правильно ли я делаю, что посоветуете? |
|||
169
Mikhail Volkov
13.01.23
✎
18:59
|
Наверное когда нужно обновить 2-ю платформу, то не надо удалять службы, а вручную в реестре отредактировать как надо параметры службы?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |