Создание номенклатуры 1С OData

Всем привет! Столкнулся с проблемой добавления новой номенклатуры в 1С.

Вот мой код:

import requests
from requests.auth import HTTPBasicAuth
import xml.etree.ElementTree as ET

post_url = 'http://localhost/mc/odata/standard.odata/Catalog_%D0%9D%D0%BE%D0%BC%D0%B5%D0%BD%D0%BA%D0%BB%D0%B0%D1%82%D1%83%D1%80%D0%B0'

data_to_post = {
    "Description": "Soundqueen ZH0602E15LS",
    "Вес": "5",
    "НаименованиеПолное": "Soundqueen ZH0602E15LS",
    "КатегорияНоменклатуры_Key": "6d8cc3fc-6ae7-11ed-91a8-a068f8f3337c",
    "Комментарий": "Soundqueen ZH0602E15LS - это звукоусилительный комплект, который не требует специальной инсталляции, общая мощность 500 Вт. Подойдет для использования в кафе, бизнес-центре, учебном заведении. В комплект входит активный микшерный пульт (ZH62AD) со встроенным усилителем, двухполосная пассивная акустическая система (2 x FQ013A), металлические стойки, динамический микрофон и необходимая коммутация.",
    "ВидСтавкиНДС": "Общая",
    "СчетУчетаДоходов_Key": "6d8cc3ad-6ae7-11ed-91a8-a068f8f3337c",
    "СчетУчетаЗапасов_Key": "6d8cc382-6ae7-11ed-91a8-a068f8f3337c",
    "СчетУчетаЗатрат_Key": "6d8cc383-6ae7-11ed-91a8-a068f8f3337c",
    "ПризнакПредметаРасчета": "Товар",
}

ns = {
    'atom': 'http://www.w3.org/2005/Atom',
    'm': 'http://schemas.microsoft.com/ado/2007/08/dataservices/metadata',
    'd': 'http://schemas.microsoft.com/ado/2007/08/dataservices'
}

root = ET.Element(ET.QName(ns['atom'], 'entry'))
content = ET.SubElement(root, ET.QName(ns['atom'], 'content'), type="application/xml")
properties = ET.SubElement(content, ET.QName(ns['m'], 'properties'))

for key, value in data_to_post.items():
    prop = ET.SubElement(properties, ET.QName(ns['d'], key))
    prop.text = value

xml_data = ET.tostring(root, encoding="utf-8", method="xml")

headers = {'Content-Type': 'application/xml'}

response = requests.post(post_url, auth=HTTPBasicAuth(username='Nick', password=''), data=xml_data, headers=headers)

if response.status_code == 201:
    print("Data successfully posted.")
    print("Response:", response.text)
else:
    print(f"Failed to post data: {response.status_code}")
    print("Response content:", response.text)

Вот ответ:

