Транзакция при OLE-соединении с 1С 7.7 #262221


#0 by RealSaint
Есть код: [1C]
#1 by Лефмихалыч
дык, эта... нету кода-то...
#2 by RealSaint
Есть код: Вопрос: почему в 1С 7.7 транзакция не активна, т.е. вся обработка идёт не в транзакции. Как при таком подключении правильно начать транзакцию?
#3 by RealSaint
Случайно нажал "Отправить"... :-)
#4 by Лефмихалыч
Соединение1С77.Initialize(Соединение1С77.RMTrade, "/D""" + ИнформационнаяБаза.ПутьКИнформационнойБазе + """ /n" + Пользователь + " /p" + Пароль, "NO_SPLASH_SHOW")
#5 by RealSaint
Это ты к чему?
#6 by RealSaint
Как подключаться я знаю, подключение происходит нормально. Вопрос именно в транзакции.
#7 by Конь в пальто
изопенисуально эквифаллично однох#йственному
#8 by RealSaint
Очень информативное сообщение.
#9 by RealSaint
Коллеги! Неужели никто не знает?
#10 by France
где начать то транзакцию?.. в текущей, или в вызываемой?
#11 by Лефмихалыч
ты вообще-то чего этим супер-кодом добиться-то хочешь?
#12 by RealSaint
(10, 11) Транзакция должна начинаться и в 1С 8, и в 1С 7.7. Т.е. в транзакции я переношу данные в 7.7, в транзакции они же должны фиксироваться, а в 1С 8 в транзакции фиксируется факт переноса данных. Если по каким-либо причинам произойдёт ошибка переноса, то должен произойти откат как в 1С 7.7, так и в 1С 8.
#13 by RealSaint
Так что, так никто и не знает? :-(
#14 by Wladimir_spb
А зачем Соединение1С77.ExecuteBatch("НачатьТранзакцию");? Почему не Соединение1С77.BeginTransaction;
#15 by RealSaint
А разве у 1С 7.7 в режиме OLE Automation сервера есть такой метод?
#16 by Wladimir_spb
Честно, не пробовал. А что выдает ошибку?
#17 by RealSaint
Ну, если ты имеешь ввиду Соединение1С77.НачатьТранзакцию, то да, такая конструкция не работает.
#18 by Wladimir_spb
Кириллицей многое не работает.
#19 by RealSaint
Да кириллицей всё работает. Если мне не изменяет память, то вроде как ругалось на вызов процедуры как функции.
#20 by Wladimir_spb
А как выглядела строка вызова. Полностью.
#21 by Wladimir_spb
А вообще подозреваю, что разработчики могли не предусмотреть такой возможности.
#22 by RealSaint
Полностью строка вызова показана в начальном коде. Это было бы печально. Ещё бы знать это наверняка...
#23 by Wladimir_spb
мне интересна строка "Соединение1С77.BeginTransaction;"
#24 by RealSaint
В таком случае не уверен что понял вопрос. Можно более развёрнутый вариант вопроса?
#25 by Wladimir_spb
Мне интересна строка, на которую выдается ошибка. Я так понял, что это "Соединение1С77.BeginTransaction;"
#26 by Wladimir_spb
Если действительно нужно полностью проконтролировать процесс загрузки, то можно перебрасывать через файл. Например, в 8.0 выгружаешь данные в файл и запускаешь 7.7 под определенным пользователем. В 7.7 прописано что, если база запущена от лица этого пользователя, то запускается обработка загрузки данных, после выполнения - завершение работы. В таком варианте проблем с транзакциями быть не должно. Если, честно, то всегда перебрасывал данные по OLE без использования транзакций и не имел при этом никаких проблем. Есть какая-то реальная необходимость использования данного механизма?
#27 by RealSaint
Да, изначально она так и выглядела. Сейчас проверил ещё раз, ошибку не выдаёт, но транзакция не отменяется при возникновении каких-либо ошибок.
#28 by RealSaint
OLE удобнее, нежели выгрузка/загрузка файла. Тем более файл будет достаточно большой, 1С 7.7 просто им подавится. А чтобы использовать предложенный вариант обмена нужно модифицировать конфигурацию 7.7. А я хочу этого избежать.
#29 by Wladimir_spb
7.7 не подавится, а конфу переписывать, только если полностью автоматизировать. Если затавить пользователя дождаться выгрузки и запустить обработку по загрузке в 7.7, то ничего переписывать не нужно. А что за ошибки-то?
#30 by RealSaint
Предпологается что пользователь будет всё делать из одного места. Ему нужно только галками отметить переносимые документы, а всё остальное должна делать 1С. В других же вариантах слишком много лишних телодвижений. Собственно, всё уже работает, но пока без работающей транзакции. А ошибки могут быть любые: не хватает данных для переноса, некорректные данные, отсутствие соответствия объектов базы 7.7 и 8.1 и т.п. 1С ошибку то показывает, но транзакцию не откатывает.
#31 by Wladimir_spb
А зачем откатывать. Не получилось выдал сообщение. А там либо остановился, либо дальше продолжил. Можно даже у пользователя спросить, типа "Abort, Ignore, Retry?". А так выдать полную информацию - пусть исправляет: довводит недостающую информацию, удаляет лишнюю и пр. Можно еще исключения прописать, что бы в простых случаях программа сама вносила изменения в данне...
#32 by RealSaint
Так ведь не все ошибки я могу отловить. Ладно это будет ошибка данных 8.1, а если ошибка происходит в подключенной базе 7.7? Достаточно проблематично отловить такую ошибку, определить её причины и соответствующим образом отреагировать.
#33 by Wladimir_spb
А какого рода ошибки могут возникнуть? Если например, не хватило данных для записи, то список обязательных полей ограничен и его можно проконтролировать. Проверку на пустые значения и пр. А как в этом случае помогала транзакция? Ошибка - ничего не записано. А без транзакции, что?
#34 by RealSaint
Ну, скажем так, сейчас это разрабатывается при жёсткой нехватке времени и релизация более продвинутого контроля невозможна по указанной причине. Поэтому и хотелось использовать транзакцию для отката перенесенных данных при возникновении ошибки.
#35 by Wladimir_spb
Ну, тогда опять же . А потом, так ли сложно отловить ошибку подключенной базы? Даже без списка обязательных полей.
#36 by Wladimir_spb
Еще могу заметить, что вариант предложенный в требует совершенно незначительных изменений в 7.7. А величину файла можно варьировать произвольным образом, если выгружать данные почастям.
#37 by RealSaint
Ну, тогда опять очень жаль если это так и есть. Хорошо, а как отловить ошибку подключенной базы? Как её идентифицировать? Может я от недосыпа сейчас туго соображаю, но тем не менее... А про вариант в ... Я стараюсь придерживаться принципа "Одна большая красная кнопка", которую нужно нажать пользователю и всё должно заработать. Думаю не мне тебе рассказывать о том, какими ленивыми или тупыми могут быть конечные пользователи. При таком варианте пользователю нужно совершать больше действий, а это приведёт к куче возмущений. Тем более, как я уже сказал, сам механизм переноса уже практически готов.
#38 by RealSaint
В принципе, думаю эту дискуссию на сегодня можно закончить, ибо пока ответ на первоначальный вопрос так и не найден, к сожалению. В любом случае спасибо за участие. :-)
#39 by Wladimir_spb
вариант и предусматривает одну кнопку. Дальше все автоматом. :)
#40 by Wladimir_spb
+ я имел ввиду, что 8.0 сама запускает 7.7 После выгрузки
#41 by RealSaint
Но это опять же требует изменения конфигурации подключаемой базы. А я стараюсь всеми силами этого избежать. :-)
#42 by Wladimir_spb
Изменения минимальны. В глМодуле прописать вызов внешней обработки. Три строчки максимум...
#43 by RealSaint
Да я это понимаю, но на нежелание изменять целевую конфу есть свои причины. Ладно, не уговаривай меня, я и сам прекрасно осознаю возможные варианты переноса данных. :-)
#44 by Wladimir_spb
Мое дело предложить   ;-)
#45 by Wladimir_spb
Можно еще из 7.7 попробовать подключиться...    ;-)
#46 by Wladimir_spb
Что кстати эффективнее, с точки зрения контроля ошибок. Да и транзакции нужны только для загрузки...
#47 by RealSaint
Опять же переделка конфигурации. А информационных баз 7.7 несколько, поэтому удобнее с ними работать из одного места. Тем более что мне транзакции нужны как в подключенной базе 7.7, так и в вызывающей 8.1 одновременно.
#48 by Wladimir_spb
А какие переделки при подключении из 7.7 ? Зачем транзакции в 8.1, ведь от туда качаешь? И очень может быть, что они работают. В С-П не написано ограничений на внешнее подключение. Да и вызывать их можно из внешнего подключения локально...
#49 by RealSaint
В 8.1 происходит регистрация факта переноса данных, сохраняются соответствия объектов разных ИБ. Естественно, если выгрузка данных не удалась, то фиксировать эти данные нет необходимости.
#50 by Wladimir_spb
Собственно, регистрировать можно по факту. Если транзакция в 7.7 прошла успешно, то можно регистрировать. Опять же, если 8.1 можно менять (а кто сейчас работает на стадартной?), то транзакцию можно запустить локально. Если она, конечно, в таких условиях необходима( или при регистрации то же возможны ошибки?..).
#51 by Wladimir_spb
Вообще, IMHO, при внешнем подключении к 8 начать транзакцию несложно, даже если напрямую этот метод будет недоступен. Пропиысвается экспортная функция в общем модуле и все происходит локально.
#52 by Wladimir_spb
Гуд найт. Желаю скорейшего решения проблемы.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

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