|
![]() |
#1 |
Участник
|
ну так вот
Версия Axapt'ы - 2.5 теперь про разноски Сначала приведу листинги методов Допустим исходная информация хранится в некоторой таблице а ЕЕ необходимо поместить в соответствующие поля табличек, участвующих в формировании складского журнала и разнести полученные журналы. (разнести - предполагает выполнение таких же дейстий как и при нажатии на кноку разнести на соответствующих кнопках при ручном формировании строк журнала) // назначение этого метода лежит в формировании строк исходной таблицы а, он работает и поэтому останавливаться на нем нет никакого смысла void zagruzkaAll() { OdbcConnection C; Statement S; ResultSet R; a TableA; LoginProperty LP = new LoginProperty(); ; LP.setDSN("a"); C = new OdbcConnection(LP); S = C.createStatement(); R = S.executeQuery ('SELECT * FROM b'); while (R.next()) { TableA.inventJournalId = R.getString(1); TableA.inventLineId = R.getString(2); TableA.weight = R.getReal(3); TableA.date_ = R.getDate(4); // TableA.time = R.getInt(5); TableA.vesId = R.getInt(6); TableA.inventLocationIssue = R.getString(7); TableA.wmsLocationIssue = R.getString(8); TableA.inventLocationReceipt = R.getString(9); TableA.wmsLocationReceipt = R.getString(10); TableA.wmsPalletId = R.getString(11); TableA.MOLIssue = R.getString(12); TableA.MOLReceipt = R.getString(13); TableA.controllerId = R.getString(14); TableA.passwordId = R.getString(15); TableA.inventBatchId = R.getString(16); TableA.prodDate = R.getDate(17); TableA.godnost = R.getDate(19); TableA.inventGTDID_RU = R.getString(20); TableA.posted = R.getBoolean(21); TableA.insert(); } } // основное назначение этого метода - формирование по каждой строке исходной таблицы соответстующих строк складского журнала void raznoska() { a TableA; ; while select forUpdate TableA where TableA.posted == 0 { this.createJournalLine( TableA.inventJournalId, TableA.inventLineId, TableA.weight, TableA.date_, TableA.time, TableA.vesId, TableA.inventLocationIssue, TableA.wmsLocationIssue, TableA.inventLocationReceipt, TableA.wmsLocationReceipt, TableA.wmsPalletId, TableA.MOLIssue, TableA.MOLReceipt, TableA.controllerId, TableA.passwordId, TableA.inventBatchId, TableA.prodDate, TableA.prodTime, TableA.godnost, TableA.inventGTDID_RU); TableA.posted = 1; TableA.update(); } } // в этом методе иедт непосредственное формирование строки сладского журнала boolean createJournalLine(InventJournalId inventJournalId, str 20 inventLineId, Weight weight, JournalTransDate _date, JournalTransTime time, VesId vesId, InventLocationId inventLocationIssue, wmsLocationId wmsLocationIssue, InventLocationId inventLocationReceipt, wmsLocationId wmsLocationReceipt, wmsPalletId wmsPalletId,EmplId MOLIssue, EmplId MOLReceipt, EmplId controllerId, str passwordId, InventBatchId inventBatchId, SchedToDate ProdDate, SchedToTime ProdTime, godnostDate godnost, inventGTDId_RU inventGTDId_RU) { InventJournalTrans journalLine; InventDim _inventDim; InventDim inventDimIssue; InventDim inventDimReceipt; InventMovement _movement; InventJournalCheckPost journalCheckPost; ; inventJournalTable = InventJournalTable::find(inventJournalId); // здесь на основании исходных данных таблицы а ищется необходимый журнал, если он не найден, тогда от создается новым, как формируется его inventJournalId - не принципиально, главное, что это работает и ошибки здесь нет if(!inventJournalTable) { this.createJournalTable(inventJournalId); inventJournalTable = InventJournalTable::find(inventJournalId); } journalLine.initFromInventJournalTable(inventJournalTable); journalLine.journalType= InventJournalType::Transfer; _movement = InventMovement::construct(journalLine); // ниже производится заполнение полей строки журнала, за учета этой информации в таблицу InventJournalTrans добавлены некоторые поля journalLine.ItemId = inventLineId; journalLine.Qty = weight; journalLine.date_ = _date; journalLine.time_ = time; journalLine.vesId = vesId; journalLine.ProdDate = ProdDate; journalLine.ProdTime = ProdTIme; journalLine.godnost = godnost; //----------------------------------------------------------------------------------- // что делается этой строкой - до конца непонятно и очень хотелось бы знать вообще нужна она или нет InventMovement::setAutoReserving(journalLine); // далее для каждойсроки журнала ищутся или заводятся строки складской аналитики, для заноса информации о складе journalLine.inventDimId = InventDim::findOrCreate(inventDimIssue).inventDimId; journalLine.toInventDimId = InventDim::findOrCreate(inventDimReceipt).inventDimId; journalLine.initValue(); journalLine.write(); inventDimIssue.InventLocationId = 'Zakup';//inventLocationIssue; // для примера вводится название склада, которое в конечном счете почему то не отображается на форме - тоже еще один интересный вопрос // inventDimIssue.inventDimId = journalLine.InventDimId; inventDimIssue.write(); if (journalLine.inventDimId != inventDimIssue.inventDimId) { inventDimIssue.data(InventDim::find(journalLine.inventDimId)); inventDimIssue.write(); } if (journalLine.toInventDimId != inventDimReceipt.inventDimId) { inventDimReceipt.data(InventDim::find(journalLine.toInventDimId)); inventDimReceipt.write(); } inventDimIssue.update(); inventDimReceipt.update(true); // здесь поисходит вызов метода, который и осуществляет разноску this.sendToRaznoska(); return true; } // данный метод разносит сформированную строку, он работает нормально - это подтверждают проведенные тесты этого метода - если сформировать в ручную строку, а потом вызвать данный метод, то он нормально все разнесет, но если это попытаться сделать автоматически, то разноски не произойдет даже в том злучае, если это сделать вручную void sendToRaznoska() { InventJournalCheckPost journalCheckPost; ; journalCheckPost = InventJournalCheckPost::construct(); journalCheckPost.getLast(); journalCheckPost.parmPost(NoYes::Yes); //yes journalCheckPost.parmJournalNum(inventJournalTable.JournalId); //journalId journalCheckPost.parmVoucher(''); //'' journalCheckPost.parmComplete(NoYes::Yes); //yes journalCheckPost.parmJournalCheckPostType(JournalCheckPostType::Post); journalCheckPost.parmJournalCheckPostDialog(JournalCheckPostDialog::Invent); journalCheckPost.run(); journalCheckPost.jobStatistics(); } Таким образом можно подвести итог: разноска производится автоматически правильно сформированного журнала (т.е. строк сформированных не этим классом), при формировании строки журнала не выполняются какие-то действия, который по всему видимому должны выполняться внешними классами (предположительно классом InventMovement)? по мимо того что не происходит формирования строк журнала, информация о складской аналитике также не заносится. Как это сделать правильно и что как использовать другие классы, - вот на эти вопросы очень бы хотелось получить советы. Подскажите пожалуйста. Заранее огромное спасибо |
|