Data successfully posted.
Response: <?xml version="1.0" encoding="UTF-8"?><entry xmlns="http://www.w3.org/2005/Atom"
        xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"
        xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"
        xml:base="http://localhost/mc/odata/standard.odata/">
    <id>http://localhost/mc/odata/standard.odata/Catalog_Номенклатура(guid'33a23d6b-48ba-11ef-a305-00155d550200')</id>
    <category term="StandardODATA.Catalog_Номенклатура"
            scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/>
    <title type="text"/>
    <updated>2024-07-23T09:10:09</updated>
    <author/>
    <summary/>
    <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/ЕдиницаИзмерения"
            href="Catalog_Номенклатура(guid'33a23d6b-48ba-11ef-a305-00155d550200')/ЕдиницаИзмерения"
            type="application/atom+xml;type=entry;charset=utf-8"
            title="ЕдиницаИзмерения"/>
    <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/НаправлениеДеятельности"
            href="Catalog_Номенклатура(guid'33a23d6b-48ba-11ef-a305-00155d550200')/НаправлениеДеятельности"
            type="application/atom+xml;type=entry;charset=utf-8"
            title="НаправлениеДеятельности"/>
    <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Склад"
            href="Catalog_Номенклатура(guid'33a23d6b-48ba-11ef-a305-00155d550200')/Склад"
            type="application/atom+xml;type=entry;charset=utf-8"
            title="Склад"/>
    <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/СчетУчетаДоходов"
            href="Catalog_Номенклатура(guid'33a23d6b-48ba-11ef-a305-00155d550200')/СчетУчетаДоходов"
            type="application/atom+xml;type=entry;charset=utf-8"
            title="СчетУчетаДоходов"/>
    <link rel="edit"
            href="Catalog_Номенклатура(guid'33a23d6b-48ba-11ef-a305-00155d550200')"
            title="edit-link"/>
    <content type="application/xml"><m:properties xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
    <d:ПроверятьЗаполнениеХарактеристики>false</d:ПроверятьЗаполнениеХарактеристики>
    <d:ПодконтрольнаяПродукцияВЕТИС>false</d:ПодконтрольнаяПродукцияВЕТИС>
    <d:ПроверятьЗаполнениеПартий>false</d:ПроверятьЗаполнениеПартий>
    <d:Периодичность>Год</d:Периодичность>
    <d:Поставщик_Key>00000000-0000-0000-0000-000000000000</d:Поставщик_Key>
    <d:Производитель_Key>00000000-0000-0000-0000-000000000000</d:Производитель_Key>
    <d:Объем>0</d:Объем>
    <d:ОбъемДАЛ>0</d:ОбъемДАЛ>
    <d:СпособОграниченияСертификата>НеОграничен</d:СпособОграниченияСертификата>
    <d:ПроизводительИмпортерАлкогольнойПродукции_Key>00000000-0000-0000-0000-000000000000</d:ПроизводительИмпортерАлкогольнойПродукции_Key>
    <d:РеквизитДопУпорядочиванияУНФ>0</d:РеквизитДопУпорядочиванияУНФ>
    <d:РекомендуемЗаказать>false</d:РекомендуемЗаказать>
    <d:Склад_Key>ff235c58-6ae6-11ed-91a8-a068f8f3337c</d:Склад_Key>
    <d:ПроизвольныйНоминал>false</d:ПроизвольныйНоминал>
    <d:ВидСтавкиНДС/>
    <d:СчетУчетаДоходов_Key>6d8cc3ad-6ae7-11ed-91a8-a068f8f3337c</d:СчетУчетаДоходов_Key>
    <d:СпособПополнения>Закупка</d:СпособПополнения>
    <d:СредствоИндивидуальнойЗащиты>false</d:СредствоИндивидуальнойЗащиты>
    <d:СрокИсполненияЗаказа>1</d:СрокИсполненияЗаказа>
    <d:СрокДействияФлагаНовинка>0001-01-01T00:00:00</d:СрокДействияФлагаНовинка>
    <d:СрокПополнения>1</d:СрокПополнения>
    <d:СпособРасчетаЦеныНабора/>
    <d:СчетУчетаЗапасов_Key>00000000-0000-0000-0000-000000000000</d:СчетУчетаЗапасов_Key>
    <d:ТНВЭДГИСМ/>
    <d:УдалитьСтавкаНДС_Key>00000000-0000-0000-0000-000000000000</d:УдалитьСтавкаНДС_Key>
    <d:ТипСрокаДействия>БезОграниченияСрока</d:ТипСрокаДействия>
    <d:СчетУчетаЗатрат_Key>00000000-0000-0000-0000-000000000000</d:СчетУчетаЗатрат_Key>
    <d:ТабачнаяПродукция>false</d:ТабачнаяПродукция>
    <d:ЦеноваяГруппа_Key>00000000-0000-0000-0000-000000000000</d:ЦеноваяГруппа_Key>
    <d:ТипНоменклатуры>Запас</d:ТипНоменклатуры>
    <d:УдалитьСпецификация_Key>00000000-0000-0000-0000-000000000000</d:УдалитьСпецификация_Key>
    <d:ТоварнаяНоменклатураВЭД_Key>00000000-0000-0000-0000-000000000000</d:ТоварнаяНоменклатураВЭД_Key>
    <d:ТолькоПоддержкаОстаткаПриРасчетеПотребностей>false</d:ТолькоПоддержкаОстаткаПриРасчетеПотребностей>
    <d:ФайлКартинки_Key>00000000-0000-0000-0000-000000000000</d:ФайлКартинки_Key>
    <d:ФиксированнаяСтоимость>true</d:ФиксированнаяСтоимость>
    <d:ЭтоНабор>false</d:ЭтоНабор>
    <d:ШиныИПокрышки>false</d:ШиныИПокрышки>
    <d:Ширина>0</d:Ширина>
    <d:ЭтоНовинка>false</d:ЭтоНовинка>
    <d:Ячейка_Key>00000000-0000-0000-0000-000000000000</d:Ячейка_Key>
    <d:ПодакцизныйТовар>false</d:ПодакцизныйТовар>
    <d:ЧастичноеПогашение>false</d:ЧастичноеПогашение>
    <d:ИндивидуальныеНастройкиПолитикиУчетаСерий>false</d:ИндивидуальныеНастройкиПолитикиУчетаСерий>
    <d:ИспользоватьДатуПроизводстваСерии>false</d:ИспользоватьДатуПроизводстваСерии>
    <d:ИспользоватьСрокГодностиСерии>false</d:ИспользоватьСрокГодностиСерии>
    <d:ПолитикаУчетаСерий_Key>00000000-0000-0000-0000-000000000000</d:ПолитикаУчетаСерий_Key>
    <d:ИспользоватьУникальныеСерии>false</d:ИспользоватьУникальныеСерии>
    <d:ЭтоАгентскаяУслуга>false</d:ЭтоАгентскаяУслуга>
    <d:Договор_Key>00000000-0000-0000-0000-000000000000</d:Договор_Key>
    <d:ТочностьУказанияСрокаГодностиСерии/>
    <d:ПрослеживаемыйТовар>false</d:ПрослеживаемыйТовар>
    <d:СрокГодности>0</d:СрокГодности>
    <d:ИспользоватьНаборыЕдиницИзмерения>false</d:ИспользоватьНаборыЕдиницИзмерения>
    <d:ВесПоСертификатуТовара>0</d:ВесПоСертификатуТовара>
    <d:НаборЕдиницИзмерения_Key>00000000-0000-0000-0000-000000000000</d:НаборЕдиницИзмерения_Key>
    <d:ЕдиницаИзмеренияСрокаГодности>Сутки</d:ЕдиницаИзмеренияСрокаГодности>
    <d:КодОКПД2/>
    <d:ПризнакПредметаРасчета/>
    <d:КодТРУ/>
    <d:ДополнительныеРеквизиты m:type="Collection(StandardODATA.Catalog_Номенклатура_ДополнительныеРеквизиты_RowType)"/>
    <d:Штрихкод/>
    <d:ЕдиницаДляОтчетов_Key>00000000-0000-0000-0000-000000000000</d:ЕдиницаДляОтчетов_Key>
    <d:КоэффициентЕдиницыДляОтчетов>1</d:КоэффициентЕдиницыДляОтчетов>
    <d:ПрослеживаемыйКомплект>false</d:ПрослеживаемыйКомплект>
    <d:НоменклатураГруппыЦеновыеГруппы m:type="Collection(StandardODATA.Catalog_Номенклатура_НоменклатураГруппыЦеновыеГруппы_RowType)"/>
    <d:Code>НФ-00000013</d:Code>
    <d:Ref_Key>33a23d6b-48ba-11ef-a305-00155d550200</d:Ref_Key>
    <d:Predefined>false</d:Predefined>
    <d:DataVersion>AAAAGwAAAAA=</d:DataVersion>
    <d:PredefinedDataName/>
    <d:Description/>
    <d:Артикул/>
    <d:IsFolder>false</d:IsFolder>
    <d:DeletionMark>false</d:DeletionMark>
    <d:Parent_Key>00000000-0000-0000-0000-000000000000</d:Parent_Key>
    <d:АлкогольнаяПродукция>false</d:АлкогольнаяПродукция>
    <d:ВерхняяГраницаОстатков>0</d:ВерхняяГраницаОстатков>
    <d:ВариантПечатиНабора/>
    <d:ЕдиницаИзмерения_Key>6d8cc3fe-6ae7-11ed-91a8-a068f8f3337c</d:ЕдиницаИзмерения_Key>
    <d:Вес>0</d:Вес>
    <d:ВариантОграниченияСертификата>ПоНоменклатуре</d:ВариантОграниченияСертификата>
    <d:Весовой>false</d:Весовой>
    <d:Высота>0</d:Высота>
    <d:ВыписыватьГарантийныйТалон>false</d:ВыписыватьГарантийныйТалон>
    <d:ГарантийныйСрок>0</d:ГарантийныйСрок>
    <d:ВидАлкогольнойПродукции_Key>00000000-0000-0000-0000-000000000000</d:ВидАлкогольнойПродукции_Key>
    <d:ВидМаркировки>НеМаркируется</d:ВидМаркировки>
    <d:ДатаИзменения>2024-07-23T09:10:08</d:ДатаИзменения>
    <d:ВидПродукцииИС/>
    <d:АвтоматическиГенерироватьПартии>false</d:АвтоматическиГенерироватьПартии>
    <d:ИмпортнаяАлкогольнаяПродукция>false</d:ИмпортнаяАлкогольнаяПродукция>
    <d:ИспользоватьДатуПроизводстваПартии>false</d:ИспользоватьДатуПроизводстваПартии>
    <d:Длина>0</d:Длина>
    <d:ДатаОкончанияДействия>0001-01-01T00:00:00</d:ДатаОкончанияДействия>
    <d:ИспользоватьСерииНоменклатуры>false</d:ИспользоватьСерииНоменклатуры>
    <d:ИсключитьИзПрайсЛистов>false</d:ИсключитьИзПрайсЛистов>
    <d:Изготовитель_Key>00000000-0000-0000-0000-000000000000</d:Изготовитель_Key>
    <d:ИспользоватьЗаписьСкладскогоЖурналаВЕТИСПартии>false</d:ИспользоватьЗаписьСкладскогоЖурналаВЕТИСПартии>
    <d:ИспользоватьСрокГодностиПартии>false</d:ИспользоватьСрокГодностиПартии>
    <d:ИспользоватьИдентификаторПартииВЕТИСПартии>false</d:ИспользоватьИдентификаторПартииВЕТИСПартии>
    <d:ИспользоватьПартии>false</d:ИспользоватьПартии>
    <d:ИспользоватьПроизводителяВЕТИСПартии>false</d:ИспользоватьПроизводителяВЕТИСПартии>
    <d:НаименованиеПолное/>
    <d:ИспользоватьНомерПартии>false</d:ИспользоватьНомерПартии>
    <d:ИспользоватьХарактеристики>false</d:ИспользоватьХарактеристики>
    <d:КиЗГИСМGTIN/>
    <d:КиЗГИСМВид/>
    <d:КиЗГИСМРазмер/>
    <d:КиЗГИСМ>false</d:КиЗГИСМ>
    <d:КиЗГИСМСпособВыпускаВОборот/>
    <d:КатегорияНоменклатуры_Key>00000000-0000-0000-0000-000000000000</d:КатегорияНоменклатуры_Key>
    <d:КоличествоПериодовДействия>1</d:КоличествоПериодовДействия>
    <d:КодМедицинскогоИзделия/>
    <d:НижняяГраницаОстатков>0</d:НижняяГраницаОстатков>
    <d:Недействителен>false</d:Недействителен>
    <d:Крепость>0</d:Крепость>
    <d:МетодОценки>ПоСредней</d:МетодОценки>
    <d:СтранаПроисхождения_Key>00000000-0000-0000-0000-000000000000</d:СтранаПроисхождения_Key>
    <d:НаправлениеДеятельности_Key>6d8cc3ff-6ae7-11ed-91a8-a068f8f3337c</d:НаправлениеДеятельности_Key>
    <d:Комментарий/>
    <d:Номинал>0</d:Номинал>
    <d:НормаВремени>0</d:НормаВремени>
    <d:ОбувнаяПродукция>false</d:ОбувнаяПродукция>
