Re: Расчет задолженности по контрагенту

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
rozum
Посетитель
Сообщения: 49
Зарегистрирован: 18 янв 2013, 13:23

Re: Расчет задолженности по контрагенту

Сообщение rozum »

Всем доброго вечера! Помогите пожалуйста реализовать функцию расчета задолженности по контрагенту. в обход документов. Искала по принципу формирования аналитического учета по 62 счету. Контрагент-Задолженность( либо 0- нет задолженности) :oops:
Пробовала подцепить по SALDMOUN.KAUOS[1] но видимо что то не доганяю
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Re: Расчет задолженности по контрагенту

Сообщение Masygreen »

вы определитесь что вы хотите получить ...
Задолженность в каких разрезах и откуда 1) оперативный учет, 2)бухгалтерский...
Время ведет!
Irina_
Местный житель
Сообщения: 546
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

Re: Расчет задолженности по контрагенту

Сообщение Irina_ »

Здравствуйте.
Если Вы хотите отталкиваться от инфо на счете бухучета, то это задолженность по бухгалтерии. Она бывает дебиторской и кредиторской. А еще общей и просроченной.
Может отличаться от разреза, в котором Вы хотите ее рассчитать: задолженность в разрезе субсчетов и задолженность в разрезе договоров (если на счете ведется аналитика по договорам). В зависимости от разреза по одному и тому же контрагенту она может отличаться! Поэтому и важно сразу определиться с разрезом.
В таблице SALDOMOUN хранится инфо по остаткам на начало каждого месяца. А Вам может понадобиться расчет задолженности на любую дату. Можно поступить 2 способами:
1. Брать сальдо на начало нужного месяца и обороты по нужному разрезу с начала месяца до нужной даты, вывести на их основе сальдо на нужную дату.
2. Воспользоваться Calc_NewSaldo для расчета задолженности на нужную дату. На форуме не раз писалось об использовании. Поищите.

На мой взгляд лучше воспользоваться 2 способом. Хотя сразу задолженность Вы не получите, а получите таблицу, наполнение которой будет зависеть от параметров, которые Вы передадите в Calc_NewSaldo. С таблицей еще придется поработать дополнительно.
Так что расчет задолженности не быстрый и не всегда простой.
rozum
Посетитель
Сообщения: 49
Зарегистрирован: 18 янв 2013, 13:23

Re: Расчет задолженности по контрагенту

Сообщение rozum »

мне надо по бухгалтерскому учету бежать.
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Расчет задолженности по контрагенту

Сообщение Den »

Calc_NewSaldo, упомянутая выше, "бежит" по бухгалтерскому учету.
rozum
Посетитель
Сообщения: 49
Зарегистрирован: 18 янв 2013, 13:23

Re: Расчет задолженности по контрагенту

Сообщение rozum »

спасибо за подсказку буду пробовать
rozum
Посетитель
Сообщения: 49
Зарегистрирован: 18 янв 2013, 13:23

Re: Расчет задолженности по контрагенту

Сообщение rozum »

Всем доброго дня! Подскажите, что я неправильно делаю. Нашла один vih там вроде функция подходит мне, но как её применить туплю...
ObjInterface CalcDolgBD;
Function GetAllSumOtgrDO(dEndDateCalc: date; var SumOtgDO : double; var SumDolgOnlyOtgrDO : double):double;
end;
пытаюсь её вызвать
_loop KatOrg where (( '' << katorg.kbk (NoIndex) ))
{
bDolg := FALSE;

iDolgBD.GetAllSumOtgrDO(d3, SumOtgDO, SumDolgOnlyOtgrDO);

_loop BaseDoc where ((word(201) == BaseDoc.VidDoc and KatOrg1.nRec == BaseDoc.cOrg and d2 >>= basedoc.ddoc))
{
if SumDolgOnlyOtgrDO>0
{
bDOlg := TRUE;
break;
}

if SumDolgOnlyOtgrDO<=0
{
bDolg := FALSE;
katorg.ogrn:= katorg.kbk;
}
}
update current KatOrg;
}
выдает ошибку " возникло необработанное исключение ExObjIfcNoInit(ExRef) ссылка не была инициализирована
коммент ставлю на строке iDolgBD.GetAllSumOtgrDO(d3, SumOtgDO, SumDolgOnlyOtgrDO);
исключение пропадает
мне просто нужно в этой функции установить дату например 01/08/2017 потом пробежать по контрагентам и выяснить есть ли у них долги по документам или нету, единственное что исключить из обработки предыдущие документы от текущего месяца( в данном случае от 31/07/2017)
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Расчет задолженности по контрагенту

Сообщение RAJAH »

Обычно такая ошибка возникает при отсутствии #define ComponentVersion.
rozum
Посетитель
Сообщения: 49
Зарегистрирован: 18 янв 2013, 13:23

Re: Расчет задолженности по контрагенту

Сообщение rozum »

Спасибо, добавила в код #define ComponentVersion , исключение исчезло :shock: все равно ничего не считает и пишет предупреждение о рекурсивном рел. отношении таблицы basedoc

#define ComponentVersion
#include Dolg_BD.vih
Interface workskidka2 'Расчет предоставления скидки' EscClose, cyan;
show(,, 65, 10);
Create view
var
d1,d2,d3:date;
tipDO : word;
bDolg: boolean;
DolgBDR: CalcDolgBD;
dEndDateCalc: date;
SumOtgDO: double;
SumDolgOnlyOtgrDO: double;
_cRecBD: comp;
dBegDateCalc: date;
SumReklDO:double;
DolgOtgrDOWihtRekl: double;

as select *
FROM
KatOrg
, synonym Katorg KAtorg1
, Sgoods
, Acprmspkat
, Basedoc

where
((
Sgoods.corg == KatOrg.nrec
and Sgoods.cpluse == Acprmspkat.nrec
and basedoc.corg == Katorg1.nrec
and d2 >>= basedoc.ddoc(noindex)
and word(201) == basedoc.viddoc
and word(2) == basedoc.status
));

screen ButtonList('Расчет скидки');
show(,, 64, 9);
buttons
cmRGod;
cmRMes;
cmDel;
cmDelM;

<<
<.Расчет скидки(год).> <.Расчет скидки месяц.>

<.Отмена скидки(год).> <.Отмена скидки(месяц).>

>>
end;
HandleEvent
cmInit:
{
d1:=Cur_Date;
d2:=Sub_Months(d2,1);
tipDO :=201;
d3:=dEndDateCalc;
}
cmRGod:
{
if (RunDialog('C_Common::GetFormNa',d1)=cmCancel)
{
abort;
exit;
}

_loop Sgoods where (( 31h == sgoods.cpluse (NoIndex) ))
{
if (year(sub_date(d1, sgoods.duse)) >= 10 )
{
KatOrg.kbk :=double('5');
}

if (year(sub_date(d1, sgoods.duse)) < 10 and year(sub_date(d1, sgoods.duse)) >= 5)
{
KatOrg.kbk :=double('4');
}

if (year(sub_date(d1, sgoods.duse)) < 5 and year(sub_date(d1, sgoods.duse)) >= 3)
{
KatOrg.kbk := double('3');
}
update current KatOrg;
}

message('Произведен расчет скидка(год)!')
}
cmDel:
{
_Loop Sgoods
{
KatOrg.KBK := doubletostr(KatOrg.KBK,'');
update current KatOrg;
}
message('Перерасчет скидки(год) произведен!Запустите расчет! ')
}
cmDelM:
{
_Loop Sgoods
{
KatOrg.OGRN := doubletostr(KatOrg.OGRN,'');
update current KatOrg;
}
message('Перерасчет скидки(месяц) произведен!Запустите расчет! ')
}
cmRMes:
{
if (RunDialog('C_Common::GetFormNa',d3)=cmCancel)
{
abort;
exit;
}
_loop KatOrg where (( '' << katorg.kbk (NoIndex) ))
{
bDolg := FALSE;
_loop BaseDoc where ((word(201) == BaseDoc.VidDoc and KatOrg1.nRec == BaseDoc.cOrg and d2 >>= basedoc.ddoc))
{
DolgBDR.GetAllSumOtgrDO(_cRecBD,0,d3, SumOtgDO,SumReklDO, SumDolgOnlyOtgrDO,DolgOtgrDOWihtRekl);
if SumDolgOnlyOtgrDO>0
{
bDOlg := TRUE;
break;
}

if SumDolgOnlyOtgrDO<=0
{
bDolg := FALSE;
katorg.ogrn:= katorg.kbk;
}
}
update current KatOrg;
}
message('Перерасчет скидки(месяц) произведен!')
}
end;
#undef ComponentVersion
End.

:shock:
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5184
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Расчет задолженности по контрагенту

Сообщение edward_K »

вы уж опредлеитесь как бежать - по вью или по условиям(по сути это формирование нового запроса к базе).
правильней конечно сразу построить логическую таблицу и потом бегать по ней без where. Если это вам не подходит, то сделайте Resetbounds на дочерние таблицы, поля из которых используете в where в индексном фильтре - здесь KatOrg1.nRec == BaseDoc.cOrg , но наверное вы ошиблись и хотели написать Katorg.Nrec
Ответить