powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Jasper Reports
8 сообщений из 8, страница 1 из 1
Jasper Reports
    #39062124
misha1973
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посоветуйте пожалуйста как сделать default expression параметра date последним рабочим днем? Я смотрел функцию WORKDAY, она дает ближайший рабочий день в будущем, а мне нужно то же самое, но в прошлом... Без учета праздников, просто если суббота/воскресенье/понедельник то пятница, для остальных предыдущее число.
...
Рейтинг: 0 / 0
Jasper Reports
    #39063036
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Jasper Reports
    #39063041
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
упс. Заголовок первого спойлера "получить последний рабочий день на java"
...
Рейтинг: 0 / 0
Jasper Reports
    #39063935
misha1973
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sanBez, вот скриншот студио с workday
...
Рейтинг: 0 / 0
Jasper Reports
    #39064020
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
misha1973,

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

А решение я уже привел. Пробовал?
...
Рейтинг: 0 / 0
Jasper Reports
    #39064925
misha1973
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sanBez, еще нет, спасибо, как сделаю - отпишусь
...
Рейтинг: 0 / 0
Jasper Reports
    #39078359
misha1973
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал вот так - вроде работает:
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
Jasper Reports
    #39079839
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
misha1973,

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

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

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


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