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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.08.2013, 16:22   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
ax2012: а зачем табличные переменные инициализируют null'ом?
Я щас глупость спрошу. Но который раз вижу и который раз удивляюсь.
в ax2012 табличные переменные постоянно инициализируют null'ом.
А зачем?

пример метод в таблице EcoResCategory.getChildren
Изображения
 
Старый 22.08.2013, 16:54   #2  
AraraT® is offline
AraraT®
Участник
1C
 
158 / 106 (4) +++++
Регистрация: 13.01.2006
Адрес: Республика Татарстан, г. Казань
А табличные переменные иерархических таблиц или и обычных?
__________________
Айрат Вильданов.
skype: vildanov.a
Старый 22.08.2013, 16:56   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
хорошая тема. надо подумать.

пока видел обычные таблицы.
Старый 22.08.2013, 17:18   #4  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Я лично инициализирую табличные переменные null'ом, чтоб не было предупреждений при компиляции "переменная не записана, но прочитана", ибо достает.
За это сообщение автора поблагодарили: mazzy (2), S.Kuskov (1).
Старый 22.08.2013, 17:22   #5  
Napalm is offline
Napalm
Участник
 
80 / 88 (3) ++++
Регистрация: 23.05.2012
Возможно это бездумное копирование кода связанного с "changeCompany".

http://msdn.microsoft.com/en-us/library/aa860755.aspx
Старый 22.08.2013, 17:24   #6  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Вроде бы для кода, связанного с changecompany, сбрасывать табличные переменные актуально только после хотя бы одного select'а - внутри какого-нить цикла перебора компаний. В примере на msdn внутри changeCompany('bbb') {} сбрасывать табличный буфер избыточно.
Старый 23.08.2013, 09:59   #7  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,689 / 405 (17) +++++++
Регистрация: 23.03.2006
еще есть нововведение, возврат null вместо пустой не найденной строки, такие места дополняют комментарием
X++:
static EcoResSize resolveProductVariantSize(
    EcoResSizeName     _sizeName,
    RefRecId            _productMaster,
    RefRecId            _productDimensionAttribute)
{
    EcoResSize              ecoResSize;
    EcoResProductMasterSize ecoResProductMasterSize;

    select ecoResSize
        where ecoResSize.Name == _sizeName
    exists join ecoResProductMasterSize
        where ecoResProductMasterSize.Size                          == ecoResSize.RecId
           && ecoResProductMasterSize.SizeProductMaster             == _productMaster
           && ecoResProductMasterSize.SizeProductDimensionAttribute == _productDimensionAttribute;

    if (!ecoResSize.RecId)
    {
        // Assigning null to selectedRecord does not cause the kernel to receive a true NULL value, but rather
        // just an empty record. Return NULL directly so the kernel knows that the intent is to not clear the
        // selected value.
        return null;
    }

    return ecoResSize;
}
За это сообщение автора поблагодарили: S.Kuskov (1).
Старый 23.08.2013, 10:11   #8  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Индусский новодел
Старый 23.08.2013, 12:41   #9  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Не ответ на вопрос но тоже интересные наблюдения по поводу присваивания null Common.reread() - альтернатива для findRecId?
Старый 26.08.2013, 00:19   #10  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Все, что касается ecoResCategory - "говнокод", но вы от меня это не слышали

Никакого смысла инициализировать так переменные при объявлении нет, imho.
За это сообщение автора поблагодарили: mazzy (50), Logger (1), lev (15), madm (1), Kabardian (2).
Старый 26.08.2013, 16:39   #11  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Это андроид-программисты код писали.

PS
Я сейчас интенсивно программирую на Яве, там надо внимательно следить за тем, чтобы движок не посчитал два разных объекта идентичными и наоборот, не посчитал два одинаковых объекта разными. Например выражение "Вася" == "Вася" имеет истину только в том случае, если обе этих строки хранятся по одному физическому адресу. Чтобы все работало правильно, надо писать "Вася".equals("Вася")
Старый 27.08.2013, 07:32   #12  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
642 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Как уже говорилось, явное обнуление переменных делается, чтобы не возникало предупреждений ВР. Вообще, для табличных переменных было бы достаточно метода clear(), поскольку они все равно уже имеют инстанс сразу после объявления и присваивание null кажется совсем нелогичным.
__________________
// no comments
Старый 27.08.2013, 09:13   #13  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,873 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от dech Посмотреть сообщение
Как уже говорилось, явное обнуление переменных делается, чтобы не возникало предупреждений ВР. Вообще, для табличных переменных было бы достаточно метода clear(), поскольку они все равно уже имеют инстанс сразу после объявления и присваивание null кажется совсем нелогичным.
Да это же явный косяк реализации проверки BP.
Вот её и надо поправить.
Старый 27.08.2013, 10:17   #14  
Evgeniy2020 is offline
Evgeniy2020
Участник
 
309 / 68 (3) ++++
Регистрация: 10.04.2007
Адрес: Москва, САО, СЗАО
я за null в трешке, если используется changeCompany. в 2007 ом году напоролся при построении консолидированных отчетов (в теле которых переключались компании changeCompany()). Тогда в отчетах поплыли суммы. Когда разобрался - добавил = null;
как в Ах 2012 уже не знаю не тестировал. Возможно в АХ 2012 это уже излишне.
Старый 27.08.2013, 12:38   #15  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,873 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Evgeniy2020 Посмотреть сообщение
я за null в трешке, если используется changeCompany. в 2007 ом году напоролся при построении консолидированных отчетов (в теле которых переключались компании changeCompany()). Тогда в отчетах поплыли суммы. Когда разобрался - добавил = null;
как в Ах 2012 уже не знаю не тестировал. Возможно в АХ 2012 это уже излишне.
Да это известный глюк.
Только обнулять надо внутри блока changCompany
А просто присвоить при объявлении как в процитированном примере - не поможет.

Я вообще стараюсь тело changecompany выносить в отдельный метод. Тогда все обнуления автоматом происходят. Так надежнее.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Опыт: синхронизация справочников через AIF в AX2012 EVGL DAX: Функционал 14 28.08.2020 17:52
emeadaxsupport: Inventory closing differences between AX4.0 and AX2012 using weighted average costing method Blog bot DAX Blogs 0 27.12.2012 19:11
Параметры и табличные переменные maximka DAX: Программирование 14 19.08.2011 12:24
Real Data Type - No of decimals Yprit DAX: Программирование 10 30.03.2009 12:17
C# and AX Development: Using the COM Business Connector in C#, the easy way (AX/Axapta) Blog bot DAX Blogs 0 15.12.2007 20:35
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 02:46.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.