7.5 KiB
7.5 KiB
Генератор 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) | ДД.ММ.ГГГГ |
| Суммы | Рубли (целое число) | Рубли с копейками |
Использование
Базовый пример
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
<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 с документом реализации
<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 добавьте выбор формата:
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
Особенности формата
- Суммы в рублях - Все денежные значения в целых рублях (без копеек)
- UUID везде - Все ссылки используют UUID формат
- Дата ISO 8601 - Формат:
YYYY-MM-DDTHH:MM:SS - Номер с паддингом - Номер документа дополняется пробелами до 11 символов
- Тип лица - "ФизическоеЛицо" для ИП, "ЮридическоеЛицо" для ООО
- НДС извлекается - Сумма НДС вычисляется из общей суммы (включающей НДС)
Проверка результата
Сгенерированный XML можно загрузить в 1С через:
- Обработку "Универсальный обмен данными в формате XML"
- Загрузку из файла в документе "Реализация товаров и услуг"
Поддержка
При возникновении проблем проверьте:
- Все обязательные поля заполнены
- Суммы передаются в копейках (умножить на 100)
- Дата в ISO формате с временем
- ИНН корректный (10 или 12 цифр)
- UUID в формате:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Версии
- 1.0 (2025-11-05) - Начальная версия с поддержкой документа реализации