К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Com-соединение и подписки на события, которые мешают создать документ.

Гость
0 - 31.01.2018 - 20:54
Есть 2 базы в клиент-серверном варианте, УТ 11.2 и УТ11.3. Создаю COM-соединение (на сервере) из одной базы к другой. Из первой базы пытаюсь создать документ Заказ клиента во второй подключаемой базе. При попытке создания документа вываливаются ошибки, типа Метод обработчика события (название события) не найден. Долго искал решение и выяснил, что в свойствах всех подписках для данного документа не стоит галка Вызов сервера. Установил ее везде. Ошибки данного типа исчезли. Но при попытки записать этот документ вылезла другая ошибка:
Ошибка при вызове метода контекста (Записать): Произошла исключительная ситуация (1C:Enterprise 8.3.9.1818): Ошибка при выполнении обработчика - 'ПередЗаписью'
Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода ЗаписатьВерсиюДокумента ().
Как это победить?



Гость
1 - 01.02.2018 - 10:21
Проблема всё еще актуальна. Уточню немного, у меня такой код, выполняется на сервере, выделил только основные моменты:
Base1С = Новый COMОбъект("V83.Application");
Соединение = Base1С.Connect("Srvr=""" + ИмяСервера + """;Ref=""" + НазваниеБазы + """;Usr=""" + ПользовательБД + """; Pwd=""" + ПарольБД + """;");
ДокЗаказыКлиента_Base1С = Base1С.NewObject("ДокументМенеджер.ЗаказКлиента");
ДокОбъект_Base1С = ДокЗаказыКлиента_Base1С.СоздатьДокумент();
ДокОбъект_Base1С.Записать();

У кого-то получалось создать в УТ11 какой-либо документ или справочник при подобном подключении? Или я что-то не доделал?
Гость
2 - 01.02.2018 - 10:58
Попробуй записать документ с реквизитом ОбменДанными.Загрузка = Истина, в этом случае по монему обработчик ПриЗаписи отключается, и потом посмотришь что у тебя запишется и что в документе не так
Гость
3 - 01.02.2018 - 11:16
(2)Допустим мы отключим все подписки, происходящие при записи, что вроде как не совсем правильно, ведь они то нужны, чтобы дозаполнить какие-либо данные, зарегистрировать изменения и тд. Но у меня есть еще заполнение документа до записи:
ДокОбъект_Base1С.Заполнить(СтруктураЗаполнения_Bas e1С);
И тут тоже вызывается подписка на событие и обработчик ОбработкаЗаполнения, и вылазит точно такая же ошибка с передачей мутабельных типов.

То есть я не понимаю, разработчики УТ11 не предусмотрели создание объектов при Com-соединении в клиент-серверном варианте?
Гость
4 - 01.02.2018 - 12:01
Если логически порассуждать:
1) Подключаемая база открывается в режиме толстого клиента.
2) У всех модулей обработчиков подписок на события данного документа установлены галки Сервер, Внешнее соединение, Клиент (обычное приложение) плюс Вызов сервера - я установил.

Судя по ошибке, получается что документ создается на клиенте, а подписка вызывается на сервере? Есть варианты, как перенаправить и создание документа на сервер, чтоли?
Гость
5 - 01.02.2018 - 12:32
(0) обязательно задействовать Application? COMConnector не кошерно?
Гость
6 - 01.02.2018 - 13:00
(5) Проверил, да, COMConnector полностью решает данную проблему, спасибо!
А по-поводу Application, странно конечно, но получается что разработчики отрубили возможность использовать его в УТ11.
Гость
7 - 01.02.2018 - 17:01
(6) Ничего не отрубили... Используй на здоровье. Только помни про особенности клиент-серверного взаимодействия: при создании объекта в толстом клиенте он "живёт" на стороне клиента. Если ты интерактивно запустишься в таком же режиме - словишь ровно те же ошибки :)
Гость
8 - 01.02.2018 - 21:56
(7) Про "отрубили" я имел в виду именно создание объектов, и по той причине, что не нашел решение, как обойти эту ошибку подписок. И да, про толстый клиент я уже тоже понял... Если подскажешь, как учесть особенности клиент-серверного взаимодействия, и создавать объекты используя Application, то думаю, эта информация будет не лишней ни для кого :)
Гость
9 - 02.02.2018 - 09:21
(8) как учесть?.. ПЕРЕпроектировать и исправлять прикладное решение так чтоб оно работало в нужном режиме: типовые сейчас под толстый не пишутся и их работоспособность в таком режиме запуска не гарантируется.
Основная засада в том что в случае толстого клиента модули прикладных объектов компилируются на клиенте, а в тонком - на сервере. Отсюда следует что передача управления с клиента на сервер происходит для разных клиентов на различающихся участках кода :( Управляемости можно добиться, например, используя директивы компиляции. Типа #Если Клиент Тогда ...<тут особый код, обеспечивающий работу в нужном режиме>

Но, ИМХО, легче застрелиться
Гость
10 - 02.02.2018 - 09:29
Вдогонку: самое главное чуть не забыл!
OLE Aytomation поддерживает не только V83.Application, но и V83C.Application
Гость
11 - 02.02.2018 - 10:37
(9) Так вот оно ключевое слово "типовые сейчас под толстый не пишутся", а V83.Application как-раз таки и открывает базу в толстом клиенте, ведь так? :) То есть приходим к выводу, что УТ11 и др. типовые конфигурации не поддерживают создание объектов в подключаемой базе через V83.Application (без доработок)?
В любом случае, спасибо за инфу.
С V83C.Application не знаком, но вроде как он открывает базу в режиме тонкого клиента? То есть с первого взгляда, эта проблема в подписках по передачи мутабельных значений с клиента на сервер сохранится?


К списку вопросов






Copyright ©, Все права защищены