# Следующие шаги - 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. Подключиться к серверу ```bash ssh user@172.11.0.13 ``` #### 2. Обновить контейнер ```bash cd ~/BUH_bot docker-compose -f docker-compose.prod.yml pull docker-compose -f docker-compose.prod.yml up -d ``` #### 3. Проверить логи ```bash 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, использовать только коды **Изменения в коде:** ```python # Валюта - БЕЗ Ссылки 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 минут - Риск: высокий - Результат: может сработать, может упасть --- ## 🎯 Мой совет **Начни с Варианта А** (быстрый деплой): 1. Задеплой текущую версию на сервер 2. Попробуй сгенерировать XML через бота 3. Попробуй импортировать в 1С **Если работает** ✅: - Отлично, копейки сохраняются, ВидЭД не ломает - Значит GUID совпали (повезло) **Если НЕ работает** ❌ (ошибки импорта): - Запроси у клиента: XSD + GUID + доступ к тестовой базе - Реализуй Вариант В (убрать GUID) - Доработай под их схему --- ## 📝 Что отслеживать после деплоя ### 1. Логи бота ```bash docker-compose -f docker-compose.prod.yml logs -f buh_bot | grep -i "xml\|error\|critical" ``` ### 2. Ошибки при генерации XML - Ошибки парсинга даты (должны быть ValueError) - Ошибки при обращении к МойСклад API - Проблемы с кодировкой ### 3. Отзывы пользователей - Удаётся ли импортировать XML в 1С? - Какие ошибки видят при импорте? - Сходятся ли суммы с НДС? ### 4. Контрольные проверки ```python # После генерации 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) ``` --- ## 🚀 Команды для деплоя ### На локальной машине: ```bash # Уже выполнено ✅ docker build -t igornadein/buh_bot:latest . docker push igornadein/buh_bot:latest ``` ### На сервере (172.11.0.13): ```bash # 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 ``` ### Откат при проблемах: ```bash # Откатиться на предыдущий образ docker pull igornadein/buh_bot@sha256:753a07638bc9133ee086ca7c08c4905a55f4752e4559d9384b6cc9fb75f82c0e docker-compose -f docker-compose.prod.yml up -d ``` --- ## ✅ Чек-лист перед деплоем - [x] Docker образ собран - [x] Docker образ запушен - [x] Критичные баги исправлены - [ ] Документация обновлена (этот файл) - [ ] Решение принято (А, Б или В) - [ ] Сервер доступен - [ ] Есть план отката - [ ] Пользователи предупреждены (если нужно) --- ## 💡 Итого **Сейчас:** - Образ готов к деплою - Критичные баги исправлены - Риски известны **Выбери подход:** - **Быстро и рискованно** → Вариант А (деплой сейчас) - **Безопасно и медленно** → Вариант Б (проверка с клиентом) - **Компромисс** → Вариант В (убрать GUID) **Мой выбор:** Вариант А → если не работает → Вариант В → если всё ещё проблемы → Вариант Б