Передача параметра из интерфейса в отчет

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
paramaribo
Сообщения: 6
Зарегистрирован: 16 окт 2006, 13:48

Передача параметра из интерфейса в отчет

Сообщение paramaribo »

Добрый день!
Делаю интерфейс "Ведомость наличия основных средств",
хочу вывести все основные ср-ва по выбранному матответственному лицу.
Но почему-то в отчете всегда печатается ОСы по одному и тому же МОЛу (не зависимо от того, какого МОЛа выбрал пользователь).
Подскажите, пожалуйста, почему интерфейс не учитывает выбранного МОЛа в запросе?

Код: Выделить всё

Interface Ved_Os 'Наличие основных средств' cyan;
Show At(10,10,60,15)
Create View tOs
AS Select * 
from Katmol, Katos 
Where ((Katos.cmol==Katmol.nrec));

Parameters Katos.cmol;

Form FrmNaOs ( 'OUT\%USER%\FrmNaOS.Out' ); 
Screen scrVibor  (,,sci1Esc);
Table Katmol;
Fields

  katmol.name :noprotect,Pickbutton;
  Buttons
       cmOk;
       cmEsc;
   <<

     `МОЛ:` .@@@@@@@@@@@@@@@@@@@@@@@@@@

              <.  ок  .>       <.отмена.>
   >>

