Имя: Пароль:
1C
 
Вопрос про ЗапуститьПриложение на сервере
0 Азат
 
30.06.25
11:31
Всем доброго!

Пытаюсь выполнить скрипт python на сервере 1С (8.3.27).
Для этого запускаю команду вида "C:\Program files\Python313\python.exe C:\Folder\my_file.py"

Почему-то скрипт не отрабатывает, Return code = 1
Если в RDP открываю командную строку и выполняю этот код, то все отрабатывает норм
Служба сервера 1С работает под Local system account. права на все файлы есть.

Подскажите, куда можно копать?
1 Волшебник
 
30.06.25
11:33
может добавить кавычек?
ЗапуститьПриложение("""C:\Program files\Python313\python.exe"" C:\Folder\my_file.py");
2 Азат
 
30.06.25
12:12
(1) к сожалению, не взлетело, как и с Progra~1
3 Garykom
 
гуру
30.06.25
12:41
(0) 1. Копать в сторону bat/cmd и запуска его из 1C
2. Использовать не ЗапуститьПриложение а КомандаСистемы

bat/cmd можно программно создавать в темп
4 Kongo2019
 
30.06.25
14:11
(0)Справку читал?

При запуске "1С:Предприятия" в пакетном режиме, а также при вызове метода на сервере будет сгенерировано исключение.
5 Garykom
 
гуру
30.06.25
14:21
(4) Кстати это пример странного в 1С
Почему на сервере исключение но сама процедура доступна на сервере?

Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
6 arsik
 
гуру
30.06.25
14:25
(0) А не проще http сервис на том же питоне развернуть? Я бы так сделал.
7 Garykom
 
гуру
30.06.25
14:27
(6) ух ты а питон научился сам без веб-сервера запросы принимать?
8 Kongo2019
 
30.06.25
14:27
(6) Мы так дойдем до сервера API на Node.js
9 arsik
 
гуру
30.06.25
14:30
(6) Так вебсервер на самом питоне наваять можно, еще и скомпилировать в исполнительный, но я не про такой вариант.
Я про тот вариант, что на апаче + питон. Вебсервер скорее всего где то развернут, хоть для той же 1С.
10 Garykom
 
гуру
30.06.25
14:30
(8) одно время я думал что нода это почти серебряная пуля
но потом сильно разочаровался, закостылили все js скриптокодеры в либах
11 Garykom
 
гуру
30.06.25
14:32
(9) лично я думаю что питон там нафиг не нужен на сервере
можно или на 1С сразу сделать нужное
или использовать нечто иное

ЗЫ
Сейчас питон это как бейсик раньше
Чем то напоминает вызов из 1С скриптов на бейсике
12 Kongo2019
 
30.06.25
14:32
(9) Так если есть веб сервер на 1С, то нафиг нам тот Питон?
13 Garykom
 
гуру
30.06.25
14:33
(12) он подразумевал вызов микросервиса вместо запуска консольной проги
14 arsik
 
гуру
30.06.25
14:33
(11) На питоне сейчас много всяких парсеров, скорее оттуда ноги растут. На 1С парсер сложно реализовать.
15 Мультук
 
гуру
30.06.25
14:33
1) Не понимаю зачем питон сразу не поселили в
C:\Python313\python.exe

2) А  есть ли у Local system account права на запуск python.exe ?

3) ЗапуститьПриложение чудно конвертит pdf в jpg на сервере через ImageMagic

КодВозврата = 0;
ЗапуститьПриложение(СтрокаВыполнить, ПутьКФайлам, Истина, КодВозврата);



P.S.
Когда прозвучит волшебное "Напишите уже сервис на Go" ? :-)
16 Kongo2019
 
30.06.25
14:33
(11) Ну не скажи, я с ним всякие извращения в экселе делаю например. 1С так с экселем работать не может.
17 Garykom
 
гуру
30.06.25
14:35
(16) в смысле не может?
ты через COM/OLE с экселем или через либу?
в курсе что либ дофига есть и не только под питон
на питоне чаще всего обертки
18 Fish
 
гуру
30.06.25
14:36
(16) "1С так с экселем работать не может." - В 1С дофига платформенных методов работы с xml, который в экселе лежит.
19 rozer76
 
30.06.25
14:42
20 Kongo2019
 
30.06.25
14:44
(17) Через либу конечно. Я в курсе что их дофига. Но на Питоне тама самое простое получается. Я обычно openpyxl пользую
21 Kongo2019
 
30.06.25
14:46
(18) Дык это надо распаковать, найти, наваять, запаковать обратно.
Так и получится что я свою либу напишу, нафиг если уже готовые есть.
22 b_ru
 
30.06.25
15:41
Предположу, что какой-то пакет у Local system не установлен. По-правильному такие вещи надо с venv запускать
23 Азат
 
30.06.25
15:51
(3) пробовал, не полетело. в темп папку складывал .py, .bat и запускал.
от юзера все работает, от SYSTEM нет
24 sikuda
 
01.07.25
09:28
(20) Прямо чердачок справа сверху🔥
Я не понимаю тех людей, которые это лепят.
Если у Вас система на 1С, используйте платформу (чтение в табличный документ) или наработки БСП или инфостарт.

Если Python, то уж научитесь уж запускать Django или подобное и прикрутите туда свой openpyxl
(Кстати многие хостеры уже предлагаю Python. Сам развлекаюсь http://django.t9163188.beget.tech/catalogs/ ну и сделаем кнопку сохранения в Excel )

Зачем совместный огород ваять? Вы ненавидите тех людей, которым будете это передавать в случае ухода?
25 Fedor-1971
 
30.06.25
16:07
(23) Если есть возможность - перенастрой запуск сервиса 1С предприятия от доменного пользователя. (Не факт, что поможет, но попробуй)
Ещё, возможно, нужно проверить настройки DEP - типа система защищается от непонятных скриптов
26 Garykom
 
гуру
30.06.25
16:12
(23) runas /netonly /user:administrator "start.bat " < pass.txt
27 Kongo2019
 
30.06.25
16:13
(24) А с чего решил все что у меня все в куче?
1С своим занимается, Питон своим, Нода АПИ держит. Все четко и просто.
28 arsik
 
гуру
30.06.25
16:14
(27) Нода для питона? Не жирновато? Она жрет как не в себя.
29 Kongo2019
 
30.06.25
16:18
(28) Зато просто. Железо щас дешевое.
30 Fedor-1971
 
30.06.25
16:22
(26) Спросит пароль администратора, а вводить его некому
С таким раскладом, проще шедулер настроить на запуск скрипта раз в Сколько-то минут (и пользователя можно указать и пароля в открытом доступе нет)
31 Garykom
 
гуру
30.06.25
16:35
(30) хе pass.txt записать тоже из 1С
32 Timon1405
 
30.06.25
16:36
(0) странный хардкод, храните скрипты в обработке
Скрипт = ЭтотОбъект.ПолучитьМакет(ИмяСкрипта);
ИмяВременногоФайла = ПолучитьИмяВременногоФайла(".py");
Скрипт.Записать(ИмяВременногоФайла);
ЗапуститьПриложение("python.exe " + ИмяВременногоФайла + " " + "аргументы скрипта");
УдалитьФайлы(ИмяВременногоФайла);
33 Азат
 
30.06.25
17:14
(32) это один фиг запускать на сервере придется
34 Timon1405
 
30.06.25
17:24
(33) смысл что ПолучитьИмяВременногоФайла гарантировано создаст файл в директории доступной текущему пользователю, а не c\Folder наши админы бы за такое канделябром дали.
35 Азат
 
30.06.25
19:00
(34) пробовал так тоже. не полетело
36 Сеньор Программист
 
30.06.25
20:12
https://disk.yandex.ru/d/d-7nCwr8FvTNzg

Смотри папку ПРИМЕРЫ ВНЕШНИХ ОБРАБОТОК
Обработка "Внешний анализ.epf"

Там функции с именами ЗапуститьПриложениеPythonНаСервере.....()
Используют ЗапуститьПрограмму() (Из типовой УТ)

Добавка
В демо версии есть папка со скриптом как установить библиотеки для Питон, чтобы он хватался и на сервере и на клиенте. Возможно дело в этом. В процессе установки Питона галки надо поставить по другому если не прокатило
Ничего другого кроме типового Питона не ставить (всякие добавки к Питону могли себя прописать в качестве среды исполнения скрипта)

Еще как вариант разные языки (русский / английский) под именем клиента и под именем сервера
Тогда в скрипте надо четко указать язык перед текстовыми строками
r"Текстовая строка"
37 LLeonidov
 
01.07.25
14:26
(7) Да, можно на раз два в пару строчек поднять свой http сервис, на раз два получать события и обрабатывать, вот с веб сокет сервером чуть-чуть сложней.
Я ради развлечения поднимал в несколько потоков, хттп сервис слушает запросы, передает их выше, если надо ждет ответ от другого потока, отвечает в 1с. Работает хлеба не просит)
В прод не ушло.
38 Garykom
 
гуру
01.07.25
15:07
(37) с многопоточностью?
с любыми методами HTTP не только GET/POST?
httpS (ssl) и сертификаты?
методы авторизации кроме basic?
39 arsik
 
гуру
01.07.25
15:09
(38) Ну прям словарь какой то для айти. Осмысленное что-то будет?
40 Garykom
 
гуру
01.07.25
15:22
(39) Классический 1Сник?
41 arsik
 
гуру
01.07.25
15:25
(40) Нет, но связей между словами не вижу.
42 Garykom
 
гуру
01.07.25
15:28
(41) Связь прямая
В Питоне модуль http.server
Warning http.server is not recommended for production. It only implements basic security checks.
44 LLeonidov
 
01.07.25
19:33
(42) ну раз модуль пишет то вам точно нельзя ни какие другие протоколы авторизации поддерживать.
В целом если бы я все же запустил тот проект на питоне я бы добавил шифрование тела запроса. Ключ на сессию я в 0 реализации выдавал.
Но, если вы вдруг намекаете про то что 1с наше все, вы правы! Использовать питон нужно только после того как все варианты с 1с использованы. Но иногда приятно, что можно перевернуть пдфы, выбрать для каждого пдфа свой принтер, активировать формулы в экселе, двигать окна... ну и так по мелочи. На все это есть другие решения.
45 Garykom
 
гуру
01.07.25
22:50
(44) Я как бы за микросервисы на Го :)
Из 1С их намного лучше и удобней использовать

Поставить питон с окружением не на любой сервак дадут
А вот сохранить .exe из двоичного макета в темп и запустить - еще не видел проблемы
46 Garykom
 
гуру
01.07.25
22:55
(45)+ Да и сам питон (имхо) хрень редкостная
Не спорю что он популярен и может легко решать многие типичные задачки, которые не может 1С сама
Но если начинаются проблемы - хрена с два разберешься с полпинка
Хуже только нода когда ад зависимостей (модулей/пакетов) начинается, разных устаревших и несовместимых
47 LLeonidov
 
02.07.25
11:56
(46) Когда начинаются проблемы в любой сфере, если разбираешься с полпинка, то это не проблемы!

Сервисы на гоу это круто. Но не везде можно юзать стек, а жаль. Отдельная грусть когда у тебя ретроградные админы в компании.
Питон особенный, как и 1с... Но местами остальным языкам до него как до луны! От сообщества питона я отдельно пищу, человек задает глупый вопрос, ему мягко говорят что так не делают, а потом сразу показывают как сделать неправильно, правильно и кидают ссылку на еще один вариант. Без 100 сообщений, где тебе говорят что ты тупой. Вот этот вот язык для тупых и наивных, почти как 1с.

Недавно ковырял редаш в связке с кликхаусом. Ну все хорошо, в запросах можно один раз объявить формулу и использовать ее везде, быстро, просто, миллионы строчек запись, за пару секунд и это по хттп... Красивые диаграмки, таблички,... Можно выгрузить из BI в  эксель!
Но,... добавить так легко и нативно фильтр на таблицу, нельзя, вот эта вся мощь отбора на список от 1с из нулевых до сих пор не дефолт. Как они там живут без подобного, я не знаю.
48 Garykom
 
гуру
02.07.25
12:47
(47) А зачем админам об этом знать?
С питоном есть засады как были с переходом с версии 2.7 на 3
И в будущем будет такое же, ты никак не проконтролируешь какая версия питона с какими модулями на сервере стоит

В отличие от собранного бинарника, который можно собрать на своем компе/сервере и просто закинуть в макет 1С
Я обычно бинарники под разные ОС вместе с исходниками на Go сохраняю в макеты, в будущем если что не проблема исправить и пересобрать
49 Kongo2019
 
02.07.25
12:52
(48) А вот тут поподробнее пожалуйста.
50 Garykom
 
гуру
02.07.25
12:58
(49) Что именно подробнее?
51 vladmenleo
 
02.07.25
12:59
(0) А что сам скрипт-то делает? Если куда-нибудь по сети пытается что-то записать, то из-под Local system account не взлетит
52 Kongo2019
 
02.07.25
13:00
(50) Я обычно бинарники под разные ОС вместе с исходниками на Go сохраняю в макеты, в будущем если что не проблема исправить и пересобрать
53 Garykom
 
гуру
02.07.25
13:02
Если про бинарники на Go, так для 1С это ничем не отличается от использования разных ВК
Которые тоже по сути бинарники, на C++ или еще чем написанные
Нынче уже можно на Go писать ВК для 1С по стандарту NativeAPI, но нет смысла
Прекрасно можно использовать или запуск консольного с параметрами
Или запуск/поднятие микросервиса c общением с ним через http, как ненужен - гасим микросервис предусмотрев в нем команду для этого
54 Garykom
 
гуру
02.07.25
13:08
(52) Ну да
Дык просто макет двоичные данные делаешь
На скрине внутри первого бинарник (exe под винду, под линукс и прочие не требовалось)
Внутри второго исходник на Go

Далее банально когда надо макет во временный файл и запускаю из 1С
&НаСервере
Функция РаспознатьQRИзКартинкиНаСервере(ИмяФайлаКартинки)
	
	ИмяВременногоКаталога = ПолучитьИмяВременногоФайла();
	Попытка
		СоздатьКаталог(ИмяВременногоКаталога);
	Исключение
		
	КонецПопытки;
	
	ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
	ДвоичныеДанные = ОбработкаОбъект.ПолучитьМакет("gozxing");
	
	ИмяФайлаПриложения = ИмяВременногоКаталога + "\gozxing.exe";
	Попытка
		ДвоичныеДанные.Записать(ИмяФайлаПриложения);
	Исключение
		
	КонецПопытки;
	
	ИмяФайлаШтрихкода = ПолучитьИмяВременногоФайла("txt");
	
	ШаблонКоманды = "%1 %2 %3";
	СтрокаКоманды = СтрШаблон(ШаблонКоманды, ИмяФайлаПриложения, ИмяФайлаКартинки, ИмяФайлаШтрихкода);
	ТекущийКаталог = ИмяВременногоКаталога;
	ДождатьсяЗавершения = Истина;
	КодВозврата = "";
	Попытка
		ЗапуститьПриложение(СтрокаКоманды, ТекущийКаталог, ДождатьсяЗавершения, КодВозврата);
	Исключение
		
	КонецПопытки;
	
	ЧтениеТекста = Новый ЧтениеТекста(ИмяФайлаШтрихкода, КодировкаТекста.UTF8);
	Штрихкод = СокрЛП(ЧтениеТекста.Прочитать());
	ЧтениеТекста.Закрыть();
	ЧтениеТекста = Неопределено;
	
	Попытка
		УдалитьФайлы(ИмяФайлаКартинки);
	Исключение
	КонецПопытки;
	
	Попытка
		УдалитьФайлы(ИмяФайлаПриложения);
	Исключение
	КонецПопытки;
	
	Попытка
		УдалитьФайлы(ИмяВременногоКаталога);
	Исключение
	КонецПопытки;
	
	Попытка
		УдалитьФайлы(ИмяФайлаШтрихкода);
	Исключение
	КонецПопытки;
	
	Возврат Штрихкод;
	
КонецФункции
55 Kongo2019
 
02.07.25
13:11
(54) А блин. Два макета. Я подумал ты исходник хранишь и бинарник из него собираешь.
Хорошая идея, хранить и исходник и бинарник.
56 Garykom
 
гуру
02.07.25
13:11
(54)+ внутри gozxing_source банальный zip архив с исходниками на Go
57 Garykom
 
гуру
02.07.25
13:11
(55) Можно и в одном архиве все
И доставать из него
58 Garykom
 
гуру
02.07.25
13:16
(55) Собирать кстати тоже можно, есть golang-portable
Но нет смысла, великоват он
59 Сеньор Программист
 
02.07.25
13:40
Питон хорош тем, что может писать сам себя.
60 Kongo2019
 
02.07.25
13:56
golang хорош для API. Для скриптов чето не зашел.
61 Garykom
 
гуру
02.07.25
14:02
(60) для скриптов попробуй PowerShell
он давно и кроссплатформенный под linux тоже
https://github.com/PowerShell/PowerShell
62 arsik
 
гуру
02.07.25
14:34
(61) Тогда уж лучше 1с исполнитель
63 Garykom
 
гуру
02.07.25
14:38
(62) Вот уж гадость неимоверная
OneScript и то лучше но его тоже ставить надо
А PS он под виндой из коробки, да и под линукс уже многие используют админы
64 arsik
 
гуру
02.07.25
14:40
(63) Да с чего? То что кому то непривычно - так это одно. Мне нравиться.
65 VladZ
 
02.07.25
14:47
(0) Яйцо в утке, утка в зайце, заяц в шоке...
66 Garykom
 
гуру
02.07.25
14:48
(64) В чем преимущества этого Исполнителя?
Ладно хотя бы OneScript там язык такой же как в самой платформе 1С

Что можно (или легко) сделать на Исполнителе но нельзя (или сложно) на PS?
67 arsik
 
гуру
02.07.25
16:39
(66) Я же в (64) указал - мне нравится. И нравится больше чем PS, OneScript.
68 Garykom
 
гуру
02.07.25
17:14
(67) Вот и спрашиваю чем (почему) нравится то?
Вкусом или цветом?
69 LLeonidov
 
02.07.25
19:11
(54) я с питоном так же делаю. Ни каких тебе там зависимостей, все упаковано в один экзешник.
Но хранение исходника рядом с экзешником топ идея, возьму на вооружение, пусть еще и в хранилище будет отсвечиваться.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.