Программирование на Атлантисе (VIP, FCOM, ARD), FastReport
Модераторы: m0p3e , edward_K , Модераторы
paramaribo
Сообщения: 6 Зарегистрирован: 16 окт 2006, 13:48
Сообщение
paramaribo » 16 окт 2006, 15:17
Добрый день!
Делаю интерфейс "Ведомость наличия основных средств",
хочу вывести все основные ср-ва по выбранному матответственному лицу.
Но почему-то в отчете всегда печатается ОСы по одному и тому же МОЛу (не зависимо от того, какого МОЛа выбрал пользователь).
Подскажите, пожалуйста, почему интерфейс не учитывает выбранного МОЛа в запросе?
Код: Выделить всё
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 » 16 окт 2006, 17:12
Where ((Katmol.nrec==Katos.cmol));
А если так?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188 Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb
Сообщение
edward_K » 16 окт 2006, 17:18
мне так кажется что вообще все карточки
включая НМА
кроме того пользователь вам меняет cmol в Katos - хоть update нет - а что переменную слабо завести?
select должен выгладеть так
(( 15 == katos.tidk
and wmol == katos.cmol(noindex)
))
paramaribo
Сообщения: 6 Зарегистрирован: 16 окт 2006, 13:48
Сообщение
paramaribo » 16 окт 2006, 18:22
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 » 16 окт 2006, 19:00
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
Заслуженный деятель интернет-сообщества
Сообщения: 5188 Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb
Сообщение
edward_K » 16 окт 2006, 19:11
(( 15 == katos.tidk
and wmol == katos.cmol(noindex)
and wmol == katmol.nrec
))
paramaribo
Сообщения: 6 Зарегистрирован: 16 окт 2006, 13:48
Сообщение
paramaribo » 17 окт 2006, 09:23
Спасибо за помощь!
Теперь матответственное лицо выбирает, но у меня не получается написать правильный цикл для вывода основных средств по этому МОЛу.
Помогите пожалуйста, это мой первый опыт создания собственного интерфейса.
Вот мои варианты циклов:
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 » 17 окт 2006, 10:40
ограничения в запросе у 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 » 17 окт 2006, 11:58
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
Помогите пожалуйста, у меня уже голова кругом идет!
Кажется, что все просто, пишу как описано в документации, а все равно не работает!
dp
Местный житель
Сообщения: 216 Зарегистрирован: 29 мар 2005, 17:49
Откуда: Беларусь, Минск
Контактная информация:
Сообщение
dp » 17 окт 2006, 16:11
внешне вот так
убрать нафиг 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
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188 Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb
Сообщение
edward_K » 17 окт 2006, 20:25
FrmNaos.PutEventById(FeDoLoop, fcc_os);
нужно делать перед каждым входом в цикл
_loop Katos
{
FrmNaos.PutEventById(FeDoLoop, fcc_os);
а с febreak не нужно вообще делать.
ну эт на будующее