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. этот код загружает данные, но не разносит журнал. Разносил я вручную, т.к. мне нравится контролировать процесс