воскресенье, 15 марта 2020 г.

Опыт перехода с Windows и файловой базы 1С "Управление торговлей 10.3" на Linux Ubuntu 16.04 + PostgreSQL + 1C "Управление торговлей 10.3".


Январь 2018 года. Вирус WannaCry испортил систему на сервере одного из заказчиков, работа остановлена, необходимо срочно восстановить рабочий процесс бизнеса.

Установил Linux Ubuntu Server 16.04.
Оболочку установил LXDE. Получилась Lubuntu.

Хранитель экрана не нужен, поэтому просто его удаляем:
dpkg --purge xscreensaver

Готовим рабочий стол:
В эталонном профиле настраиваем панель запуска, затем файл с настройками из эталонного профиля заменяем на общий системы:
cp /home/user1/.config/lxpanel/LXDE/panels/panel /etc/xdg/lxpanel/default/panels/panel
cp /home/user1/.config/lxpanel/LXDE/panels/panel /etc/xdg/lxpanel/LXDE/panels/panel
cp /home/rs/.config/openbox/lxde-rc.xml /etc/xdg/openbox/LXDE/rc.xml

Убрать возможность открывать браузер
mv /usr/share/applications/firefox.desktop /home/rs/firefox.desktop

Копируем список баз 1С:
cp /home/rs/.1C/1cestart/ibases.v8i /home/AlinaM/.1C/1cestart/ibases.v8i

Создаем общий каталог, чтобы пользователи могли обмениваться в нем файлами.
mkdir /C
chmod -R u-rwx,g=rwx,o=rwx /C
cp /home/rs/.config/gtk-3.0/bookmarks /home/AlinaM/.config/gtk-3.0/bookmarks

Скрипт для ускорения данного процесса:
#Рабочий вариант
#arr=(Administrator AlinaM User2 Ann Dmitr EK Nataly Sof Ivan Olga NB Vera ET)
arr=(rs2)

