Показать сообщение отдельно
Старый 10.10.2012, 16:31   #3  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Если в 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;
}
где fillFields:
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;
}
В DAX2009 набор таблиц отличается. Кроме того, могут использоваться другие классы.
За это сообщение автора поблагодарили: raniel (1).