03.05.2007, 11:07 | #1 |
Axapta
|
Теряется фильтр из-за того, что не задан label.
Наверняка это уже тут обсуждалось тут где-то, но, думаю, еще раз поднять это лишним не будет. Может быть когда-нибудь кому-нибудь пригодится.
Ситуация такова. Был вот такой код: X++: runQuery = new QueryRun(bankQueryRun.query());
debug::printDebug(runQuery.query().dataSourceNo(1).toString());
debug::printDebug(bankQueryRun.query().dataSourceNo(1).toString()); Цитата:
SELECT * FROM BankAccountTrans WHERE ((TransDate<=31.03.2007)) AND ((Dimension[3] = Накладные расходы))
SELECT * FROM BankAccountTrans WHERE ((TransDate<=31.03.2007)) AND ((CancelStatus = 0)) AND ((Dimension[3] = Накладные расходы)) Спасибо AndyD и kashperuk за помощь! PS Можно перенести в базу знаний. |
|
|
За это сообщение автора поблагодарили: Logger (3). |
03.05.2007, 11:30 | #2 |
Участник
|
Цитата:
|
|
03.05.2007, 11:33 | #3 |
Axapta
|
Точно. Пропустил я ту тему почему-то. Спасибо.
|
|
03.05.2007, 12:37 | #4 |
Участник
|
Вот небольшой скрипт для поиска "проблемных" значений перечислений. У меня нашлось 418 значений в 190 перечислениях
X++: // gl00mie, 20070503 --> #AOT static void AOTprintEnumValuesUnlabeled(Args _args) { TreeNodeIterator tnIterator; TreeNode tnEnum; DictEnum dtEnum; boolean bEnumIsOk; str strValueLabel; int i; int cnProcessed = 0; int cnUnlabeled = 0; int cnEnumsNotOk= 0; ; tnIterator = TreeNode::findNode(#BaseEnumsPath).AOTiterator(); while(true) { tnEnum = tnIterator.next(); if(!tnEnum) break; cnProcessed++; dtEnum = new DictEnum(tnEnum.applObjectId()); if(!dtEnum) { error(strfmt(@"Failed to create DictEnum object for '%1\%2' (objectId %3)!", #BaseEnumsPath, tnEnum.AOTname(), tnEnum.applObjectId())); continue; } bEnumIsOk = true; for(i=0; i<dtEnum.values(); i++) { strValueLabel = dtEnum.index2Label(i); if(!strValueLabel) { cnUnlabeled++; bEnumIsOk = false; warning(strfmt(@"%1::%2 (value %3) has no label!", dtEnum.name(), dtEnum.index2Symbol(i), dtEnum.index2Value(i))); } } if(!bEnumIsOk) cnEnumsNotOk++; } info(strfmt(@"%1 base enums processed, %2 unlabeled enum values found in %3 enums", cnProcessed, cnUnlabeled, cnEnumsNotOk)); } // gl00mie, 20070503 <-- Последний раз редактировалось gl00mie; 03.05.2007 в 12:48. Причина: приделал вывод числа "проблемных" перечислений |
|
|
За это сообщение автора поблагодарили: oip (10). |
03.05.2007, 18:04 | #5 |
Участник
|
Предлагаю сразу заполнить каким-нибудь непреметным значением пустые Labels.
За основу взял job от gl00mie X++: #AOT static void AOTprintUpdateEnumValuesUnlabeled(Args _args) { TreeNodeIterator tnIterator; TreeNode tnEnum, tnEmunChild; DictEnum dtEnum; boolean bEnumIsOk; str strValueLabel; int i; int cnProcessed = 0; int cnUnlabeled = 0; int cnEnumsNotOk= 0; // zan 03.05.2007 --> int conElmUpd = 3; //Label str properties, labelValueNew = '-', conValue; container conProperties; // zan 03.05.2007 <-- ; tnIterator = TreeNode::findNode(#BaseEnumsPath).AOTiterator(); while(true) { tnEnum = tnIterator.next(); if(!tnEnum) break; cnProcessed++; dtEnum = new DictEnum(tnEnum.applObjectId()); if(!dtEnum) { error(strfmt(@"Failed to create DictEnum object for '%1\%2' (objectId %3)!", #BaseEnumsPath, tnEnum.AOTname(), tnEnum.applObjectId())); continue; } bEnumIsOk = true; for(i=0; i<dtEnum.values(); i++) { strValueLabel = dtEnum.index2Label(i); if(!strValueLabel) { cnUnlabeled++; bEnumIsOk = false; warning(strfmt(@"%1::%2 (value %3) has no label!", dtEnum.name(), dtEnum.index2Symbol(i), dtEnum.index2Value(i))); // zan 03.05.2007 --> if(labelValueNew) { tnEmunChild = tnEnum.AOTfindChild(dtEnum.index2Symbol(i)); properties = tnEmunChild.AOTgetProperties(); conProperties = str2con(properties,'\n'); conValue = conpeek(conProperties,conElmUpd); conValue += labelValueNew; conProperties = conpoke(conProperties, conElmUpd, conValue); properties = con2str(conProperties,'\n'); tnEmunChild.AOTsetProperties(properties); tnEmunChild.AOTsave(); tnEnum.AOTsave(); //info(properties); } // zan 03.05.2007 <-- } } if(!bEnumIsOk) cnEnumsNotOk++; } info(strfmt(@"%1 base enums processed, %2 unlabeled enum values found in %3 enums", cnProcessed, cnUnlabeled, cnEnumsNotOk)); } // gl00mie, 20070503 <-- |
|
03.05.2007, 18:25 | #6 |
Участник
|
Думаю лучше заполнять пробелом. Тогда визуально не будет отличаться, а работать уже будет корректно.
|
|
03.05.2007, 19:11 | #7 |
Участник
|
Цитата:
Сообщение от kashperchuk ->
Думаю лучше заполнять пробелом. Тогда визуально не будет отличаться, а работать уже будет корректно. Нужно обязательно чем-нибудь зополнять. |
|