</m:properties>
    </content>
</entry>

Данные вроде как уходят и объект создается на сервере, но там просто пустые значения:

введите сюда описание изображения

Подскажите пожалуйста как решить проблему


Ответы (1 шт):

Автор решения: auem

Помогла эта статья тык, просто сделал по примеру и все заработало

import requests # импортируем библиотеку
import json

def read( # определяем функцию
    entity, # имя сущности
    guid, # идентификатор сущности
    select=None, # выбор только заданных полей сущности
):
    url = f'''http://localhost/mc/odata/standard.odata/{entity}(guid'{guid}')''' # конструируем адрес
    headers = dict(Accept='application/json') # задаём тип ответа
    params = dict() # объявляем параметры
    if select is not None: params['$select'] = select # если задан выбор полей, то задаём его
    response = requests.get(url, headers=headers, params=params) # выполняем запрос
    try: json = response.json() # получаем результат и пытаемся преобразовать его в json
    except: raise Exception(response.text) # а в случае неудачи поднимаем исключение
    if 'odata.error' in json: raise Exception(json['odata.error']['message']['value']) # если в результате ошибка, то поднимаем исключение
    return json # возвращаем сущность

def create( # определяем функцию
    entity, # имя сущности
    data, # тело сущности
    select=None, # выбор только заданных полей сущности
):
    username = 'Nick'
    password = ''
    
    url = f'http://localhost/mc/odata/standard.odata/{entity}' # конструируем адрес
    headers = dict(Accept='application/json', Content_Type='application/json; charset=utf-8') # задаём тип ответа и кодировку
    json_data = json.dumps(data) # сериализуем словарь в JSON-строку
    response = requests.post(url, auth=(username, password), headers=headers, data=json_data.encode('utf-8')) # выполняем запрос с кодировкой данных
    print(data)
    print(response.json())
    try: 
        json_response = response.json() # получаем результат и пытаемся преобразовать его в json
    except: 
        raise Exception(response.text) # а в случае неудачи поднимаем исключение
    if 'odata.error' in json_response: 
        raise Exception(json_response['odata.error']['message']['value']) # если в результате ошибка, то поднимаем исключение
    if select is not None: 
        return read(entity, json_response['Ref_Key'], select) # если задан выбор полей, то заново читаем и возвращаем сущность
    return json_response # иначе просто возвращаем сущность

data_to_post = {
    "Description": "Товар от OData",
    "НаименованиеПолное": "Товар от OData",
    "КатегорияНоменклатуры_Key": "6d8cc3fc-6ae7-11ed-91a8-a068f8f3337c"
}

create(entity='Catalog_Номенклатура', data=data_to_post)

тык

→ Ссылка