- 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
142 lines
6.8 KiB
Markdown
142 lines
6.8 KiB
Markdown
# Исправление: Услуги превращались в товары при импорте в 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С.
|