From 52f957376df87d15cc03a26e7f71aeea47d7334c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=B3=D0=BE=D1=80=D1=8C=20=D0=9D=D0=B0=D0=B4=D0=B5?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Fri, 19 Jun 2026 13:51:59 +0300 Subject: [PATCH] . --- .gitignore | 1 + build_gui.bat | 9 +- config.py | 4 +- ...119472_2013021908220445265400000000000.xml | 96 +++ dev/order_6073.xml | 667 ++++++++++++++++++ modules/moysklad_client.py | 52 +- requirements_gui.txt | 2 + 7 files changed, 817 insertions(+), 14 deletions(-) create mode 100644 dev/ON_NKORSCHFDOPPR_2BM_2310119472_2013021908220445265400000000000.xml create mode 100644 dev/order_6073.xml diff --git a/.gitignore b/.gitignore index b946769..b6168a8 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,7 @@ wheels/ # Virtual Environment venv/ +.venv_gui310/ env/ ENV/ diff --git a/build_gui.bat b/build_gui.bat index f3d8c7c..6c8c085 100644 --- a/build_gui.bat +++ b/build_gui.bat @@ -8,7 +8,8 @@ echo =============================================== echo. REM Проверка Python -python --version >nul 2>&1 +set "PYTHON_CMD=py -3.10" +%PYTHON_CMD% --version >nul 2>&1 if errorlevel 1 ( echo [ERROR] Python не найден! pause @@ -19,14 +20,14 @@ echo [OK] Python найден echo. REM Создание виртуального окружения если нет -if not exist ".venv" ( +if not exist ".venv_gui310" ( echo [INFO] Создание виртуального окружения... - python -m venv .venv + %PYTHON_CMD% -m venv .venv_gui310 ) REM Активация окружения echo [INFO] Активация окружения... -call .venv\Scripts\activate.bat +call .venv_gui310\Scripts\activate.bat REM Установка зависимостей echo [INFO] Установка зависимостей... diff --git a/config.py b/config.py index efe431a..52eb8d1 100644 --- a/config.py +++ b/config.py @@ -56,7 +56,7 @@ class Settings(BaseSettings): # Создание экземпляра настроек try: - settings = Settings() + settings = Settings(debug=False) # Создание необходимых директорий settings.output_dir.mkdir(parents=True, exist_ok=True) @@ -70,5 +70,5 @@ except Exception as e: logger.warning(f"⚠️ Настройки из .env не загружены: {e}") logger.info("Используются настройки по умолчанию") - settings = Settings() + settings = Settings(debug=False) settings.output_dir.mkdir(parents=True, exist_ok=True) diff --git a/dev/ON_NKORSCHFDOPPR_2BM_2310119472_2013021908220445265400000000000.xml b/dev/ON_NKORSCHFDOPPR_2BM_2310119472_2013021908220445265400000000000.xml new file mode 100644 index 0000000..7b338d5 --- /dev/null +++ b/dev/ON_NKORSCHFDOPPR_2BM_2310119472_2013021908220445265400000000000.xml @@ -0,0 +1,96 @@ + +<Ôàéë ÈäÔàéë="ON_NKORSCHFDOPPR_2BM-2310119472-2013021908220445265400000000000_2BM-263605160270--2017042406191303349000000000_20260508_a7a4f5bc-92a9-4eca-a162-fb7cb04b6357" ÂåðñÔîðì="5.01" ÂåðñÏðîã="Diadoc 1.0"> + <ÑâÓ÷ÄîêÎáîð ÈäÎòïð="2BM-263605160270--2017042406191303349000000000" ÈäÏîë="2BM-2310119472-2013021908220445265400000000000"> + <ÑâÎÝÄÎòïð ÈÍÍÞË="6663003127" ÈäÝÄÎ="2BM" ÍàèìÎðã="ÀÎ "ÏÔ "ÑÊÁ Êîíòóð"" /> + + <Äîêóìåíò ÊÍÄ="1115133" ÄàòàÈíôÏð="08.05.2026" ÂðåìÈíôÏð="11.09.28" ÍàèìÝêîíÑóáÑîñò="Èíäèâèäóàëüíûé ïðåäïðèíèìàòåëü Áåëÿåâ Àíäðåé Þðüåâè÷, ÈÍÍ-ÎÃÐÍÈÏ: 263605160270-304263530000073" Ôóíêöèÿ="ÊÑ×ÔÄÈÑ" ÏîÔàêòÕÆ="Äîêóìåíò, ïîäòâåðæäàþùèé ñîãëàñèå (ôàêò óâåäîìëåíèÿ) ïîêóïàòåëÿ íà èçìåíåíèå ñòîèìîñòè îòãðóæåííûõ òîâàðîâ (âûïîëíåííûõ ðàáîò, îêàçàííûõ óñëóã), ïåðåäàííûõ èìóùåñòâåííûõ ïðàâ" ÍàèìÄîêÎïð="Äîêóìåíò, ïîäòâåðæäàþùèé ñîãëàñèå (ôàêò óâåäîìëåíèÿ) ïîêóïàòåëÿ íà èçìåíåíèå ñòîèìîñòè îòãðóæåííûõ òîâàðîâ (âûïîëíåííûõ ðàáîò, îêàçàííûõ óñëóã), ïåðåäàííûõ èìóùåñòâåííûõ ïðàâ"> + <ÑâÊÑ÷Ô ÍîìåðÊÑ÷Ô="1" ÄàòàÊÑ÷Ô="08.05.2026" ÊîäÎÊÂ="643"> + <Ñ÷Ô ÍîìåðÑ÷Ô="5726" ÄàòàÑ÷Ô="23.04.2026" /> + <ÑâÏðîä ÎÊÏÎ="0142109827"> + <ÈäÑâ> + <ÑâÈÏ ÈÍÍÔË="263605160270"> + <ÔÈÎ Ôàìèëèÿ="Áåëÿåâ" Èìÿ="Àíäðåé" Îò÷åñòâî="Þðüåâè÷" /> + + + <Àäðåñ> + <ÀäðÐÔ ÊîäÐåãèîí="26" Ãîðîä="ã Ñòàâðîïîëü" Óëèöà="ïð-êò Êóëàêîâà" Äîì="51" /> + + <ÁàíêÐåêâ ÍîìåðÑ÷åòà="40802810860270001979"> + <ÑâÁàíê ÍàèìÁàíê="ÑÒÀÂÐÎÏÎËÜÑÊÎÅ ÎÒÄÅËÅÍÈÅ N5230 ÏÀÎ ÑÁÅÐÁÀÍÊ" ÁÈÊ="040702615" ÊîðÑ÷åò="30101810907020000615" /> + + + <ÑâÏîêóï ÎÊÏÎ="51351899"> + <ÈäÑâ> + <ÑâÞËÓ÷ ÍàèìÎðã="ÀÊÖÈÎÍÅÐÍÎÅ ÎÁÙÅÑÒÂÎ "ÑÎ×È-ÏÀÐÊ"" ÈÍÍÞË="2310119472" ÊÏÏ="237801001" /> + + <Àäðåñ> + <ÀäðÐÔ Èíäåêñ="354340" ÊîäÐåãèîí="23" Ãîðîä="ïãò Ñèðèóñ" Óëèöà="óë ×åìïèîíîâ" Äîì="3" Êâàðò="230" /> + + <ÁàíêÐåêâ ÍîìåðÑ÷åòà="40702810723913421644"> + <ÑâÁàíê ÍàèìÁàíê="ÂÝÁ.ÐÔ" ÁÈÊ="044525060" ÊîðÑ÷åò="30101810500000000060" /> + + + <ÄîïÑâÔÕÆ1 ÍàèìÎÊÂ="Ðîññèéñêèé ðóáëü" /> + + <ÒàáëÊÑ÷Ô> + <ÑâåäÒîâ ÍîìÑòð="1" ÍàèìÒîâ="Ïîëèóðåòàíîâûé êîíóñ ñ óñèëåííîé îêñèäèðîâàííîé øïèëüêîé" ÏîðÍîìÒîâÂÑ×Ô="3" ÎÊÅÈ_ÒîâÄî="796" ÎÊÅÈ_ÒîâÏîñëå="796" ÊîëÒîâÄî="10" ÊîëÒîâÏîñëå="10" ÖåíàÒîâÄî="3619.05" ÖåíàÒîâÏîñëå="2466.67" ÍàëÑòÄî="5%" ÍàëÑòÏîñëå="5%"> + <ÑòÒîâÁåçÍÄÑ ÑòîèìÄîÈçì="36190.48" ÑòîèìÏîñëåÈçì="24666.67" ÑòîèìÓì="11523.81" /> + <ÀêöèçÄî> + <ÁåçÀêöèç>áåç àêöèçà + + <ÀêöèçÏîñëå> + <ÁåçÀêöèç>áåç àêöèçà + + <ÑóìÍàëÄî> + <ÑóìÍÄÑ>1809.52 + + <ÑóìÍàëÏîñëå> + <ÑóìÍÄÑ>1233.33 + + <ÑóìÍàëÐàçí> + <ÑóìÓì>576.19 + + <ÑòÒîâÓ÷Íàë ÑòîèìÄîÈçì="38000.00" ÑòîèìÏîñëåÈçì="25900.00" ÑòîèìÓì="12100.00" /> + <ÄîïÑâåäÒîâ ÀðòèêóëÒîâ="rr-2404" ÊîäÒîâ="1315798215" ÍàèìÅäÈçìÄî="øò" ÍàèìÅäÈçìÏîñëå="øò" /> + + <ÑâåäÒîâ ÍîìÑòð="2" ÍàèìÒîâ="Äîñòàâêà" ÏîðÍîìÒîâÂÑ×Ô="5" ÊîëÒîâÄî="1" ÊîëÒîâÏîñëå="1" ÖåíàÒîâÄî="0.00" ÖåíàÒîâÏîñëå="3047.62" ÍàëÑòÄî="5%" ÍàëÑòÏîñëå="5%"> + <ÑòÒîâÁåçÍÄÑ ÑòîèìÄîÈçì="0.00" ÑòîèìÏîñëåÈçì="3047.62" ÑòîèìÓâåë="3047.62" /> + <ÀêöèçÄî> + <ÑóìÀêöèç>0.00 + + <ÀêöèçÏîñëå> + <ÑóìÀêöèç>0.00 + + <ÑóìÍàëÄî> + <ÑóìÍÄÑ>0.00 + + <ÑóìÍàëÏîñëå> + <ÑóìÍÄÑ>152.38 + + <ÑóìÍàëÐàçí> + <ÑóìÓâåë>152.38 + + <ÑòÒîâÓ÷Íàë ÑòîèìÄîÈçì="0.00" ÑòîèìÏîñëåÈçì="3200.00" ÑòîèìÓâåë="3200.00" /> + + <ÂñåãîÓâåë ÑòÒîâÁåçÍÄÑÂñåãî="3047.62" ÑòÒîâÓ÷ÍàëÂñåãî="3200.00"> + <ÑóìÍàë> + <ÑóìÍÄÑ>152.38 + + + <ÂñåãîÓì ÑòÒîâÁåçÍÄÑÂñåãî="11523.81" ÑòÒîâÓ÷ÍàëÂñåãî="12100.00"> + <ÑóìÍàë> + <ÑóìÍÄÑ>576.19 + + + + <ÑîäÔÕÆ3 ÑîäÎïåð="Èçìåíåíèå ñòîèìîñòè òîâàðîâ è óñëóã" ÄàòàÍàïð="08.05.2026"> + <ÏåðåäàòÄîêóì ÍàèìÎñí="ÓÏÄ" ÍîìÎñí="5726" ÄàòàÎñí="23.04.2026" /> + <ÄîêóìÎñíÊîð ÍàèìÎñí="Áåç äîêóìåíòà-îñíîâàíèÿ" /> + + <Ïîäïèñàíò ÎñíÏîëí="îøèáêà âûãðóçêè" ÎáëÏîëí="6" Ñòàòóñ="4"> + <ÈÏ ÈÍÍÔË="263605160270"> + <ÔÈÎ Ôàìèëèÿ="ÁÅËßÅÂ" Èìÿ="ÀÍÄÐÅÉ" Îò÷åñòâî="ÞÐÜÅÂÈ×" /> + + + + \ No newline at end of file diff --git a/dev/order_6073.xml b/dev/order_6073.xml new file mode 100644 index 0000000..add189e --- /dev/null +++ b/dev/order_6073.xml @@ -0,0 +1,667 @@ + + + + http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.20 + 2026-06-18T09:59:18 + 1.20 + + + <Документ.РеализацияТоваровУслуг> + <КлючевыеСвойства> + <Ссылка>e765d39e-695a-11f1-0a80-0f400007ff22 + <Дата>2026-06-03T11:10:00 + <Номер>6073 + <Организация> + <Ссылка>a1621e5b-9a3d-11ee-0a80-0ea80003aeae + <Наименование>ИП Беляев Андрей Юрьевич + <НаименованиеСокращенное>Индивидуальный предприниматель Беляев Андрей Юрьевич + <НаименованиеПолное>Индивидуальный предприниматель Беляев Андрей Юрьевич + <ИНН>263605160270 + <ЮридическоеФизическоеЛицо>ФизическоеЛицо + + + <ВидОперации>РеализацияКлиенту + <Валюта> + <Ссылка>a164f3fe-9a3d-11ee-0a80-0ea80003aeb6 + <ДанныеКлассификатора> + <Код>643 + <Наименование>руб + + + <Сумма>1363242 + <СуммаВключаетНДС>true + <Склад> + <Ссылка>a16464c7-9a3d-11ee-0a80-0ea80003aeb1 + <Наименование>Основной склад + <ТипСклада>Оптовый + + <Руководитель> + <Ссылка>a1621e5b-9a3d-11ee-0a80-0ea80003aeae + <ФИО>Беляев Андрей Юрьевич + <Фамилия>Беляев + <Имя>Андрей + <Отчество>Юрьевич + <ИНН>263605160270 + + <БанковскийСчетОрганизации> + <Ссылка>a1622338-9a3d-11ee-0a80-0ea80003aeaf + <НомерСчета>40802810860270001979 + <Банк> + <Ссылка>a1622338-9a3d-11ee-0a80-0ea80003aeaf + <ДанныеКлассификатораБанков> + <Наименование>СТАВРОПОЛЬСКОЕ ОТДЕЛЕНИЕ N5230 ПАО СБЕРБАНК + <БИК>040702615 + <КоррСчет>30101810907020000615 + + + <Владелец> + <ОрганизацииСсылка> + <Ссылка>a1621e5b-9a3d-11ee-0a80-0ea80003aeae + <Наименование>ИП Беляев Андрей Юрьевич + <НаименованиеСокращенное>Индивидуальный предприниматель Беляев Андрей Юрьевич + <НаименованиеПолное>Индивидуальный предприниматель Беляев Андрей Юрьевич + <ИНН>263605160270 + <ЮридическоеФизическоеЛицо>ФизическоеЛицо + + + + <Контрагент> + <Ссылка>b33e5969-6f75-11ef-0a80-0c180015f23e + <Наименование>ИП Шейн Руслана Александровича + <НаименованиеПолное>Индивидуальный предприниматель Шейн Руслан Александрович + <ИНН>263110074117 + <ЮридическоеФизическоеЛицо>ФизическоеЛицо + <СтранаРегистрации> + <Ссылка>67700c1b-63a8-11e8-80dd-0050569f5448 + <ДанныеКлассификатора> + <Код>643 + <Наименование>РОССИЯ + + + <ИндивидуальныйПредприниматель>true + + <ДанныеВзаиморасчетов> + <Договор> + <Ссылка>05f38951-6525-5a3a-b03b-9c0318c14d62 + <ВидДоговора>СПокупателем + <Организация> + <Ссылка>a1621e5b-9a3d-11ee-0a80-0ea80003aeae + <Наименование>ИП Беляев Андрей Юрьевич + <НаименованиеСокращенное>Индивидуальный предприниматель Беляев Андрей Юрьевич + <НаименованиеПолное>Индивидуальный предприниматель Беляев Андрей Юрьевич + <ИНН>263605160270 + <ЮридическоеФизическоеЛицо>ФизическоеЛицо + + <Контрагент> + <Ссылка>b33e5969-6f75-11ef-0a80-0c180015f23e + <Наименование>ИП Шейн Руслана Александровича + <НаименованиеПолное>Индивидуальный предприниматель Шейн Руслан Александрович + <ИНН>263110074117 + <ЮридическоеФизическоеЛицо>ФизическоеЛицо + <СтранаРегистрации> + <Ссылка>67700c1b-63a8-11e8-80dd-0050569f5448 + <ДанныеКлассификатора> + <Код>643 + <Наименование>РОССИЯ + + + <ИндивидуальныйПредприниматель>true + + <ВалютаВзаиморасчетов> + <Ссылка>a164f3fe-9a3d-11ee-0a80-0ea80003aeb6 + <ДанныеКлассификатора> + <Код>643 + <Наименование>руб + + + <РасчетыВУсловныхЕдиницах>false + <Наименование>Основной договор + + <ВалютаВзаиморасчетов> + <Ссылка>a164f3fe-9a3d-11ee-0a80-0ea80003aeb6 + <ДанныеКлассификатора> + <Код>643 + <Наименование>руб + + + <КурсВзаиморасчетов>1 + <КратностьВзаиморасчетов>1 + <РасчетыВУсловныхЕдиницах>false + + <Налогообложение>ПродажаОблагаетсяНДС + <Товары> + <Строка> + <ДанныеНоменклатуры> + <Номенклатура> + <Ссылка>cbb6483a-9fc3-11ee-0a80-03c000028f54 + <НаименованиеПолное>Аркадный автомат «Миллениум» + <КодВПрограмме>1348865535 + <Наименование>Аркадный автомат «Миллениум» + <ВидНоменклатуры> + <Наименование>Товар + + + + <ЕдиницаИзмерения> + <Ссылка>19f1edc0-fc42-4001-94cb-c9ec9c62ec10 + <ДанныеКлассификатора> + <Код>796 + <Наименование>шт + + + <Количество>1.0 + <Сумма>175320.00 + <Цена>175320.00 + <СтавкаНДС> + <Ставка>5 + <РасчетнаяСтавка>false + <НеОблагается>false + <ВидСтавки>Общая + <Страна> + <Ссылка>67700c1b-63a8-11e8-80dd-0050569f5448 + <ДанныеКлассификатора> + <Код>643 + <Наименование>РОССИЯ + + + + <СуммаНДС>8348.57 + <ТипЗапасов>СобственныеТовары + <СчетУчета>43 + <СчетДоходов>90.01.1 + <СчетРасходов>90.02.1 + <СчетУчетаНДСПоРеализации>90.03 + <ИдентификаторСтроки>719bc369-abed-42f3-b1fb-3202deac4c91 + <ПрослеживаемыйТовар>false + + <Строка> + <ДанныеНоменклатуры> + <Номенклатура> + <Ссылка>a9c82ddc-8898-11f0-0a80-192800069fd6 + <НаименованиеПолное>Бумажные палочки для сладкой ваты 1000 шт. + <КодВПрограмме>13613651714 + <Наименование>Бумажные палочки для сладкой ваты 1000 шт. + <ВидНоменклатуры> + <Наименование>Товар + + + + <ЕдиницаИзмерения> + <Ссылка>19f1edc0-fc42-4001-94cb-c9ec9c62ec10 + <ДанныеКлассификатора> + <Код>796 + <Наименование>шт + + + <Количество>1.0 + <Сумма>9000.00 + <Цена>9000.00 + <СтавкаНДС> + <Ставка>5 + <РасчетнаяСтавка>false + <НеОблагается>false + <ВидСтавки>Общая + <Страна> + <Ссылка>67700c1b-63a8-11e8-80dd-0050569f5448 + <ДанныеКлассификатора> + <Код>643 + <Наименование>РОССИЯ + + + + <СуммаНДС>428.57 + <ТипЗапасов>СобственныеТовары + <СчетУчета>43 + <СчетДоходов>90.01.1 + <СчетРасходов>90.02.1 + <СчетУчетаНДСПоРеализации>90.03 + <ИдентификаторСтроки>09b3242c-98a0-4e7e-8067-4b00daaf11c3 + <ПрослеживаемыйТовар>false + + <Строка> + <ДанныеНоменклатуры> + <Номенклатура> + <Ссылка>6c2d6ea1-691b-11ef-0a80-02a4003a4623 + <НаименованиеПолное>Вендинг сладкой ваты «Сладкая робо вата» + <КодВПрограмме>13613650778 + <Наименование>Вендинг сладкой ваты «Сладкая робо вата» + <ВидНоменклатуры> + <Наименование>Товар + + + + <ЕдиницаИзмерения> + <Ссылка>19f1edc0-fc42-4001-94cb-c9ec9c62ec10 + <ДанныеКлассификатора> + <Код>796 + <Наименование>шт + + + <Количество>1.0 + <Сумма>741000.00 + <Цена>741000.00 + <СтавкаНДС> + <Ставка>5 + <РасчетнаяСтавка>false + <НеОблагается>false + <ВидСтавки>Общая + <Страна> + <Ссылка>67700c1b-63a8-11e8-80dd-0050569f5448 + <ДанныеКлассификатора> + <Код>643 + <Наименование>РОССИЯ + + + + <СуммаНДС>35285.71 + <ТипЗапасов>СобственныеТовары + <СчетУчета>43 + <СчетДоходов>90.01.1 + <СчетРасходов>90.02.1 + <СчетУчетаНДСПоРеализации>90.03 + <ИдентификаторСтроки>a9631bfc-ed88-4469-bf78-904da0ab8604 + <ПрослеживаемыйТовар>false + + <Строка> + <ДанныеНоменклатуры> + <Номенклатура> + <Ссылка>53ee7f48-9a4c-11ee-0a80-0ce70015d365 + <НаименованиеПолное>Детский аркадный автомат для кафе «Мультигейм» 3240 игр + <КодВПрограмме>755190564 + <Наименование>Детский аркадный автомат для кафе «Мультигейм» 3240 игр + <ВидНоменклатуры> + <Наименование>Товар + + + + <ЕдиницаИзмерения> + <Ссылка>19f1edc0-fc42-4001-94cb-c9ec9c62ec10 + <ДанныеКлассификатора> + <Код>796 + <Наименование>шт + + + <Количество>1.0 + <Сумма>104310.00 + <Цена>104310.00 + <СтавкаНДС> + <Ставка>5 + <РасчетнаяСтавка>false + <НеОблагается>false + <ВидСтавки>Общая + <Страна> + <Ссылка>67700c1b-63a8-11e8-80dd-0050569f5448 + <ДанныеКлассификатора> + <Код>643 + <Наименование>РОССИЯ + + + + <СуммаНДС>4967.14 + <ТипЗапасов>СобственныеТовары + <СчетУчета>43 + <СчетДоходов>90.01.1 + <СчетРасходов>90.02.1 + <СчетУчетаНДСПоРеализации>90.03 + <ИдентификаторСтроки>d273ce51-2d74-42ce-b795-690d2e2b2f9b + <ПрослеживаемыйТовар>false + + <Строка> + <ДанныеНоменклатуры> + <Номенклатура> + <Ссылка>0fbacb1c-a57e-11ef-0a80-18b7002f9b9a + <НаименованиеПолное>Детский игровой автомат «Безумные мотогонки» + <КодВПрограмме>13613650909 + <Наименование>Детский игровой автомат «Безумные мотогонки» + <ВидНоменклатуры> + <Наименование>Товар + + + + <ЕдиницаИзмерения> + <Ссылка>19f1edc0-fc42-4001-94cb-c9ec9c62ec10 + <ДанныеКлассификатора> + <Код>796 + <Наименование>шт + + + <Количество>1.0 + <Сумма>176700.00 + <Цена>176700.00 + <СтавкаНДС> + <Ставка>5 + <РасчетнаяСтавка>false + <НеОблагается>false + <ВидСтавки>Общая + <Страна> + <Ссылка>67700c1b-63a8-11e8-80dd-0050569f5448 + <ДанныеКлассификатора> + <Код>643 + <Наименование>РОССИЯ + + + + <СуммаНДС>8414.29 + <ТипЗапасов>СобственныеТовары + <СчетУчета>43 + <СчетДоходов>90.01.1 + <СчетРасходов>90.02.1 + <СчетУчетаНДСПоРеализации>90.03 + <ИдентификаторСтроки>6336614f-f7af-4ba4-9ab0-7bea95c272b9 + <ПрослеживаемыйТовар>false + + <Строка> + <ДанныеНоменклатуры> + <Номенклатура> + <Ссылка>9cd64f93-9a4c-11ee-0a80-0ce7001624bf + <НаименованиеПолное>Детский игровой автомат с видео игрой гонки «Формула» + <КодВПрограмме>1204517860 + <Наименование>Детский игровой автомат с видео игрой гонки «Формула» + <ВидНоменклатуры> + <Наименование>Товар + + + + <ЕдиницаИзмерения> + <Ссылка>19f1edc0-fc42-4001-94cb-c9ec9c62ec10 + <ДанныеКлассификатора> + <Код>796 + <Наименование>шт + + + <Количество>1.0 + <Сумма>318160.00 + <Цена>318160.00 + <СтавкаНДС> + <Ставка>5 + <РасчетнаяСтавка>false + <НеОблагается>false + <ВидСтавки>Общая + <Страна> + <Ссылка>67700c1b-63a8-11e8-80dd-0050569f5448 + <ДанныеКлассификатора> + <Код>643 + <Наименование>РОССИЯ + + + + <СуммаНДС>15150.48 + <ТипЗапасов>СобственныеТовары + <СчетУчета>43 + <СчетДоходов>90.01.1 + <СчетРасходов>90.02.1 + <СчетУчетаНДСПоРеализации>90.03 + <ИдентификаторСтроки>42505995-3e91-4542-bcc3-7ea20f3bfe19 + <ПрослеживаемыйТовар>false + + <Строка> + <ДанныеНоменклатуры> + <Номенклатура> + <Ссылка>4d51ca91-9a4c-11ee-0a80-0ce70015cb96 + <НаименованиеПолное>Жетоны 25мм + <КодВПрограмме>1259981874 + <Наименование>Жетоны 25мм + <ВидНоменклатуры> + <Наименование>Товар + + + + <ЕдиницаИзмерения> + <Ссылка>19f1edc0-fc42-4001-94cb-c9ec9c62ec10 + <ДанныеКлассификатора> + <Код>796 + <Наименование>шт + + + <Количество>500.0 + <Сумма>5500.00 + <Цена>11.00 + <СтавкаНДС> + <Ставка>5 + <РасчетнаяСтавка>false + <НеОблагается>false + <ВидСтавки>Общая + <Страна> + <Ссылка>67700c1b-63a8-11e8-80dd-0050569f5448 + <ДанныеКлассификатора> + <Код>643 + <Наименование>РОССИЯ + + + + <СуммаНДС>261.90 + <ТипЗапасов>СобственныеТовары + <СчетУчета>43 + <СчетДоходов>90.01.1 + <СчетРасходов>90.02.1 + <СчетУчетаНДСПоРеализации>90.03 + <ИдентификаторСтроки>aa1cbe31-942f-4815-89d3-82b87f64da8a + <ПрослеживаемыйТовар>false + + <Строка> + <ДанныеНоменклатуры> + <Номенклатура> + <Ссылка>7cf119b7-32c7-11ef-0a80-16720008016e + <НаименованиеПолное>Игровой автомат настольный футбол «Rush Ball» + <КодВПрограмме>13613650631 + <Наименование>Игровой автомат настольный футбол «Rush Ball» + <ВидНоменклатуры> + <Наименование>Товар + + + + <ЕдиницаИзмерения> + <Ссылка>19f1edc0-fc42-4001-94cb-c9ec9c62ec10 + <ДанныеКлассификатора> + <Код>796 + <Наименование>шт + + + <Количество>1.0 + <Сумма>361000.00 + <Цена>361000.00 + <СтавкаНДС> + <Ставка>5 + <РасчетнаяСтавка>false + <НеОблагается>false + <ВидСтавки>Общая + <Страна> + <Ссылка>67700c1b-63a8-11e8-80dd-0050569f5448 + <ДанныеКлассификатора> + <Код>643 + <Наименование>РОССИЯ + + + + <СуммаНДС>17190.48 + <ТипЗапасов>СобственныеТовары + <СчетУчета>43 + <СчетДоходов>90.01.1 + <СчетРасходов>90.02.1 + <СчетУчетаНДСПоРеализации>90.03 + <ИдентификаторСтроки>67dfdab3-3f73-45e0-ba53-3effadca980a + <ПрослеживаемыйТовар>false + + <Строка> + <ДанныеНоменклатуры> + <Номенклатура> + <Ссылка>667481c1-39fc-11f0-0a80-11f800290b1e + <НаименованиеПолное>Купюроприемник ICT (BS7/V7) с установкой + <КодВПрограмме>13613651519 + <Наименование>Купюроприемник ICT (BS7/V7) с установкой + <ВидНоменклатуры> + <Наименование>Товар + + + + <ЕдиницаИзмерения> + <Ссылка>19f1edc0-fc42-4001-94cb-c9ec9c62ec10 + <ДанныеКлассификатора> + <Код>796 + <Наименование>шт + + + <Количество>1.0 + <Сумма>28000.00 + <Цена>28000.00 + <СтавкаНДС> + <Ставка>5 + <РасчетнаяСтавка>false + <НеОблагается>false + <ВидСтавки>Общая + <Страна> + <Ссылка>67700c1b-63a8-11e8-80dd-0050569f5448 + <ДанныеКлассификатора> + <Код>643 + <Наименование>РОССИЯ + + + + <СуммаНДС>1333.33 + <ТипЗапасов>СобственныеТовары + <СчетУчета>43 + <СчетДоходов>90.01.1 + <СчетРасходов>90.02.1 + <СчетУчетаНДСПоРеализации>90.03 + <ИдентификаторСтроки>627b1588-9cc4-4ab8-a3c2-938992a6270d + <ПрослеживаемыйТовар>false + + <Строка> + <ДанныеНоменклатуры> + <Номенклатура> + <Ссылка>9b878b30-9a4c-11ee-0a80-0ce7001622d2 + <НаименованиеПолное>«Ретро игры — Приключения» аркадный автомат + <КодВПрограмме>1168543812 + <Наименование>«Ретро игры — Приключения» аркадный автомат + <ВидНоменклатуры> + <Наименование>Товар + + + + <ЕдиницаИзмерения> + <Ссылка>19f1edc0-fc42-4001-94cb-c9ec9c62ec10 + <ДанныеКлассификатора> + <Код>796 + <Наименование>шт + + + <Количество>1.0 + <Сумма>131040.00 + <Цена>131040.00 + <СтавкаНДС> + <Ставка>5 + <РасчетнаяСтавка>false + <НеОблагается>false + <ВидСтавки>Общая + <Страна> + <Ссылка>67700c1b-63a8-11e8-80dd-0050569f5448 + <ДанныеКлассификатора> + <Код>643 + <Наименование>РОССИЯ + + + + <СуммаНДС>6240.00 + <ТипЗапасов>СобственныеТовары + <СчетУчета>43 + <СчетДоходов>90.01.1 + <СчетРасходов>90.02.1 + <СчетУчетаНДСПоРеализации>90.03 + <ИдентификаторСтроки>f34776ef-38fd-43c6-b9c5-9a48d787a408 + <ПрослеживаемыйТовар>false + + <Строка> + <ДанныеНоменклатуры> + <Номенклатура> + <Ссылка>fcea6e05-19f5-11f0-0a80-09cb00100d9c + <НаименованиеПолное>«Ретро игры — Стрелялки» аркадный автомат + <КодВПрограмме>13613651477 + <Наименование>«Ретро игры — Стрелялки» аркадный автомат + <ВидНоменклатуры> + <Наименование>Товар + + + + <ЕдиницаИзмерения> + <Ссылка>19f1edc0-fc42-4001-94cb-c9ec9c62ec10 + <ДанныеКлассификатора> + <Код>796 + <Наименование>шт + + + <Количество>1.0 + <Сумма>131040.00 + <Цена>131040.00 + <СтавкаНДС> + <Ставка>5 + <РасчетнаяСтавка>false + <НеОблагается>false + <ВидСтавки>Общая + <Страна> + <Ссылка>67700c1b-63a8-11e8-80dd-0050569f5448 + <ДанныеКлассификатора> + <Код>643 + <Наименование>РОССИЯ + + + + <СуммаНДС>6240.00 + <ТипЗапасов>СобственныеТовары + <СчетУчета>43 + <СчетДоходов>90.01.1 + <СчетРасходов>90.02.1 + <СчетУчетаНДСПоРеализации>90.03 + <ИдентификаторСтроки>85229b7d-1fad-4791-9739-db2681025916 + <ПрослеживаемыйТовар>false + + <Строка> + <ДанныеНоменклатуры> + <Номенклатура> + <Ссылка>53882369-b502-11ee-0a80-14f00004e461 + <НаименованиеПолное>Терминал Vendista Pulse 2.5 для бесконтактной оплаты картой, с установкой + <КодВПрограмме>1361364430 + <Наименование>Терминал Vendista Pulse 2.5 для бесконтактной оплаты картой, с установкой + <ВидНоменклатуры> + <Наименование>Товар + + + + <ЕдиницаИзмерения> + <Ссылка>19f1edc0-fc42-4001-94cb-c9ec9c62ec10 + <ДанныеКлассификатора> + <Код>796 + <Наименование>шт + + + <Количество>7.0 + <Сумма>91000.00 + <Цена>13000.00 + <СтавкаНДС> + <Ставка>5 + <РасчетнаяСтавка>false + <НеОблагается>false + <ВидСтавки>Общая + <Страна> + <Ссылка>67700c1b-63a8-11e8-80dd-0050569f5448 + <ДанныеКлассификатора> + <Код>643 + <Наименование>РОССИЯ + + + + <СуммаНДС>4333.33 + <ТипЗапасов>СобственныеТовары + <СчетУчета>43 + <СчетДоходов>90.01.1 + <СчетРасходов>90.02.1 + <СчетУчетаНДСПоРеализации>90.03 + <ИдентификаторСтроки>c00db2af-9e8c-4910-8914-489e95b4a70d + <ПрослеживаемыйТовар>false + + + <СпособПогашенияЗадолженности>Автоматически + <КомплектПечатныхДокументовПодписанПолучен>false + <ЭтоУПД>false + + + diff --git a/modules/moysklad_client.py b/modules/moysklad_client.py index a44d888..c81b16c 100644 --- a/modules/moysklad_client.py +++ b/modules/moysklad_client.py @@ -42,6 +42,15 @@ class MoySkladClient: logger.info("Клиент МойСклад инициализирован") + @staticmethod + def _extract_id(value: str) -> str: + """Extract an entity UUID from a MoySklad href or raw id.""" + if value.startswith("http"): + value = value.split("/")[-1] + if "?" in value: + value = value.split("?")[0] + return value + def _make_request( self, method: str, @@ -197,6 +206,20 @@ class MoySkladClient: logger.info(f"Получение контрагента {agent_id}") return self._make_request("GET", f"entity/counterparty/{agent_id}") + + def get_agent(self, agent_meta: Dict) -> Dict: + """Load an agent using its MoySklad entity type.""" + meta = agent_meta.get("meta", agent_meta) + href = meta.get("href", "") + entity_type = meta.get("type", "counterparty") + agent_id = self._extract_id(href) + + if entity_type == "organization": + return self.get_organization(agent_id) + if entity_type == "counterparty": + return self.get_counterparty(agent_id) + + return self._make_request("GET", f"entity/{entity_type}/{agent_id}") def get_product(self, product_id: str) -> Dict: """ @@ -380,6 +403,7 @@ class MoySkladClient: Returns: Список банковских счетов """ + entity_id = self._extract_id(entity_id) endpoint = f"entity/{entity_type}/{entity_id}/accounts" logger.info(f"Получение счетов {entity_type}/{entity_id}") result = self._make_request("GET", endpoint) @@ -413,7 +437,7 @@ class MoySkladClient: if "organization" in order: org_meta = order["organization"] if "meta" in org_meta: - org_id = org_meta["meta"]["href"].split("/")[-1] + org_id = self._extract_id(org_meta["meta"]["href"]) result["organization"] = self.get_organization(org_id) # Получаем банковские счета организации result["org_accounts"] = self.get_accounts( @@ -423,13 +447,26 @@ class MoySkladClient: # Контрагент (покупатель) if "agent" in order: agent_meta = order["agent"] + if "name" in agent_meta: + result["counterparty"] = agent_meta if "meta" in agent_meta: - agent_id = agent_meta["meta"]["href"].split("/")[-1] - result["counterparty"] = self.get_counterparty(agent_id) + meta = agent_meta["meta"] + agent_id = self._extract_id(meta["href"]) + agent_type = meta.get("type", "counterparty") + if result["counterparty"] is None: + result["counterparty"] = self.get_agent(agent_meta) # Получаем банковские счета контрагента - result["cp_accounts"] = self.get_accounts( - "counterparty", agent_id - ) + try: + result["cp_accounts"] = self.get_accounts( + agent_type, agent_id + ) + except MoySkladAPIError as e: + logger.warning( + "Could not load %s accounts %s: %s", + agent_type, + agent_id, + e + ) # Грузополучатель (если указан) if "consignee" in order and order["consignee"]: @@ -439,8 +476,7 @@ class MoySkladClient: result["consignee"] = consignee_data # Если только meta - загружаем отдельно elif "meta" in consignee_data: - consignee_id = consignee_data["meta"]["href"].split("/")[-1] - result["consignee"] = self.get_counterparty(consignee_id) + result["consignee"] = self.get_agent(consignee_data) # Добавляем адрес доставки из заказа, если он указан if result.get("consignee") and "shipmentAddress" in order: diff --git a/requirements_gui.txt b/requirements_gui.txt index 942efe6..c80e3c6 100644 --- a/requirements_gui.txt +++ b/requirements_gui.txt @@ -31,3 +31,5 @@ pywin32-ctypes==0.2.2 # Утилиты python-dotenv==1.0.0 +pydantic==2.5.0 +pydantic-settings==2.1.0