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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.05.2012, 16:14   #1  
niksen is offline
niksen
Участник
Самостоятельные клиенты AX
 
284 / 28 (1) +++
Регистрация: 05.07.2011
Адрес: Татарстан
X++:
void TmpTableToDBTable()
{
    timeofday                   timeCounter;
    str 20                      JournalId;
    InventLocation              InventLocation;
    InventLocationId            InventLocationId;
    InventDim                   InventDim;
    InventDimId                 InventDimId;
    int                         cnt;
    InventSite                  InventSite;
    InventSiteId                SiteId;
    InventTrans                 InventTrans;
    InventTransId               InventTransId;
    ;
    updated = 0;
    created = 0;
    info(time2str(timenow(),1,1) + ' начало загрузки в рабочую БД');
    timeCounter = timenow();
    journalid = '000101_131';
    delete_from InventJournalTrans
        where InventJournalTrans.JournalId == journalId;
    //journalId = strfmt(time2str(timenow(),1,1)+'начдан');
    select firstonly InventLocation
        where InventLocation.InventLocationType == InventLocationType::Standard;
        {
         InventLocationId = InventLocation.InventLocationId;
         ///  первый попавшийся склад
        }
    select firstonly InventSite;
        {
         SiteId = InventSite.SiteId;
         /// первый попавшийся сайт
        }

    info('выбран склад');
    ttsbegin;
    while select forupdate DAXInventItem
        {
            inventDim = null;
            inventDim.InventLocationId  = InventLocationId;
            inventDim.InventSiteId = SiteId;
            inventDim = InventDim::findOrCreate(inventDim);
            DAXInventItem.inventDimId   = inventDim.inventDimId;
            DAXInventItem.update();
        }
    ttscommit;
    info('обновлена аналитика');

    ttsbegin;
    if (InventJournalTable::exist(journalId))
    {
        info('журнал найден');
    }
    else
    {
    /// создание журнала
    select forupdate firstonly InventJournalTable
        where InventJournalTable.JournalId == journalId;
        {
            ++created;
            AxInventJournalTable = AxInventJournalTable::construct();
            AxInventJournalTable.inventJournalTable(InventJournalTable);
            AxInventJournalTable.parmJournalId(journalId);
            AxInventJournalTable.parmJournalType(InventJournalType::Movement);
            AxInventJournalTable.parmPosted(NoYes::No);
            AxInventJournalTable.parmReservation(ItemReservation::None);
            AxInventJournalTable.parmSystemBlocked(NoYes::No);
            AxInventJournalTable.parmVoucherDraw(JournalVoucherDraw::Entering);
            AxInventJournalTable.parmVoucherChange(InventJournalVoucherChange::DateChange);
            AxInventJournalTable.parmDeletePostedLines(NoYes::No);
            AxInventJournalTable.parmDetailSummary(DetailSummary::Detail);
            AxInventJournalTable.parmJournalNameId('ЖурПр.');
            AxInventJournalTable.save();
            InventJournalTable = AxInventJournalTable.inventJournalTable();
            InventJournalTable.update();
        }
        info('создан журнал');
    }
    ttscommit;
    cnt = 0;
    ttsbegin;
    while select DAXInventItem
    {
      select forupdate InventJournalTrans
        where InventJournalTrans.JournalId == journalId  &&
                InventJournalTrans.ItemId == DAXInventItem.ItemId &&
                InventJournalTrans.Qty == DAXInventItem.Qty &&
                InventJournalTrans.TransDate == DAXInventItem.TransDate;
        {
            ++created;
            ++cnt;
            InventJournalTrans.initValue();
            InventJournalTrans.InventDimId= DAXInventItem.InventDimId;
            InventJournalTrans.ItemId = DAXInventItem.ItemId;
            InventJournalTrans.Qty = DAXInventItem.Qty;
            InventJournalTrans.TransDate = DAXInventItem.TransDate;
            InventJournalTrans.JournalType = InventJournalType::Movement;
            InventJournalTrans.PriceUnit = 1.00;
            InventJournalTrans.LineNum = InventJournalTrans::lastLineNum(journalId)+1;
            InventJournalTrans.CostPrice = 0.00;
            InventJournalTrans.CostAmount =0.00;
            InventJournalTrans.CostMarkup = 0.00;
            InventJournalTrans.SalesAmount = 0.00;
            InventJournalTrans.LedgerAccountIdOffset = "Корр.Счёт";
            InventJournalTrans.BOMLine = NoYes::No;
            InventJournalTrans.AssetTransType = AssetTransTypeJournal::None;
            InventJournalTrans.Voucher = '';
            InventJournalTrans.JournalId = journalId;
            InventJournalTrans.CostPrice = 0.00;
            InventJournalTrans.PriceUnit = 1.00;
            InventJournalTrans.CostMarkup = 0.00;
            InventJournalTrans.CostAmount = 0.00;
            InventJournalTrans.SalesAmount = 0.00;
            InventJournalTrans.ProjTransId = "";
            InventJournalTrans.InventTransId = int2str(00027231+cnt+1)+'_129';
            InventJournalTrans.InventTransIdFather = '';
            InventJournalTrans.InventOnHand = 0.00;
            InventJournalTrans.Counted = 0.00;
            InventJournalTrans.Dimension[1] = "";
            InventJournalTrans.Dimension[2] = "";
            InventJournalTrans.Dimension[3] = "";
            InventJournalTrans.InventTransIdReturn = "";
            InventJournalTrans.ProjCategoryId = "";
            InventJournalTrans.ProjId = "";
            InventJournalTrans.DEL_CorrectedInvoiceId = "";
            InventJournalTrans.ToInventTransId = "";
            InventJournalTrans.ReasonRefRecId = 0;
            InventJournalTrans.ToInventDimId = "";
            InventJournalTrans.ReqPOId = "";
            InventJournalTrans.EmplId = "";
            InventJournalTrans.AssetTransType = AssetTransTypeJournal::None;
            InventJournalTrans.AssetId = "";
            InventJournalTrans.AssetBookId = "";
            InventJournalTrans.ProjTaxGroupId = "";
            InventJournalTrans.ProjSalesCurrencyId = "";
            InventJournalTrans.ProjLinePropertyId = "";
            InventJournalTrans.ProjTaxItemGroupId = "";
            InventJournalTrans.ProjUnitID = "";
            InventJournalTrans.ProjSalesPrice = 0.00;
            InventJournalTrans.InventRefType = InventRefType::None;
            InventJournalTrans.InventRefId = "";
            InventJournalTrans.InventRefTransId = "";
            InventJournalTrans.ProfitSet = CostProfitSet::Standard;
            InventJournalTrans.ActivityNumber = "";
            InventJournalTrans.Storno_RU = NoYes::No;
            InventJournalTrans.ServiceTariffId_PL = "";
            InventJournalTrans.ScrapTypeId_RU = "";
            InventJournalTrans.write();
        }
    }
    ttscommit;

     info('создано записей ' + int2str(created));
     info('обновлено записей ' + int2str(updated));
     info(time2str(timenow(),1,1) + ' конец загрузки в рабочую БД');
     timeCounter = timenow()-timeCounter;
     info('времени загрузки в основную БД '+time2str(timeCounter,1,1));

}
вот примерно это получилось
используется одна временная таблица, в которой аналитика проставляется исходя из 1 сайта и склада, можете указать нужный сайт и склад, дело ваше
Косяк конечно у меня с transId, если кто подскажет, исправить, буду рад
p.s. этот код загружает данные, но не разносит журнал. Разносил я вручную, т.к. мне нравится контролировать процесс
Старый 21.05.2012, 16:31   #2  
michel1971 is offline
michel1971
Участник
 
