Имя: Пароль:
1C
1С v8
Запись документа через COM
, , ,
0 ДядяМитяй
 
23.05.22
11:58
Понимаю, что тема обсосана много раз, но мне что-то ничего не помогло.
База Альфа-авто. Из самописной конфы надо создать Заявку на ремонт.

Фрагментъ кода:

НоваяЗаявка = БазаАльфа.Документы.ЗаявкаНаРемонт.СоздатьДокумент();
        НоваяЗаявка.ОбменДанными.Загрузка = Истина;
        НоваяЗаявка.ХозОперация = БазаАльфа.Справочники.ХозОперации.ЗаявкаНаРемонт;
        НоваяЗаявка.Организация = БазаАльфа.Справочники.Организации.ОсновнаяОрганизация;
        НоваяЗаявка.Контрагент = БазаАльфа.Справочники.Контрагенты.ОсновнойПокупатель;
        НоваяЗаявка.Автомобиль = БазаАльфа.Справочники.Автомобили.НайтиПоРеквизиту("VIN", Объект.Машина.Вин);
        БазаАльфа.Документы.ЗаявкаНаРемонт.АвтомобильПриИзменении(НоваяЗаявка);
        //НоваяЗаявка.ДатаНачала = Объект.ДатаНач;
        НоваяЗаявка.Дата = БазаАльфа.ТекущаяДатаСеанса();
        Попытка
            НоваяЗаявка.Записать(БазаАльфа.РежимЗаписиДокумента.Запись);

Из внешней обработки в Альфе этот код работает на ура. При Ком-соединении валится на обработчике события ПриЗаписи (по подписке). Причем сообщает, что нельзя передавать с клиента на сервер мутабельное значение (сам созданный объект имеется в виду). Во-первых, там клиент близко не лежал, во-вторых - работает же в самой базе. Думаю, что дело в Ком-объекте, в уровнях вложенности его структуры.
Подписка на это события нафик никому не нужна, она в общем модуле ОбменСМобильнымУстройством без галки Внешнее соединение.
Как это можно обойти не ломая конфигурацию? В расширении можно было бы заменить процедуру подписки на пустой код, но ругань-то на параметр ее вызова, а его не изменишь..
1 ДядяМитяй
 
23.05.22
12:15
На тему как добавить в расширение подписку пишут все, кто знает буквы. А вот как в расширении прибить подписку? Чтобы прописанная процедура не просто не работала, а и не вызывалась?
2 yopQua
 
23.05.22
12:17
мутануть сервис?
3 ДядяМитяй
 
23.05.22
12:19
(2) чуть подробнее?
4 Bigbro
 
23.05.22
12:21
да сделай вместо ком объекта аппликейшен и забей.
5 ДядяМитяй
 
23.05.22
12:23
Кто-то удалил сообщение, видимо, сочтя его неполиткорректным... Я спрашивал, можно ли прибить подписку на события в расширении
6 ДядяМитяй
 
23.05.22
12:25
(4) Что именно имеется в виду?
У меня там БСПшная красота ОбщегоНазначенияКлиентСервер.УстановитьВнешнееСоединениеСБазой(ПараметрыСоединения);
7 H A D G E H O G s
 
23.05.22
12:29
(0) Никак
8 Bigbro
 
23.05.22
12:30
ну подмени, чтоб БазаАльфа была ОЛЕ объектом и все полетит.
9 H A D G E H O G s
 
23.05.22
12:32
(0) Сделай в расширении ОбщийМодуль, серверный, вызов сервера.
В нем - экспортную процедуру, назови

ЗаписатьЗаявкуНаРемонт()

В нее засунь свой код
10 H A D G E H O G s
 
23.05.22
12:32
ЗаписатьЗаявкуНаРемонт()->
СоздатьЗаявкуНаРемонт()
11 H A D G E H O G s
 
23.05.22
12:33
В процедуру передавай свой vin
12 ДядяМитяй
 
23.05.22
12:43
(11) О! точно. Спасибо
13 Жан Пердежон
 
23.05.22
13:43
(11) (12) а тут уже и до веб-сервиса недалеко
14 yopQua
 
23.05.22
14:02
(3) сделать сервис - не ест лицензию, код работает от сервера, что в эти ваши контексты хорошо встанет
15 ДядяМитяй
 
23.05.22
22:50
(9) А вот ни фига. Все сделал, правда не процедуру, а функцию (мне надо получать номердату созданного документа). Поставил галки "Сервер", "Внешнее соединение", "Вызов сервера". И опять - в базе работает, с внешним соединением -
{Расширение1 ОбщийМодуль.Расш1_ОбщийМодульОбменС_УТ.Модуль(14)}: Ошибка при вызове метода контекста (Записать): Ошибка при выполнении обработчика - 'ПриЗаписи': Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода ЗаписьЗаявкиНаРемонтПриЗаписи ().
16 H A D G E H O G s
 
23.05.22
22:54
(15) ВнешнееСоединение зачем галку поставил?
17 ДедМорроз
 
23.05.22
22:55
Внешнее соединение работает в режиме толстого клиента обычного приложения,то есть выполняется на клиенте.
На сервер с такого клиента очент сложно уйти,так как из него чисто серверные процедуры не видны.
Единственный выход - это фоновое задание и подключение в нем внешней обработки,тогда все выполняется на чистом сервере и все подписки,которые серверные,не требуют передачи с клиента на сервер.
Ну или в подписке все процедуры размещать в модулях,у которых галка Внешнее соединение.
18 H A D G E H O G s
 
23.05.22
23:04
Откуда вы только беретесь
https://prnt.sc/E1h60wgwwxom
19 H A D G E H O G s
 
23.05.22
23:05
А вот с ненужной галочкой
https://prnt.sc/RKb_4r2lnjcn
20 H A D G E H O G s
 
23.05.22
23:07
МихаилМ гордился бы. У него появились достойные продолжатели.
21 yopQua
 
24.05.22
08:20
>>>Внешнее соединение работает в режиме толстого клиента обычного приложения
херасе заявление
>>>На сервер с такого клиента очент сложно уйти,так как из него чисто серверные процедуры не видны
еще интересней