Регистрация Правила Главная форума Поиск |
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 не знаком, но вроде как он открывает базу в режиме тонкого клиента? То есть с первого взгляда, эта проблема в подписках по передачи мутабельных значений с клиента на сервер сохранится? | |
| Интернет-форум Краснодарского края и Краснодара |