02.06.2010, 12:11 | #1 |
Участник
|
DAX2009: поля таблиц стандартного приложения с идентификаторами из диапазона usr-слоя
В стандартном приложении обнаружлась интересная особенность: некотрые поля таблиц емеют идентификаторы из диапазона значений, традиционно используемого для объектов на USR-слое, т.е. 50001 и выше. Вот перечень таких полей, полученный нехитрым job'ом:
Код: AssetTransMerge.ReasonRefRecId (sys) 50001 CreditCardProcessors.PaymentJournal_Visa (sys) 50001 CreditCardProcessors.PaymentJournal_MasterCard (sys) 50002 CreditCardProcessors.PaymentJournal_AmericanExpress (sys) 50003 CreditCardProcessors.PaymentJournal_Discover (sys) 50004 CustOpenInvoices.InvoiceCompany (sys) 50002 CustOpenInvoices.PartyId (sys) 50003 CustParameters.CreditCardPostingAccountType (sys) 50004 CustParameters.CreditCardPostingAccount (sys) 50005 CustParameters.CreditCardPostingBankTransactionType (sys) 50006 CustVendCommunicationTmp.TaxBaseTotal (sys) 50001 CustVendCommunicationTmp.TaxTotal (sys) 50002 CustVendCommunicationTmp.NoTaxTotal (sys) 50003 CustVendCommunicationTmp.ExemptTotal (sys) 50004 CustVendCommunicationTmp.CreditNoteTotal (sys) 50005 CustVendCommunicationTmp.CreditNoteTaxTotal (sys) 50006 CustVendCommunicationTmp.CreditNoteExemptTotal (sys) 50007 CustVendCommunicationTmp.CreditNoteNoTaxTotal (sys) 50008 CustVendCommunicationTmp.FiscalCode (sys) 50009 CustVendCommunicationTmp.VatNum (sys) 50010 CustVendCommunicationTmp.Account (sys) 50011 CustVendCommunicationTmp.TaxDirection (sys) 50012 CustVendCommunicationTmp.Voucher (sys) 50013 CustVendCommunicationTmp.RecordType (sys) 50014 CustVendCommunicationTmp.PurchTotalInclTax (sys) 50016 CustVendCommunicationTmp.CreditTotalInclTax (sys) 50017 CustVendCommunicationTmp.Name (sys) 50018 CustVendCommunicationTmp.TaxRefId (sys) 50019 CustVendListReportSetup.TaxGroup (sys) 50001 CustVendListReportSetup.TaxCode (sys) 50002 CustVendListReportSetup.NoTaxType (sys) 50003 CustVendListReportSetup.Exclude (sys) 50004 CustVendListReportSetup.IsZeroTax (sys) 50005 EmplAdvExpendTable_RU.Taxed (sl2) 50003 TmpTaxReport_ITSummary.TaxBookSectionId (sys) 50001 TmpTaxReport_ITSummary.TaxBookSectionName (sys) 50002 VendInvoiceInfoLine_Asset.CreateFixedAsset (sys) 50001 VendInvoiceInfoLine_Asset.AssetGroup (sys) 50002 VendInvoiceInfoLine_Asset.AssetId (sys) 50003 VendInvoiceInfoLine_Asset.AssetTransTypePurch (sys) 50004 VendInvoiceInfoLine_Asset.AssetBookId (sys) 50005 VendInvoiceInfoLine_Asset.AssetAcquired (sys) 50006 VendInvoiceInfoLine_Asset.VendInvoiceInfoLineRecId (sys) 50007 PS. Данные приведены по приложению версии 5.0.1500.2116 - AX 2009 SP1 RU4 с локализацией для Восточной Европы. |
|
|
За это сообщение автора поблагодарили: Logger (3). |
02.06.2010, 13:02 | #2 |
Участник
|
В АХ 6 стандартном приложении все идентификаторы из перечисленных выше уже корректные.
gl00mie, запостите лучше джобик, чтобы не переписывать по новой. Так можно будет прогонять и отлавливать ляпы. |
|
02.06.2010, 13:11 | #3 |
Участник
|
X++: UtilIdElements utilElements; ; while select id, parentId, name, utilLevel from utilElements order by parentId, id where utilElements.utilLevel < UtilEntryLevel::usr && utilElements.recordType == UtilElementType::TableField && utilElements.Id >= 50000 { info( strfmt( '%1.%2 (%3) %4', tableid2name( utilElements.parentId ), utilElements.name, utilElements.utilLevel, utilElements.Id ) ); } Последний раз редактировалось gl00mie; 02.06.2010 в 13:14. |
|
|
За это сообщение автора поблагодарили: kashperuk (5), Logger (1). |
02.06.2010, 13:40 | #4 |
Участник
|
Не в первый раз уже такое
Вот еще аналогичный пример ConfigurationKey CreditNoteReference_W - некорректный ID Правда там конфигурационный ключ поехал. Так что конф. и секьюрити ключи тоже лучше проверить. |
|
22.07.2010, 16:01 | #5 |
Участник
|
Это уже даже не смешно...
Вот вышел Hotifx Rollup 5 - и принес еще кучу геморроя с пересечением id-шников объектов приложения. Теперь уже не только поля таблиц стандартного приложения "заезжают" в диапазон usr-слоя, но и расширенные типы с енумами. Ну неужели сложно элементарную проверку сделать перед выпуском? А то так вот подложишь новые слои - а в стандартных полях, которые ты даже не думал трогать, окажутся расширенные типы с USR-слоя, потом синхронизируешься - и пипец... Приведенный выше скрипт был немного допилен, теперь он обрабатывает больше типов объектов приложения и выводит информацию о возможных пересечениях с usr-слоем.
X++: UtilIdElements utilElementUsr; UtilIdElements utilElements; identifiername parentName; identifiername parentNameUsr; str usrCounterpart; str getParentName(UtilIdElements _utilElements) { str ret; ; switch (utilElements.recordType) { case UtilElementType::Class : case UtilElementType::Table : case UtilElementType::Enum : case UtilElementType::ExtendedType : ret = ''; break; case UtilElementType::TableField : case UtilElementType::TableIndex : ret = tableid2name( utilElements.parentId ); break; default : throw error( Error::wrongUseOfFunction( funcname() ) ); } return ret; } ; while select id, parentId, name, utilLevel from utilElements order by recordType, parentId, id where utilElements.utilLevel < UtilEntryLevel::usr && utilElements.Id >= 50000 && ( utilElements.recordType == UtilElementType::TableField || utilElements.recordType == UtilElementType::TableIndex || utilElements.recordType == UtilElementType::ExtendedType || utilElements.recordType == UtilElementType::Enum || utilElements.recordType == UtilElementType::Table || utilElements.recordType == UtilElementType::Class ) { select firstonly utilElementUsr where utilElementUsr.utilLevel == UtilEntryLevel::usr && utilElementUsr.recordType == utilElements.recordType && utilElementUsr.id == utilElements.id && utilElementUsr.parentId == utilElements.parentId && utilElementUsr.name != utilElements.name ; if (utilElementUsr) { parentNameUsr = getParentName( utilElementUsr ); usrCounterpart = strfmt( ' - %1%2%3', parentNameUsr, parentNameUsr ? '.' : '', utilElementUsr.name ); } else { usrCounterpart = ''; } parentName = getParentName( utilElements ); info( strfmt( '%1 %2%3%4 (%5) %6%7', utilElements.recordType, parentName, parentName ? '.' : '', utilElements.name, utilElements.utilLevel, utilElements.Id, usrCounterpart )); } Код: Enum MonthQuarter_HU (glp) 50134 ExtendedType EUSalesListIsSettlement_W (glp) 50122 ExtendedType EUSalesListIsCanceled_W (glp) 50123 ExtendedType BuildNum_HU (glp) 50124 ExtendedType StariwayNum_HU (glp) 50125 ExtendedType FloorNum_HU (glp) 50126 ExtendedType DoorNum_HU (glp) 50127 ExtendedType Phone_HU (glp) 50128 ExtendedType EUSalesListTransferTypePurch_W (glp) 50129 ExtendedType EUSalesListTransferType_W (glp) 50130 TableField CustParameters.CreditCardPostingAccountType (sys) 50004 TableField CustParameters.CreditCardPostingAccount (sys) 50005 TableField CustParameters.CreditCardPostingBankTransactionType (sys) 50006 TableField CustSettlement.EUSalesList_W (glp) 50001 TableField CustOpenInvoices.InvoiceCompany (sys) 50002 TableField CustOpenInvoices.PartyId (sys) 50003 TableField VendSettlement.EUSalesList_W (glp) 50001 TableField EUSalesList.IsSettlement_W (glp) 50001 TableField EUSalesList.IsCanceled_W (glp) 50003 TableField IntrastatParameters.EUSalesListTransferPurchases_W (glp) 50001 TableField IntrastatParameters.CompanyBuildNum_HU (glp) 50002 TableField IntrastatParameters.CompanyStariwayNum_HU (glp) 50003 TableField IntrastatParameters.CompanyFloorNum_HU (glp) 50004 TableField IntrastatParameters.CompanyDoorNum_HU (glp) 50005 TableField IntrastatParameters.FilledByPhone_HU (glp) 50006 TableField TmpTaxReport_ITSummary.TaxBookSectionId (sys) 50001 TableField TmpTaxReport_ITSummary.TaxBookSectionName (sys) 50002 TableField AssetTransMerge.ReasonRefRecId (sys) 50001 TableField CustVendCommunicationTmp.TaxBaseTotal (sys) 50001 TableField CustVendCommunicationTmp.TaxTotal (sys) 50002 TableField CustVendCommunicationTmp.NoTaxTotal (sys) 50003 TableField CustVendCommunicationTmp.ExemptTotal (sys) 50004 TableField CustVendCommunicationTmp.CreditNoteTotal (sys) 50005 TableField CustVendCommunicationTmp.CreditNoteTaxTotal (sys) 50006 TableField CustVendCommunicationTmp.CreditNoteExemptTotal (sys) 50007 TableField CustVendCommunicationTmp.CreditNoteNoTaxTotal (sys) 50008 TableField CustVendCommunicationTmp.FiscalCode (sys) 50009 TableField CustVendCommunicationTmp.VatNum (sys) 50010 TableField CustVendCommunicationTmp.Account (sys) 50011 TableField CustVendCommunicationTmp.TaxDirection (sys) 50012 TableField CustVendCommunicationTmp.Voucher (sys) 50013 TableField CustVendCommunicationTmp.RecordType (sys) 50014 TableField CustVendCommunicationTmp.PurchTotalInclTax (sys) 50016 TableField CustVendCommunicationTmp.CreditTotalInclTax (sys) 50017 TableField CustVendCommunicationTmp.Name (sys) 50018 TableField CustVendCommunicationTmp.TaxRefId (sys) 50019 TableField CustVendListReportSetup.TaxGroup (sys) 50001 TableField CustVendListReportSetup.TaxCode (sys) 50002 TableField CustVendListReportSetup.NoTaxType (sys) 50003 TableField CustVendListReportSetup.Exclude (sys) 50004 TableField CustVendListReportSetup.IsZeroTax (sys) 50005 TableField CreditCardProcessors.PaymentJournal_Visa (sys) 50001 TableField CreditCardProcessors.PaymentJournal_MasterCard (sys) 50002 TableField CreditCardProcessors.PaymentJournal_AmericanExpress (sys) 50003 TableField CreditCardProcessors.PaymentJournal_Discover (sys) 50004 TableField VendInvoiceInfoLine_Asset.CreateFixedAsset (sys) 50001 TableField VendInvoiceInfoLine_Asset.AssetGroup (sys) 50002 TableField VendInvoiceInfoLine_Asset.AssetId (sys) 50003 TableField VendInvoiceInfoLine_Asset.AssetTransTypePurch (sys) 50004 TableField VendInvoiceInfoLine_Asset.AssetBookId (sys) 50005 TableField VendInvoiceInfoLine_Asset.AssetAcquired (sys) 50006 TableField VendInvoiceInfoLine_Asset.VendInvoiceInfoLineRecId (sys) 50007 TableField EmplAdvExpendTable_RU.Taxed (sl2) 50003 TableIndex ReturnTmpStatRanking.ElementIdx (sys) 50001 TableIndex CustVendCommunicationTmp.SortOrderIdx (sys) 50001 TableIndex CustVendListReportSetup.TaxGroupTaxCodeIdx (sys) 50001 |
|
|
За это сообщение автора поблагодарили: Logger (5), lev (2), Poleax (1), AvrDen (1), aidsua (2), Ivanhoe (3), _scorp_ (2). |
Теги |
ax2009, edt, enum, extended data type, id объекта, баг, ошибка, поля, приложение, таблица |
|
|