Как выполнить код 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; 1C; программист; programmer; код; модуль; простое решение; COM; ООП;

Не перестаю удивляться возможностям 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 будет результат запроса, который будет храниться как объект приблизительно вот в таком виде:

CodeName
Line 1Code 1Name 1
Line 2Code 2Name 2
Line NCode NName N

Если в текстовом запросе (переменная q) не создавать латинского алиаса, то данные в результатах запроса будут храниться в оригинальных названиях столбцов, т.е. если

То в c.query_result данные будут в таком виде:

КодНаименованиеПолное
Line 1Code 1Name 1
Line 2Code 2Name 2
Line NCode NName 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, как показано на принтскрине выше.

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

>>> "Поступила задача от руководства сделать парсер сайтов с сохранением результатов в 1С."
В статье нет решения основной задачи, кроме как запуск питонячего скрипта через постгрес. Можно скрипт запустить и через <КомандаСистемы()>

Пункт 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

Читайте также: