|
|
#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 Хороший ученик во всем найдет себе учителя... |
|
|