Хотелось бы поделиться своим опытом создания простенького хранилища внешних обработок 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С монитор захваченных обработок. Например так:

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

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