Перевод РИБ 1С на тонкого клиента
Новые веяния привели клиента к необходимости работы с центральной базе на собственном сервере через интернет вместо сети РИБ. Рассматривался и вариант с облаком, но выходило дороже.
Это и дешевле в плане лицензий, и снижает стоимость сопровождения и настройки новых точек.
Я взялся за этот перевод. Нужно было убедиться, что пользователь точки с ограниченными правами будет корректно работать при доступе в базу на сервер.
Переход должен был быть поэтапным из-за большого количества точек, поэтому одновременно должен работать и режим РИБ и режим доступа по тонкому клиенту.
При запуске под пользователем пытался запуститься обмен. Хотел сперва его отключить в коде. Но у пользователя убрал галочку «Выполнять автообмен», это убрало попытки запускать автообмен при запуске системы.
Я запустил 1С на сервере под пользователем и обрадовался, что работает. Но жизнь оказалась более суровая, при запуске на веб-сервере первая ошибка была такая:
Я сначала удивился — код ведь запускался только под роботом, но потом понял, что это не ошибка исполнения, а ошибка компиляции:
Если Получить.ЭтоРоботОбмена() Тогда
…
ЗапуститьСистему(Получить.ПараметрыДляОбновления());
…
КонецЕсли
Ошибка заставила меня проверить синтаксис для режима веб-клиента:
К счастью, проблема была всего лишь в 3-4 вызовах команды ЗапуститьСистему. Сделал замены:
Клиент.ЗапуститьСистемуБезопасно(Получить.ПараметрыДляОбновления());
//В модуле Клиент
Процедура ЗапуститьСистемуБезопасно(ДополнительныеПараметрыКоманднойСтроки = Неопределено, ДождатьсяЗавершения = Неопределено, КодВозврата = Неопределено) Экспорт
#Если НЕ ВебКлиент Тогда
ЗапуститьСистему(ДополнительныеПараметрыКоманднойСтроки, ДождатьсяЗавершения, КодВозврата);
#КонецЕсли
КонецПроцедуры
Как известно, веб-соединения закрываются не очень быстро, поэтому пришлось убрать их подсчет из количества соединений пользователя с базой, чтобы работа не блокировалась сообщением:
Функция КоличествоСоединенийИнформационнойБазыТекущегоПользователя() Экспорт
Соединения = ПолучитьСоединенияИнформационнойБазы();
ТекПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
Количество = 0;
Для Каждого Соединение ИЗ Соединения Цикл
Если Соединение.Пользователь.УникальныйИдентификатор = ТекПользователь.УникальныйИдентификатор Тогда
//Осипов Облако 2021-05-18 чтобы веб-соединения не считались
Если Соединение.ИмяПриложения = «WebServerExtension» Тогда
Продолжить;
КонецЕсли;
Количество = Количество + 1;
КонецЕсли;
КонецЦикла;
Возврат Количество;
КонецФункции
К счастью, в базе был отбор по подразделению для пользователя. Потому что РИБ была полной, на точке просто фильтровались документы по подразделению, так что дополнительные фильтры делать не пришлось, как я думал изначально.
Осталось установить тонкий клиент на точке и проверить работу в нем драйверов ККМ для печати чеков.
Это все изменения, что нужно было сделать в самой 1С, но в стоимость работ входили еще настройка доступа к 1С через IIS.
Тут были свои заморочки, но я их преодолел.
Объем план: 5 час. Платформа: 3.10.2561 1С: РИБ-нетленка с нуля.
Свежие комментарии