|
22.08.2013, 16:22 | #1 |
Участник
|
ax2012: а зачем табличные переменные инициализируют null'ом?
Я щас глупость спрошу. Но который раз вижу и который раз удивляюсь.
в ax2012 табличные переменные постоянно инициализируют null'ом. А зачем? пример метод в таблице EcoResCategory.getChildren |
|
22.08.2013, 16:54 | #2 |
Участник
|
А табличные переменные иерархических таблиц или и обычных?
__________________
Айрат Вильданов. skype: vildanov.a |
|
22.08.2013, 16:56 | #3 |
Участник
|
хорошая тема. надо подумать.
пока видел обычные таблицы. |
|
22.08.2013, 17:18 | #4 |
Участник
|
Я лично инициализирую табличные переменные null'ом, чтоб не было предупреждений при компиляции "переменная не записана, но прочитана", ибо достает.
|
|
|
За это сообщение автора поблагодарили: mazzy (2), S.Kuskov (1). |
22.08.2013, 17:22 | #5 |
Участник
|
Возможно это бездумное копирование кода связанного с "changeCompany".
http://msdn.microsoft.com/en-us/library/aa860755.aspx |
|
22.08.2013, 17:24 | #6 |
Участник
|
Вроде бы для кода, связанного с changecompany, сбрасывать табличные переменные актуально только после хотя бы одного select'а - внутри какого-нить цикла перебора компаний. В примере на msdn внутри changeCompany('bbb') {} сбрасывать табличный буфер избыточно.
|
|
23.08.2013, 09:59 | #7 |
Участник
|
еще есть нововведение, возврат 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 |
Участник
|
Индусский новодел
|
|
23.08.2013, 12:41 | #9 |
Участник
|
Не ответ на вопрос но тоже интересные наблюдения по поводу присваивания null Common.reread() - альтернатива для findRecId?
|
|
26.08.2013, 16:39 | #11 |
Участник
|
Это андроид-программисты код писали.
PS Я сейчас интенсивно программирую на Яве, там надо внимательно следить за тем, чтобы движок не посчитал два разных объекта идентичными и наоборот, не посчитал два одинаковых объекта разными. Например выражение "Вася" == "Вася" имеет истину только в том случае, если обе этих строки хранятся по одному физическому адресу. Чтобы все работало правильно, надо писать "Вася".equals("Вася") |
|
27.08.2013, 07:32 | #12 |
Участник
|
Как уже говорилось, явное обнуление переменных делается, чтобы не возникало предупреждений ВР. Вообще, для табличных переменных было бы достаточно метода clear(), поскольку они все равно уже имеют инстанс сразу после объявления и присваивание null кажется совсем нелогичным.
__________________
// no comments |
|
27.08.2013, 09:13 | #13 |
Участник
|
Цитата:
Вот её и надо поправить. |
|
27.08.2013, 10:17 | #14 |
Участник
|
я за null в трешке, если используется changeCompany. в 2007 ом году напоролся при построении консолидированных отчетов (в теле которых переключались компании changeCompany()). Тогда в отчетах поплыли суммы. Когда разобрался - добавил = null;
как в Ах 2012 уже не знаю не тестировал. Возможно в АХ 2012 это уже излишне. |
|
27.08.2013, 12:38 | #15 |
Участник
|
Цитата:
Сообщение от Evgeniy2020
я за null в трешке, если используется changeCompany. в 2007 ом году напоролся при построении консолидированных отчетов (в теле которых переключались компании changeCompany()). Тогда в отчетах поплыли суммы. Когда разобрался - добавил = null;
как в Ах 2012 уже не знаю не тестировал. Возможно в АХ 2012 это уже излишне. Только обнулять надо внутри блока changCompany А просто присвоить при объявлении как в процитированном примере - не поможет. Я вообще стараюсь тело changecompany выносить в отдельный метод. Тогда все обнуления автоматом происходят. Так надежнее. |
|
|
|