feat: добавлено различение товаров и услуг в XML 1С EnterpriseData
- Определяем тип номенклатуры по meta.href (/product/ или /service/) - Добавлен флаг <Услуга> для конфигураций без справочника видов - Добавлен элемент <ВидНоменклатуры> для УТ 11, ERP - ТипЗапасов устанавливается только для товаров (не для услуг) - Логика реализована в обоих методах: generate_realization и _generate_single_document_content
This commit is contained in:
parent
29dd08ab16
commit
6c8259d306
@ -1099,6 +1099,11 @@ class XML1CGenerator:
|
||||
product_id = product_href.split("/")[-1].split("?")[0] if product_href else ""
|
||||
product_name = assortment.get("name", "")
|
||||
|
||||
# Определяем тип номенклатуры (товар или услуга)
|
||||
is_service = False
|
||||
if product_href and "/service/" in product_href:
|
||||
is_service = True
|
||||
|
||||
# ДанныеНоменклатуры
|
||||
nomenclature_data = etree.SubElement(row_elem, "ДанныеНоменклатуры")
|
||||
nomenclature = etree.SubElement(nomenclature_data, "Номенклатура")
|
||||
@ -1107,6 +1112,17 @@ class XML1CGenerator:
|
||||
etree.SubElement(nomenclature, "КодВПрограмме").text = assortment.get("code", "")
|
||||
etree.SubElement(nomenclature, "Наименование").text = product_name
|
||||
|
||||
# Флаг услуги (для конфигураций без справочника видов)
|
||||
if is_service:
|
||||
etree.SubElement(nomenclature, "Услуга").text = "true"
|
||||
|
||||
# ВидНоменклатуры (для конфигураций УТ 11, ERP)
|
||||
kind_elem = etree.SubElement(nomenclature, "ВидНоменклатуры")
|
||||
if is_service:
|
||||
etree.SubElement(kind_elem, "Наименование").text = "Услуга"
|
||||
else:
|
||||
etree.SubElement(kind_elem, "Наименование").text = "Товар"
|
||||
|
||||
# ЕдиницаИзмерения
|
||||
uom = assortment.get("uom", {})
|
||||
uom_elem = etree.SubElement(row_elem, "ЕдиницаИзмерения")
|
||||
@ -1159,10 +1175,14 @@ class XML1CGenerator:
|
||||
vat_amount = total / (1 + vat_rate / 100) * (vat_rate / 100) if vat_rate else 0
|
||||
etree.SubElement(row_elem, "СуммаНДС").text = self._format_money_with_decimals(vat_amount)
|
||||
|
||||
# ВНИМАНИЕ: Следующие поля могут отсутствовать в XSD некоторых версий 1С
|
||||
# Если импорт падает - закомментируйте эти строки
|
||||
# Дополнительные поля (опционально, зависит от конфигурации 1С)
|
||||
etree.SubElement(row_elem, "ТипЗапасов").text = "СобственныеТовары"
|
||||
# ТипЗапасов только для товаров (не для услуг)
|
||||
if not is_service:
|
||||
etree.SubElement(
|
||||
row_elem, "ТипЗапасов"
|
||||
).text = "СобственныеТовары"
|
||||
|
||||
# Счета учета (опционально)
|
||||
if settings.include_accounting_accounts:
|
||||
for tag, value in ACCOUNTING_ACCOUNT_TAGS:
|
||||
etree.SubElement(row_elem, tag).text = value
|
||||
@ -1717,6 +1737,11 @@ class XML1CGenerator:
|
||||
)
|
||||
product_name = assortment.get("name", "")
|
||||
|
||||
# Определяем тип номенклатуры (товар или услуга)
|
||||
is_service = False
|
||||
if product_href and "/service/" in product_href:
|
||||
is_service = True
|
||||
|
||||
nomenclature_data = etree.SubElement(
|
||||
row_elem, "ДанныеНоменклатуры"
|
||||
)
|
||||
@ -1734,6 +1759,17 @@ class XML1CGenerator:
|
||||
nomenclature, "Наименование"
|
||||
).text = product_name
|
||||
|
||||
# Флаг услуги (для конфигураций без справочника видов)
|
||||
if is_service:
|
||||
etree.SubElement(nomenclature, "Услуга").text = "true"
|
||||
|
||||
# ВидНоменклатуры (для конфигураций УТ 11, ERP)
|
||||
kind_elem = etree.SubElement(nomenclature, "ВидНоменклатуры")
|
||||
if is_service:
|
||||
etree.SubElement(kind_elem, "Наименование").text = "Услуга"
|
||||
else:
|
||||
etree.SubElement(kind_elem, "Наименование").text = "Товар"
|
||||
|
||||
uom = assortment.get("uom", {})
|
||||
uom_elem = etree.SubElement(row_elem, "ЕдиницаИзмерения")
|
||||
uom_href = (
|
||||
@ -1791,12 +1827,17 @@ class XML1CGenerator:
|
||||
row_elem, "СуммаНДС"
|
||||
).text = self._format_money_with_decimals(vat_amount)
|
||||
|
||||
etree.SubElement(
|
||||
row_elem, "ТипЗапасов"
|
||||
).text = "СобственныеТовары"
|
||||
# ТипЗапасов только для товаров (не для услуг)
|
||||
if not is_service:
|
||||
etree.SubElement(
|
||||
row_elem, "ТипЗапасов"
|
||||
).text = "СобственныеТовары"
|
||||
|
||||
# Счета учета (опционально)
|
||||
if settings.include_accounting_accounts:
|
||||
for tag, value in ACCOUNTING_ACCOUNT_TAGS:
|
||||
etree.SubElement(row_elem, tag).text = value
|
||||
|
||||
etree.SubElement(
|
||||
row_elem, "ИдентификаторСтроки"
|
||||
).text = str(uuid.uuid4())
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user