Участник
Регистрация: 09.07.2003
Адрес: там
|
ну так вот
Версия 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)? по мимо того что не происходит формирования строк журнала, информация о складской аналитике также не заносится.
Как это сделать правильно и что как использовать другие классы, - вот на эти вопросы очень бы хотелось получить советы.
Подскажите пожалуйста.
Заранее огромное спасибо
|