Страница 1 из 1

Как из katdoc узнать имя таблицы откуда документ

Добавлено: 07 дек 2007, 13:23
kdm
Может есть какая-нибудь функция, которая по типу документа из katdoc определяет имя таблицы. Например, Бухгалтерская справка, тип = 10, а из какой таблицы берется не понятно (я знаю что из plpor), но как это явно или не явно выяснить? :-(

Добавлено: 10 дек 2007, 11:12
k_vit
А что вы хотите сделать?


Если вопрос касается бухгалтерского контура, то там не так уж много таблиц, ссылающихся на KatDoc : BaseDoc, KatSopr, PlPor и проводки Oborot

Добавлено: 10 дек 2007, 14:25
kdm
пишу форму, там такой view:
.create view dt20 as select * from groupusl,oborot,katsopr, dogovor, katorg
where (('220' == oborot.scheto
and d1 <<= oborot.datob
and d2 >>= oborot.datob
and oborot.kauos[2] == groupusl.nrec
and oborot.csoprdoc == katsopr.nrec
and katsopr.cdogovor == dogovor.nrec
and katsopr.corg == katorg.nrec))
и оказалось, что oborot.csoprdoc не всегда ссылка на katsopr, может на plpor ссылаться, а может еще куда-нибудь. И для каждой т-цы отдельный view писать не хочется. Вот и думаю как это реализавать с помощью oborot.tidk и таблицы katdoc.

Добавлено: 10 дек 2007, 15:43
k_vit
А зачем делать несколько логических таблиц : можно написать свою функцию в которой воспользоваться case'ом по типам документов.

В интерфейсеOborot именно так это и реализовано (редактирование первичного документа)

Добавлено: 10 дек 2007, 16:04
kdm
Теоретически понятно. А практически как это сделать?

Добавлено: 10 дек 2007, 17:01
k_vit
cgDoc_0001 = 1;
....
cgDoc_0017 = 17;

.function GetSoprDoc(Tidk : word; cSopr : comp) : string; // результат в зависимости что вам нужно
begin
GetSoprDoc := '';
case Tidk of
cgDoc_0001..cgDoc_0011, cgDoc_0017, cgDoc_0018, cgDoc_0021, cgDoc_0022,
cgDoc_0027, cgDoc_0030..cgDoc_0033, cgDoc_0037..cgDoc_0039, cgDoc_0044,
cgDoc_1004, cgDoc_1005, cgDoc_1011, cgDoc_1030, cgDoc_1032, cgDoc_1044 : {
if dt20.GetFirst PlPor where((cSopr == PlPor.nRec)) = tsOk then
GetSoprDoc := dt20.PlPor.NODOK;
}
cgDoc_0111,cgDoc_0211 : {
if dt20.GetFirst KatSopr where((cSopr == KatSopr.nRec)) = tsOk then
GetSoprDoc := dt20.KatSopr.NSopr;
}
//....
//и т.д.......

end;
end.

Добавлено: 10 дек 2007, 17:06
kdm
Спасибо. Буду эксперементировать. :-)

Добавлено: 11 дек 2007, 04:43
Алексей
я вообще тупо цеплял к oborot.csoprdoc сразу несколько таблиц, и уже далее, в программе анализирую что надо - выбирал нужную.
....
and oborot.csoprdoc == katsopr.nrec
and oborot.csoprdoc == plpor.nrec
и т.д.
....