12 KiB
Валидация при массовой генерации
Обзор
При массовой генерации документов каждая отгрузка проходит валидацию перед созданием XML. Отгрузки с критическими ошибками исключаются из генерации, а пользователь получает подробный отчет об ошибках.
Процесс валидации
1. Автоматическая проверка
Для каждой отгрузки из списка выполняются следующие проверки:
Обязательные поля организации:
- ✓ Наименование организации
- ✓ ИНН организации (с проверкой контрольной суммы)
- ✓ Банковские реквизиты
Обязательные поля контрагента:
- ✓ Наименование контрагента
- ✓ ИНН контрагента (если юридическое лицо)
Обязательные поля заказа:
- ✓ Номер заказа
- ✓ Дата заказа
- ✓ Сумма заказа > 0
- ✓ Наличие товарных позиций
Обязательные поля грузополучателя:
- ✓ Наименование грузополучателя
- ✓ Адрес грузополучателя (критично для УПД)
Позиции заказа:
- ✓ Наименование товара
- ✓ Единица измерения
- ✓ Количество > 0
- ✓ Цена ≥ 0
- ✓ Корректная ставка НДС
2. Обработка результатов
Успешная валидация
Отгрузка добавляется в список для генерации XML.
Критические ошибки
Отгрузка исключается из генерации, информация об ошибках сохраняется в отчет.
Предупреждения (warnings)
Не блокируют генерацию, но включаются в отчет для информации.
Отчет об ошибках
При обнаружении критических ошибок валидации пользователь получает текстовый файл с подробным отчетом.
Структура отчета
ОТЧЕТ О ВАЛИДАЦИИ ОТГРУЗОК
==================================================
Дата: 06.11.2025 14:10:31
Всего обработано: 8
С ошибками валидации: 3
КРИТИЧЕСКИЕ ОШИБКИ ВАЛИДАЦИИ:
Отгрузка: 4926
----------------------------------------
• counterparty.inn: ИНН контрагента некорректен
• consignee.address: Не указан адрес грузополучателя
Отгрузка: 4927
----------------------------------------
• organization.inn: ИНН организации некорректен
НЕ НАЙДЕНЫ:
----------------------------------------
• 4928
• 4929
ОШИБКИ ОБРАБОТКИ:
----------------------------------------
• 4931: Connection timeout
Успешно прошли валидацию: 2
----------------------------------------
✓ 4932
✓ 4933
Разделы отчета
-
Заголовок и статистика
- Дата генерации отчета
- Общее количество обработанных отгрузок
- Количество отгрузок с ошибками
-
Критические ошибки валидации
- Номер отгрузки
- Список критических ошибок с указанием поля и описанием
-
Не найденные отгрузки
- Номера отгрузок, которые не найдены в МойСклад
-
Ошибки обработки
- Технические ошибки при получении данных из API
-
Успешные отгрузки
- Список отгрузок, прошедших валидацию
Примеры использования
Пример 1: Все отгрузки валидны
Ввод:
4926,4927,4928
Результат:
- ✅ Все 3 отгрузки прошли валидацию
- Генерируется XML с тремя документами
- Отчет об ошибках не создается
Пример 2: Есть ошибки валидации
Ввод:
4926,4927,4928,4929
Сценарий:
- 4926 - ✅ валидна
- 4927 - ❌ отсутствует ИНН организации
- 4928 - ❌ не найдена в системе
- 4929 - ✅ валидна
Результат:
- Бот отправляет текстовый отчет с ошибками для 4927 и 4928
- Генерируется XML только для отгрузок 4926 и 4929
- Пользователь видит статистику:
❌ Обнаружены ошибки валидации 📊 Статистика: • Обработано: 4 • С ошибками: 1 • Прошли валидацию: 2 • Не найдено: 1
Пример 3: Ни одна отгрузка не прошла валидацию
Ввод:
4926,4927,4928
Сценарий: Все три отгрузки имеют критические ошибки
Результат:
- Бот отправляет отчет с ошибками для всех трех отгрузок
- XML не генерируется
- Предлагается исправить ошибки и повторить попытку
Типичные ошибки и решения
Ошибка: "Не указан ИНН контрагента"
Причина: У контрагента-юридического лица не заполнен ИНН в МойСклад
Решение:
- Откройте карточку контрагента в МойСклад
- Заполните поле "ИНН"
- Сохраните изменения
- Повторите массовую генерацию
Ошибка: "Не указан адрес грузополучателя"
Причина: Отсутствует адрес доставки, фактический или юридический адрес
Решение:
- Откройте отгрузку в МойСклад
- Укажите адрес доставки
- Или заполните адрес в карточке контрагента
- Повторите массовую генерацию
Ошибка: "ИНН организации некорректен"
Причина: Ошибка в контрольной сумме ИНН или неверный формат
Решение:
- Проверьте ИНН организации в МойСклад
- Убедитесь, что ИНН состоит из 10 или 12 цифр
- Проверьте правильность ввода
- Исправьте и повторите генерацию
Ошибка: "Заказ не содержит товарных позиций"
Причина: Отгрузка создана без товаров
Решение:
- Откройте отгрузку в МойСклад
- Добавьте товары/услуги
- Сохраните изменения
- Повторите массовую генерацию
Технические детали
Уровни валидации
class ValidationLevel(Enum):
VALID = "valid" # Все проверки пройдены
WARNING = "warning" # Есть предупреждения
CRITICAL = "critical" # Критические ошибки
Критерии блокировки
Отгрузка исключается из генерации, если имеет хотя бы одну ошибку уровня CRITICAL.
Отгрузка включается в генерацию, если:
- Нет критических ошибок
- Есть только предупреждения (
WARNING) - Все проверки пройдены (
VALID)
Формат отчета
- Кодировка: UTF-8
- Формат файла: .txt
- Имя файла:
validation_errors_YYYYMMDD_HHMMSS.txt - Местоположение: временная директория
temp_documents/
Производительность
- Валидация одной отгрузки: ~0.01-0.05 сек
- Создание отчета: ~0.05-0.1 сек
- Отправка файла: ~0.5-1 сек
Валидация не замедляет процесс массовой генерации значительно.
Интеграция с другими функциями
Одиночная генерация
Валидация также работает при генерации одного документа:
- Результаты валидации показываются в чате
- Пользователь может решить, генерировать XML или нет
- При критических ошибках генерация может быть заблокирована
Формат XML
Валидация работает для обоих форматов XML:
- ✓ 1С EnterpriseData 1.20
- ✓ ВерсФорм 5.03 (УПД)
Пакетная генерация
При выборе "Один файл (все документы)":
- Невалидные отгрузки исключаются
- Валидные отгрузки объединяются в один XML
При выборе "Отдельные файлы":
- Для каждой валидной отгрузки создается отдельный XML
- Невалидные отгрузки пропускаются
Логирование
Все события валидации логируются:
logger.warning(
f"Отгрузка {order_num} не прошла валидацию: "
f"{len(critical_errors)} критических ошибок"
)
Логи доступны в файле logs/bot.log для анализа и отладки.
Рекомендации
Для пользователей
-
Проверьте данные заранее
- Используйте одиночную генерацию для проверки отгрузок
- Исправьте ошибки до массовой генерации
-
Заполняйте все обязательные поля
- ИНН/КПП организаций и контрагентов
- Адреса доставки
- Банковские реквизиты
-
Сохраняйте отчеты об ошибках
- Отчеты помогут выявить типичные проблемы
- Используйте их для улучшения данных в МойСклад
Для разработчиков
-
Расширение валидации
- Добавляйте новые проверки в
modules/validator.py - Классифицируйте их по уровням (CRITICAL/WARNING)
- Добавляйте новые проверки в
-
Кастомизация отчетов
- Формат отчета легко настраивается
- Можно добавить HTML-отчеты или PDF
-
Оптимизация
- Валидация выполняется асинхронно
- Можно распараллелить для больших объемов