Хотелось бы поделиться своим опытом создания простенького хранилища внешних обработок 1С. Если Вы программист 1С и ваши коллеги постоянно затирают вам код внешних обработок то это статья для вас!
Перейдем сразу к описанию:
Алгоритм работы очень простой
![](https://habrastorage.org/getpro/habr/upload_files/058/d3d/5af/058d3d5af1fd22b883e8e58993f0b317.png)
Захват обработки
-
Заходим в каталог рабочей базы где хранятся внешние обработки
-
Кликаем правой кнопкой на файл с расширением .epf (внешняя обработка)
-
В появившемся меню жмакаем «Захватить»
-
Файл помечается «только на чтение»
-
Файл копируется к вам в указанную папку см. «UsersConfig.json»
-
Данные файла сохраняются в «ЗахваченныеФайлы.json»
-
Путь к сохраненному файлу копируется в буфер, т. ч. можно сразу открывать конфигуратор и работать.
![](https://habrastorage.org/getpro/habr/upload_files/baa/43a/c1c/baa43ac1ca66581db7393f7d63e0d565.png)
Примечание: захватить обработку можно без копирования файла!
Поместить обработку
-
Поместить обработку можно как из каталога рабочей базы, так и из того, что вы указали в «UsersConfig.json»
-
Кликаем правой кнопкой на файл с расширением .epf (внешняя обработка)
-
В появившемся меню жмакаем «Поместить»
-
Свойство «только на чтение» снимается
-
Файл копируется в каталог рабочей базы
-
Данные о файле удаляются из «ЗахваченныеФайлы.json»
![](https://habrastorage.org/getpro/habr/upload_files/0e6/370/2fd/0e63702fd0156bd3904fbb965db2a993.png)
Примечание: поместить обработку можно без копирования файла!
Что надо сделать что бы это заработало?
-
Установить Python всем заинтересованным пользователям
-
Python должен быть одной версии и установлен по одинаковому пути у всех пользователей, например «C:\Program Files\Python39»
-
Создать проект (python) хранилища на локальной машине. Рекомендую использовать PyCharm.
-
Не забываем накатить requirements.txt -> pip install requirements.txt (в терминале PyCharm) !!!
-
Копируем файлы проекта в общую папку, куда все (ваши коллеги) имеют доступ, копируем вместе с venv (виртуальное окружение python)
-
Добавим в контекстное меню для файлов с расширением .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С монитор захваченных обработок. Например так:
Готово, можно пользоваться! Если понравится, можно провернуть данный трюк и с другими расширениями файлов, по аналогии…)
Допускаю, что некоторые моменты я упустил при описании порядка настройки, т. ч. пишите в комментарии чего не хватает, раскрою подробнее!
ссылка на оригинал статьи https://habr.com/ru/post/565446/
Добавить комментарий