Всем доброго времени суток! У меня такая проблемка: в коде создаю логические таблицы, всё компилирует нормально однако вычисления(некоторые значения) вообще непонятно откуда берутся. Есть подозрения, что в программке в этим таблицам вообще не обращаются. Пробовал найти синтаксис как в Vipe правильно создать лок. табл. однако ничего толкового не нашел.
#component"L_BaseDoc"
alter interface VSCHET;
var
...
Create view massa
from katsopr, spsopr, katmc
where
(( org_nrec == KatSopr.corg
and data <<= katsopr.dsopr
and word (201) == KatSopr.VidSopr (NoIndex)
and katsopr.nrec == spsopr.csopr
and spsopr.nrec == sporder.cspsopr
and sporder.CMC == katmc.nrec
));
Create view Org_attr
from katorg,synonym attrnam attrnamD,synonym attrval attrvalD,synonym attrnam attrnamK,synonym attrval attrvalK,synonym attrnam attrnamM,synonym attrval attrvalM
where
((
org_nrec == katorg.nrec and
word(1418) == attrnamK.wtable and
'Сальдо исходящее(кредит)' == attrnamK.name and
word(1418) == attrvalK.wtable and
katorg.nrec == attrvalK.crec and
attrnamK.nrec == attrvalK.cattrnam and
word(1418) == attrnamD.wtable and
'Сальдо исходящее(дебет)' == attrnamD.name and
word(1418) == attrvalD.wtable and
katorg.nrec == attrvalD.crec and
attrnamD.nrec == attrvalD.cattrnam and
word(1418) == attrnamM.wtable and
'Отгрузка за период' == attrnamM.name and
word(1418) == attrvalM.wtable and
katorg.nrec == attrvalM.crec and
attrnamM.nrec == attrvalM.cattrnam
));
Create view Saldo from SALDMOUN
where
((
'562' == SALDMOUN.SCHETO and
OP == SALDMOUN.DATESAL and
org_nrec == SALDMOUN.KAUOS[1](noindex)
));
Create view obormot from oborot
where
((
OP <<= oborot.DATob and
'562' == oborot.SCHETO and
org_nrec == oborot.KAUOS[1](noindex)
));
Create view obormotka from oborot
where
((
OP <<= oborot.DATob and
'562' == oborot.SCHETK and
org_nrec == oborot.KAUKS[1](noindex)
));
window wvschet;
handleevent
...
посмотрите пожалуйста может я что-нибудь неправильно написал, слово пропустил или вообще конструкция не такая...
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
1. Вы совершено забываете о необходимости правильно спозиционироваться на нужную запись - в вашем куске этого не видно.
2. Ко всем полям логических таблиц(включая var ), кроме первой обязательно нужно обращаться с указанием имени этой таблицы (да и в операторе позиционирования _loop getfirst и так далее тоже) - massa.katsopr.nrec , massa.getfirst katsopr, иначе вы обращаетесь к полям таблиц из главной логической таблицы фейса.
3.Всегда смотрите лог компиляции - если у вас будут сообщения что такая то таблица добавлена не в ту логическую таблицу(а будет добавляться в первую), значит вы не так к ней обратились.
edward_K писал(а):1. Вы совершено забываете о необходимости правильно спозиционироваться на нужную запись - в вашем куске этого не видно.
2. Ко всем полям логических таблиц(включая var ), кроме первой обязательно нужно обращаться с указанием имени этой таблицы (да и в операторе позиционирования _loop getfirst и так далее тоже) - massa.katsopr.nrec , massa.getfirst katsopr, иначе вы обращаетесь к полям таблиц из главной логической таблицы фейса.
3.Всегда смотрите лог компиляции - если у вас будут сообщения что такая то таблица добавлена не в ту логическую таблицу(а будет добавляться в первую), значит вы не так к ней обратились.
и где именно у вас не то вывелось? Какое поле? Научитесь писать свои проблемы точнее, иначе вам не помочь. Надо писать четко строка такая то, поле такое ждал то то, получил то. Не надо писать общих фраз что у вас там чего то не получается. Не пробовали посмотреть что же у вас в полях выводиться? И попадаете ли вы в цикл вообще? что у вас в полях org_nrec , OP? Вставьте вывод этих полей перед циклом и внутри цикла(message или Logstrtofile) - выдает, то что хотите?
Есть ли у вас например debet:=0? Вы можете уже сделать докомпиляцию в 20 строк, а не приводить отрывочные куски, из которых все равно не ясно где ваша ошибка ? 50% информации это где то около 0% от требуемой для понимания вашей ошибки.
edward_K писал(а):и где именно у вас не то вывелось? Какое поле? Научитесь писать свои проблемы точнее, иначе вам не помочь. Надо писать четко строка такая то, поле такое ждал то то, получил то. Не надо писать общих фраз что у вас там чего то не получается. Не пробовали посмотреть что же у вас в полях выводиться? И попадаете ли вы в цикл вообще? что у вас в полях org_nrec , OP? Вставьте вывод этих полей перед циклом и внутри цикла(message или Logstrtofile) - выдает, то что хотите?
Есть ли у вас например debet:=0? Вы можете уже сделать докомпиляцию в 20 строк, а не приводить отрывочные куски, из которых все равно не ясно где ваша ошибка ? 50% информации это где то около 0% от требуемой для понимания вашей ошибки.
необходимо кнопке задать определённую функцию. вот создаю логическую таблицу:
...
Create view kor
from BASEDOC, spstep,STEPDOC, katmc, katotped, statdoc
where
((
Step == spstep.nrec and
spstep.CSTEPDOC == STEPDOC.nrec and
STEPDOC.CBASEDOC == BASEDOC.nrec and
spstep.CMCUSL == katmc.nrec and
katmc.nrec == katotped.cmcusl
));
...
затем пробую обратиться к ней, вывести сообщение с названием:
cmbut1:
{
Step:=SpStep.Nrec // а чего вы хотели - это главная логич. таблицв
kor._loop spstep // или if kor.getfirst spstep=0
kor._loop katmc
{
message(kor.katmc.name);
}
Вообще по возможности переменные для фильтрации нужно объявлять в самой логической таблице и обращаться к ним уже как kor.Step.
cmbut1:
{
Step:=SpStep.Nrec // а чего вы хотели - это главная логич. таблицв
kor._loop spstep // или if kor.getfirst spstep=0
kor._loop katmc
{
message(kor.katmc.name);
}
Вообще по возможности переменные для фильтрации нужно объявлять в самой логической таблице и обращаться к ним уже как kor.Step.
спасибо я примерно так и сделал. только использовал viewtable/
Всё вроде работает, однако сообщение выводит только 1-й пункт в списке наименований(а их 3). необходимо задать цикл, чтобы сообщения последовательно выводили данные по всем пунктам.
попробовал изменить лок.табл.
Create view kor from BASEDOC, stepdoc, katmc, katotped, spstep
where
((
b == Basedoc.nrec
STEPDOC.CBASEDOC == basedoc.nrec and
spstep.CSTEPDOC == STEPDOC.nrec and
spstep.CMCUSL == katmc.nrec and
katmc.nrec == katotped.cmcusl
));
показало что перебираются все записи таблицы BaseDoc(в данном случае 30000). Можно ли как нибудь сделать чтобы выводились только необходимые 3 сообщения? а не 30тыс раз каждое???
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
ну надо еще понимать где с какой стороны задавать условия. в (( )) условия задаются слева, поля таблицы справа - у вас spstep получился без фильтров
и наверняка было предупреждение о повторном ограничении по basedoc.nrec
Надо так
b == Basedoc.nrec and
basedoc.nrec == STEPDOC.CBASEDOC and
STEPDOC.nrec == spstep.CSTEPDOC and
spstep.CMCUSL == katmc.nrec and
katmc.nrec == katotped.cmcusl
edward_K писал(а):ну надо еще понимать где с какой стороны задавать условия. в (( )) условия задаются слева, поля таблицы справа - у вас spstep получился без фильтров
и наверняка было предупреждение о повторном ограничении по basedoc.nrec
Надо так
b == Basedoc.nrec and
basedoc.nrec == STEPDOC.CBASEDOC and
STEPDOC.nrec == spstep.CSTEPDOC and
spstep.CMCUSL == katmc.nrec and
katmc.nrec == katotped.cmcusl
Спасибо теперь стало по меньше сообщений выскакивать(7). однако информация показана только по выбранной продукции т.е.
если в наименованиях выбрана Эмаль то при нажатии на кнопку подряд идёт 7 сообщений по эмали(и только), если выбрана пена то 7 сообщений по пене. а хотелось бы чтобы по одному сообщению на каждый товар. и не зависело какая продукция выбрана, выводилось сообщение по каждой продукции
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
Я не люблю viewtable. Для того, чтобы вывелось вы должны написать
Create view kor as select katmc.name from
других полей этого тоже касается. Можно написать * - но это падение быстродействия.
попробуйте перед сообщением поставить
edward_K писал(а):Я не люблю viewtable. Для того, чтобы вывелось вы должны написать
Create view kor as select katmc.name from
других полей этого тоже касается. Можно написать * - но это падение быстродействия.
попробуйте перед сообщением поставить
...
Create view kor as select * from synonym stepdoc stepdoc1, synonym spstep spstep1, basedoc, katmc, katotped
where
((
b == basedoc.nrec and
basedoc.nrec == STEPDOC1.CBASEDOC and
STEPDOC1.nrec == spstep1.CSTEPDOC and
spstep1.CMCUSL == katmc.nrec and
katmc.nrec == katotped.cmcusl
));
...
Логику нужно слегка понимать - кто же сканирует сначала по дочерним таблицам, а потом по родителям? конечно зациклит
так правильнее
kor._loop Basedoc
kor._loop stepdoc1
kor._loop spstep1
kor._loop katmc
kor._loop katotped
edward_K писал(а):Логику нужно слегка понимать - кто же сканирует сначала по дочерним таблицам, а потом по родителям? конечно зациклит
так правильнее
kor._loop Basedoc
kor._loop stepdoc1
kor._loop spstep1
kor._loop katmc
kor._loop katotped
спасибо за помощь. Всё работает, на данный момент, хорошо. проблема заключалась в строчке