Как выполнить код python в 1с
Обновлено: 07.07.2024
Язык сайта
Рубрики
Свежие записи
Друзья резиденции
Метки
Архивы
Реклама
-
- 165 493 Просмотра (ов) - 101 413 Просмотра (ов) - 63 714 Просмотра (ов) - 54 050 Просмотра (ов) - 32 356 Просмотра (ов) - 30 960 Просмотра (ов) - 29 893 Просмотра (ов) - 26 064 Просмотра (ов) - 26 033 Просмотра (ов) - 23 057 Просмотра (ов)
Счетчики
Trending
Не перестаю удивляться возможностям Python. И да, я смог немного подружить Python c 1C. По крайней мере тот минимум, который мне был нужен – работал хорошо. Сразу скажу, что зная Python, но не зная синтаксиса 1С – статья с большой вероятностью не сможет вам помочь. Но если вы представляете как устроена конфигурация 1С и знаете как писать запросы к БД на языке 1С – читайте дальше, возможно эта статья будет вам полезной.
Разобраться с подключением к 1С из Python через Com мне помогла статья «Моя интеграция с 1С»
В итоге я написал вот такой маленький модуль, который использовал в дальнейших своих маленьких скриптах:
Метод класса для подключения к БД.
Переменная, которая хранит строку подключения. В ней нужно указать данные своей базы 1С.
Смысл этой строчки не очень мне понятен – оставил как в исходнике.
Метод класса для получения результатов SQL запроса. В переменную «querytxt» передается SQL запрос на языке 1C.
Передаем запрос в 1С.
Выполняем запрос и сохраняем результат в атрибут класса self.query – из этой переменной уже достается результат SQL запроса.
Метод класса, возвращает уникальный ключ элемента данных в 1С по ссылке на объект данных в 1С (вдруг кому-то пригодится, как это пригодилось мне).
Теперь о том как использовать этот маленький модуль. Тут все просто – предназначен он для получения данных из SQL запроса. Поэтому сначала пишем запрос, например такой:
Создаем экземпляр класса, инициализируем подключение к модулю и к 1С:
После успешного подключение появится строчка:
Передаем запрос в 1С
в атрибуте c.query_result будет результат запроса, который будет храниться как объект приблизительно вот в таком виде:
Code | Name | |
Line 1 | Code 1 | Name 1 |
Line 2 | Code 2 | Name 2 |
… | … | … |
Line N | Code N | Name N |
Если в текстовом запросе (переменная q) не создавать латинского алиаса, то данные в результатах запроса будут храниться в оригинальных названиях столбцов, т.е. если
То в c.query_result данные будут в таком виде:
Код | НаименованиеПолное | |
Line 1 | Code 1 | Name 1 |
Line 2 | Code 2 | Name 2 |
… | … | … |
Line N | Code N | Name N |
Далее, думаю, понятно как с этим работать. Думаю, при желании можно даже ежемесячно вытаскивать данные по продажам и крутить их в Pandas. Эх, жалко в ближайшее время у меня не будет под рукой 1С -–хотел сравнить что работает лучше: Python+1C+Pandas или 1С+PowerBI?
В целом мой модуль меня устраивал. Из минусов – долгое установление соединения с 1С по COM, особенно если ты сам подключаешься к корпоративной сети по VPN. Вот когда соединение установлено – данные достаются уже быстрее.
Да, модуль не большой, но функциональный – его можно обвешивать дополнительными возможностями. Думаю, даже можно добавить методы, которые смогут и обновлять данные в 1С – у меня просто таких потребностей не было.
Несмотря на простоту кода, скопировав его к себе в программу, при попытке запуска у вас могут возникнуть проблемы.
Вот самые распространённые проблемы и их решения:
Решение: определяем какой версии клиент используется при подключении к интересующей нас БД 1С. Регистрируем библиотеку следующим образом:
Нажмите на Win+R, в появившемся окне «Выполнить» введите следующую строку (возможно потребуются права администратора):
C:\Windows\SysWOW64\regsvr32 «c:\Program Files(x86)\1cv8\8.3.12.1469\bin\comcntr.dll»
Где вместо 8.3.12.1469 нужно указать нужную вам версию 1С клиента
Природа ошибки: ошибка в строке подключения – не корректно указаны данные сервера, базы данных, или логина с паролем
Решение: в моём случае проблема была в логине – я сделал себе в 1С обычный логин в дополнение к доменной учетной записи и использовал её – главное, чтобы в логине не было пробелов. Вот как раз из-за пробела у меня и вылетала эта ошибка.
В файле указана версия python, совместимая с сервером.
2. Собственно скачиваем и устанавливаем python.
Python устанавливаем в корень диска C
3. Для подключения python к postgresql нужно в папке «C:\Python37» взять dllку « python3.dll » скопировать ее в «C:\Program Files\PostgreSQL\13\lib» и переименовать ее в python37.dll .
4. Если вы только установили PostgreSQL и pgAdmin 4 не хочет открываться, pgadmin можно установить в python.
Сервер админа запускается командой « pgadmin4 »
Если не хочется вводить пароль и логин, то в файле config.py значение SERVER_MODE устанавливаем False.
5. Включаем поддержку языка python
В pgADmin запускаем редактор SQL
В переменных PYTHONHOME и PYTHONPATH указываем путь до папки с python. Перезагружаем компьютер, пробуем опять выполнить запрос CREATE LANGUAGE plpython3u.
6. Создаем хранимую процедуру.
Sys.path.append() устанавливает рабочий каталог для скриптов python.
В рабочем каталоге создаем файл testy.py с функцией tests.
В SQL редакторе выполним запрос SELECT public.test()
Если все правильно сделали, то увидите в результате выполнения строку «Внешний скрипт»
7. Настраиваем драйвер ODBC
8. Создаем внешнюю обработку с процедурой на клиенте.
И если нет ошибок, получаем строку (Внешний скрипт) из скрипта на python, как показано на принтскрине выше.
Специальные предложения
В статье нет решения основной задачи, кроме как запуск питонячего скрипта через постгрес. Можно скрипт запустить и через <КомандаСистемы()>
Пункт 3 данной инструкции не нужен. Шаманство какое то :)
Пункт 5 Добавить в переменные среды PATH путь к питону. В нашем случае C:\Python37 Перезагружаем компьютер.
Проверено на Windows 2008; postgresql12.5-3.1C; Python 3.7.9
Можно в ручную Питон не устанавливать. По окончании установки, предлагается запустить установщик дополнительных компонентов stackbuilder. Отмечаем "EDB Language Pack v1.0-5". Будет установлен Python 3.7.4 в каталог C:\edb\languagepack\v1\Python-3.7\ Прописываем этот путь в переменную среды PATH и поддержка языка включается без третьего "шаманского" пункта.
Проверено на Windows 2019; postgresql12.5-3.1C
Читайте также: