Цитата:
Сообщение от
Wamr
В стандартном функционале SessionId есть - ставится вместе с InUse
Простите - ничего конкретного . Если небыло проблемы , я здесь не писал и не просил помощи . И ето сообщение "стандартном функционале SessionId есть - ставится вместе с InUse" мне ничем не помогает .
Попробую выложит проблему продробнее . Воть какие шаги :
- спускаем журналы "Переноса" , создаём новый и переходим к его строкам ;
- спускаем запрос "В наличии" , выбираем ныжные позиции и скопируем содержимое в клипборд . Здесь есть мною сделан бутоннчик и вот его метод :
Код:
TextBuffer tb;
InventSum invSum;
Str cStr;
InventDim invDim;
super();
if ( InventSum_ds.anyMarked() )
{
if ( box::yesNo( "Копировать в память ?", DialogButton::Ok, "Вопрос" ) )
{
tb = new TextBuffer();
tb.appendText( "InventSumRec\n"); // для опознавания
invSum = InventSum_ds.getFirst(1);
while ( invSum.ItemId )
{
invDim = invSum.inventDim();
if ( invDim )
{
cStr = invSum.ItemId+"|"+invDim.InventDimId+"|"+num2str(invSum.AvailPhysical,12,3,1,0)+"|";
tb.appendText(cStr+"\n");
}
invSum = InventSum_ds.getNext();
}
tb.toClipboard();
}
}
else
{
if ( box::yesNo( "Копировать ету запись в память ?", DialogButton::Ok, "Вопрос" ) )
{
tb = new TextBuffer();
tb.appendText( "InventSumRec\n");
invSum = InventSum_ds.cursor();
invDim = invSum.inventDim();
if ( invDim )
{
cStr = invSum.ItemId+"|"+invDim.InventDimId+"|"+num2str(invSum.AvailPhysical,12,3,1,0)+"|";
tb.appendText(cStr+"\n");
}
tb.toClipboard();
}
}
- возвращаемься к строкам журнала . Здесь есть тоже свой буттончик , он спускает копирование из клипборда .
Код:
void clicked()
{
InventJournalTable invJTbl;
TextBuffer buffer;
InventJournalTrans invJTrf;
Str cStr,cStr1;
Args a = new Args();
Int journalTypeId,m;
Int curSessionId = new xSession().sessionId();
buffer = new TextBuffer();
buffer.fromClipboard();
if ( buffer.subStr(1,12) == "InventSumRec" )
{
if ( box::yesNo( "Скопировать из памяти ?", DialogButton::Ok, "Вопрос" ) )
{
invJTbl = journalFormTrans.JournalTableData().journalTable();
journalTypeId = invJTbl.journalType;
cStr1 = strfmt("%1",journalTypeId);
a.record(invJTbl);
a.parm(strfmt("%1",journalTypeId));
a.caller(journalFormTrans);
new Menufunction(menuItemActionStr(InventJournalCopyInventSum), MenuItemType::Action).run(a);
InventJournalTrans_ds.research();
}
}
}
Так вот , етот бутоннчик спускает классу InventJournalCopyInventSum . Там всё и делаеться .
Код:
static void main(Args args)
{
InventJournalTable inventJournalTable;
InventJournalTrans inventJournalTrans;
InventJournalCopyInvSum inventJournalCopy = InventJournalCopyInvSum::construct();
ContManage aInvSum;
Str UT_Param,cStr;
Str cRegc = "InventSumRec";
Int n;
TextBuffer buffer;
InventJournalFormTrans_Movement journalFormTrans;
;
buffer = new TextBuffer();
buffer.fromClipboard();
if ( buffer.subStr(1,strlen(cRegc)) == cRegc )
{
inventJournalCopy.getLast();
if ( args && args.dataset() == tablenum(InventJournalTable))
{
inventJournalTable = args.record();
inventJournalCopy.parmJournalIdFrom(inventJournalTable.JournalId);
inventJournalCopy.parmJournalNameId(inventJournalTable.JournalNameId);
journalFormTrans = args.caller();
cStr = args.parm();
UT_param = substr(cStr,1,1);
inventJournalCopy.parmUT_Parameter(UT_param);
inventJournalCopy.parmUT_journFormTrans(journalFormTrans);
inventJournalCopy.parmUT_buffer(buffer);
inventJournalCopy.parmInventLocationIdFrom(InventDim::find(InventJournalTrans::findJournalId(inventJournalTable.JournalId).InventDimId).InventLocationId);
inventJournalCopy.parmInventLocationIdTo(InventDim::find(InventJournalTrans::findJournalId(inventJournalTable.JournalId).ToInventDimId).InventLocationId);
}
if (inventJournalCopy.prompt())
{
inventJournalCopy.run();
}
}
}
Вот там , где подчеркнул в красном , есть сомнения для обьекта journalFormTrans . Обьект как и получаю , но вот почему он не дает жеалемого результата ? Как я понимаю journalFormTrans и journalTabledata обьекты владеет inventjournalTable и формой и табличкой . Если в ручную вести данные в InventJournalTransfer , то всё хорошо . Но вот если я делаю новые строки в другом классе , то потеряю связь с InventJournalTable формой и табличкой . И тогда после скопирования новых строк я должен закрыт форму строк и снова её поднять . Вот етого я хочу избежать . Варянты как и два , но незнаю как ето делаеться . 1-ый - в том же самой классе я изпсользую тот же самый переданный обьект - journalFormTrans . Метод run :
Код:
journalTableData = this.parmUT_journFormTrans().JournalTableData();
invJTbl = journalTableData.journalTable();
inventJournalTransData = journalTableData.JournalStatic().newJournalTransData(invJTrf,journalTableData);
... вставим/проверяем новые записи ( здесь всё хорошо ) ...
if ( lNew ) // если действительно сделал новых записей
{
if ( !journalTabledata.journalTable().SessionId )
{
journalTableData.updateBlock(JournalBlockLevel::InUse,JournalBlockLevel::InUse,true);
}
}
Или 2-ой варянт - в форме InventJournalTransfer сделать порверку есть ли новых записей или нет после вызова классы копирования :
Код:
new Menufunction(menuItemActionStr(InventJournalCopyInventSum), MenuItemType::Action).run(a);
InventJournalTrans_ds.research();
...
if ( lNew )
{
вот здесь обновлять journalFormTrans и journalTableData . Только незнаю как ... :(
}
Буду благодарен за помочь , а то зациклилця я здесь и никак немогу решить ету проблему ...
С уважением , Римантас