Задача: Необходимо из 1С использовать регулярные выражения (RegExp) в Linux.
Проблема: В Windows можно использовать COM-объект VBScript.Regexp. В Linux нет COM-объектов.
Решение: Устанавливаем Wine и выполняем скрипт через командную строку.
Исходные данные: Клиент-серверный вариант установки 1С. Клиенты любые, сервер - Linux (в моем случае Debian Wheezy).
Теперь по шагам
1. Установим wine (https://wiki.winehq.org/Debian).
wine ставится на i386 архитектуру.
Проверим, что она у нас стоит:
# dpkg --print-architecture
Если нет, то установим (за подробностями сюда https://wiki.debian.org/ru/Multiarch/HOWTO):
# dpkg --add-architecture i386
Установим репозиторий для установки:
wget -nc https://dl.winehq.org/wine-builds/Release.key
apt-key add Release.key
Добавим в список пакетов (/etc/apt/sources.list или отдельным файлом в папку /etc/apt/sources.list.d) строчку:
deb https://dl.winehq.org/wine-builds/debian/ DISTRO main
где DISTRO - имя вашего дистрибутива (у меня wheezy)
Собственно установка:
# apt-get update
# apt-get install --install-recommends winehq-stable
При попытке установить пакет wine на wheezy возникла ошибка:
"The method driver /usr/lib/apt/methods/https could not be found."
Репозиторий winehq использует протокол https для загрузки.
Решается установкой нужного транспорта на apt:
# apt-get install apt-transport-https
Установим полезный скрипт winetricks (с сайта, т.к. в репозитории может быть сильно устаревшим):
# wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
# chmod +x winetricks
# cp winetricks /usr/bin
Для пользователя (usr1cv8), от которого запущен сервер 1С и будет запускаться wine настраиваем его окружение:
# su - usr1cv8
$ winecfg
Установим библиотеку для работы с VBScript.
$ winetricks wsh56vb
Со временем может выйти более новая версия библиотеки, тогда будет сообщение типа: "Calling wsh56 is deprecated, please use wsh57 instead".
В этом случае устанавливаем указанную версию библиотеки (в данном случае wsh57vb).
Для платформы x64 сперва создаем окружение win32 (требуется для VBScript).
Здесь создается отдельная папка (на свой вкус, я сделал в домашней папке пользователя 1С) ~/.wine32 с библиотеками своей архитектуры.
$ WINEARCH=win32 WINEPREFIX=~/.wine32 winecfg
$ WINEPREFIX=~/.wine32 winetricks wsh56vb
Теперь о том, как я это использую
У меня есть задачи разбирать полученные СМС и по полученным совпадениям создавать и заполнять тот или иной документ.
Для этого я создаю правила обработки, в котором задаю регулярное выражение. При анализе текста СМС в случае совпадения с регулярным выражением я разбиваю текст СМС на группы (match) и подгруппы (submatch) и использую эти значения для заполнения нужного мне документа.
Скрипт VBScript и его вызов приведен на скриншотах к статье.
Командная строка вызова скрипта:
$ wine cscript.exe z:ИмяФайлаСкрипта z:ИмяФайлаШаблона z:ИмяФайлаАнализируемогоТекста > ИмяФайлаРезультата 2> ИмяФайлаОшибкок
где
- ИмяФайлаСкрипта - полное имя файла VBScript-скрипта
- ИмяФайлаШаблона - полное имя файла, в которое записывается шаблон регулярного выряжения
- ИмяФайлаАнализируемогоТекста - полное имя файла, в которое записывается анализируемый текст
- ИмяФайлаРезультата - файл, в который перенаправляем вывод работы скрипта (например через WShell.Echo)
- ИмяФайлаОшибкок - файл, в который будет записаны возможные ошибки обработки скрипта
- Первые 3 файла предваряем буквой диска "z:" (z - это корень файловой системы для wine).
Примечания:
- Код выполняется на сервере, т.е. можно использовать в качестве регламентного задания 1С.
- Описанный способ так же работает и в Windows, но для этого возможно понадобятся разрешения администратора на выполнение скриптов (csсript.exe).
- Работа ведется через файлы (соответственно медленнее, чем через COM-объекты, вызываемые из 1С в Windows).