Имя: Пароль:
1C
1С v8
Метод объекта не обнаружен (ТранзакцияАктивна)
0 virdim
 
27.04.16
09:43
Здравствуйте! У меня есть внешнее соединение к другой базе через ComConnector в которой я в одной транзакции хочу выполнить некоторые действия. Вначале делаю КомПодключение.НачатьТранзакцию(), После всех действий перед завершением транзакции проверяю активна ли она КомПодключение.ТранзакцияАктивна() и получаю такое исключение Метод объекта не обнаружен (ТранзакцияАктивна). Что может быть?
1 virdim
 
27.04.16
10:07
Так же может стрелять и на ЗафиксироватьТранзакцию() с такой же ошибкой
2 Карупян
 
27.04.16
11:07
может ком соединение уже разорвано?
3 virdim
 
27.04.16
11:08
(2) Каким образом может разорваться ком соединение в конструкции типа
Если ком.ТранзакцияАктивна() Тогда
  ком.ЗавершитьТранзакцию();
конецЕсли
4 virdim
 
27.04.16
11:54
Ап
5 Cyberhawk
 
27.04.16
12:00
Там уже Неопределено
6 Serginio1
 
27.04.16
12:20
Делай всю обработку во внешнем отчете
7 Serginio1
 
27.04.16
12:23
8 virdim
 
27.04.16
14:46
(5) Нет, там комОбъект.
(6) Зачем? Не хочу в проведении документа городить костыли с внешними обработками.
9 Serginio1
 
27.04.16
15:12
(8) Значительно удобнее тестировать на стороне сервера.
Просто создаешь на стороне сервера обработку и вызываешь экспортный метод передав параметр. И не нужно изменять конфигурацию.
А вот твой подход как раз костыль.

Использование внешней обработки ближе к вэб сервису.
10 virdim
 
27.04.16
15:16
(9) У меня толстый клиент, у меня давно снятая с поддержки конфигурация. У меня вся проблема в том что стреляет это один раз 10-20 и не понятно из-за чего
11 Serginio1
 
27.04.16
17:35
(10) Тогда можешь вместо  внешней обработки  создать модуль с галкой внешнее соединение и сделать нужные экспортные функции которые и дергать с клиента. Это значительно лучше чем писать весь код на стороне клиента подвергая маршалингу  каждый вызов и переменные
12 virdim
 
28.04.16
08:20
(11) Ну у меня примерно так и работает. В модуле объекта в обработке проведения, вызывается код из внешнего модуля, При этом ссылку на комКоннектор храню ещё как переменную в модуле объекта, потом на форме обращаюсь к этой переменной и фиксирую транзакцию после записи на форме. Это нужно для того что бы документ во внешнем соединении был записан уже после того как записался документ в моей базе  и если там документ записался, а у меня нет, то транзакция должна откатиться и документ во внешнем соединении не должен быть записан
13 virdim
 
28.04.16
08:55
(12) Поправочка: из общего модуля, а не из внешнего
14 Serginio1
 
28.04.16
09:57
(13) Лучше наоборот, после того как все действия на клиенте совершены запускать функцию на сервере которая будет возвращать результат выполнения и по нему уже фиксировать или откатывать транзакцию.
15 virdim
 
28.04.16
10:28
(14) У меня всё немного сложнее. Мне во время проведения документа в своей базе нужно провести документ в другой базе, если в другой провелся, то закончить проведение своего, иначе отказаться от проведения своего документа
16 Serginio1
 
28.04.16
10:42
(15) Я тебе про это и говорю. Клиент это твоя база, сервер это база к которой подключаешься.
17 virdim
 
28.04.16
11:03
(16) Объясни, пожалуйста, поподробнее. Как я откачу у себя документ проведелнный?
18 Serginio1
 
28.04.16
11:52
(17) Если ты внутри проведения то отказ= истина.
Если это в транзакции то отменить транзакцию.
19 Serginio1
 
28.04.16
11:53
В 1С очень плохо с транзакциями. Не говоря уже о распределенных
20 virdim
 
28.04.16
11:59
(18) То есть я сначала провожу в коме документ, если он не провелся, то отказ истина моего документа? Так? А если В коме провелся, то что-то плохое случилось с моим документом, в коме записалось, а у меня нет, я же в этом случае уже не смогу откатить документ в коме.
21 Serginio1
 
28.04.16
12:17
(20) Так записывай в коме перед записью. Кроме того, ты можешь и распровести.
В любом случае у тебя сейчас есть ошибка связанная с ком.
Есть еще вариант сделать экспортные функции в вызываемой базе внутри которых
НачатьТранзакцию
Зафиксировать
22 Serginio1
 
28.04.16
12:18
Ну и ОтменитьТранзакцию
23 Serginio1
 
28.04.16
12:18
В попытке Исключении
24 virdim
 
28.04.16
12:34
(21) Понял, воспользуюсь вашим вариантом если что. Сейчас падений ни у кого не замечено, так что оставлю пока так. Спасибо за обсуждение
25 virdim
 
28.04.16
12:35
Хотя опять же не понятна сама причина возникновения и даже не посмотреть ни где:(
26 Cyberhawk
 
28.04.16
12:36
"во время проведения документа в своей базе нужно провести документ в другой базе, если в другой провелся, то закончить проведение своего, иначе отказаться от проведения своего документа" // Подход неправильный, ибо не учитывает внезапное нарушение и длительное прекращение взаимодействия между базами
27 virdim
 
28.04.16
12:47
(26) Согласен, а как правильно тогда? Код был до меня написан, я пока не искал альтернативу этому методу.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший