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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.10.2012, 15:48   #1  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Создать строку на основе шаблона...
Добрый день!
Стоит следующая задача. Необходимо создавать строки номенклатуры используя определённый шаблон(в системе несколько шаблонов). Наименование необходимого шаблона у меня есть. Как программно заполнить поля таблицы используя его?
Заранее всем спасибо!
Старый 10.10.2012, 16:01   #2  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Чтобы больше не возвращаться к этому вопросу, поставьте сразу в подпись версию системы, с которой Вы работаете.
Старый 10.10.2012, 16:31   #3  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (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).
Старый 11.10.2012, 12:41   #4  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Чем воспользовался.
Спасибо. Но на форуме нашёл подробное описание решения моей задачи.
casperkamal: Using record templates in code for Dynamics Ax 4.0.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как программно создать строку номенклатуры??? Сергей Щербак DAX: Программирование 25 02.09.2011 11:45
Контейнер в строку. В одну строку. HorrR DAX: Программирование 3 01.09.2009 14:10
Создание нескольких экземпляров Word на основе шаблона axaLearner DAX: Программирование 5 03.01.2005 16:12
"Закупка на основе заказов" или "сводное планирование" Hamster DAX: Функционал 2 17.02.2004 01:47
HELP!!! Как создать неуникальнцю метку в Axapta 3.0??? Maxim Gorbunov DAX: Программирование 3 14.04.2003 12:29

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

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

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