Имя: Пароль:
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
>>>Внешнее соединение работает в режиме толстого клиента обычного приложения
херасе заявление
>>>На сервер с такого клиента очент сложно уйти,так как из него чисто серверные процедуры не видны
еще интересней
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn