![]() |
#25 |
Участник
|
Function
GetPaymentString(CustomerNo:Code[10],CalcDate: Date,CustPostingGroup:Code[10]): Text[250] CustomerNo код клиента CalcDate дата на момент которой считать предоплату CustPostingGroup учетная группа клиента C\AL Locals Customer record Customer CLE record Cust. Ledger Entry balance decimal result returnvalue Text[250] Код: result:=''; IF customer.GET(CustomerNo) THEN BEGIN customer.SETRANGE("Date Filter",0D,CalcDate); // фильтр чтобы посчитать вычисимые поля IF CustPostingGroup = '' THEN CustPostingGroup:=customer."Customer Posting Group"; // если пустая учетная группа берем из настроек клиента. // если с клиентом работаем по разным счетам(субсчетам) например продаем услуги и товары // в этом случае нам понадобится учетная группа клиента customer.CALCFIELDS("Net Change (LCY)"); //вычисляем баланс // во здесь аккуратнее стандартное поле не считает баланс по учетным группам // можно отредактировать в формулу вычисления или добавить свое поле // чтобы считать именно предоплату по этой учетной группе (например за товар) IF customer."Net Change (LCY)" <0 THEN // есть предоплата BEGIN balance:=ABS(customer."Net Change (LCY)"); CLE.SETRANGE("Document Type",CLE."Document Type"::Payment); // фильтр по оплатам (будем печатать в сф только оплаты) CLE.SETRANGE("Customer No.",customer."No."); CLE.SETRANGE("Posting Date",0D,CalcDate); CLE.SETRANGE("Customer Posting Group", CustPostingGroup); IF CLE.FIND('-') THEN REPEAT CLE.MARK(TRUE); // помечаем записи оплат, потом пойдем вычислять с последней UNTIL CLE.NEXT = 0; WHILE CLE.FIND('+') AND (balance>0) DO BEGIN CLE.CALCFIELDS("Remaining Amount"); // непримененная сумма, только для открытых операций IF CLE.Open THEN balance:=balance - ABS(CLE."Remaining Amount") ELSE balance:=balance - ABS(CLE.Amount); result:=CLE."External Document No." + ' от '+FORMAT(CLE."Posting Date") + ','+result; CLE.MARK(FALSE); CLE.MARKEDONLY(TRUE); END; END; END; Вот в принципе и вся логика для Навижина. Если найдете косяки обязательно сообщите.
__________________
Удачи! Последний раз редактировалось Polar; 11.11.2005 в 13:39. |
|