|
|
#1 |
|
Участник
|
Вытащить записи из InventSum ...
Здраствыйте ,
Никак немогу marked записи в InventSum вытащить . Я добавил в форме InventOnHandItem бутончик и хочу замеченные записи скопировать . Вот примерчик , чего я хочу сделать : Код:
void clicked()
{
TextBuffer tb;
InventSum Tabl1;
super();
if ( InventSum_ds.anyMarked() )
{
if ( box::yesNo( "Копировать записи в памаять ?", DialogButton::Ok, "Вопрос" ) )
{
tb = new TextBuffer();
tb.appendText( "InventSumRec\n");
Tabl1 = InventSum_ds.getFirst(1);
for ( Table = InventSum_ds.getFirst(1); Table ; Table = InventSum_ds.getNext() )
{
tb.appendText(int2str(Table.RecId) + "\n");
}
tb.toClipboard();
for ( Table = InventSum_ds.getFirst(1); Table ; Table = InventSum_ds.getNext() )
{
InventSum_ds.mark(0);
}
InventSum_ds.reread();
InventSum_ds.refresh();
}
}
}Спасибо заранее за помочь ! С уважением , Римантас |
|
|
|
|
#2 |
|
Участник
|
Так на форме же запрос с группировкой идет и данные из RecId просто не выбираются. В качестве идентификторов полученной записи выбирайте InventSum.ItemId и InventDim.InventLocationId - группировка идет по ним
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
|
#3 |
|
Участник
|
И замените
Код: for ( Table = InventSum_ds.getFirst(1); Table ; Table = InventSum_ds.getNext() )
{
InventSum_ds.mark(0);
}
InventSum_ds.reread();
InventSum_ds.refresh();Код: inventSum_ds.research(); |
|
|
|
|
#4 |
|
Участник
|
Могу ошибаться, но, насколько я помню, группировка идёт по всем полям аналитик, выведенных в форму. Кроме склада, это могут быть партия, серийный номер...
|
|
|
|
|
#5 |
|
Участник
|
Цитата:
Но сути это не меняет
|
|
|
|
|
#6 |
|
Участник
|
Цитата:
АндиД , вы потвердили ето , что из за запроса так просто не выдёт с getfirst() getnext() сыграть . Но тогда как можно отыскать информацию ? Вы можете подсказать как ето делаеться с замеченными записями ?Заранее спасибо ! С уважением , Римантас |
|
|
|
|
#7 |
|
Участник
|
В приведенном Вами коде не проходит условие:
for ( Table = InventSum_ds.getFirst(1); Table ; Table = InventSum_ds.getNext() ) Если, к примеру, поменять его на Table.ItemId, то записи будут перебираться. А сохранять нужно помимо кода номенклатуры и код аналитики текущей строки. А вообще, я бы сделал через Map или Set, к примеру - добавил бы edit метод первой колонкой, который сохранял бы в MAP текущую строку при установке галочки и удалял бы значения оттуда при снятии галочки. |
|
|
|
|
#8 |
|
Участник
|
Цитата:
Сообщение от kashperuk
В приведенном Вами коде не проходит условие:
for ( Table = InventSum_ds.getFirst(1); Table ; Table = InventSum_ds.getNext() ) Если, к примеру, поменять его на Table.ItemId, то записи будут перебираться. А сохранять нужно помимо кода номенклатуры и код аналитики текущей строки. А вообще, я бы сделал через Map или Set, к примеру - добавил бы edit метод первой колонкой, который сохранял бы в MAP текущую строку при установке галочки и удалял бы значения оттуда при снятии галочки. С уважением , Римантас |
|
|
|
|
#9 |
|
Участник
|
Почему не выйдет?
Подставьте в цикле вместо проверку Table.itemId, т.е. X++: for ( Table = InventSum_ds.getFirst(1); Table.itemId ; Table = InventSum_ds.getNext() )![]() Но в данном случае получается интересная ситуация - если проверять InventSum (табличную переменную на форме) - то проверка пройдет успешно. Если проверять полученную через getFirst() / GetNext() - то будет облом. Если перекрыть DisplayOption на датасоурсе - то проверка так же вернет false.
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 06.11.2006 в 16:24. |
|
|
|
|
#10 |
|
Участник
|
Цитата:
Сообщение от AndyD
Почему не выйдет?
Подставьте в цикле вместо проверку Table.itemId, т.е. X++: for ( Table = InventSum_ds.getFirst(1); Table.itemId ; Table = InventSum_ds.getNext() )![]() Но в данном случае получается интересная ситуация - если проверять InventSum (табличную переменную на форме) - то проверка пройдет успешно. Если проверять полученную через getFirst() / GetNext() - то будет облом. Если перекрыть DisplayOption на датасоурсе - то проверка так же вернет false. . Так идёт . Осталось одна мелоч - как вытащить InventDimId . Поскольку RecId несуществует , тогда стараюсь сбросить в память все нужные переменные - Код: for ( Tabl1 = InventSum_ds.getFirst(1); Tabl1.ItemId ; Tabl1 = InventSum_ds.getNext() )
{
cStr = ;
tb.appendText(Tabl1.ItemId+";"+Tabl1.InventDimId+";"+num2str(Tabl1.AvailPhysical,12,1,0,0) +"\n");
}
|
|
|
|
|
#11 |
|
Участник
|
Оно тоже не выбирается.
Кстати, не могу сейчас придумать, как достать связанную с полученной InventSum запись из InventDim
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
|
#12 |
|
Участник
|
Можно попробовать такой ход:
Изменить метод \Classes\InventDimCtrl_Frm_OnHand\modifyQuery так: (это в самом верху почти) Код: qBSSum.addSortField(fieldnum(InventSum,itemId));
qbSSum.addSelectionField(fieldNum(inventSum, InventDimId), SelectionField::Max);
criteriaClosed = qBSSum.findRange(FieldNum(InventSum,closed));(tb.appendText(Tabl1.Itemid + "\t" + tabl1.InventDimId + '\n') ![]() НО: необходимо помимо этого анализировать, какие выбраны аналитики. Так как аналитика выбиралась максимальная, то в ней могут быть заполнены не только указанные поля, а и другие, которые съелись в группировке. Получить выбранные флаги можно так element.inventDimSetupObject().parmDimParmVisibleGrid(); (вернет таблицу InventDimParm) и уже анализируя ее можем выбрать только те складские аналитики, которые действительно нужно учитывать. |
|
|
|
|
#13 |
|
Участник
|
Выбрать только нужные аналитики можно по примеру класса PriceDisc:
Код: InventDim inventDimAllActivated;
;
inventDimAllActivated.initFromInventDim(inventDim::find(Tabl1.inventDimId));
inventDimAllActivated.clearNotSelectedDim(element.inventDimSetupObject().parmDimParmVisibleGrid());![]() Надеюсь достаточно ясно изъясняюсь. ![]() P.S. 888 - прикольно. Делаю ScreenShot + AndyD - 999
Последний раз редактировалось kashperuk; 06.11.2006 в 17:31. |
|
|
|
| За это сообщение автора поблагодарили: Gustav (2). | |
|
|
#14 |
|
Участник
|
Цитата:
. Там ещё подзапрос сделал в цикле , заново отыискать :Код: invDim = Tabl1.inventDim();
select firstonly invD2
where invD2.configId == invDim.configId &&
invD2.InventLocationId == invDim.InventLocationId &&
invD2.inventSerialId == invDim.inventSerialId &&
invD2.inventBatchId == invDim.inventBatchId;
if ( invD2 )
{
cStr = Tabl1.ItemId+";"+invD2.InventDimId+";"+num2str(Tabl1.AvailPhysical,12,1,0,0);
tb.appendText(cStr+"\n");
} Спасибо ! С уважением , Римантас |
|
|
|
|
#15 |
|
Участник
|
А вы уверены, что вот эта строка
Код: invDim = Tabl1.inventDim(); И Вам не следует завязываться на InventDimId, так как его не Должно быть - в одной строке может быть собрано более одной строки с разными аналитиками!! |
|
|
|
|
#16 |
|
Участник
|
Это все понятно.
Я имел в виду - как дость запись из InventDim_ds - она же уже на клиенте и связана с InventSum.
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
|
#17 |
|
Участник
|
Цитата:
Здраствыйте ! Утро умнее вечера ... : Так вот решение есть :Код: tb = new TextBuffer();
tb.appendText( "InventSumRec\n");
Tabl1 = InventSum_ds.getFirst(1);
invDim = InventDim_ds.getFirst();
while ( Tabl1.ItemId )
{
select firstonly invD2
where invD2.configId == invDim.configId &&
invD2.InventLocationId == invDim.InventLocationId &&
invD2.inventSerialId == invDim.inventSerialId &&
invD2.inventBatchId == invDim.inventBatchId;
if ( invD2 )
{
cStr = Tabl1.ItemId+";"+invD2.InventDimId+";"+num2str(Tabl1.AvailPhysical,12,1,0,0);
tb.appendText(cStr+"\n");
}
Tabl1 = InventSum_ds.getNext();
invDim = InventDim_ds.getNext();
}
tb.toClipboard();
InventSum_ds.research();![]() С уважением , Римантас |
|
|
|
|
#18 |
|
Участник
|
Вы ошибаетесь.
invDim = InventDim_ds.getFirst(); вернет вам первую выбранную в запросе (а не отмаркированную) запись, а InventDim_ds.getNext() вернет следующую после нее и т.д. Т.е. если вы отмаркируете с первой и без разрывов, то отработает правильно. В остальных случаях - нет
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
|
#19 |
|
Участник
|
Да и зачем вам InventDimId? Одной строке из сгруппированной InventSum может соответствовать несколько строк из InventDim.
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
|
#20 |
|
Участник
|
Цитата:
Но самое интересное , то что я получаю точные данные ... И если подумать - datasources же соединнены . Так если я делаю записи marked в гриде , то они оба делаеться - и InventSum и InventDim . Углубляьтся в етот раз нету и времени и опыта - меня удовлетворяет , что данные есть точные ...Римантас |
|
|