Показать сообщение отдельно
Старый 21.05.2012, 16:14   #13  
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. этот код загружает данные, но не разносит журнал. Разносил я вручную, т.к. мне нравится контролировать процесс