- 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
285 lines
11 KiB
Markdown
285 lines
11 KiB
Markdown
# Следующие шаги - 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)
|
||
|
||
**Мой выбор:** Вариант А → если не работает → Вариант В → если всё ещё проблемы → Вариант Б
|