Можно ли использовать транзакцию при подключении по OLE #411665


#0 by kgivanovich
Привет всем! Подключаюсь к базе 7.7 из 8.1 по OLE. Далее пишу: Оле.НачатьТранзакцию; Ругается: Произошла исключительная ситуация (1С:Предприятие): Ошибка при выполнении процедуры НачатьТранзакцию Пишу по англицки: Оле.BeginTransaction; Такая же ругань. Пишу далее: Оле.EvalExpr("НачатьТранзакцию"); Всё-равно не хочет Подскажите, пжлста, что не так?
#1 by vde69
можно, покажи код подключения
#2 by kgivanovich
#3 by Kolombina
Вы уверены в использовании транцакции по оле. Может: НачатьТранзакцию; Оле....(делаем что нужно с оле) Мы же не пищем там Оле.EvalExpr("Если А>В Тогда")
#4 by skunk
молодец ...
#5 by kgivanovich
В твоем примере транзакция открывается в той базе, где ты находишься. Мне же нужно - в базе подключения
#6 by Дядя Васька
А ты попробуй, отменить-то...
#7 by skunk
пробовал?
#8 by kgivanovich
Супер, вот тока чтобы отменить, нужно чтой-то начать...
#9 by vde69
только отладчиком не пытайся внутри точки останова ставить и заходить, у меня рабочий код дома есть, может вечером кину
#10 by kgivanovich
В базе 7.7, к которой подключаюсь, (в глобальнике) добавил три процедурки: Обращаюсь к ним соответственно: Оле.ОлеНачатьТранзакцию; ... Оле.ОлеЗафиксироватьТранзакцию; Ругается на последнюю строчку: транзакция не активна Я так пробовал. Не получается. Однако буду ждать рабочего кода. Спасибо
#11 by Torquader
Чтобы начать транзакцию в OLE-сессии, нужно, чтобы эта сессия не прекращалась, так как возврат управления из вызова процедуры "НачатьТранзакцию" приводит к завершению и утере транзакции. Нужно в OLE-базе "открывать" форму внешней обработки с исполняемым кодом в процедуре ПриОткрытии, где можно и транзакцию открыть, и сделать всё и сразу. Кстати, EvalExpr вычисляет значение, а НачатьТранзакцию ничего не возвращает. Так что, если пробовать, то ExecuteBatch("НачатьТранзакцию;");
#12 by kgivanovich
Насчет внешней обработки, это ИМХО перебор, а вот насчет ExecuteBatch - это интересно. Завтра испытаю и сообщу. А обязательно ставить точку с запятой после НачатьТранзакцию  ?
#16 by kgivanovich
Проверил метод ExecuteBatch. Ругани никакой нет, однако и толку никакого: при отмене транзакции произведенные изменения остаются. Т.е транзакция просто не включается
#17 by vde69
забыл дома посмотреть... короче правила: 1. ВСЕ OLE обьекты создаються ПОСЛЕ начала транкзации 2. 1с не подерживает вложеные и пересекающиеся транкзации (то есть если в 1с уже открыта транкзация - то фигу получишь), исключение - системные транкзации при записи элемента.
#18 by kgivanovich
Это я знаю, так и делаю...
#19 by kgivanovich
А может быть я действительно не тот способ подключения использую? А какие ещё могут быть?
#20 by Ёпрст
Да нет транзакции в ОЛЕ, забей...
#21 by kgivanovich
Уверен? А остальные товарищчи заблуждаются?
#22 by Ёпрст
Железобетонно.
#23 by kgivanovich
Хороший ответ. Я уже тоже прихожу к этому выводу
#24 by Ёпрст
Еще году в 2000 -ом пытались..
#25 by Ёпрст
+24 это такой же баян, как и использование списка в условии в Оле запросе.. который там не работает.
#26 by kgivanovich
Хотя эту проблему обойти можно. А с 2000 года много чего нового добавилось...
#27 by Ёпрст
Обойти - только через массив, элементом которго, например будет СЗ. А с 2000-го ничего не изменилось.. уж в ОЛЕ это точно.
#28 by Ёпрст
а вообще, имхо, лучше читать с ОЛЕ-базы, чем писать в неё.. и транзакция тебе и ошибки при записи/прорведении все есть... и скорость быстрее.
#29 by kgivanovich
Закрываем тему. Спасибо всем!
#30 by Torquader
Ещё раз напомню, что "открытие внешней обработки" даже в OLE базе позволяет работать, как будто ты находишься в обычной базе (и не надо "напрягать систему" переносом объектов через границы процесса - сохранил в файл, а после выполнения обработки - прочитал из файла).
#31 by Ёпрст
И какое отношение это имеет к сабжу вопроса о транзакции?
#32 by victuan1
Неправда твоя. Прекрасно работает список значений в ОЛЕ-запросе. Надо просто уметь его создавать правильно:
#33 by Ёпрст
Еще один... Теперь давай готовый пример целиком.. Могу забиться на что угодно.
#34 by victuan1
Щас кину кусок рабочего кода
#35 by Ёпрст
+33 Вот мой вариант - сделай аналогично со своим списком: в глобальнике:
#36 by victuan1
#37 by victuan1
Угу. Надо иметь глобальную переменную в ОЛЕ-базе.
#38 by Ёпрст
И чего ? Про то, что запрос можно выгрузить в ТЗ, это я и без тебя знаю.. Показывай, как ты там список в Тексте ЗАПРОСА используешь.
#39 by Ёпрст
И один хрен - не работает СПИСОК.
#40 by victuan1
Проверил, нет у меня такого кода, есть только . Выходит, я трепался зря....
#41 by Ёпрст
И скунки и ктулху, тоже били тут себя пяткой в грудь - что работает, но рабочего кода так никто и не привёл..
#42 by victuan1
Как же я до сих пор не напоролся на это? Я ведь активно юзаю перенос оперативных остатков через ОЛЕ со всякими фильтрами? Буду повнимательнее
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С