Страница 1 из 1
Передача параметра из интерфейса в отчет
Добавлено: 16 окт 2006, 15:17
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;
Добавлено: 16 окт 2006, 17:12
m0p3e
Where ((Katmol.nrec==Katos.cmol));
А если так?
Добавлено: 16 окт 2006, 17:18
edward_K
мне так кажется что вообще все карточки

включая НМА
кроме того пользователь вам меняет cmol в Katos - хоть update нет - а что переменную слабо завести?
select должен выгладеть так
(( 15 == katos.tidk
and wmol == katos.cmol(noindex)
))
Добавлено: 16 окт 2006, 18:22
paramaribo
m0p3e писал(а):Where ((Katmol.nrec==Katos.cmol));
А если так?
На такой код:
Код: Выделить всё
AS Select *
from
Katmol, Katos
Where
((katmol.nrec==katos.cmol));
Компилиятор пишет ошибку: Нужен ключ CMOL для KATOS (стр.13, поз.25
Добавлено: 16 окт 2006, 19:00
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.
МОЛа вообще не выбирает..
Добавлено: 16 окт 2006, 19:11
edward_K
(( 15 == katos.tidk
and wmol == katos.cmol(noindex)
and wmol == katmol.nrec
))
МОЛа выбирает, но ОСы не выводит.
Добавлено: 17 окт 2006, 09:23
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);
оба варианта не работают.
В отчете основные ср-ва не выводятся.
Добавлено: 17 окт 2006, 10:40
Goblin
ограничения в запросе у katos по индексу KATOS09 :
wmol==katmol.nrec and
15==katos.tidk and
0==katos.chigheros and
katmol.nrec==katos.cmol
потом в обработчике просто цикл прохода
_loop katos
{
<вывод всякого в форму>
}
Добавлено: 17 окт 2006, 11:58
paramaribo
Goblin писал(а):ограничения в запросе у katos по индексу KATOS09 :
....
}
Все равно не работает...
Вот мой код
Форма:
Код: Выделить всё
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
Помогите пожалуйста, у меня уже голова кругом идет!
Кажется, что все просто, пишу как описано в документации, а все равно не работает!
Добавлено: 17 окт 2006, 16:11
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]
Добавлено: 17 окт 2006, 17:03
paramaribo
Заработало!!!
Спасибо ОГРОМНОЕ!!!

Добавлено: 17 окт 2006, 20:25
edward_K
FrmNaos.PutEventById(FeDoLoop, fcc_os);
нужно делать перед каждым входом в цикл
_loop Katos
{
FrmNaos.PutEventById(FeDoLoop, fcc_os);
а с febreak не нужно вообще делать.
ну эт на будующее
