# Исправление NullPointerException в ReportGenerationService ## Проблема Ошибка: `Cannot invoke "java.time.LocalDateTime.toLocalDate()" because "end" is null` ## Причина В методах `generate()` и `simpleGenerate()` класса `ReportGenerationService` код пытался вызвать `end.toLocalDate()` без проверки на null, когда поле `endDate` в `ReportGenerateRequest` было null. ## Исправления ### 1. Добавлены значения по умолчанию для дат ```java // Устанавливаем значения по умолчанию, если даты не указаны if (start == null) { start = LocalDateTime.now().minusDays(30); // 30 дней назад } if (end == null) { end = LocalDateTime.now(); // сейчас } ``` ### 2. Исправлены вызовы format() в buildDocx и buildPdf ```java // Было: req.getStartDate().format(dt), req.getEndDate().format(dt) // Стало: req.getStartDate() != null ? req.getStartDate().format(dt) : "не указано", req.getEndDate() != null ? req.getEndDate().format(dt) : "не указано" ``` ### 3. Упрощено создание имени файла ```java // Было: String dateSuffix = end != null ? end.toLocalDate().toString() : "unknown_date"; // Стало: String dateSuffix = end.toLocalDate().toString(); // end теперь всегда не null ``` ## Затронутые методы - `generate(ReportGenerateRequest req)` - `simpleGenerate(ReportGenerateRequest req)` - `buildDocx(ReportGenerateRequest req, List items, Sections sections)` - `buildPdf(ReportGenerateRequest req, List items, Sections sections)` ## Результат - ✅ Устранена ошибка NullPointerException - ✅ Добавлена обработка случаев, когда даты не указаны - ✅ Установлены разумные значения по умолчанию (последние 30 дней) - ✅ Сохранена обратная совместимость ## Тестирование После исправлений асинхронная генерация отчётов должна работать корректно даже при отсутствии дат в запросе.