Программирование на Атлантисе (VIP, FCOM, ARD), FastReport
Модераторы: m0p3e , edward_K , Модераторы
Pasynkova
Посетитель
Сообщения: 40 Зарегистрирован: 29 окт 2008, 13:00
Сообщение
Pasynkova » 17 дек 2008, 21:27
Здравствуйте!
Подскажите пожалуйста как из договоров можно вычесть платежки???
Нужно вычислить остатки платежа по договору.
использую такие таблицы:
Код: Выделить всё
Dogovor.cBaseDoc==BaseDoc.nrec and
BaseDoc.cStepdoc==Stepdoc.nrec and
Stepdoc.cPlPor == PlPor.nrec
В синтаксисе могла ошибиться (писала по памяти
), но использую эти таблицы и не получается
Алексей
Местный житель
Сообщения: 2898 Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область
Сообщение
Алексей » 18 дек 2008, 07:05
не получится.
попробуйте basedoc связать с basefin
а из basefin уже в платежку. только не помню на память напрямую, или через хоз.операцию делается.
galover
Местный житель
Сообщения: 794 Зарегистрирован: 16 ноя 2007, 13:52
Сообщение
galover » 18 дек 2008, 10:53
Pasynkova
Код: Выделить всё
private function GetSumPlatByDogovor(dogNRec : comp) : double;
{
result := 0;
_loop BaseFin where ((dogNRec == BaseFin.CDogovor))
{
if (getFirst fastfirstrow PlPor where ((BaseFin.CPlPor == PlPor.NRec)) = tsOk)
{
if (PlPor.DatOb <> Date(0,0,0)) // Была фактическая оплата
result += PlPor.SumPlat
}
}
}
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188 Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb
Сообщение
edward_K » 18 дек 2008, 11:10
я бы в этой функции сумму брал из basefin поскольку в общем случае платеж может пройти по нескольким до/договорам. При этом вы получите задваивание суммы.
Алексей
Местный житель
Сообщения: 2898 Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область
Сообщение
Алексей » 18 дек 2008, 11:16
edward_K +1 стопудов получат! и потом долго будут искать "почему расходится"
galover
Местный житель
Сообщения: 794 Зарегистрирован: 16 ноя 2007, 13:52
Сообщение
galover » 18 дек 2008, 13:54
edward_K
да ошибся, тогда:
Код: Выделить всё
private function GetSumPlatByDogovor(dogNRec : comp) : double;
{
result := 0;
_loop BaseFin where ((dogNRec == BaseFin.CDogovor))
{
if (BaseFin.CPlPor->DatOb <> Date(0,0,0)) // Была фактическая оплата
result += BaseFin.Summa;
}
}
Pasynkova
Посетитель
Сообщения: 40 Зарегистрирован: 29 окт 2008, 13:00
Сообщение
Pasynkova » 30 дек 2008, 10:15
Нужно еще брать платежи по приложениям к договору, для этого по BaseFin нужно использовать ключь CDOGOVOR; CAPPDOGOVOR; CCALPLAN
Код: Выделить всё
_loop BaseFin where ((
Dogovor.cdogovor == BaseFin.CDogovor and
Dogovor.NRec == BaseFin.CAppDogovor and
CalPlan.nrec == BaseFin.CCalPlan
))
Складывается впечатление что он вообще BaseFin не заходит...
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188 Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb
Сообщение
edward_K » 31 дек 2008, 10:31
то ято вы написаои приемлмсо только для соглашений. Да и план может стоять товарный или финансовый.