Необходимо иметь возможность сортировать/фильтровать список счетов по количеству дней просрочки с оплатой. Как это можно реализовать?

Спасибо.

Нравится

5 комментариев

Создать поле, в которое путем ежедневного расчета будет вноситься срок просрочки (числом) и фильтровать по нему.

Спасибо. А как организовать ежедневный расчет?

Поле должно рассчитываться при создании счета, изменении даты оплаты и ежедневно перерассчитываться. Для ежедневно расчета можно использовать функционал хранимых процедур вызывая их с необходимой периодичностью job-ом.

Здравствуйте Сергей

Данную проблему мы пытались решить в рамках инцидента, тогда я полное решение предоставить не смог. В переписке Вы предлагали следующий код:

         Date1 = new Date (Dataset.Values('ContractPayDate'));
         Date2 = new Date (Dataset.Values('PaymentDate'));
         Date3 = new Date();
         res = 0;
 
      if (Date1.getTime() == 0 ) {
                        res = 0
      } else {
            if (Date2.getTime() == 0) {
                        res = Math.floor((Date3.getTime() - Date1.getTime())/(1000*60*60*24))}
                  else {
                        res = Math.floor((Date2.getTime() - Date1.getTime())/(1000*60*60* 24))}
                                                        };

Предлагаю данную логику реализовать по средствам job на MS SQL Server 2008, как советует Олег

Как это сделать:
1. Логике описанной в блоке javascript соответсвует следующий Update

update tbl_invoice
set DelayCalc = ISNULL(DateDiff(minute,ContractPayDate,ISNULL(PaymentDate,{fn NOW()} )),0) 

Пояснения:
Если ContractPayDate не заполнено тогда Просрочка DelayCalc = 0
ContractPayDate -> Null ->DateDiff(minute,ContractPayDate,ISNULL(PaymentDate,{fn NOW()} )) = NULL
ISNULL(DateDiff(minute,ContractPayDate,ISNULL(PaymentDate,{fn NOW()} ))) = 0

Если PaymentDate не заполнено, тогда берем текущую дату высчитывем DelayCalc = ContractPayDate - ТекущаяДата в минутах
ISNULL(PaymentDate,{fn NOW()} )
{fn NOW()} - взять текущую дату
ISNULL - функция отработки в случае если 1й аргумент NULL (в данном случае PaymentDate), если не NULL функция возвращает само значение 1го аргумента (в данном случае PaymentDate)

Если заполено ContractPayDate и DelayCalc вычисляем DelayCalc = ContractPayDate - PaymentDate в минутах

Подробнее про DateDiff http://msdn.microsoft.com/en-us/library/ms189794.aspx

Коллеги, спасибо, будем пробовать

Показать все комментарии