AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.07.2012, 15:44   #1  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от MikeR Посмотреть сообщение
Вы тоже так пишите?
Я хочу услышать мнения коллег, насколько так вообще корректно писать.
Или может у меня одного глаз замылился.
Рекурсивный метод тут лучше бы смотрелся.
Ну по крайней мере я бы использовал рекурсию...

OFFTOP: не знал, что PL\SQL Formatter можно к Х++ прикрутить...
__________________
Zhirenkov Vitaly

Последний раз редактировалось ZVV; 18.07.2012 в 15:44. Причина: синтаксис
За это сообщение автора поблагодарили: MikeR (2).
Старый 18.07.2012, 15:58   #2  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Коллеги, вы не поверите, но суть в том, что цикл вообще не нужен.
X++:
WHILE(TRUE)
это стоит для того, что бы просто "запустить" выполнение.
Я подумал, что это очевидно.....
__________________
Axapta book for developer
Старый 18.07.2012, 16:07   #3  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Цитата:
Сообщение от MikeR Посмотреть сообщение
Коллеги, вы не поверите, но суть в том, что цикл вообще не нужен.
X++:
WHILE(TRUE)
это стоит для того, что бы просто "запустить" выполнение.
Я подумал, что это очевидно.....
Кстати, да. О чем и говорит firstonly. А теперь и мне стало интересно, зачем так было сделано - "запускать выполнение" таким образом?
__________________
С уважением, Александр.
Старый 18.07.2012, 16:08   #4  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от MikeR Посмотреть сообщение
Коллеги, вы не поверите, но суть в том, что цикл вообще не нужен.
X++:
WHILE(TRUE)
это стоит для того, что бы просто "запустить" выполнение.
Я подумал, что это очевидно.....
Так ли?
Он нужен для того что бы запускать и следующие итерации тоже, а не только первую.
Цикл будет выполнятся, кока не закончится дерево (не будет парента) и сработает брэйк.
Ну собственно такая эмуляция рекурсии...
__________________
Zhirenkov Vitaly
За это сообщение автора поблагодарили: S.Kuskov (1).
Старый 18.07.2012, 16:20   #5  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Собственно да, человек запускает перебор (чтобы более корректно было), но в других местах это вообще не требуется.
Используется конструкция
X++:
while select forupdate ... {}
что само по себе плохо, так как более корректно

X++:
while select
{
	ttsbegin;
	select forupdate 
	ttscommit;
}
То есть делаем маленькие транзакции.
__________________
Axapta book for developer
Старый 18.07.2012, 16:25   #6  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Кстати, а действительно кто-нибудь пишет рекурсию через
X++:
while (true)
в Dynamics Ax?
__________________
Axapta book for developer
Старый 18.07.2012, 16:35   #7  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2494 (89) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от MikeR Посмотреть сообщение
Собственно да, человек запускает перебор (чтобы более корректно было), но в других местах это вообще не требуется.
Используется конструкция
X++:
while select forupdate ... {}
что само по себе плохо, так как более корректно

X++:
while select
{
	ttsbegin;
	select forupdate 
	ttscommit;
}
То есть делаем маленькие транзакции.
Что значит более корректно?
Вы хотите поломать целостность данных?
__________________
Axapta v.3.0 sp5 kr2
Старый 18.07.2012, 16:43   #8  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Цитата:
Сообщение от AndyD Посмотреть сообщение
Что значит более корректно?
Вы хотите поломать целостность данных?
X++:
table		t1,t2;
ttsbegin;
while select t1
{
	
	select forupdate t2 where t2.recid == t1.RecId;
	.....
	t2.update(); 
	
}
ttscommit;
__________________
Axapta book for developer

Последний раз редактировалось MikeR; 18.07.2012 в 16:45.
Старый 18.07.2012, 17:52   #9  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2494 (89) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от MikeR Посмотреть сообщение
X++:
table		t1,t2;
ttsbegin;
while select t1
{
	
	select forupdate t2 where t2.recid == t1.RecId;
	.....
	t2.update(); 
	
}
ttscommit;
И тем не менее.
В чем в этом варианте большая корректность перед первоначальным?
__________________
Axapta v.3.0 sp5 kr2
Старый 18.07.2012, 16:37   #10  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от MikeR Посмотреть сообщение
Собственно да, человек запускает перебор (чтобы более корректно было), но в других местах это вообще не требуется.
Используется конструкция
X++:
while select forupdate ... {}
что само по себе плохо, так как более корректно

X++:
while select
{
	ttsbegin;
	select forupdate 
	ttscommit;
}
То есть делаем маленькие транзакции.
Сомнительное утверждение... (по крайней мере без контекста )
__________________
Zhirenkov Vitaly
Старый 18.07.2012, 16:20   #11  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от MikeR Посмотреть сообщение
Коллеги, вы не поверите, но суть в том, что цикл вообще не нужен.
X++:
WHILE(TRUE)
это стоит для того, что бы просто "запустить" выполнение.
Я подумал, что это очевидно.....
Почему? По-моему, это такой обход дерева. И без "while true" работать не будет. При каждой итерации меняется InvGUID и цикл прервется только тогда, когда не найдется parent. И "while true" при таком написании кода очень даже нужен. Понятно, что код можно переписать иначе.
Старый 18.07.2012, 16:29   #12  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Цитата:
Сообщение от oip Посмотреть сообщение
Понятно, что код можно переписать иначе.
Да дело в том, что не для всех это понятно.
__________________
Axapta book for developer
Старый 18.07.2012, 16:31   #13  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
ИМХО, рекурсию лучше организовывать через отдельно написанную функцию внутри метода.
__________________
С уважением, Александр.

Последний раз редактировалось samolalex; 18.07.2012 в 16:33. Причина: 111
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
.NET business connector не видит изменений в коде Аксапты rkorchagin DAX: Программирование 2 22.01.2010 11:43
Номерная серия длиннее 20 символов - баг в коде Максимка DAX: Функционал 17 29.12.2009 02:11
Нужно сделать выборку из нескольких таблиц (в данном случае из четырех). niktata DAX: Программирование 10 30.09.2008 09:42
Как быстро найти "главную" процедуру обработки в коде X++ ? Gustav DAX: Программирование 12 14.02.2006 12:15
Можно ли в коде управлять свойством Mandatory? kostas DAX: Программирование 5 10.03.2004 11:14

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:33.