10.10.2012, 15:48 | #1 |
Участник
|
Создать строку на основе шаблона...
Добрый день!
Стоит следующая задача. Необходимо создавать строки номенклатуры используя определённый шаблон(в системе несколько шаблонов). Наименование необходимого шаблона у меня есть. Как программно заполнить поля таблицы используя его? Заранее всем спасибо! |
|
10.10.2012, 16:01 | #2 |
----------------
|
Чтобы больше не возвращаться к этому вопросу, поставьте сразу в подпись версию системы, с которой Вы работаете.
|
|
10.10.2012, 16:31 | #3 |
Участник
|
Если в DAX4 (насколько помню в Ax3.0 было так же), то как-то так:
X++: private boolean fillInventsTable(SysRecordTemplateDescription _sysTemplateDescription) { SysRecordTmpTemplate tmpTemplateTbl; SysRecordTemplateTable sysTemplate; container recordValues; container curRecord; ItemId itemId; TableId tableId; Counter idx; ; sysTemplate = SysRecordTemplateTable::find(tableNum(InventTable)); if (!sysTemplate) { throw error("Нет шаблонов для таблицы номенклатур."); } itemId = "" ; delete_from tmpTemplateTbl; SysRecordTmpTemplate::insertContainerSimple(tmpTemplateTbl, condel(sysTemplate.Data, 1, 1)); select firstOnly tmpTemplateTbl where tmpTemplateTbl.Description == _sysTemplateDescription ; recordValues = tmpTemplateTbl.data; for (idx = 1; idx <= conLen(recordValues); idx++) { [tableId, curRecord] = conPeek(recordValues, idx); switch (tableId) { case tableNum(InventTable) : inventTable.clear(); this.fillFields(inventTable, curRecord); inventTable.ItemId = itemId; inventTable.doInsert(); break; case tableNum(InventTableModule) : inventTableModule.clear(); this.fillFields(inventTableModule, curRecord); inventTableModule.ItemId = itemId; inventTableModule.doInsert(); break; case tableNum(InventItemLocation) : inventItemLocation.clear(); this.fillFields(inventItemLocation, curRecord); inventItemLocation.ItemId = itemId; inventItemLocation.doInsert(); break; } } return true; } X++: private boolean fillFields( Common _common, container _fileds, boolean _onlyEditableOnCreateFields = false, boolean _allowDublicates = true ) { SysDictField dictField; Set excludeValidateField; container valueSet; fieldId fieldId; Counter infologLines; Counter idx; boolean doClear; ; excludeValidateField = new Set(Types::Integer); infologLines = infolog.line(); for (idx = conLen(_fileds); idx; idx--) { valueSet = conpeek(_fileds, idx); fieldId = conpeek(valueSet, 1); dictField = new SysDictField(_common.TableId, fieldId); if (dictField && (dictField.allowEditOnCreate() || !_onlyEditableOnCreateFields) && (_allowDublicates || !dictField.isUnique())) { _common.(fieldId) = conpeek(valueSet, 2); if (!excludeValidateField.in(fieldId) && !_common.validateField(fieldId)) { doClear = true; _common.(fieldId) = nullValue(conpeek(valueSet, 2)); } } } if (doClear) { infolog.clear(infologLines); } return true; } |
|
|
За это сообщение автора поблагодарили: raniel (1). |
11.10.2012, 12:41 | #4 |
Участник
|
Чем воспользовался.
Спасибо. Но на форуме нашёл подробное описание решения моей задачи.
casperkamal: Using record templates in code for Dynamics Ax 4.0. |
|