AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.12.2006, 16:03   #1  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Табличка InventJournalTable ...
Здраствыйте ,

С самой табличкой InentJournalTable всё хорошо . Дело в том что немогу сделать изменения связанные с InventJournalTrans . Я сделал для InventJournalTrans таблички и в форме InventJournalTransfer копирование от InventSum . Всё хорошо работает . Но вот когда от InventJournalTable переходим к строкам InventJournalTrans и пока здесь пусто , то в табличке InventJournalTable нету данных SessionId . Так вот - копирую несколько строк , обновляю InventJournalTrans_ds и задаю проверит данные . Я получаю известие , что "журнал такой не неиспользуеться" . После проверки ясно - нету SessionId . Когда я закрываю форму InventJournalTransfer и повторно поднимаю ету форму - тогда всё хорошо . Я хочу отказаться от етого повторного поднимания формы InventJournalTransfer .

Всем етим владеет два класса - InventJournalFormTrans_Movement с наследствием от JournalFormTrans и JournalTableData . Кажеться что было бы достаточно JournalTableData - updateBlock() метод . Но он не дает желаемых результатов - он задает SesionId , но снимает InUse .

Если я не очень ясно выложил свою проблему - простите ... . Буду благодарен за всякую помочь

С уважением , Римантас
Старый 08.12.2006, 13:56   #2  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Цитата:
переходим к строкам InventJournalTrans и пока здесь пусто , то в табличке InventJournalTable нету данных SessionId
В стандартном функционале SessionId есть - ставится вместе с InUse
Старый 11.12.2006, 10:00   #3  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от 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 . Только незнаю как ... :( 
         }
Буду благодарен за помочь , а то зациклилця я здесь и никак немогу решить ету проблему ...

С уважением , Римантас
Старый 11.12.2006, 10:37   #4  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Тфу .... А бывает так - писал писал письмо и стукнуло по голове . Так вот проблема решилась совсем простейшим способом . После вызова классы копирования , просто проверил ешё раз новые записи в форме InvetJournalTransfer :

Код:
void clicked()
{
   InventJournalTable  invJTbl;
   TextBuffer          buffer;
   InventJournalTrans  invJTrf;
   Str                 cStr,cStr1;
   Args                a = new Args();
   Int                 journalTypeId;
   Real                n,z;

   buffer = new TextBuffer();
   buffer.fromClipboard();
   if ( buffer.subStr(1,12) == "InventSumRec" )
   {
      if ( box::yesNo( "Iklijuoti is atminties ?", DialogButton::Ok, "Klausimas" ) )
      {
         invJTbl       = journalFormTrans.JournalTableData().journalTable();
         journalTypeId = invJTbl.journalType;
         cStr1         = strfmt("%1",journalTypeId);

         z = InventJournalTrans::lastLineNum(invJTbl.JournalId); // сколько запицей перед копированием ;

         a.record(invJTbl);
         a.parm(strfmt("%1",journalTypeId));
         a.caller(journalFormTrans);

         new Menufunction(menuItemActionStr(InventJournalCopyInventSum), MenuItemType::Action).run(a);  // класса копирования 

         n = InventJournalTrans::lastLineNum(invJTbl.JournalId); // 
         if ( n > z ) // есть ли новых записей 
         {
            while select inventJournalTrans where inventJournalTrans.JournalId == invJTbl.JournalId
            {
               if ( inventJournalTrans.LineNum > z )
                  inventJournalTrans.validateWrite();
            }
            invJTbl.NumOfLines = round(n,0);
            InventJournalTrans_ds.research();
         }
      }
   }
}
Работает всё хорошо ... Простите если я занял много времени с своими размышлениями ...

С ыважением , Римантас
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ставится лишний фильтр при переходе к таблице InventJournalTable Owl83 DAX: Программирование 5 17.04.2007 05:32
Добавление поля в InventJournalTable polygris DAX: Программирование 2 16.09.2006 14:50
InventJournaltable SomeBodyElse DAX: Программирование 4 04.05.2006 16:06
Темповая табличка на гриде DenNik DAX: Программирование 8 07.10.2005 11:57
Новичек: Временная табличка или.... evs DAX: Программирование 13 11.10.2004 12:19

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 09:22.