end;

 handleEvent       
   cmPick:
   {
     Case CurField Of
       #Katmol.Name:
       { 
         RunInterface(GetMol, Katos.cmol);
       };
   end;
   rescanPanel(#Katmol);
   };
   cmOk: 
   {
     FrmNaos.Write(Katmol.name);
     _loop Katos
     {
       FrmNaos.PutEventById(FeDoLoop, fcc_os);  
       FrmNaos.Write(Katos.Innum);
       FrmNaos.Write(Katos.Nameos);
       FrmNaos.PutEventById(FeBreak, fcc_os);
     };   
     FrmNaos.ShowFile;
     rescanPanel(#Katmol);
     rescanPanel(#Katos);
   };
 end;  										
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение m0p3e »

Where ((Katmol.nrec==Katos.cmol));
А если так?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

мне так кажется что вообще все карточки :) включая НМА
кроме того пользователь вам меняет cmol в Katos - хоть update нет - а что переменную слабо завести?
select должен выгладеть так
(( 15 == katos.tidk
and wmol == katos.cmol(noindex)

))
paramaribo
Сообщения: 6
Зарегистрирован: 16 окт 2006, 13:48

Сообщение paramaribo »

m0p3e писал(а):Where ((Katmol.nrec==Katos.cmol));
А если так?
На такой код:

Код: Выделить всё

AS Select *
from
 Katmol, Katos
 Where
 ((katmol.nrec==katos.cmol));
Компилиятор пишет ошибку: Нужен ключ CMOL для KATOS (стр.13, поз.25
paramaribo
Сообщения: 6
Зарегистрирован: 16 окт 2006, 13:48

Сообщение paramaribo »

edward_K писал(а):мне так кажется что вообще все карточки :) включая НМА
кроме того пользователь вам меняет cmol в Katos - хоть update нет - а что переменную слабо завести?
select должен выгладеть так
(( 15 == katos.tidk
and wmol == katos.cmol(noindex)

))
Не помогло.
Вот исправленный код:

Код: Выделить всё

Interface Ved_Os 'Наличие основных средств' cyan; 
Show At(10,10,60,15) 
Create View tOs 
Var
wmol: comp;
AS Select * 
from Katmol, Katos 
 Where
 ((
 15 == katos.tidk and 
 wmol == katos.cmol(noindex) and  
 katos.cmol==katmol.nrec));

Parameters wmol;

Form FrmNaOs ( 'OUT\%USER%\FrmNaOS.Out' ); 
Screen scrVibor  (,,sci1Esc); 
Fields 

  katmol.name :noprotect,Pickbutton; 
  Buttons 
       cmOk; 
       cmEsc; 
   << 

     `МОЛ:` .@@@@@@@@@@@@@@@@@@@@@@@@@@ 

              <.  ок  .>       <.отмена.> 
   >> 

end; 

 handleEvent        
   cmPick: 
   { 
     Case CurField Of 
       #Katmol.Name: 
       { 
         RunInterface(GetMol, wmol);
       }; 
   end; 
   rescanPanel(#Katmol); 
   }; 
   cmOk: 
   { 
     FrmNaos.Write(Katmol.name); 
     _loop Katos 
     { 
       FrmNaos.PutEventById(FeDoLoop, fcc_mol);  
       FrmNaos.Write(Katos.Innum); 
       FrmNaos.Write(Katos.Nameos); 
       FrmNaos.PutEventById(FeBreak, fcc_mol); 
     };    
     FrmNaos.ShowFile; 
     rescanPanel(#Katmol); 
     rescanPanel(#Katos); 
   }; 
 end;                               
end.
МОЛа вообще не выбирает..
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

(( 15 == katos.tidk
and wmol == katos.cmol(noindex)
and wmol == katmol.nrec
))
paramaribo
Сообщения: 6
Зарегистрирован: 16 окт 2006, 13:48

МОЛа выбирает, но ОСы не выводит.

Сообщение paramaribo »

Спасибо за помощь!
Теперь матответственное лицо выбирает, но у меня не получается написать правильный цикл для вывода основных средств по этому МОЛу.
Помогите пожалуйста, это мой первый опыт создания собственного интерфейса.
Вот мои варианты циклов:
1.

Код: Выделить всё

   
     if ( getFirst = tsOk )
     {
       FrmNaos.PutEventById(FeDoLoop, fcc_mol);  
       do
       {
         FrmNaos.Write(Katos.Innum);
         FrmNaos.Write(Katos.Nameos);
       }
       while getNext = tsOk
       FrmNaos.PutEventById(FeBreak, fcc_mol);
и
2.

Код: Выделить всё

     
     FrmNaos.PutEventById(FeDoLoop, fcc_mol);
     tOs._loop Katos
     {
       FrmNaos.Write(Katos.Innum);
       FrmNaos.Write(Katos.Nameos);
     }
     FrmNaos.PutEventById(FeBreak, fcc_mol);

оба варианта не работают.
В отчете основные ср-ва не выводятся.
Goblin
Местный житель
Сообщения: 474
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь-матушка
Контактная информация:

Сообщение Goblin »

ограничения в запросе у katos по индексу KATOS09 :
wmol==katmol.nrec and
15==katos.tidk and
0==katos.chigheros and
katmol.nrec==katos.cmol


потом в обработчике просто цикл прохода
_loop katos
{
<вывод всякого в форму>
}
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
paramaribo
Сообщения: 6
Зарегистрирован: 16 окт 2006, 13:48

Сообщение paramaribo »

Goblin писал(а):ограничения в запросе у katos по индексу KATOS09 :
....
}
Все равно не работает... :shock:
Вот мой код

Форма:

Код: Выделить всё

Interface Ved_Os 'Наличие основных средств' cyan; 
Show At(10,10,60,15) 
Create View tOs 
Var
wmol: comp;
AS Select * 
from Katmol, Katos 
 Where
 ((
 wmol==katmol.nrec and 
 15==katos.tidk and 
 0==katos.chigheros and 
 katmol.nrec==katos.cmol 
  )); 

Parameters wmol;

Form FrmNaOs ( 'OUT\%USER%\FrmNaOS.Out' ); 
Screen scrVibor  (,,sci1Esc); 
Fields 
  katmol.name :noprotect,Pickbutton; 
  Buttons 
       cmOk; 
       cmEsc; 
   << 

     `МОЛ:` .@@@@@@@@@@@@@@@@@@@@@@@@@@ 

              <.  ок  .>       <.отмена.> 
   >> 
end; 

 handleEvent        
   cmPick: 
   { 
     Case CurField Of 
       #Katmol.Name: 
       { 
         RunInterface(GetMol, wmol);
       }; 
   end; 
   rescanPanel(#Katmol); 
   }; 
   cmOk: 
   {  
     FrmNaos.Write(Katmol.name); 
     FrmNaos.PutEventById(FeDoLoop, fcc_os);
     _loop Katos
     {
       FrmNaos.Write(Katos.Innum);
       FrmNaos.Write(Katos.Nameos);
     };
     FrmNaos.PutEventById(FeBreak, fcc_os);
     FrmNaos.ShowFile; 
     rescanPanel(#Katmol); 
     rescanPanel(#Katos);         
   }; 
 end;                               
end.
Отчет

Код: Выделить всё

.set Name=FrmNaOS
.Hide
.Fields
! Dat1
! Dat2
N_Mol
Innum
Nameos
.endFields
                      Ведомость наличия основных средств         
                      
МОЛ: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

.{ChecKenter c_os   
  
   Innum                            Nameos
     ^                               @@@@@@@@@@@@@@@@

.}
.endform
Помогите пожалуйста, у меня уже голова кругом идет!
Кажется, что все просто, пишу как описано в документации, а все равно не работает!
dp
Местный житель
Сообщения: 216
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Беларусь, Минск
Контактная информация:

Сообщение dp »

внешне вот так
убрать нафиг checkenter - не нужен он тут

Код: Выделить всё

Interface Ved_Os 'Наличие основных средств' cyan; 
Show At(10,10,60,15) 

Create View  
Var 
wmol: comp; 
AS Select * 
from Katmol, Katos 
 Where 
 (( 
 wmol==katmol.nrec and 
 15==katos.tidk and 
 0==katos.chigheros and 
 katmol.nrec==katos.cmol 
  )); 

Form FrmNaOs ( 'FrmNaOS' ); 

Screen scrVibor  (,,sci1Esc); 
Fields 
  katmol.name :noprotect,Pickbutton; 
  Buttons 
       cmOk; 
       cmEsc; 
   << 

     `МОЛ:` .@@@@@@@@@@@@@@@@@@@@@@@@@@ 

              <.  ок  .>       <.отмена.> 
   >> 
end; 

 handleEvent        
   cmPick: 
   { 
     Case CurField Of 
       #Katmol.Name: 
       { 
         RunInterface(GetMol, wmol); 
       }; 
   end; 
   rescanPanel(#Katmol); 
   }; 
   cmOk: 
   {  
     FrmNaos.Write(Katmol.name); 
     _loop Katos 
     { 
       FrmNaos.Write(Katos.Innum); 
       FrmNaos.Write(Katos.Nameos); 
     }

     FrmNaos.PutEvent(FeBreak); 
     FrmNaos.ShowFile; 
     rescanPanel(#Katmol); 
     rescanPanel(#Katos);          
   }; 
 end;                                
end. 

Код: Выделить всё

.set Name=FrmNaOS 
.Fields 
N_Mol 
Innum Nameos 
.endFields 
                      Ведомость наличия основных средств          
                      
МОЛ: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 

   Innum                            Nameos 
.{  
  &&&&&&&&                     @@@@@@@@@@@@@@@@@@@@@@ 
.} 
.endform 
[/quote]
dP
paramaribo
Сообщения: 6
Зарегистрирован: 16 окт 2006, 13:48

Сообщение paramaribo »

Заработало!!!
Спасибо ОГРОМНОЕ!!! :grin:
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

FrmNaos.PutEventById(FeDoLoop, fcc_os);
нужно делать перед каждым входом в цикл
_loop Katos
{
FrmNaos.PutEventById(FeDoLoop, fcc_os);

а с febreak не нужно вообще делать.
ну эт на будующее :)
Ответить