echo ${arr[@]:1}
sizeOfArray=${#arr[@]}
for((x=0;x<$sizeOfArray;++x))
#for x in $arr;
do
    curLogin=${arr[$x]}
    cur1C="/home/"$curLogin"/.1C/"
    if ! [ -d $cur1C ]; then
        echo "Creating directory $cur1C"
        mkdir $cur1C
        chown $curLogin $cur1C
    fi
    curdir=$cur1C"1cestart/"
    if ! [ -d $curdir ]; then
        echo "Creating directory $curdir"
        mkdir $curdir
        chown $curLogin $curdir
    fi
    curfile=$curdir"ibases.v8i"
    cp "/home/rs/ibases.v8i" $curfile
    chown $curLogin $curfile
    chmod 775 $curfile
    #Добавляем в закладки общую папку для обмена файлами
    curConfig="/home/"$curLogin"/.config/"
    if ! [ -d $curConfig ]; then
        echo "Creating directory $curConfig"
        mkdir $curConfig
        chown $curLogin $curConfig
    fi
    curGtk=$curConfig"gtk-3.0/"
    if ! [ -d $curGtk ]; then
        echo "Creating directory $curGtk"
        mkdir $curGtk
        chown $curLogin $curGtk
    fi
    curfile=$curGtk"bookmarks"
    cp "/home/rs/bookmarks" $curfile
    chown $curLogin $curfile
    chmod 775 $curfile
done

Печать
Устанавливаем:
apt-get install x2godesktopsharing
apt-get install x2golxdebindings

Сначала необходимо добавить x2go-принтер на сервере:
Печать происходит в два этапа: сначала на сервере по команде Print на принтер Generic-CUPS-X2Go-Printer (это по сути печать в pdf), затем этот принтер автоматически передает pdf-файл на клиентский компьютер в каталог "C:\Users\ИмяПользователя\.x2go\S-rs2-60-31323312311-stDLXDE_dp32\spool\"
В клиентской x2go в настройках выбрать принтер или команду cmd. Если необходимо отобразить файл на просмотр  без печати, то в настройках клиента выбрать вместо печати "Просмотр".

Ссылки:
https://code.x2go.org/releases/binary-win32/
https://unixforum.org/index.php?showtopic=108708&pid=1239425&mode=threaded&start=
https://radikal.ru/fp/59ae9a53fa784b9dabf9f02981818957
https://unixforum.org/index.php?showtopic=108708&pid=1239425&mode=threaded&start=#entry1239425
http://palexa.pp.ua/terminal-server/x2go/terminalnyj-server-na-linux-centos-6-x2go-terminal-server.html
http://palexa.pp.ua/terminal-server/x2go/terminalnyj-server-na-linux-centos-6-x2go-terminal-server.html

31.01.2018
Кнопка "Обновить индекс" не работает. Конечно, теперь не работает, ведь база была файловая, а стала клиент-серверной, и теперь в обычном приложении в модулях форм процедура УстановитьПривилегированныйРежим() не работает. Переписал.
Так как ошибка выскочила в форме поиска, сразу проверили открытие ссылок - тоже не работало. Пришлось адаптировать. 

04.02.2018
Оказывается, не у всех пользователей получилось настроить печать, точнее передачу pdf-файла на клиентский компьютер. Причин несколько: локальные профили пользователей windows были именованы по-русски (необходимо по-английски); не была установлена программа Adobe Reader или Foxit Reader, а если и была установлена, то не было настроено явное соответствие открытия pdf-файлов. Пришлось на каждом "проблемном" клиенте создавать нового пользователя, устанавливать Adobe Reader, в настройках Windows (Приложения по умолчанию -> Сопоставления типов файлов) указывать Adobe Reader для типа pdf.
Но и в этом случае не у всех печатало; тогда пришлось на сервере создать нового пользователя, включить его в группу sudo, авторизоваться, проверить успешную печать, затем удалить пользователя из группы sudo.

Одному из пользователей необходимо было выводить данные в электронную таблицу и выполнять некоторые расчеты. Так как данные с сервера копировались на клиентский компьютер в MS Excel некорректно (кодировка не соответствовала), пришлось установить на сервере LibreOffice.

17.02.2018-18.02.2018 Настройка сканера штрихкодов Datalogic QW2100
Сканер был настроен по-умолчанию в режиме клавиатуры. Чтобы не было мороки с драйверами, решил пойти по пути без зависимостей. Вообще я сторонник того, чтобы наши устройства и программы как можно меньше зависели от чего-либо. Подключил, нажал и готово - счастье.
Итак, на сканере штрихкодов настраиваю префикс на F7. В 1С сканирую, форма ввода штрихкода открывается, но штрихкод в нее не попадает. Оказывается, штрихкод проскакивает настолько быстро, что форма ввода не успевает открыться, т.е открывается позже. Что ж, известная ситуация, на сканере Honeywell Eclipse 5145 ранее мне как-то удалось настроить паузу между префиксом и суффиксом. Для сканера Datalogic QuickScan QW2100 такой настройки задержки не оказалось. Добавление нескольких префиксов F7, выполняющих роль паузы, придало другую проблему - в некоторых документах после попадания штрихкода в поле ввода не выполнялась команда Enter. Именно поэтому пришлось настроить префикс на клавишу Ins, так как в 1С эта клавиша выполняет добавление новой строки в табличную часть. На этот раз при сканировании штрихкод вставлялся в новодобавленную строку табличной части, а далее в обработчике ОкончаниеВводаТекста выполнил следующее:
Процедура ТоварыНоменклатураОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
    // + 18.02.2018 , Настройка сканирования  
    ЭтоШтрихкод = Местный.ЭтоШтрихкод(Текст);
    Если ЭтоШтрихкод Тогда
        Серия = Местный.СерияПоШтрихкоду(Текст);
        ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура = Серия.Владелец;
        ЭлементыФормы.Товары.ТекущиеДанные.СерияНоменклатуры = Серия;
        Если ЗначениеЗаполнено(Серия) Тогда
            ТоварыНоменклатураПриИзменении(Неопределено);  
            ЭлементыФормы.Товары.ЗакончитьРедактированиеСтроки(Ложь);  // для возможности сканировать следующий товар
        КонецЕсли;
    КонецЕсли;
    // - 18.02.2018 , Настройка сканирования
КонецПроцедуры

Функция ЭтоШтрихкод(Значение) Экспорт
// + 18.02.2018 , Настройка сканирования  
    ЭтоШтрихкод = Истина;
    СтрЦифры = "0123456789";
    ДлинаСтроки = СтрДлина(Значение);
    Для ч = 0 По ДлинаСтроки Цикл
        ТекСимв = Сред(Значение, ч, 1);
        Если Найти(СтрЦифры, ТекСимв) = 0 Тогда
            ЭтоШтрихкод = Ложь;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Возврат ЭтоШтрихкод;
// - 18.02.2018 , Настройка сканирования  
КонецФункции

Картинки штрихкодов:
Prefix_Ins.png

Ограничение лишь одно - перед сканированием необходимо щелкнуть в табличную часть (активировать ее).

У некоторых пользователей с полными правами в 1С оказалась проблема авторизации в базу. После ввода пароля программа зависала на две минуты, затем сервер разрывал соединение. Проблема решилась следующим образом:

1) в админской терминальной сессии под другим пользователем открыл конфигуратор;

