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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.11.2025, 09:22   #1  
Отшельник is offline
Отшельник
Участник
 
49 / 11 (1) +
Регистрация: 15.06.2011
Записей в блоге: 1
Непонятка с ИД полями
После модификации система начала вести себя не предсказуемо:
Не со всеми полями, но...

X++:
if (ediDocsXMLStructureLoc.TagId == "BuyerUnitOfMeasure")
            {
                tabId = _record.TableId;  //ПРАВИЛЬНОЕ как в АОТ
                fieldId = ediDocsXMLStructureLoc.SrcFieldId; //40014 ПРАВИЛЬНОЕ как в АОТ

                info(strFmt("SrcFieldId = %1 (%2)", ediDocsXMLStructureLoc.SrcFieldId, typeof(ediDocsXMLStructureLoc.SrcFieldId)));
                info(strFmt("Table: %1 (ID: %2)", tableId2Name(_record.TableId), _record.TableId));
                info(strFmt("Buffer type: %1", tableId2Name(_record.TableId)));
                dict = new DictTable(_record.TableId);

                for (i = 1; i <= dict.fieldCnt(); i++)
                {
                    fieldId = dict.fieldCnt2Id(i);
                    info(strFmt("ИД поля %3 Поле: %1, Значение: %2", dict.fieldName(fieldId), _record.(fieldId),fieldId));
                }

                fieldId = ediDocsXMLStructureLoc.SrcFieldId;
                rawVal = _record.(fieldId); //Выводит 0
                rawVal = _record.(40014); //Выводит 0

                fid = any2int(ediDocsXMLStructureLoc.SrcFieldId);
                rawVal = _record.(fid);//Выводит 0
                rawVal = _record.(ediDocsXMLStructureLoc.SrcFieldId + 0);//Выводит 0
            }
Хотя инфолог дает такую информацию:
SrcFieldId = 40014 (Integer)
Table: EDIDocDELNOTLine_KBK (ID: 40375)
Buffer type: EDIDocDELNOTLine_KBK
...
ИД поля 40014 Поле: BuyerUnitOfMeasure, Значение: рул
ИД поля 65535 Поле: TableId, Значение: 40375
...

Значит BuyerUnitOfMeasure имеет значение "рул"

Джобиком, по этой же записи показывает значение:
X++:
static void _DeleteTmp(Args _args)
{
    EDIDocDELNOTLine_KBK eDIDocDELNOTLine;
    Common     _record;
    DictTable dictTable;
    TableId tableId;
    FieldId fieldId;
    str fieldName;
    ;

    select firstOnly eDIDocDELNOTLine
        where eDIDocDELNOTLine.RecId == 5637171360;


    info(strFmt("%1",  eDIDocDELNOTLine.(40014)));

    _record = eDIDocDELNOTLine;

    info(strFmt("%1",  _record.(40014)));
    info(strFmt("%1", FieldNum(EDIDocDELNOTLine_KBK, BuyerUnitOfMeasure )));
Сообщение
рул
рул
40014

И это на некоторых полях. А некоторые сохранили свою работоспособность.




И еще одна странность появилась по этой же теме.

На настроечной таблице EDIDocsXMLStructure_KBK, есть EDIT-метод, который помогает выбирать нужное поле из таблицы EDIDocDELNOTLine_KBK.

Выбираем по наименованию поля из списка полей, а в EDIDocsXMLStructure_KBK записывается ИД этого поля. (т.е 40014)

Так вот этот EDIT-метод, работающий уже много лет, начал записывать не правильные ИД поля!

Так для поля BuyerUnitOfMeasure (40014) он записывает в EDIDocsXMLStructure_KBK ИД = 105550... Откуда ?!!

И джобик показывает, что у меня таких полей в принципе нет ни на одном слое.
X++:
static void SRA_Job284(Args _args)
{
    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         >=  100000
    {
        info( strfmt( '%1.%2 (%3) %4', tableid2name( utilElements.parentId ), utilElements.name, utilElements.utilLevel, utilElements.Id ) );
    }
}
Ладно, бывает и такая магия.
Я создал новое поле, ИД которого в АОТ 40017.
Выбираю его и в таблицу записывается ИД = 105553.
Что за счетчик такой? Откуда эти номера?

На всякий случай код EDIT-метода (который не менялся уже много лет).
X++:
edit fieldName fieldName(boolean set, fieldName name)
{
    if (set)
    {
        this.SrcFieldId = fieldname2id(this.SrcTableId, name);
    }

    return fieldid2name(this.SrcTableId, this.SrcFieldId);
}
__________________
Dynamics AX 2009 SP1, Rollup 5, SQL Server 2008
Хороший ученик во всем найдет себе учителя...
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вывод всех таблиц со всеми полями fedka DAX: Программирование 11 10.10.2012 21:38
Как в динамическом запросе использовать исловие OR между двумя полями? yooshi DAX: Программирование 12 07.08.2009 16:34
Объект Application клиента по ИД сессии на АОСе wolfstein DAX: Программирование 5 18.03.2009 14:35
Проблемы с date-полями death machine DAX: Прочие вопросы 4 13.04.2004 02:54
Диалоговое окно с Lookup полями Julietta DAX: Программирование 1 15.12.2003 13:00

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

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

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