# Исправление 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<MarketItem> items, Sections sections)`
- `buildPdf(ReportGenerateRequest req, List<MarketItem> items, Sections sections)`

## Результат

- ✅ Устранена ошибка NullPointerException
- ✅ Добавлена обработка случаев, когда даты не указаны
- ✅ Установлены разумные значения по умолчанию (последние 30 дней)
- ✅ Сохранена обратная совместимость

## Тестирование

После исправлений асинхронная генерация отчётов должна работать корректно даже при отсутствии дат в запросе.
