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