BUH_bot/docs/XML_1C_FORMAT.md

7.5 KiB
Raw Blame History

Генератор 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

Особенности формата

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