196 lines
7.5 KiB
Markdown
196 lines
7.5 KiB
Markdown
# Генератор 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) - Начальная версия с поддержкой документа реализации
|