Как создать реестр сотрудников, у которых скоро день рождения?

// алгоритм фильтрации
if (isNull(День рождения)){
    false
} else {
    def cd := currentDate()
    def m := День рождения.monthValue
    def d := День рождения.dayOfMonth
    def y := cd.year
    def birthDate := LocalDate.of(y, m, d)
    diffDate(cd, birthDate, День) < 30
}

ошибка

java.lang.RuntimeException: Problem with algorithm 853204
        at pro.greendata.core.service.impl.DynamicObjectServiceImpl.lambda$specificationByAlgorithm$111(DynamicObjectServiceImpl.java:2988)
...
cz.jirutka.rsql.parser.RSQLParserException: cz.jirutka.rsql.parser.ParseException: Encountered " <UNRESERVED_STR> "WHEN "" at line 1, column 7.
Was expecting one of:
    <COMP_FIQL> ...
    <COMP_ALT> ...

Комментарии

  • Пока что задача решается атрибутом Именинник, и периодической задачей, которая вычисляет этот атрибут

  • Добрый день!
    Подготовим ответим и предложим решение

  • Не нравится, что такая ошибка при сохранении алгоритма

    LocalDate.of ждёт int'ы, а ему приходят Integer'ы

  • Хочется использовать виджет "Горизонтальный реестр", чтобы показать сотрудников, у которых сегодня или в течение следующих 7 дней день рождения
    Каждый сотрудник имеет атрибут Именинник. Значение этого атрибута устанавливается периодической задачей раз в сутки
    В статье об этом реестре описан очень трудный путь, создаётся куча каких-то вспомогательных объектов, визуалов. По этому пути не удалось пройти самостоятельно

    Помогите создать такое:

  • Может, на маркете есть какие-то продукты, которые используют этот виджет?

  • отредактировано 27 окт

    @Саша написал:
    Пока что задача решается атрибутом Именинник, и периодической задачей, которая вычисляет этот атрибут

    Вот такой алгоритм отлично работает. Но гриндата при сохранении утверждает, что он с ошибками

    for (def i : objects(Сотрудник, Код)) {
        def o := getObject(i, Сотрудник, Именинник, День рождения)
        def birthDate := o.День рождения
    
        if (isNull(birthDate)) {
            if (o.Именинник) {
                o.setAttr(Именинник, false)
                save(o)
            }
    
            continue
        }
    
        def currentDate := truncDate(currentDate(), День)
    
        def y := currentDate.year
        def m := birthDate.monthValue
        def d := birthDate.dayOfMonth
        def birthDay := new LocalDate(y, m, d)
    
        def days = java.time.temporal.ChronoUnit.DAYS.between(currentDate, birthDay)
    
        if (abs(days) <= 23) {
           o.setAttr(Именинник, true) 
        } else {
           o.setAttr(Именинник, false) 
        }
        // или проще: o.setAttr(abs(days) <= 23)
        save(o)
    }
    

    В редакторе подчёркивает ошибкой строку java.time.temporal...
    При сохранении такие ошибки:

    Но повторюсь, алгоритм работает

  • Добрый день!
    Предлагаем для фильтрации использовать SQL фильтрацию:

  • Спасибо 🙏

Войдите или Зарегистрируйтесь чтобы комментировать.