79 / 80 (3) ++++
Регистрация: 14.01.2011
зачем велосипед изобретать.
2009 под рукой нет, есть 3.0, так вот в ней есть \Classes\TutorialJournalCreateExample и в нем метод создания журнла

X++:
TutorialJournalTable        journalTable;
    TutorialJournalTrans        journalTrans;

    TutorialJournalTableData    journalTableData  = JournalTableData::newTable(journalTable);
    TutorialJournalTransData    journalTransData  = journalTableData.JournalStatic().newJournalTransData(journalTrans,journalTableData);

    Integer                     x;
    ;

    // Init journalTable

    journalTable.journalId      = journalTableData.nextJournalId();
    journalTable.journalType    = InventJournalType::Movement;
    journalTable.journalNameId  = journalTableData.JournalStatic().standardJournalNameId(journalTable.journalType);

    journalTableData.initFromJournalName(journalTableData.JournalStatic().findJournalName(journalTable.journalNameId));

    // OR
    //
    // journalTable.initFromJournalName(TutorialJournalName::find(journalTable.journalNameId));

    // Loop lines

    for (x = 1; x <= 15; x++)
    {
        journalTrans.clear();
        journalTransData.initFromJournalTable();

        journalTrans.transDate      = systemdateGet() + x div 2;
        journalTrans.exItemId       = (select firstOnly inventTable).itemId;
        journalTrans.exCostAmount   = x;

        journalTransData.create();
    }

    journalTable.insert();
как разносить Lev Вам написал
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ввод начальных остатков по клиентам и поставщикам Akri DAX: Функционал 12 26.01.2012 10:59
ввод начальных остатков АКС DAX: Функционал 36 28.11.2011 15:04
Ввод остатков по счету 14 (резерв под снижение стоимости ТМЦ) Dolores DAX: Функционал 13 28.10.2011 15:59
Статья о новом механизме блокировок складских остатков в Ax 4.0 lev DAX: Программирование 3 01.06.2011 10:56
ввод остатков по ОС lana DAX: Функционал 1 07.04.2004 18:17

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

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

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