Перевод РИБ 1С на тонкого клиента

Новые веяния привели клиента к необходимости работы с центральной базе на собственном сервере через интернет вместо сети РИБ. Рассматривался и вариант с облаком, но выходило дороже.

Это и дешевле в плане лицензий, и снижает стоимость сопровождения и настройки новых точек.

Я взялся за этот перевод. Нужно было убедиться, что пользователь точки с ограниченными правами будет корректно работать при доступе в базу на сервер.

Переход должен был быть поэтапным из-за большого количества точек, поэтому одновременно должен работать и режим РИБ и режим доступа по тонкому клиенту.

При запуске под пользователем пытался запуститься обмен. Хотел сперва его отключить в коде. Но у пользователя убрал галочку «Выполнять автообмен», это убрало попытки запускать автообмен при запуске системы.

Я запустил 1С на сервере под пользователем и обрадовался, что работает. Но жизнь оказалась более суровая, при запуске на веб-сервере первая ошибка была такая:

Я сначала удивился — код ведь запускался только под роботом, но потом понял, что это не ошибка исполнения, а ошибка компиляции:

Если Получить.ЭтоРоботОбмена() Тогда
    …
   
ЗапуститьСистему(Получить.ПараметрыДляОбновления());
    …
КонецЕсли

Ошибка заставила меня проверить синтаксис для режима веб-клиента:

К счастью, проблема была всего лишь в 3-4 вызовах команды ЗапуститьСистему. Сделал замены:

Клиент.ЗапуститьСистемуБезопасно(Получить.ПараметрыДляОбновления());

//В модуле Клиент
Процедура ЗапуститьСистемуБезопасно(ДополнительныеПараметрыКоманднойСтроки = Неопределено, ДождатьсяЗавершения = Неопределено, КодВозврата = Неопределено) Экспорт
   
#Если НЕ ВебКлиент Тогда
   
ЗапуститьСистему(ДополнительныеПараметрыКоманднойСтроки, ДождатьсяЗавершения, КодВозврата);
   
#КонецЕсли
КонецПроцедуры

Как известно, веб-соединения закрываются не очень быстро, поэтому пришлось убрать их подсчет из количества соединений пользователя с базой, чтобы работа не блокировалась сообщением:

Функция КоличествоСоединенийИнформационнойБазыТекущегоПользователя() Экспорт
   
Соединения = ПолучитьСоединенияИнформационнойБазы();
   
ТекПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
   
Количество = 0;
    Для Каждого
Соединение ИЗ Соединения Цикл
        Если
Соединение.Пользователь.УникальныйИдентификатор = ТекПользователь.УникальныйИдентификатор Тогда
           
//Осипов Облако 2021-05-18 чтобы веб-соединения не считались
           
Если Соединение.ИмяПриложения = «WebServerExtension» Тогда
                Продолжить;
            КонецЕсли;
           
Количество = Количество + 1;
        КонецЕсли;
    КонецЦикла;
    Возврат
Количество;
КонецФункции

К счастью, в базе был отбор по подразделению для пользователя. Потому что РИБ была полной, на точке просто фильтровались документы по подразделению, так что дополнительные фильтры делать не пришлось, как я думал изначально.

Осталось установить тонкий клиент на точке и проверить работу в нем драйверов ККМ для печати чеков.

Это все изменения, что нужно было сделать в самой 1С, но в стоимость работ входили еще настройка доступа к 1С через IIS.

Тут были свои заморочки, но я их преодолел.

Объем план: 5 час. Платформа: 3.10.2561 1С: РИБ-нетленка с нуля.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *