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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.06.2010, 12:11   #1  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
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
Поле со слоя sl2 относится к локализации - это слой с модулями "СНГ Зарплата" и "СНГ Кадровый учет". Тут, конечно, какие-то проблемы вызывают разве что поля в CustParameters, но в целом "как-то, доктор, неаккуратненько..."
PS. Данные приведены по приложению версии 5.0.1500.2116 - AX 2009 SP1 RU4 с локализацией для Восточной Европы.
За это сообщение автора поблагодарили: Logger (3).
Старый 02.06.2010, 13:02   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
В АХ 6 стандартном приложении все идентификаторы из перечисленных выше уже корректные.
gl00mie, запостите лучше джобик, чтобы не переписывать по новой.
Так можно будет прогонять и отлавливать ляпы.
Старый 02.06.2010, 13:11   #3  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 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 ) );
}
Теоретически job следует изменить, чтобы он проверял соответствие значения Id и диапазона значений, выделенного самому нижнему слою, на котором определено поле, но меня интересовали лишь поля, Id которых "залезли" в диапазон значений usr-слоя.

Последний раз редактировалось gl00mie; 02.06.2010 в 13:14.
За это сообщение автора поблагодарили: kashperuk (5), Logger (1).
Старый 02.06.2010, 13:40   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Не в первый раз уже такое
Вот еще аналогичный пример
ConfigurationKey CreditNoteReference_W - некорректный ID

Правда там конфигурационный ключ поехал.
Так что конф. и секьюрити ключи тоже лучше проверить.
Старый 22.07.2010, 16:01   #5  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Angry Это уже даже не смешно...
Вот вышел 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 
        ));
}
Вот какой - переработанный и дополненный - список получился после запуска скрипта на приложении AX 2009 SP1 EE RU5 + SL2 ("СНГ Зарплата" и "СНГ Кадровый учет"):
Код:
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 объекта, баг, ошибка, поля, приложение, таблица

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Апгрейд существующего приложения на DAX2009 petr DAX: Администрирование 3 03.09.2008 18:54
Не сохраняются изменения при переносе с CUS слоя на USR maximka DAX: Администрирование 2 18.01.2007 13:05
Лукап, содержащий поля нескольких таблиц matew DAX: Программирование 4 30.11.2006 16:02
Экспорт таблиц и форм с указанием слоя Zepp DAX: Администрирование 8 31.10.2005 20:16
Проблема импорт Usr слоя из одной компании в другую Pavel Pustovalov DAX: Администрирование 6 12.08.2004 23:24

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

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

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