Гость
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Jasper Reports / 8 сообщений из 8, страница 1 из 1
26.09.2015, 21:45
    #39062124
misha1973
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jasper Reports
Посоветуйте пожалуйста как сделать default expression параметра date последним рабочим днем? Я смотрел функцию WORKDAY, она дает ближайший рабочий день в будущем, а мне нужно то же самое, но в прошлом... Без учета праздников, просто если суббота/воскресенье/понедельник то пятница, для остальных предыдущее число.
...
Рейтинг: 0 / 0
28.09.2015, 12:56
    #39063036
sanBez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jasper Reports
misha1973Я смотрел функцию WORKDAY
Не знаю такой в jasper. Тынц можно?

Какой язык установлен в свойствах отчета? Решение если там можно поставить java - свой класс со статик-методом на java и подрубить его в classpath проекта
получить последний выходной на java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
package my.packagename;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class TestDates {
  
  public static Date getLastWorkDay() {
    Date result = new Date();
    
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(result);
    
    // обрезаем до 00:00:00.000 (часы, минуты, секунды, миллисекунды)
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);
    
    int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
    
    if (dayOfWeek == Calendar.SUNDAY) {
      calendar.add(Calendar.DATE, -2);
    } else if (dayOfWeek == Calendar.MONDAY) {
      calendar.add(Calendar.DATE, -3);
    } else {
      calendar.add(Calendar.DATE, -1);
    }
    
    return calendar.getTime();
  }
  
  public static void main(String[] args) {
        
    SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
    
    System.out.println(sdf.format(getLastWorkDay()));
  }
  
}



Тогда в jrxml
пихнуть в параметр отчета нужный defaultExpression
Код: xml
1.
2.
3.
4.
	<parameter name="myParamLastWorkDay" class="java.util.Date">
		<parameterDescription><![CDATA[]]></parameterDescription>
		<defaultValueExpression><![CDATA[my.packagename.TestDates.getLastWorkDay()]]></defaultValueExpression>
	</parameter>


...
Рейтинг: 0 / 0
28.09.2015, 13:00
    #39063041
sanBez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jasper Reports
упс. Заголовок первого спойлера "получить последний рабочий день на java"
...
Рейтинг: 0 / 0
29.09.2015, 11:02
    #39063935
misha1973
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jasper Reports
sanBez, вот скриншот студио с workday
...
Рейтинг: 0 / 0
29.09.2015, 12:24
    #39064020
sanBez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jasper Reports
misha1973,

Прикольно. Видел когда-то но забыл. На java-форуме проскальзывала когда-то тема внедрения своих функций в студио, но там без конкретики было.
Так что есть вариант вообще влепить свой класс (и функцию от него) прямо в JaspersoftStudio ))
Хотя в контексте озвученной проблемы это наверно излишество.

А решение я уже привел. Пробовал?
...
Рейтинг: 0 / 0
30.09.2015, 10:35
    #39064925
misha1973
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jasper Reports
sanBez, еще нет, спасибо, как сделаю - отпишусь
...
Рейтинг: 0 / 0
16.10.2015, 10:54
    #39078359
misha1973
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jasper Reports
Сделал вот так - вроде работает:
new ArrayList<Integer>(Arrays.asList(Integer.parseInt("2"),Integer.parseInt("3"),Integer.parseInt("4"),Integer.parseInt("5"),Integer.parseInt("6"))).contains(WEEKDAY(new Date(),false))?(TODAY( )-1):(WEEKDAY(new Date(),false)==7?(TODAY( )-2):(TODAY( )-3))
...
Рейтинг: 0 / 0
19.10.2015, 11:06
    #39079839
sanBez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jasper Reports
misha1973,

Выглядит конечно ужасно, но с тернарным оператором по другому и не сделаешь.

Задлянафиг парсить строки

Код: java
1.
new ArrayList<Integer>(Arrays.asList(2,3,4,5,6))
...
Рейтинг: 0 / 0
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Jasper Reports / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]