BUH_bot/SERVICES_FIX.md
Игорь Надеин 4038ff9f92 Fix XML generator contract UUID generation and cleanup temporary files
- Update contract UUID to include currency and UE flag for correct 1C account selection
- Remove temporary export.xml and refactored files
- Add documentation for services fixes
2025-11-07 16:19:25 +03:00

142 lines
6.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Исправление: Услуги превращались в товары при импорте в 1С
## 🔴 Проблема
При экспорте XML в формате EnterpriseData 1.20 все позиции документа попадали в секцию `<Товары>`, включая услуги. Это приводило к тому, что 1С импортировала услуги как товары.
### Пример проблемного XML:
```xml
<Товары>
<Строка>
<ДанныеНоменклатуры>
<Номенклатура>
<Услуга>true</Услуга> <!-- ЭТО УСЛУГА -->
<ВидНоменклатуры>
<Наименование>Услуга</Наименование>
</ВидНоменклатуры>
</Номенклатура>
</ДанныеНоменклатуры>
<!-- ... НО ОНА В СЕКЦИИ <Товары>! -->
</Строка>
</Товары>
```
## ✅ Решение
Документ `РеализацияТоваровУслуг` в формате 1С должен иметь **ДВЕ отдельные секции**:
1. **`<Товары>`** - для товаров (с `ДанныеНоменклатуры`, `ТипЗапасов` и т.д.)
2. **`<Услуги>`** - для услуг (с `Номенклатура`, `Содержание` и т.д.)
### Структура исправленного XML:
```xml
<Документ.РеализацияТоваровУслуг>
<!-- ... общие данные ... -->
<!-- Секция для товаров -->
<Товары>
<Строка>
<ДанныеНоменклатуры>
<Номенклатура>
<ВидНоменклатуры>
<Наименование>Товар</Наименование>
</ВидНоменклатуры>
</Номенклатура>
</ДанныеНоменклатуры>
<ТипЗапасов>СобственныеТовары</ТипЗапасов>
<!-- ... -->
</Строка>
</Товары>
<!-- Секция для услуг -->
<Услуги>
<Строка>
<Номенклатура>
<Услуга>true</Услуга>
<ВидНоменклатуры>
<Наименование>Услуга</Наименование>
</ВидНоменклатуры>
</Номенклатура>
<Содержание>Индивидуальный дизайн</Содержание>
<!-- ... -->
</Строка>
</Услуги>
</Документ.РеализацияТоваровУслуг>
```
## 🔧 Изменения в коде
### Файл: `modules/xml_generator.py`
**Исправлено в двух методах:**
1. `generate_realization()` - для генерации одиночных документов
2. `_generate_single_document_content()` - для пакетной генерации (склейка нескольких документов)
#### 1. Разделение позиций на товары и услуги (строки 1108-1119 и 1819-1830):
```python
# Разделяем позиции на товары и услуги
товары = []
услуги = []
for pos in positions:
assortment = pos.get("assortment", {})
if _is_service(assortment):
услуги.append(pos)
else:
товары.append(pos)
```
#### 2. Генерация секции `<Товары>` (строки 1121-1207):
- Добавлен блок `if товары:` - секция создаётся только если есть товары
- Для товаров используется `<ДанныеНоменклатуры>`
- Добавляется `<ТипЗапасов>` (обязательно для товаров)
- Счета учета: 43, 90.01.1, 90.02.1, 90.03
#### 3. Генерация секции `<Услуги>` (строки 1209-1275):
- Добавлен новый блок `if услуги:` - секция создаётся только если есть услуги
- Для услуг используется `<Номенклатура>` напрямую (БЕЗ `ДанныеНоменклатуры`)
- Обязательный флаг `<Услуга>true</Услуга>`
- Добавлено поле `<Содержание>` с описанием услуги
- Счета учета: 90.01.1, 90.02.1, 90.03 (БЕЗ счета 43)
## 📋 Ключевые различия между Товарами и Услугами
| Параметр | Товары | Услуги |
|----------|--------|--------|
| Обёртка номенклатуры | `<ДанныеНоменклатуры>` | Напрямую `<Номенклатура>` |
| Флаг услуги | Не используется | `<Услуга>true</Услуга>` |
| ТипЗапасов | `СобственныеТовары` | НЕ используется |
| Содержание | НЕ используется | Описание услуги |
| СчетУчета | 43 (товары на складе) | НЕ используется |
| ПрослеживаемыйТовар | `false` | НЕ используется |
## 🧪 Тестирование
После исправления проверьте:
1. Создайте документ с товарами и услугами
2. Экспортируйте в XML
3. Убедитесь, что в XML есть две секции: `<Товары>` и `<Услуги>`
4. Импортируйте в 1С
5. Проверьте, что услуги импортировались как услуги, а не как товары
## 📚 Ссылки на спецификацию
- Схема XSD: `аывавы.xml` (EnterpriseData 1.0)
- Документация 1С по формату обмена EnterpriseData
- Справочник "Номенклатура" в конфигурациях УТ 11, ERP, КА 2.0
## ⚠️ Важно
**Проблема была в двух местах:**
1. ✅ **Метод `generate_realization()`** - исправлен ранее (для одиночных документов)
2. ✅ **Метод `_generate_single_document_content()`** - исправлен сейчас (для **пакетной генерации**)
При склейке нескольких документов в один XML файл использовался отдельный метод `_generate_single_document_content()`, в котором **не было** логики разделения на товары и услуги. Теперь исправлено в обоих методах!
После этого исправления необходимо **перегенерировать все существующие XML-файлы**, если они будут использоваться для импорта в 1С.