AXForum  
Go Back   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search Mark Forums Read

 
 
Thread Tools Search this Thread Display Modes
Old 27.11.2003, 13:02   #1  
sash_xp is offline
sash_xp
Участник
sash_xp's Avatar
 
274 / 9 (1) +
Join Date: 18.07.2003
Location: Москва
Откат транзакции. Attain. C/Al
Ситуация примерно такая. Бухгалтер формирует операцию оплаты, в случае кредиты при этом должно сформироваться еще две проводки, на основе первой. Итого: 3. Я без проблем формирую все эти проводки, но может возникнуть такая ситуация, что некое ЧП помешало завершиться процедуре до конца. Скажем, прошло две проводки, и осталась еще одна. Для обеспечения корректности операции необходимо провести откат транзакции. Как это делается в Аттейне?

Есть еще такой вопрос: есть ли возможность получить текущую строку в фин. журнале (на которой усановлен курсор)?

Заранее благодарен.
__________________
Александр Игнатьев
Old 27.11.2003, 14:23   #2  
Yoil is offline
Yoil
NavAx
NavAx Club
Лучший по профессии 2017
Лучший по профессии 2009
 
1,574 / 70 (6) ++++
Join Date: 20.11.2002
Location: Msk
По идее, транзакция в Навыжне - это период между вызовами LOCKTABLE и COMMIT.
То и другое может быть вызвано как явным, так и неявным способом (например, MODIFY вызывает LOCKTABLE).
Если до COMMIT происходит ошибка, то транзакция откатывается. Ошибка при этом, опять же, может быть вызвана как явно (TESTFIELD, ERROR, FIELDERROR), так и неявно (скажем, вы пытаетесь заинсертить запись с уже существующим значением первичного ключа). Если же COMMIT уже произошел, то версия, с которой происходила работа, становится текущей и метаться уже поздняк...
Old 27.11.2003, 15:00   #3  
sash_xp is offline
sash_xp
Участник
sash_xp's Avatar
 
274 / 9 (1) +
Join Date: 18.07.2003
Location: Москва
Ага, отлично, протестировал то, что надо. Если возникает ошибка откат происходит. Однако новый глюк появляется в другом месте. Успешено учтенные проводки не удаляются из таблицы фин. журнала. Код примерно такой

locktable;
init;
...
"Account No.":='5010';
...

INSERT;
CODEUNIT.RUN(CODEUNIT::"Gen. Jnl.-Post Line",Rec);

init;
...
"Account No.":='6010';
...

INSERT;
CODEUNIT.RUN(CODEUNIT::"Gen. Jnl.-Post Line",Rec);
commit;

Как бы от этого избавиться?
__________________
Александр Игнатьев
Old 27.11.2003, 16:51   #4  
Yoil is offline
Yoil
NavAx
NavAx Club
Лучший по профессии 2017
Лучший по профессии 2009
 
1,574 / 70 (6) ++++
Join Date: 20.11.2002
Location: Msk
В данном случае - подозреваю, что никак.
То, что в начале кода стоит LOCKTABLE, а в конце кода стоит COMMIT совсем не означает, что весь код между ними - это одна транзакция =)
На самом деле INSERT - это отдельная транзация в данной ситуации, и
CODEUNIT.RUN(CODEUNIT::"Gen. Jnl.-Post Line",Rec) тоже выполняет какие-то там свои транзакции...

Как уговорить Навыжн считать все это одной большой транзакцией, которую при желании всю можно откатить, я не знаю
Old 28.11.2003, 09:46   #5  
bascomo is offline
bascomo
Участник
 
51 / 10 (1) +
Join Date: 11.02.2003
Location: Москва
Сначала сформируй строки финжурнала, а потом учти их все вместе, а не по одной.
Old 28.11.2003, 13:20   #6  
sash_xp is offline
sash_xp
Участник
sash_xp's Avatar
 
274 / 9 (1) +
Join Date: 18.07.2003
Location: Москва
А если скажем там уже есть неучтенные записи?
__________________
Александр Игнатьев
Old 28.11.2003, 13:54   #7  
Yoil is offline
Yoil
NavAx
NavAx Club
Лучший по профессии 2017
Лучший по профессии 2009
 
