- Enhanced validator with critical zero-price validation - Fixed currency GUIDs and money formatting in XML generator - Removed incompatible VidED field - Added comprehensive documentation - Updated test files
11 KiB
11 KiB
Следующие шаги - 6 ноября 2025
✅ Выполнено сегодня
1. Критичные исправления XML генератора
- ✅ Исправлена потеря копеек (
.2fвместоint()) - ✅ Удалено поле ВидЭД (отсутствует в ED 1.20)
- ✅ Fallback даты заменён на исключение
- ✅ Счета учёта закомментированы (опционально)
2. Валидация
- ✅ Валидатор интегрирован и работает
- ✅ 0 критических ошибок в тестовых XML
- ✅ Все UUID корректны
3. Docker
- ✅ Образ пересобран:
sha256:695531b0358c01bf06af94fd410dee234bb605f0db9ca3c6e1d775b433945440 - ✅ Запушен в Docker Hub:
igornadein/buh_bot:latest
🔄 Что делать дальше
Вариант А: Деплой на сервер (быстро, без проверки клиента)
1. Подключиться к серверу
ssh user@172.11.0.13
2. Обновить контейнер
cd ~/BUH_bot
docker-compose -f docker-compose.prod.yml pull
docker-compose -f docker-compose.prod.yml up -d
3. Проверить логи
docker-compose -f docker-compose.prod.yml logs -f buh_bot
4. Протестировать генерацию XML
- Создать заказ в МойСклад
- Сгенерировать XML через бота
- Попробовать импортировать в 1С
Риски:
- ⚠️ GUID справочников могут не совпадать с базой клиента
- ⚠️ Структура может не соответствовать XSD клиента
- ⚠️ Банк/договор могут вызвать ошибки
Вариант Б: Сначала проверка с клиентом (безопасно)
1. Запросить у клиента:
A. XSD EnterpriseData 1.20
Запрос клиенту:
"Для корректного формирования XML нам нужна актуальная схема EnterpriseData 1.20
вашей версии 1С. Можете предоставить файл XSD или сообщить:
- Версию платформы 1С (например, 8.3.25.1394)
- Конфигурацию (УТ 11.5, КА 2.5, ERP 2.5 и т.д.)"
Б. GUID справочников из их базы
Запрос клиенту:
"Для избежания ошибок импорта нужны UUID следующих объектов из вашей базы:
1. Валюта 'Рубль' (RUB, код 643)
2. Страна 'Россия' (код 643)
3. Единица измерения 'Штука' (код 796)
Можно получить через запрос в 1С:
SELECT Ссылка FROM Справочник.Валюты WHERE Код = '643'
SELECT Ссылка FROM Справочник.КлассификаторСтранМира WHERE Код = '643'
SELECT Ссылка FROM Справочник.УпаковкиЕдиницыИзмерения WHERE Код = '796'
"
В. Доступ к тестовой базе
Запрос клиенту:
"Для тестирования XML нужен доступ к тестовой базе 1С:
- HTTP-сервис для импорта (если есть)
- Или удалённый рабочий стол для ручного импорта
- Или возможность прислать скриншоты/логи ошибок импорта"
2. После получения данных:
- Обновить GUID в коде (или убрать их)
- Адаптировать структуру под XSD
- Протестировать в их базе
- Задеплоить
Вариант В: Упрощённый подход (компромисс)
Убрать все жёсткие GUID, использовать только коды
Изменения в коде:
# Валюта - БЕЗ Ссылки
currency_elem = etree.SubElement(doc, "Валюта")
# НЕ создаём <Ссылка>
currency_data = etree.SubElement(currency_elem, "ДанныеКлассификатора")
etree.SubElement(currency_data, "Код").text = "643"
etree.SubElement(currency_data, "КодСимвольный").text = "RUB"
etree.SubElement(currency_data, "Наименование").text = "Российский рубль"
# Страна - БЕЗ Ссылки
country_elem = etree.SubElement(cp_elem, "СтранаРегистрации")
# НЕ создаём <Ссылка>
country_data = etree.SubElement(country_elem, "ДанныеКлассификатора")
etree.SubElement(country_data, "Код").text = "643"
etree.SubElement(country_data, "Наименование").text = "РОССИЯ"
# ЕИ - БЕЗ Ссылки
uom_elem = etree.SubElement(row_elem, "ЕдиницаИзмерения")
# НЕ создаём <Ссылка>
uom_data = etree.SubElement(uom_elem, "ДанныеКлассификатора")
etree.SubElement(uom_data, "Код").text = "796"
etree.SubElement(uom_data, "Наименование").text = "Штука"
# Банк - БЕЗ Ссылки, только БИК
bank_elem = etree.SubElement(bank_acc_elem, "Банк")
# НЕ создаём <Ссылка>
bank_data = etree.SubElement(bank_elem, "ДанныеКлассификатораБанков")
etree.SubElement(bank_data, "БИК").text = acc.get("bic", "")
etree.SubElement(bank_data, "Наименование").text = acc.get("bankName", "")
Преимущества:
- ✅ Работает в любой базе (1С найдёт объекты по кодам)
- ✅ Не зависит от GUID клиента
- ✅ Более универсально
Недостатки:
- ⚠️ Требует настройки "создавать отсутствующие объекты" в 1С
- ⚠️ Может не работать, если структура XSD другая
📊 Рекомендация
Если клиент активен и готов помочь:
→ Вариант Б (запросить XSD и GUID)
- Время: 1-2 дня
- Риск: минимальный
- Результат: 100% совместимость
Если клиент недоступен, нужно быстро:
→ Вариант В (убрать GUID)
- Время: 2-3 часа
- Риск: средний
- Результат: ~80% вероятность работы
Если хочется попробовать "как есть":
→ Вариант А (деплой без изменений)
- Время: 30 минут
- Риск: высокий
- Результат: может сработать, может упасть
🎯 Мой совет
Начни с Варианта А (быстрый деплой):
- Задеплой текущую версию на сервер
- Попробуй сгенерировать XML через бота
- Попробуй импортировать в 1С
Если работает ✅:
- Отлично, копейки сохраняются, ВидЭД не ломает
- Значит GUID совпали (повезло)
Если НЕ работает ❌ (ошибки импорта):
- Запроси у клиента: XSD + GUID + доступ к тестовой базе
- Реализуй Вариант В (убрать GUID)
- Доработай под их схему
📝 Что отслеживать после деплоя
1. Логи бота
docker-compose -f docker-compose.prod.yml logs -f buh_bot | grep -i "xml\|error\|critical"
2. Ошибки при генерации XML
- Ошибки парсинга даты (должны быть ValueError)
- Ошибки при обращении к МойСклад API
- Проблемы с кодировкой
3. Отзывы пользователей
- Удаётся ли импортировать XML в 1С?
- Какие ошибки видят при импорте?
- Сходятся ли суммы с НДС?
4. Контрольные проверки
# После генерации XML проверять:
# 1. Копейки присутствуют?
assert "1234.56" in xml_content # не "1234"
# 2. ВидЭД отсутствует?
assert "ВидЭД" not in xml_content
# 3. Все GUID валидны?
import re
guids = re.findall(r'[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}', xml_content)
assert all(len(g) == 36 for g in guids)
🚀 Команды для деплоя
На локальной машине:
# Уже выполнено ✅
docker build -t igornadein/buh_bot:latest .
docker push igornadein/buh_bot:latest
На сервере (172.11.0.13):
# 1. Подключиться
ssh user@172.11.0.13
# 2. Перейти в директорию
cd ~/BUH_bot # или /var/www/buh_bot
# 3. Pull новый образ
docker-compose -f docker-compose.prod.yml pull
# 4. Перезапуск
docker-compose -f docker-compose.prod.yml up -d
# 5. Проверка
docker-compose -f docker-compose.prod.yml ps
docker-compose -f docker-compose.prod.yml logs -f buh_bot
Откат при проблемах:
# Откатиться на предыдущий образ
docker pull igornadein/buh_bot@sha256:753a07638bc9133ee086ca7c08c4905a55f4752e4559d9384b6cc9fb75f82c0e
docker-compose -f docker-compose.prod.yml up -d
✅ Чек-лист перед деплоем
- Docker образ собран
- Docker образ запушен
- Критичные баги исправлены
- Документация обновлена (этот файл)
- Решение принято (А, Б или В)
- Сервер доступен
- Есть план отката
- Пользователи предупреждены (если нужно)
💡 Итого
Сейчас:
- Образ готов к деплою
- Критичные баги исправлены
- Риски известны
Выбери подход:
- Быстро и рискованно → Вариант А (деплой сейчас)
- Безопасно и медленно → Вариант Б (проверка с клиентом)
- Компромисс → Вариант В (убрать GUID)
Мой выбор: Вариант А → если не работает → Вариант В → если всё ещё проблемы → Вариант Б