Часто после очередного обновления конфигурации 1С:Управление торговлей 10.3 пользователи сталкиваются с неприятной проблемой: программа начинает «подвисать» на несколько секунд при открытии любого документа (Реализация, Заказ, Чек ККМ). Особенно остро это проявляется в терминальном режиме работы (RDP), когда к системе подключено торговое оборудование, например, ККТ с передачей данных. Рассмотрим причины этого поведения и разберем пошаговые методы решения проблемы.
Проанализируем ситуацию: в большинстве случаев тормоза связаны с тем, что при открытии формы документа срабатывает процедура инициализации торгового оборудования. Если в системе зарегистрирована ККТ, 1С пытается установить с ней связь. В терминальном режиме ИмяКомпьютера() часто возвращает имя самого сервера, а не клиентской машины. В итоге программа пытается подключиться к оборудованию, которое физически не подключено к данному сеансу, и ждет ответа от драйвера до истечения таймаута.
Основные факторы, провоцирующие тормоза:
Это самое надежное решение. Нам необходимо изменить логику определения имени компьютера так, чтобы 1С понимала, какой именно пользователь подключается и с какой физической машины. Для этого мы будем использовать переменную окружения CLIENTNAME.
Разберем, как изменить функцию ПолучитьИмяКомпьютераТО в обработке ТОСервер (или общем модуле, в зависимости от версии релиза). Рассмотрим пример кода:
Функция ПолучитьИмяКомпьютераТО() Экспорт
ИмяКомпьютераКлиента = "";
Попытка
WshShell = Новый COMОбъект("WScript.Shell");
WshSysEnv = WshShell.Environment("Process");
ИмяКомпьютераКлиента = WshSysEnv.Item("CLIENTNAME");
Исключение
// Если не удалось получить через COM, оставляем стандартное
КонецПопытки;
Если ПустаяСтрока(ИмяКомпьютераКлиента) Или ВРег(СокрЛП(ИмяКомпьютераКлиента)) = "CONSOLE" Тогда
ИмяКомпьютераКлиента = ИмяКомпьютера();
КонецЕсли;
// Для уникальности можно добавить имя пользователя
Возврат ВРег(ИмяКомпьютераКлиента) + "_" + глЗначениеПеременной("глТекущийПользователь").Наименование;
КонецФункции
После внедрения этого кода для каждого терминального сеанса будет создано свое отдельное «Рабочее место» в справочнике Торгового оборудования. Проблема «опроса чужого ККТ» исчезнет, так как 1С будет пытаться подключить оборудование только там, где оно действительно прописано для конкретного связки компьютер+пользователь.
Если программная правка невозможна, проанализируем настройки драйвера ККТ. Часто задержку вызывают попытки драйвера достучаться до устройства через нестабильный канал связи.
Если тормоза появились резко после обновления, которое выполнялось без выгона пользователей, попробуйте выполнить следующие действия:
Бывают ситуации, когда сканер штрихкода «перехватывает» COM-порт ККТ. Посмотрим на алгоритм исправления:
Com2TCP или USB Network Gate. Они создают более стабильный туннель для данных оборудования.Важный момент: В параметрах торгового оборудования в самой 1С обязательно уберите галочку «Не отключаться от ККТ». Если она установлена, 1С будет держать порт занятым всё время работы пользователя, что в терминальном режиме часто приводит к блокировкам и ошибкам «Порт занят».
Подводя итог, можно сказать, что в 90% случаев проблема решается именно через модификацию функции ПолучитьИмяКомпьютераТО. Это позволяет системе корректно разделять окружения пользователей и не тратить время на опросы недоступного оборудования.