СЕРГЕЙ БАРАНОВСКИЙ
Квартет: «САМО», «1C», wine и Etersoft
Если проблемы миграции «САМО-Тур» под Linux постепенно исчезают, то с запуском «1С:Предприятие 7.7» пришлось изрядно повозиться. Запуск программы – это половина проблемы, гораздо важнее организация гибко настраиваемого экспорта данных. В этом вопросе разработчики не шли и не идут навстречу пользователям, желающим применять Open Source ПО в связке с программами «1С». Нюансов настолько много, что даже специализированные решения от Etersoft не могут закрыть все пробелы.
На рынке туроператоров наша фирма уже больше года держит «флаг первенства» в переходе на ОС Linux. Несмотря на то что приятно быть первыми, другие компании не решаются на столь отважный шаг. Информация о переходе в других компаниях нашей отрасли мне не известна. Если частичный переход на Open Office осуществили десятки туристических фирм, в том числе и наши партнёры, то малая популярность использования ОС Linux состоит в том, что не все компании могут организовать её грамотную поддержку. Однако когда число компьютеров исчисляется сотнями, даже первичная оценка стоимости покупки различных лицензий и обновления железа отрезвляет.
В процессе перевода «рабочих мест» сотрудников под ОС Linux выяснилось, что для сотрудников нужны не только офис, браузер и почта, но и другие нестандартные приложения, такие как бухгалтерские программы, банк-клиенты, on-line-системы бронирования, системы учёта кадров и пр. Если вначале нам казалось, что камнем преткновения являлась программа «САМО-Тур» и компания «САМО-Софт» недружелюбно к нам относилась, то сейчас, в сравнении с «1С», можно сказать, что мы ошибались. Запустить «САМО-Тур» под Linux удалось [1, 2], а имеющиеся ошибки неспешно исправляются разработчиками, когда мы о них сообщаем. С «1С» возникло больше вопросов, чем ответов. Несколько лет мы не можем добиться помощи, а ответы их технической поддержки похожи на шутку: «Извините, у нас нет туалетной бумаги, зато есть наждачная».
В своей работе для бухгалтерского учёта мы используем версию «1С:Предприятие 7.7» (далее по тексту «1С»). К переходу на версию 8 мы не готовы, так как за десятилетие в версию 7.7 было внесено столько исправлений различными программистами, что «голая» восьмёрка нам никак не подойдёт, а дорабатывать её накладно. Предполагаю, что на рынке ситуация аналогична: фирмы, работающие с программой более 8-10 лет, полностью адаптировали её под свои нужны и не видят смысла в лишних затратах на обновление. Поэтому наш опыт запуска «1С:Предприятие 7.7» может пригодиться читателям.
«1С:Предприятие 7.7» под Linux
На форумах много информации о запуске «1С» под Linux, но мало информации о работе сетевой версии. Поэтому что-то будет неизбежным повторением ранее придуманных решений, а что-то окажется новым. Установка будет производиться в ОС Linux Fedora 8. Попутно будут небольшие замечания о работе «САМО-Тур», так как изначальной целью установки была работа двух этих приложений под ОС Linux.
Первым делом ставим wine, на сегодня последняя версия доступная через yum 1.1.9.
# yum install wine
В результате ставится 11 пакетов:
================================================================================
Package Арх. Версия Repository Size
================================================================================
Installing:
wine i386 1.1.9-2.fc8 updates-newkey 23 k
Installing for dependencies:
wine-capi i386 1.1.9-2.fc8 updates-newkey 27 k
wine-cms i386 1.1.9-2.fc8 updates-newkey 42 k
wine-core i386 1.1.9-2.fc8 updates-newkey 11 M
wine-desktop i386 1.1.9-2.fc8 updates-newkey 26 k
wine-esd i386 1.1.9-2.fc8 updates-newkey 37 k
wine-jack i386 1.1.9-2.fc8 updates-newkey 39 k
wine-ldap i386 1.1.9-2.fc8 updates-newkey 91 k
wine-nas i386 1.1.9-2.fc8 updates-newkey 25 k
wine-tools i386 1.1.9-2.fc8 updates-newkey 626 k
wine-twain i386 1.1.9-2.fc8 updates-newkey 48 k
Transaction Summary
================================================================================
Install 11 Package(s) |
Программа «1С:Предприятие» успешно ставится без каких-либо проблем, но запускаться и работать не хочет. При запуске в консоли получаем следующие сообщения:
$ pwd
/home/labirint/.wine/drive_c/Program Files/1Cv77/BIN |
$ wine ./1cv7s.exe
err:module:import_dll Library MFC42.DLL (which is needed by L"C:\\Program Files\\1Cv77\\BIN\\Type32.dll") not found
err:module:import_dll Library Type32.dll (which is needed by L"C:\\Program Files\\1Cv77\\BIN\\Frame.dll") not found
err:module:import_dll Library MFC42.DLL (which is needed by L"C:\\Program Files\\1Cv77\\BIN\\Frame.dll") not found
err:module:import_dll Library Frame.dll (which is needed by L"C:\\Program Files\\1Cv77\\BIN\\1cv7s.exe") not found
...
err:module:import_dll Library MFC42.DLL (which is needed by L"C:\\Program Files\\1Cv77\\BIN\\1cv7s.exe") not found
err:module:LdrInitializeThunk Main exe initialization for L"C:\\Program Files\\1Cv77\\BIN\\1cv7s.exe" failed, status c0000135
|
Из сообщений видно, что программе явно не хватает MFC42. Удобнее всего установить библиотеки и другие пакеты, воспользовавшись утилитой winetricks [3]. Для этого скачиваем программу и запускаем:
$ wget http://kegel.com/wine/winetricks
$ sh ./winetricks
Замечание: вполне возможно, вам понадобится установить cabextract, например, через команду:
yum install cabextrac t
Если не указать параметры, то в консоли появляются различные сообщения, а далее выскакивает графическое окошко, где следует выбрать пакеты для установки (см. рис. 1).
Рисунок 1. Выбор пакетов для установки с помощью winetricks
Выбираем dcom98 и vcrun6 и нажимаем кнопку «ОК». Далее выскочит окно с запросом на установку библиотек DCOM98, отвечаем «Да».
Замечание: несмотря на то что для установки DCOM98 не требуется подтверждение прочтения лицензии, ознакомиться с ней можно тут: http://www.microsoft.com/com/dcom/dcom98/eula.asp, откуда следует, что у вас должна быть лиценция на Windows98. При желании можно обойтись и без использования DCOM98, например с помощью Wine@Etersoft, подробнее читайте далее.
В процессе установки в консоли проскакивают различные сообщения:
$ sh ./winetricks
Gtk-Message: (for origin information, set GTK_DEBUG): failed to retrieve property
`GtkTreeView::odd-row-color' of type `GdkColor' from rc file value "((GString*) 0x9c594a0)"
of type `GString'
Setting Windows version to win98
Executing wine regedit /home/labirint/.wine/drive_c/winetrickstmp/set-winver.reg
Executing wine /home/labirint/.winetrickscache/DCOM98.EXE
fixme:setupapi:SETUPX_CreateStandardLDDs LDID_SRCPATH: what exactly do we have to do here ?
fixme:setupapi:GenInstall16 unsupported flag: GENINSTALL_DO_REGSRCPATH
fixme:setupapi:vcpUICallbackProc16 (0x5a60, 0705, 0000, 00000000, 003452ac) – semi-stub
...
fixme:setupapi:GenInstall16 unsupported flag: GENINSTALL_DO_CFGAUTO
fixme:rpc:DllRegisterServer (): stub
Using native,builtin override for following DLLs: ole32 oleaut32 rpcrt4
Executing wine regedit /home/labirint/.wine/drive_c/winetrickstmp/override-dll.reg
Using builtin override for following DLLs when running services.exe: ole32 oleaut32 rpcrt4
...
Clearing Windows version back to default
Executing wine regedit /home/labirint/.wine/drive_c/winetrickstmp/
unset-winver.reg
Install of dcom98 done
fixme:setupapi:SetupDefaultQueueCallbackW notification 262144 params 32f9ac,0
err:setupapi:SetupDefaultQueueCallbackW copy error 0
L"C:\\windows\\temp\\IXP001.TMP\\comcat.dll" -> L"C:\\windows\\system32\\comcat.dll"
Executing cabextract /home/labirint/.winetrickscache/vcredist.exe
Extracting cabinet: /home/labirint/.winetrickscache/vcredist.exe
extracting VCRedist.inf
extracting PreSetup.exe
extracting 50comupd.exe
extracting asycfilt.dll
extracting atla.dll
extracting comcat.dll
extracting mfc42.dll
extracting mfc42u.dll
extracting msvcirt.dll
extracting msvcp60.dll
extracting msvcrt.dll
extracting oleaut32.dll
extracting olepro32.dll
extracting stdole2.tlb
extracting atlu.dll
extracting ADVPACK.DLL
extracting W95INF32.DLL
extracting W95INF16.DLL
All done, no errors.
Install of vcrun6 done
winetricks done. |
Из директории ~/.wine/drive_c/Program Files/1Cv77/BIN запускаем ещё раз «1С».
$ wine ./1cv7s.exe
Программа запускается, мы нажимаем кнопку «Добавить», выбираем директорию, где находится база, и запускаем её в режиме конфигуратора (см. рис. 2).
Рисунок 2. Окно запуска «1С» в режиме конфигуратора
Начинается запуск, и система зависает на заставке. Опытным путём удалось установить, что зависание происходит потому, что окно входа в систему (для ввода логина и пароля) находится под заставкой, поэтому наша следующая задача либо поменять их местами, либо отключить заставку.
Поиск по форумам привёл к различным решениям [4, 5] – от указания ключа no_splash_show, до внесения правки в exe-файл. Предложенные патчи и подходы не подошли, зато было найдено другое работающее решение, а именно, с помощью внесения исправления в одну из библиотек. Для этих целей можно использовать, например, утилиту Resource Hacker [15] или файловый менеджер Far [6] c расширением Resource Browser [7].
Для этого создаём директорию, например resource_browser в директории %System Drive%\Program Files\Far\Plugins и помещаем туда файлы из архива frb100b5.zip [7].
Перезапускаем Far, ставим курсор на файл 1crcrus.dll и жмём <F11>, выбираем расширение Resource Browser (см. рис. 3) и заходим внутрь файла.
Рисунок 3. Выбираем расширение Resource Browser
Далее можно удалить ресурс 1049\ZLIB_DATA\1189 (см. рис. 4). Это и есть стартовая заставка «1C», сжатая архиватором ZIP.
Замечание: приобретённый и используемый нами дистрибутив «1С:Предприятие 7.7. Бухгалтерский учёт. Типовая конфигурация» лицензионным соглашением, где бы запрещалось или разрешалось модифицировать библиотеки для собственных целей, на момент приобретения не комплектовался. На сайте www.1c.ru найти информацию не удалось. По телефону в ответ на вопрос о лицензионном соглашении подтвердили отсутствие лицензионного соглашения для данного продукта. Выгоды из предлагаемого решения мы не получаем, авторские права фирмы «1С» мы не нарушаем. Так как журнал может быть прочитан за пределами РФ, ответственность за соблюдение местных законов лежит на читателях. Вариантом другого решения может быть использование Wine@Etersoft.
Рисунок 4. Удаляем ресурс 1049\ZLIB_DATA\1189 с помощью Resource Browser
После удаления заставки повторяем запуск в режиме конфигуратора. Заставка не появляется, а через некоторое время мы видим окно входа в систему.
После ввода правильных аутентификационных данных мы попадаем в программу «1С» в режиме конфигуратора, где необходимо убрать галочку «Окна -> Панель окон -> Показать» (см. рис. 5), так как нижняя панель некорректно работает под wine и приводит к закрытию всего приложения при обычном запуске.
Рисунок 5. Убираем галочку «Окна -> Панель окон -> Показать»
Если у вас не используется SQL-сервер или сетевое хранение данных, то на этом настройка системы закончена. Можно перегрузиться в пользовательском режиме и работать.
Продолжение настройки для работы с SQL-сервером
Если у вас более сложная конфигурация и используется SQL-сервер, то его необходимо прописать в «1С». Для этого заходим в «Администрирование -> Параметры базы данных SQL...» (см. рис. 6), появляется окно, где вводим адрес SQL-сервера, имя базы данных, имя пользователя и пароль (см. рис. 7).
Рисунок 6. «Администрирование -> Параметры базы данных SQL...»
Рисунок 7. Вводим адрес SQL-сервер, имя базы данных, имя пользователя и пароль
После этого выходим из конфигуратора и настраиваем сетевую папку для базы. В нашем случае это CIFS-ресурс на компьютере 192.168.0.1.
Прописываем в файле /etc/fstab:
//192.168.0.1/base_1c /base_1c cifs auto,rw,username=1c,password=xxx,uid=500,gid=500 0 0
500 – это UID пользователя, от которого будет осуществляться запуск «1С». Узнать его можно либо с помощью команды id, или посмотрев файл /etc/passwd.
Запустив команду mount, убеждаемся, что ресурс примонтирован:
#mount | grep 1c
...
//192.168.0.1/base_1c on /base_1c type cifs (rw,mand)
|
Читателям придётся поверить на слово, но на практике было установлено, что штатный CIFS-модуль ядра не работает корректно c блокировками, поэтому для успешного запуска «1С» в многопользовательском режиме модуль следует заменить на аналогичный бесплатный – etercifs от фирмы Etersoft [9].
Скачиваем и устанавливаем исходные коды последней версии:
$ wget http://updates.etersoft.ru/pub/Etersoft/WINE@Etersoft/1.0.9/CIFS/Fedora/8/etercifs-4.0.0-eter2fedora.noarch.rpm
# rpm -ihv etercifs-4.0.0-eter2fedora.noarch.rpm
Подготовка... ######################################## [100%]
1:etercifs ############################## [100%]
Etersoft CIFS module... [PASSED] |
После установки необходимо скомпилировать модуль (подразумевается, что компилятор gcc, необходимые библиотеки и исходные коды с заголовками ядра у вас установлены):
# /etc/rc.d/init.d/etercifs build
Building for 2.6.26.6-49.fc8 Linux kernel
(headers in /lib/modules/2.6.26.6-49.fc8/build)
/usr/bin/gcc
make: Entering directory `/usr/src/kernels/2.6.26.6-49.fc8-i686'
...
make: Leaving directory `/usr/src/kernels/2.6.26.6-49.fc8-i686'
make: Entering directory `/usr/src/kernels/2.6.26.6-49.fc8-i686'
CC [M] /tmp/Etercifs.VTDm4513/kernel-source-etercifs-2.6.26-1.53/cifsfs.o
Building for 2.6.26.6-49.fc8 Linux kernel
(headers in /lib/modules/2.6.26.6-49.fc8/build)
/usr/bin/gcc
make: Entering directory `/usr/src/kernels/2.6.26.6-49.fc8-i686'
make: Leaving directory `/usr/src/kernels/2.6.26.6-49.fc8-i686'
make: Entering directory `/usr/src/kernels/2.6.26.6-49.fc8-i686'
CC [M] /tmp/Etercifs.VTDm4513/kernel-source-etercifs-2.6.26-1.53/cifsfs.o
CC [M] /tmp/Etercifs.VTDm4513/kernel-source-etercifs-2.6.26-1.53/cifssmb.o
...
CC [M] /tmp/Etercifs.VTDm4513/kernel-source-etercifs-2.6.26-1.53/cifs_spnego.o
CC [M] /tmp/Etercifs.VTDm4513/kernel-source-etercifs-2.6.26-1.53/dns_resolve.o
CC [M] /tmp/Etercifs.VTDm4513/kernel-source-etercifs-2.6.26-1.53/cifs_dfs_ref.o
LD [M] /tmp/Etercifs.VTDm4513/kernel-source-etercifs-2.6.26-1.53/etercifs.o
Building modules, stage 2.
MODPOST 1 modules
CC /tmp/Etercifs.VTDm4513/kernel-source-etercifs-2.6.26-1.53/etercifs.mod.o
LD [M] /tmp/Etercifs.VTDm4513/kernel-source-etercifs-2.6.26-1.53/etercifs.ko
make: Leaving directory `/usr/src/kernels/2.6.26.6-49.fc8-i686'
Copying built module to /lib/modules/2.6.26.6-49.fc8/kernel/fs/cifs
|
Замечание: VTDm4513 – случайные символы. Могут быть другими, например AMCk6167 или что-то ещё.
Далее надо отмонтировать сетевую файловую систему для «1С», выгрузить старый модуль cifs, чтобы он не мешал работе etercifs. Если не отмонтировать – будет сообщение об ошибке. Смотрим, какой модуль загружен, и выполняем действия.
# lsmod |grep cifs
# rmmod cifs
ERROR: Module cifs is in use |
# umount /base_1c
# rmmod cifs
# /etc/rc.d/init.d/etercifs start
Loading CIFS kernel module... [ DONE ] |
# lsmod |grep cifs
Как видим, нужный модуль загрузился, поэтому можем примонтировать нашу файловую систему либо все CIFS-файловые системы, указанные в /etc/fstab:
# mount -t cifs -a
Чтобы нужный модуль использовался после перезагрузки системы, его надо прописать с помощью создания мягких ссылок утилитой chkconfig в директориях соответствующих уровней запуска:
# chkconfig etercifs on
Для удобства в директории ~/.wine/dosdevices создаём мягкую ссылку, чтобы, например, диск d: под wine был нашей сетевой директорией:
$ ln -s /base_1c d:
После настраиваем подключения к SQL-серверу, для этого ставим freetds (подробнее см. [1, 2]). В файле /etc/freetds.conf прописываем базу:
[Server1c]
host = 192.168.0.1
port = 1433
tds version = 8.0
client charset = WINDOWS-1251
Далее настраиваем unixODBC.
Файл tds.driver.template:
[FreeTDS]
Description=FreeTDS for MSSQL
Driver=/usr/lib/libtdsodbc.so.0
Файл tds.datasource.template:
[serv]
Driver = FreeTDS
Description = 1C_base
Trace = No
Servername = Server1c
Database = base_1c
После чего мы выполняем с правами администратора установку драйвера:
# odbcinst -i -d -f tds.driver.template
В результате получим:
odbcinst: Driver installed. Usage count increased to 1.
Target directory is /etc
|
Далее с правами пользователя(!) устанавливаем базу, которая будет работать через драйвер, установленный администратором (root) для всех:
$ odbcinst -i -s -f tds.datasource.template
Эта команда выполняется «молча».
Замечание: настройка для «САМО-Тур» проходила аналогично, если вы уже ставили драйвер, то повторно устанавливать его не надо. Подключения к базе можно проверить с помощью isql, до запуска «1С». Подробнее смотрите в [1, 2].
В результате в ~/.odbc.ini должна оказаться информация о подключении к SQL-серверу для работы с «1С». Имя сервера мы прописали заведомо как «serv».
Для того чтобы не было ошибок при разрешении имени в IP-адрес во время выполнения программы, на сайте Etersoft и других местах рекомендуют не использовать имена для адреса сервера, а прописывать IP-адрес. Мы же поступим иначе, пропишем соответствие имени и IP в файле /etc/hosts, дописав туда строчку:
192.168.0.1 serv
Проверить правильность можно командой:
$ ping -c3 serv
В случае успеха команда ping правильно переведёт имя в IP-адрес и будет посылать ICMP-пакеты по соответствующему IP-адресу.
После всех этих действий можем запустить «1С» из директории ~/.wine/drive_c/Program Files/1Cv77/BIN, выполнив команду:
$ wine ./1cv7s.exe
Далее прописываем базу на диске d: и нажимаем «OK». Программа начинает грузиться, но после «слетает» с ошибкой:
Call from 0x603f2a90 to unimplemented function odbc32.dll.SQLDriverConnectA, aborting
wine: Unimplemented function odbc32.dll.SQLDriverConnectA called at address 0x603f2a90 (thread 002d), starting debugger...
Unhandled exception: unimplemented function odbc32.dll.SQLDriverConnectA called in 32-bit code (0x603f2b12).
Register dump:
CS:0073 SS:007b DS:007b ES:007b FS:0033 GS:003b
EIP:603f2b12 ESP:0032f3f0 EBP:0032f454 EFLAGS:00200202( - 00 - - I1)
EAX:603dc8e5 EBX:60470820 ECX:00000000 EDX:023fd920
ESI:023fd920 EDI:7caec710
|
Посмотрев внимательно сообщение, делаем предположение, что надо установить odbc32. Для чего ещё раз запускаем winetricks и ставим MDAC 2.8:
$ sh ./winetricks
Gtk-Message: (for origin information, set GTK_DEBUG): failed to retrieve property
`GtkTreeView::odd-row-color' of type `GdkColor' from rc file value "((GString*) 0x98eb4a0)"
of type `GString'
Using native,builtin override for following DLLs: odbc32 odbccp32
Executing wine regedit /home/labirint/.wine/drive_c/winetrickstmp/
override-dll.reg
Setting Windows version to win98
Executing wine regedit /home/labirint/.wine/drive_c/winetrickstmp/
set-winver.reg
Executing wine /home/labirint/.winetrickscache/mdac28/MDAC_TYP.EXE
err:richedit:ReadStyleSheet ReadStyleSheet: skipping optional
destination
...
fixme:setupapi:SetupAddInstallSectionToDiskSpaceListA Stub
...
fixme:advpack:set_ldids Need to support changing paths - default will be used
fixme:setupapi:extract_cabinet_file awful hack: extracting cabinet
"C:\\windows\\temp\\IXP001.TMP\\msvcrt.CAB"
fixme:advpack:set_ldids Need to support changing paths - default will be used
fixme:setupapi:extract_cabinet_file awful hack: extracting cabinet
"C:\\windows\\temp\\IXP001.TMP\\mtxfiles.CAB"
...
"C:\\windows\\temp\\IXP001.TMP\\SQLOLDB.CAB"
fixme:advpack:set_ldids Need to support changing paths - default will be used
fixme:setupapi:extract_cabinet_file awful hack: extracting cabinet
"C:\\windows\\temp\\IXP001.TMP\\JETFILES.CAB"
Clearing Windows version back to default
Executing wine regedit /home/labirint/.wine/drive_c/winetrickstmp/
unset-winver.reg
Install of mdac28 done
winetricks done.
|
Во время установки вместо русских и английских букв в окне с лицензионным соглашением будут непонятные символы (см. рис. 8). Если согласны, то ставим галочку (I accept...) и продолжаем установку.
Рисунок 8. Непонятные символы во время установки MDAC 2.8
Замечание: внутри скачанного файла MDAC_TYP.EXE имеется файл mdaceula.rtf с полным текстом лицензии, внутри которого указано, что «Разрешается установка и использование неограниченного количества копий продукта исключительно для внутреннего пользования в помещениях вашего предприятия». Чтобы знать, с чем вы соглашаетесь, прочитайте файл!
После установки MDAC 2.8 запускаем «1С» ещё раз...и... Ура, «1С» запустилось! (См. рис. 9.)
Рисунок 9. «1С:Предприятие» работает под Linux Fedora 8
Проверяем, работает ли «САМО-Тур». К сожалению, после установки MDAC 2.8 – нет, так как нельзя выбрать базу. Поле «Источник ODBC» пустое (см. рис. 10).
Рисунок 10. После установки MDAC 2.8 невозможно запустить «САМО-Тур» - поле «Источник ODBC» пустое
Проверяем и прописываем заново настройки. В настройках BDE нужно выставить значение параметра SHAREDMEMLOCATION, равное 9000 [14] (см. рис. 11).
Рисунок 11. Устанавливаем в настройках BDE Аdministrator значение параметра SHAREDMEMLOCATION, равное 9000
Далее с помощью C:\Windows\System32\odbcad32.exe прописываем заново базу для «САМО-Тур». Будет сообщение, что такая база уже есть, игнорируем сообщение и вносим все настройки поверх (см. рис. 12).
Рисунок 12. Сообщение о том, что база уже существует
В конце настройки тест источника баз данных должен быть успешно пройден (см. рис. 13).
Рисунок 13. Тест базы данных успешно пройден
Теперь, когда «САМО-Тур» работает, пробуем запустить «1С» в многопользовательском режиме. Оказывается, что порядок подключения к базе имеет значение.
Если первым к базе подключился пользователь из-под ОС Linux, то его подключение (и возможное последующее отключение) никак не влияют на работу пользователей под ОС Windows.
Если же первым было подключение пользователя, запустившего программу из-под ОС Windows, то зайти в базу «1С» вторым и более пользователем на компьютере с ОС Linux нельзя. Система выдаёт сообщение об ошибке (см. рис. 14).
Рисунок 14. Ошибка «1С:Предприятие»
В процессе запуска «1С» под ОС Linux были испробованы разные способы и настройки системы, о своих попытках хотелось бы поведать читателям. Например, были попытки работать через модуль cifs, тогда выдавались другие ошибки, но они были решены переходом на модуль etercifs. Читатель проскочил эту тупиковую ветвь выше.
Как решить проблему запуска «1С» вторым пользователем в многопользовательском режиме под wine 1.1.9 мне пока не ясно, но, видна положительная тенденция в улучшении работы wine.
Например, сейчас не выдается ошибка, и в систему успешно входит и работает хотя бы один пользователь из-под ОС Linux (а после могут работать и другие пользователи из-под Windows), в то время как с предыдущими версиями wine вообще не удавалось запустить «1С», даже в режиме конфигуратора. Выдавалась ошибка (см. рис. 15).
Рисунок 15. Ошибка конфигуратора
Что интересно, эта ошибка привела нас на форум «Этерсофта» [10], где присутствовали интересные ответы, от чего она может возникнуть.
Там советовали проверить, установлена ли коммерческая часть WINE@Etersoft. Это можно было выполнить командой winediag (если такой команды нет, значит, коммерческая часть отсутствует).
WINE@Etersoft SQL
Таким образом, через месяц мучений стало ясно, что перейти на WINE@Etersoft SQL судьба. Мы удалили бесплатный wine и установили новый:
# yum remove wine wine-core
...
Removed: wine.i386 0:1.1.9-2.fc8 wine-core.i386 0:1.1.9-2.fc8
Dependency Removed: wine-capi.i386 0:1.1.9-2.fc8 wine-cms.i386
0:1.1.9-2.fc8 wine-desktop.i386 0:1.1.9-2.fc8 wine-esd.i386
0:1.1.9-2.fc8 wine-jack.i386 0:1.1.9-2.fc8 wine-ldap.i386
0:1.1.9-2.fc8 wine-nas.i386 0:1.1.9-2.fc8 wine-tools.i386
0:1.1.9-2.fc8 wine-twain.i386 0:1.1.9-2.fc8
Complete!
|
# rpm -ihv wine-1.0.9-eter37fedora.i586.rpm wine-etersoft-sql-1.0.9-eter15fedora.i586.rpm
libwine-1.0.9-eter37fedora.i586.rpm
Подготовка... ######################################## [100%]
1:libwine ############################## [ 33%]
groupadd: группа wine существует
groupadd: группа wineadmin существует
2:wine ############################## [ 67%]
WINE: Registering binary handler for Windows program: [ DONE ]
3:wine-etersoft-sql ############# ################ [100%]
Running etersafed... [ DONE ]
|
Замечание: в промежутке между удалением старой версии wine и установкой новой директория ~/.wine была вручную удалена.
Как ни странно, но если в ранних версиях WINE@Etersoft SQL были проблемы, то после нашего регулярного общения по почте с «Этерсофтом» версия 1.0.9 научилась запускать и «САМО-Тур».
Программы «1С» и «САМО-Тур» были установлены заново. Настройка «1С» не отличается от указанных выше. Настройка «САМО-Тура» производилась как если бы эта программа ставилась под ОС Windows, то есть ни freetds, ни unixODBC, ни BDE ставить не пришлось. Была прописана база через настройки odbcad32.exe и параметр SHAREDMEMLOCATION (см. рис. 11) как в шаге после установки MDAC 2.8.
После обе программы успешно заработали. «1С» в том числе стала заходить на сервер, даже если там уже работают другие пользователи.
Удивительно, но «1С» и «САМО-Тур» работают, в первом случае даже не надо возиться с отключением заставки, окно ввода имени пользователя и пароля отображается правильно. Поставил и работай. Не зря «Этерсофт» специализируется на запуске Windows-приложений под Linux, наверняка «не одну собаку съели».
Несмотря на то, что WINE@Etersoft SQL – коммерческий продукт, от процесса его тестирования и общения с сотрудниками фирмы только положительные впечатления. Может, когда-нибудь они откроют секрет, что надо сделать с обычным wine, чтобы работала SQL-версия «1С». Не очень они любят говорить про бесплатный wine, видимо, есть чем гордиться в их закрытой версии, хотя как вариант можно и не ждать, ведь есть и некоммерческая сборка wine [11]. Работа «1С» под ней нами ещё не тестировалась из-за отсутствия времени, но в случае успеха можно будет сравнить исходные коды и получить ответ уже сейчас, если «1С» заработает.
Вообще это приятно, когда коммерческая фирма берётся развивать некоммерческие проекты, подобно тому как существуют Red Hat и Fedora, а то, что это российская фирма и есть форум на русском языке, вдвойне приятно.
Ошибка экспорта в Word
Но несмотря на оптимизм последнего удачного запуска программы «1С» под ОС Linux, есть и недостатки в её работе. Они не связаны вообще с операционной системой, а скрываются в программе, «1С:Предприятие. Версия 7.7» писалась во времена господства на рынке пиратских версий ОС Windows и MS Office, поэтому она с ними только и работает. Фирма «1С» никак не нацелена на адаптирование своего продукта к OpenOffice или альтернативным почтовым клиентам.
Из хорошего – половина экспортов происходит независимо от наличия пакета MS Office сразу в файлы, которые после можно либо копировать по сети, либо открывать в любой подходящей программе. Подобным образом, через внешний файл работает экспорт и импорт в банк-клиент.
Что же касательно «САМО-Тура», то тут «САМО-Софт» потрудились, написали и продают модуль, работающий напрямую с их БД, правда, работает он только в одну сторону, в другую обмен информацией происходит также через внешний xml-файл.
Некоторые экспорты из «1С» всё же не работают на компьютерах без офиса, так как используется СОМ-метод обращения к приложениям. Например, если зайти в меню «Журналы -> Путёвки» и щёлкнуть на любую путёвку, далее, в окошке шаблон выбрать .dot- или .doc-файл шаблона, а после в печати выбрать пункт «Печать Word» (см. рис. 16), то возникает ошибка (см. рис. 17).
Рисунок 16. Выбираем «Печать Word»
Рисунок 17. Ошибка при экспорте в Word
Радует одно – этим экспортом в нашей фирме пользуется только одна сотрудница. Переводу всех остальных под Linux ничего не мешает.
Но даже и эту ошибку можно попробовать исправить в будущем. Для этого надо воспользоваться проектом unioffice [12]. Эта программа позволяет транслировать запросы (точнее, COM-объекты), направленные к MS Office в запросы к OpenOffice.
Маленькая проблема в том, что сейчас (версия 0.4) транслируются только запросы, направленные к электронным таблицам Exсel. Поддержка некоторых, наиболее часто используемых СОМ-интерфейсов приложения Word планируется в ближайшем будущем. Может, к выходу статьи уже будет реализована. По крайней мере мы уже успели направить свои пожелания в Etersoft, который этим и занимается в свободное от других проектов время.
Чтобы понять, что вызвало ошибку (вам это может тоже понадобиться) и знать, какие методы используются, чтобы послать их разработчикам, в первую очередь надо запустить «1С» в режиме конфигуратора, а далее, находясь в нём, нажать клавишу <F11>, после чего запустится ещё одна копия программы «1С», уже рабочая, где следует повторить все действия, приводящие к ошибке. Далее надо щёлкнуть на красные буковки «err» слева от ошибки, в конфигураторе откроется новое окно, где вы попадёте на участок кода, вызвавший ошибку:
Процедура ПоКнопкеВорд()Знак = "0";Если СокрЛП(ИмяФайла)<>"" ТогдаСостояние("Выполняется подключение к шаблону MS Word...");Word=СоздатьОбъект("Word.Application");Word.Documents.Add(ИмяФайла);Word.Selection.GoTo(-1,,, "ДатаСозданияПутёвки");Word.Selection.Delete(2,1);.....Word.Selection.GoTo(-1,,, "Сумма2");Word.Selection.Delete(2,1);Word.Selection.TypeText(Строка(Формат(ТурОбслуживание1_ВвалютеКОплате,"Ч15.2,")) + " ");//Word.Selection.TypeText (Строка(ТурОбслуживание1_ВвалютеКОплате) + " ");Word.Visible=1;ИначеПредупреждение("Укажите имя файла Word !");КонецЕсли;КонецПроцедуры
Просмотрев код, можно легко понять, какие СОМ-интерфейсы были использованы, они идут после последовательности «Word».
Пример решения с почтой
Существует и другая задача, а именно отправка бухгалтерских подтверждений или счетов по почте. Счета удобнее всего выставлять из «1С» нажатием пары кнопок. В этом вопросе фирма «1С» также не удосужилась пойти навстречу клиентам. Для отправки почты существует внешний компонент V7Mail (v7plus.dll), но работать с нужными программами он не хочет. Как не пошли в фирме «1С» нам навстречу два и три года назад, так и не хотят делать это сейчас. Гораздо проще ответить, что: «Работоспособность V7Mail с почтовым клиентом Mozilla Thunderbird не проверялась, поэтому подобных рекомендаций дать не можем.
Компонент V7Mail разработан для работы с почтовыми клиентами Outlook и Outlook Express. Кроме этих клиентов, он может работать с любым MAPI-совместимым почтовым клиентом, который корректно поддерживает спецификацию Simple MAPI».
Хотя все другие программы успешно используют, зарегистрированный по умолчанию клиент Mozilla Thunderbird и используемый MAPI их устраивает.
Эту проблему можно также попытаться обойти, сделав решение для клиентов кроссплатформенным, а именно: вместо V7Mail и MAPI использовать компонент ROM-mail, работающий с протоколом SMTP напрямую.
Для этого придётся немного переписать код в базе «1С», а далее, если надо отслеживать отправленные счета, следует поднять SMTP-прокси, на котором помещать копию отправленных писем в папку Sent, доступ к которой можно организовать на том же сервере по протоколу IMAP, например, с помощью IMAP-сервера Dovecot, при этом пользователи смогут использовать привычный им клиент Mozilla Thunderbird, который не удалось заставить работать первым способом через MAPI.
Сообщения есть, а как «оно» работает многие даже не задумываются. Решение может быть как на базе любого MTA вроде Sendmail, так и в виде небольшой программы на С, использующей файл для сохранения писем и два сокета – один на прослушивание подключений от «1С», а другой для подключения к провайдерскому SMTP-сервису. Скорее, это тема следующей статьи.
Заключение
Несмотря на то, что удалось успешно решить часть проблем по запуску «1С» под Linux, постоянно появляются новые и новые проблемы, не позволяющие нам полностью расслабиться.
- Барановский С. Как запустить «САМО-Тур» для Windows под Linux. //Системный администратор, №5, май 2008 г. – С. 42-49.
- Барановский С. Лебедь, рак да щука: «САМО-Софт», wine, Etersoft. //Системный администратор, №9, сентябрь 2008 г. – С. 44-49.
- Утилита winetricks – http://wiki.winehq.org/winetricks.
- Как отключить заставку в «1С» – http://www.itland.ru/forum/index.php?showtopic=5223.
- Как отключить заставку в «1С» – http://forum.windowsfaq.ru/archive/index.php/t-67859.html.
- Файловый менеджер Far – http://farmanager.com.
- Resource Browser (позволяет смотреть и редактировать ресурсы EXE- и DLL-файлов) – http://plugring.farmanager.com/downld/files/frb100b5.zip.
- Убрать галочку «Окна -> Панель окон -> Показать» – http://forum.ubuntu.ru/index.php?topic=34421.15.
- Компания «Этерсофт» – http://www.etersoft.ru.
- Наиболее часто встречающиеся вопросы при использовании WINE@Etersoft – http://www.etersoft.ru/content/view/102/83.
- Проект по развитию альтернативного свободного репозитория eterwine – http://freesource.info/wiki/WINE, http://winehq.org.ru.
- UniOffice@Etersoft, транслятор COM-объектов MS Office – http://wiki.etersoft.ru/UniOffice.
- Способы отправки почты из «1C» – http://love1c.kiev.ua/prog/mail.htm.
- Тестирование «САМО-Тур» – http://bugs.etersoft.ru/show_bug.cgi?id=1946.
- Resource Hacker, утилита для просмотра, изменения, добавления, удаления и извлечения ресурсов из 32-разрядных исполняемых файлов – http://www.angusj.com/resourcehacker.