|
![]() |
#1 |
Участник
|
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. этот код загружает данные, но не разносит журнал. Разносил я вручную, т.к. мне нравится контролировать процесс |
|
![]() |
#2 |
Участник
|
зачем велосипед изобретать.
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(); |
|