BUH_bot/docs/XML_1C_FORMAT.md

196 lines
7.5 KiB
Markdown
Raw 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.

# Генератор XML в формате 1С EnterpriseData 1.20
## Описание
Создан новый класс `XML1CGenerator` для генерации XML документов в формате обмена данными 1С (EnterpriseData 1.20). Этот формат используется для загрузки документов реализации в конфигурации 1С.
## Отличия от формата ВерсФорм 5.03
| Параметр | Формат 1С | ВерсФорм 5.03 (УПД/ТН) |
|----------|-----------|------------------------|
| **Назначение** | Обмен данными между 1С | УПД/ТОРГ-12 для ФНС |
| **Корневой элемент** | `<Message>` | `<Файл>` |
| **Namespace** | http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.20 | Нет |
| **Документ** | `<Документ.РеализацияТоваровУслуг>` | `<СвСчФакт>` |
| **Формат даты** | ISO 8601 (2025-10-23T09:37:11) | ДД.ММ.ГГГГ |
| **Суммы** | Рубли (целое число) | Рубли с копейками |
## Использование
### Базовый пример
```python
from modules.xml_generator import XML1CGenerator
# Создание генератора
generator = XML1CGenerator()
# Подготовка данных заказа из МойСклад
order_data = {
"order": {
"id": "313256ef-b4b7-11f0-b68a-50ebf69bde57",
"name": "4869",
"moment": "2025-10-23T09:37:11Z",
"sum": 1059900, # В копейках!
"rate": {
"currency": {
"name": "руб.",
"isoCode": "643"
}
}
},
"organization": {
"id": "288f7520-b8e5-11e8-80bc-e0d55e458e90",
"name": "Беляев А.Ю. ИП",
"legalTitle": "Индивидуальный предприниматель Беляев Андрей Юрьевич",
"inn": "263605160270",
"companyType": "entrepreneur", # или "legal"
"legalLastName": "Беляев",
"legalFirstName": "Андрей",
"legalMiddleName": "Юрьевич"
},
"counterparty": {
"id": "f37958af-d807-11ef-b676-50ebf69bde57",
"name": "АСЕЕВА АННА КУЗЬМИНИЧНА ИП",
"legalTitle": "ИНДИВИДУАЛЬНЫЙ ПРЕДПРИНИМАТЕЛЬ АСЕЕВА АННА КУЗЬМИНИЧНА",
"inn": "383700097634",
"companyType": "entrepreneur"
},
"org_accounts": [
{
"id": "bdd39811-27ee-11ea-80e7-e0d55e458e90",
"accountNumber": "40802810860270001979",
"bankName": "СТАВРОПОЛЬСКОЕ ОТДЕЛЕНИЕ N5230 ПАО СБЕРБАНК",
"bic": "040702615",
"correspondentAccount": "30101810907020000615"
}
],
"positions": [
{
"assortment": {
"name": "Жевательная резинка RUSGUM Арбузное трио 24 мм 7*150 штук",
"code": "00-00000682",
"uom": {"name": "шт"}
},
"quantity": 1,
"price": 337300, # В копейках!
"vat": 5
}
]
}
# Генерация XML
xml_string = generator.generate_realization(order_data, "realization_1c.xml")
print("XML создан успешно!")
```
## Структура XML документа
### 1. Message Header
```xml
<msg:Header>
<msg:Format>http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.20</msg:Format>
<msg:CreationDate>2025-11-05T10:39:56</msg:CreationDate>
<msg:AvailableVersion>1.20</msg:AvailableVersion>
</msg:Header>
```
### 2. Body с документом реализации
```xml
<Body>
<Документ.РеализацияТоваровУслуг>
<КлючевыеСвойства>...</КлючевыеСвойства>
<ВидОперации>РеализацияКлиенту</ВидОперации>
<Товары>...</Товары>
...
</Документ.РеализацияТоваровУслуг>
</Body>
```
## Обязательные поля
### Организация (продавец)
- `id` - UUID организации
- `name` - Краткое наименование
- `legalTitle` - Полное наименование
- `inn` - ИНН
- `companyType` - Тип: "entrepreneur" или "legal"
Для ИП дополнительно:
- `legalLastName` - Фамилия
- `legalFirstName` - Имя
- `legalMiddleName` - Отчество (опционально)
### Контрагент (покупатель)
- `id` - UUID контрагента
- `name` - Наименование
- `legalTitle` - Полное наименование
- `inn` - ИНН
- `companyType` - Тип
### Заказ
- `id` - UUID заказа
- `name` - Номер документа
- `moment` - Дата в ISO формате
- `sum` - Сумма в копейках
### Позиции
- `assortment.name` - Наименование товара
- `assortment.code` - Код товара (опционально)
- `assortment.uom.name` - Единица измерения
- `quantity` - Количество
- `price` - Цена в копейках
- `vat` - Ставка НДС (5, 10, 20)
## Интеграция с ботом
В `bot.py` добавьте выбор формата:
```python
from modules.xml_generator import XMLGenerator, XML1CGenerator
# При генерации документа
def generate_document(order_data, format_type):
if format_type == "1c":
generator = XML1CGenerator()
xml = generator.generate_realization(order_data, "doc.xml")
elif format_type == "upd":
generator = XMLGenerator()
xml = generator.generate_upd(order_data, "doc.xml")
elif format_type == "torg12":
generator = XMLGenerator()
xml = generator.generate_tn(order_data, "doc.xml")
return xml
```
## Особенности формата
1. **Суммы в рублях** - Все денежные значения в целых рублях (без копеек)
2. **UUID везде** - Все ссылки используют UUID формат
3. **Дата ISO 8601** - Формат: `YYYY-MM-DDTHH:MM:SS`
4. **Номер с паддингом** - Номер документа дополняется пробелами до 11 символов
5. **Тип лица** - "ФизическоеЛицо" для ИП, "ЮридическоеЛицо" для ООО
6. **НДС извлекается** - Сумма НДС вычисляется из общей суммы (включающей НДС)
## Проверка результата
Сгенерированный XML можно загрузить в 1С через:
- Обработку "Универсальный обмен данными в формате XML"
- Загрузку из файла в документе "Реализация товаров и услуг"
## Поддержка
При возникновении проблем проверьте:
1. Все обязательные поля заполнены
2. Суммы передаются в копейках (умножить на 100)
3. Дата в ISO формате с временем
4. ИНН корректный (10 или 12 цифр)
5. UUID в формате: `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`
## Версии
- **1.0** (2025-11-05) - Начальная версия с поддержкой документа реализации