2) убрал полные права у проблемного пользователя, предоставив взамен другие;

3) в сеансе проблемного пользователя авторизовался в базе 1С успешно; пооткрывал несколько документов, завершил работу корректно.

4) в конфигураторе снова вернул полные права, забрав альтернативные;

5) в сеансе проблемного пользователя теперь авторизация в базе 1С успешна.

Техжурнал 1С ничего не знает об этой ошибке, авторизация в базе происходит, а после авторизации обрыв соединения. Причину выявлять не стал, но стало известно, что причина в клиентском кеше полных прав. Чистка кеша не помогает, так как это повторится снова; помогает лишь создание кэша неполными правами, затем использование этого кеша полными правами. Можно было сравнить два кеша и докопаться до причины, но, учитывая, что в моем случае с полными правами лишь трое человек, решил время не тратить (заказчик все равно за такое не заплатит).

В процессе работы возникают следующие сложности:
1) неожиданные подвисания интерфейса у любого пользователя в любой момент времени;
2) модальные формы прячутся за немодальными, в результате пользователь это считает зависанием - некорректное поведение обычных форм;
3) плывут привязки обычных форм;
4) пользователи работают на крайне нестабильном интернете (3G модем, телефон,...), поэтому x2go-клиент на Windows просто виснет и закрывается аварийно.

Становятся известные следующие проблемы бесплатного ПО с открытым кодом:
1) в Linux до сих пор отсутствует стабильный клиент удаленного рабочего стола, через который можно работать с нестабильным интернетом (3G модем, телефон);
2) обычные формы 1С и терминальный сервер Linux - это вещи не совместимые, так как не способны обеспечить стабильную и удобную работу. 

06.09.2018 Отказ от администрирования. Заказной админ выполнил переход обратно на Windows.

05.12.2018 Заражение новым шифровальщиком. Потеря всех данных, бэкапов.

16.12.2018 появился новый админ. Система Windows теперь, предположительно, на виртуальной машине.

Выводы
1) В Linux отсутствует стабильный клиент удаленного рабочего стола, поэтому варианты работы с 1С - это веб-клиент, тонкий клиент, а значит необходим переход на управляемые формы. Тема терминальных серверов много изучена, но много вариантов не протестировано; однако в ходе изучения уже были известны некоторые недостатки каждого варианта. 
2) Обычные формы 1С и терминальный сервер Linux - это вещи не совместимые, так как не способны обеспечить стабильную и удобную работу. Для работы на Linux приложение 1С должно быть на управляемых формах. Если у заказчика база на обычных формах, переход на управляемые формы может стоить существенных трудозатрат, как оказалось в данном случае.

Комментариев нет:

Отправить комментарий