1,574 / 70 (6) ++++
Join Date: 20.11.2002
Location: Msk
Создай временную табличку, по ходу создания твоих неучтенных строк журнала записывай в эту временную табличку номера созданных тобою строк.
После того, как создал все нужные строки в журнале, пробеги циклом по временной табличке, находи в журнале строки по записям из временной таблички и учитывай их.
Old 28.11.2003, 14:08   #8  
sash_xp is offline
sash_xp
Участник
sash_xp's Avatar
 
274 / 9 (1) +
Join Date: 18.07.2003
Location: Москва
Можно и так, но как же обеспечение целостности? Может, лучше записывать эти записи в спец. раздел журнала и потом учитывать его? Но как это реализовать, как учесть раздел журнала?
__________________
Александр Игнатьев
Old 28.11.2003, 14:15   #9  
Yoil is offline
Yoil
NavAx
NavAx Club
Лучший по профессии 2017
Лучший по профессии 2009
 
1,574 / 70 (6) ++++
Join Date: 20.11.2002
Location: Msk
А причем здесь обеспечение целостности?
Old 28.11.2003, 14:25   #10  
sash_xp is offline
sash_xp
Участник
sash_xp's Avatar
 
274 / 9 (1) +
Join Date: 18.07.2003
Location: Москва
Ну как бы ворос изначально именно об этом ставился. Откат транзакций используется именно для обеспечения целостности.
__________________
Александр Игнатьев
Old 28.11.2003, 14:42   #11  
Yoil is offline
Yoil
NavAx
NavAx Club
Лучший по профессии 2017
Лучший по профессии 2009
 
1,574 / 70 (6) ++++
Join Date: 20.11.2002
Location: Msk
Я не уверен, но можно попробовать создать под это дело специальный объект, например отчет.
Отчет работает со строками финжурнала и учитывает их.
Есть у меня смутное подозрение, что если в отчете не ставить ручками COMMIT'ы, то все его выполнение будет одной большой транзакцией, которая, в случае возникновения ошибки по ходу выполнения отчета, откатится вся...
Но это только подозрение, проверить времени нет пока.
Old 28.11.2003, 14:46   #12  
sash_xp is offline
sash_xp
Участник
sash_xp's Avatar
 
274 / 9 (1) +
Join Date: 18.07.2003
Location: Москва
Ага, спасибо за идею, надо попробовать. Я еще думаю, раз locktable не дает внешним функциям удалять строки из таблицы, удалять их самому.
__________________
Александр Игнатьев
Old 28.11.2003, 17:19   #13  
bascomo is offline
bascomo
Участник
 
51 / 10 (1) +
Join Date: 11.02.2003
Location: Москва
Сделай так, чтобы в этом шаблоне и разделе фин. журнала не было других строк, кроме тех, что тебе нужны.
Либо фильтруй. Например, можно использовать MARK и MARKEDONLY.
Old 02.12.2003, 13:19   #14  
Yuriy is offline
Yuriy
Участник
 
150 / 10 (1) +
Join Date: 25.02.2003
Location: Москва
-> Стопудово
Используй MARK и потом MARKEDONLY. Создавай строки, а потом выцарапывай их из всех журнальных строк и маркируй. В результате у тебя в переменной Rec будут лежать только нужные записи. Ну и дело за малым - прогоняй переменную через Gen. Jnl Post Line!!
__________________
Вот такие, брат, дела!
Old 02.12.2003, 16:54   #15  
sash_xp is offline
sash_xp
Участник
sash_xp's Avatar
 
274 / 9 (1) +
Join Date: 18.07.2003
Location: Москва
Да я тоже решил остановиться именно на этом варианте, спасибо.
__________________
Александр Игнатьев
 

Similar Threads
Thread Thread Starter Forum Replies Last Post
Несколько вопросов по C/AL и C/SIDE начинающего gennady NAV: Программирование 1 10.11.2004 09:17
Navision Attain через Citrix Alex_V NAV: Администрирование 2 15.12.2003 17:43
Переход на Navision Attain Makc_1 NAV: Прочие вопросы 3 30.07.2003 14:36
attain - Переход на attain Helen NAV: Прочие вопросы 8 04.06.2003 20:34
работа с COM в C/AL Alex_V NAV: Программирование 0 30.05.2003 13:43
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 10:21.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.