Как стать автором
Обновить

Хранилище внешних обработок 1С на python

Время на прочтение4 мин
Количество просмотров4.3K

Хотелось бы поделиться своим опытом создания простенького хранилища внешних обработок 1С. Если Вы программист 1С и ваши коллеги постоянно затирают вам код внешних обработок то это статья для вас!

Перейдем сразу к описанию:

Алгоритм работы очень простой

Захват обработки

  1. Заходим в каталог рабочей базы где хранятся внешние обработки

  2. Кликаем правой кнопкой на файл с расширением .epf (внешняя обработка)

  3. В появившемся меню жмакаем "Захватить"

  4. Файл помечается "только на чтение"

  5. Файл копируется к вам в указанную папку см. "UsersConfig.json"

  6. Данные файла сохраняются в "ЗахваченныеФайлы.json"

  7. Путь к сохраненному файлу копируется в буфер, т. ч. можно сразу открывать конфигуратор и работать.

Примечание: захватить обработку можно без копирования файла!

Поместить обработку

  1. Поместить обработку можно как из каталога рабочей базы, так и из того, что вы указали в "UsersConfig.json"

  2. Кликаем правой кнопкой на файл с расширением .epf (внешняя обработка)

  3. В появившемся меню жмакаем "Поместить"

  4. Свойство "только на чтение" снимается

  5. Файл копируется в каталог рабочей базы

  6. Данные о файле удаляются из "ЗахваченныеФайлы.json"

Примечание: поместить обработку можно без копирования файла!

Что надо сделать что бы это заработало?

  1. Установить Python всем заинтересованным пользователям

  2. Python должен быть одной версии и установлен по одинаковому пути у всех пользователей, например "C:\Program Files\Python39"

  3. Создать проект (python) хранилища на локальной машине. Рекомендую использовать PyCharm.

  4. Исходники проекта можно скачать тут.

  5. Не забываем накатить requirements.txt -> pip install requirements.txt (в терминале PyCharm) !!!

  6. Копируем файлы проекта в общую папку, куда все (ваши коллеги) имеют доступ, копируем вместе с venv (виртуальное окружение python)

  7. Добавим в контекстное меню для файлов с расширением .epf две кнопки захватить/поместить. Необходимо воспользоваться файлом Добавить пункты меню.reg

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\V83.ExternalProcessing\Shell\Захватить]
@="Захватить"
"Position"="Bottom"
"Icon"="%SystemRoot%\\System32\\SHELL32.dll,47"

[HKEY_CLASSES_ROOT\V83.ExternalProcessing\Shell\Захватить\command]
@="\"\\\\app1\\1C\\work\\Вложения\\Python_projects\\epf_Controll\\venv\\Scripts\\pythonw.exe\" \"\\\\app1\\1C\\work\\Вложения\\Python_projects\\epf_Controll\\main.pyw\" \"%1\" \"capture	\""

[HKEY_CLASSES_ROOT\V83.ExternalProcessing\Shell\Поместить]
@="Поместить"
"Position"="Bottom"
"Icon"="%SystemRoot%\\System32\\SHELL32.dll,132"

[HKEY_CLASSES_ROOT\V83.ExternalProcessing\Shell\Поместить\command]
@="\"\\\\app1\\1C\\work\\Вложения\\Python_projects\\epf_Controll\\venv\\Scripts\\pythonw.exe\" \"\\\\app1\\1C\\work\\Вложения\\Python_projects\\epf_Controll\\main.pyw\" \"%1\" \"put\""

Обращаю внимание!!! Мы используем 1С 8.3 в Вашем случае HKEY_CLASSES_ROOT\V83.ExternalProcessing может иметь иное значение!!!

[HKEY_CLASSES_ROOT\V83.ExternalProcessing\Shell\Захватить\command]
@="\"\\\\app1\\1C\\work\\Вложения\\Python_projects\\epf_Controll\\venv\\Scripts\\pythonw.exe\" \"\\\\app1\\1C\\work\\Вложения\\Python_projects\\epf_Controll\\main.pyw\" \"%1\" \"capture\""

[HKEY_CLASSES_ROOT\V83.ExternalProcessing\Shell\Захватить\command]
@="[Путь до запускатора python из папки venv] [Путь до скрипта - передается параметром в запускотор] [Путь к файлу который вы захватываете/отпускаете - передается первым параметром в скрипт] [Тип операции захватить/отпустить - передается вторым параметром в скрипт]"

Для работы с расширениями можно использовать filetypesman

После настройки данного файла вашим коллегам останется только стартануть его!

8. Настроим "main.pyw"

# -*- coding: utf-8 -*-

import pyperclip
import datetime
import win32con
import win32api
import logging
import shutil
import ctypes
import json
import sys
import os
CAPTURED_FILES_PATH = r"\app1\1C\work\Вложения\Python_projects\epf_Controll\ЗахваченныеФайлы.json"
USERS_CONFIG        = r"\app1\1C\work\Вложения\Python_projects\epf_Controll\UsersConfig.json"
OPERATION_LOG_FILE  = r"\app1\1C\work\Вложения\Python_projects\epf_Controll\log.txt"
MAIN_DIR            = r"\app1\1C\work"

...

def file_dir_is_ok(file):
    file_lower = file.lower()
    if not file_lower.startswith(MAIN_DIR.lower()):
        msg = "Вы пытаетесь захватить обработку вне рабочего каталога!\r\rДоверенные пути:\r\r" \
              "1.'\\app1\1C\work'\r\r" \
              "2.'\\app1\1C\work\Вложения'\r\r" \
              "3.'\\app1\1C\work\ExtForms'"
        title = r'Неверная директория!'
        warning(msg, title)
        return False
    return True
 
 ...

MAIN_DIR - корневой каталог рабочей базы, по нему прога проверяет там ли вы пытаетесь захватить файл.

Поменять подсказку msg.

9. Настроим "UsersConfig.json"

{
    "IT-99907262": {
            "ExtForms": "\\\\1C\\1Cv80\\krow42\\Extforms\\",
            "Вложения": "\\\\1C\\1Cv80\\krow42\\Вложения\\"
    }
}

{
    "[Имя компьютера]": {
            "[Ключ 1]": [Путь 1],
            "[Ключ 2]": [Путь 2]
    }
}

Ключ - это то, что будет пытаться найти прога в пути захватываемого файла, что бы выбрать один из путей по которому она будет сохранять захватываемый файл

Бонусом можете оформить в системе 1С монитор захваченных обработок. Например так:

Готово, можно пользоваться! Если понравится, можно провернуть данный трюк и с другими расширениями файлов, по аналогии...)

Допускаю, что некоторые моменты я упустил при описании порядка настройки, т. ч. пишите в комментарии чего не хватает, раскрою подробнее!

Теги:
Хабы:
Всего голосов 4: ↑4 и ↓0+4
Комментарии12

Публикации

Истории

Работа

Аналитик 1С
3 вакансии
Консультант 1С
72 вакансии
Python разработчик
137 вакансий
Data Scientist
83 вакансии
Программист 1С
48 вакансий

Ближайшие события