Как устранить задержки в 1С:УТ 10.3 при открытии документов после обновления на терминальном сервере

Программист 1С v8.3 (Обычные формы) Управленческий учет Торговля и дистрибуция
← На главную

Часто после очередного обновления конфигурации 1С:Управление торговлей 10.3 пользователи сталкиваются с неприятной проблемой: программа начинает «подвисать» на несколько секунд при открытии любого документа (Реализация, Заказ, Чек ККМ). Особенно остро это проявляется в терминальном режиме работы (RDP), когда к системе подключено торговое оборудование, например, ККТ с передачей данных. Рассмотрим причины этого поведения и разберем пошаговые методы решения проблемы.

Выясняем причину: почему возникают задержки

Проанализируем ситуацию: в большинстве случаев тормоза связаны с тем, что при открытии формы документа срабатывает процедура инициализации торгового оборудования. Если в системе зарегистрирована ККТ, 1С пытается установить с ней связь. В терминальном режиме ИмяКомпьютера() часто возвращает имя самого сервера, а не клиентской машины. В итоге программа пытается подключиться к оборудованию, которое физически не подключено к данному сеансу, и ждет ответа от драйвера до истечения таймаута.

Основные факторы, провоцирующие тормоза:

  1. Некорректное определение рабочего места: Все терминальные пользователи определяются как одно рабочее место (по имени сервера).
  2. Динамические обновления: После «демонического» обновления кэш метаданных может работать некорректно.
  3. Таймауты драйвера ККТ: Длинные таймауты в настройках драйвера (например, АТОЛ) заставляют форму «висеть» в ожидании ответа.
  4. Конфликты портов: Сканеры штрихкода и ККТ могут конфликтовать за одни и те же виртуальные COM-порты.

Решение 1: Программное разделение рабочих мест в терминале

Это самое надежное решение. Нам необходимо изменить логику определения имени компьютера так, чтобы 1С понимала, какой именно пользователь подключается и с какой физической машины. Для этого мы будем использовать переменную окружения CLIENTNAME.

Разберем, как изменить функцию ПолучитьИмяКомпьютераТО в обработке ТОСервер (или общем модуле, в зависимости от версии релиза). Рассмотрим пример кода:


Функция ПолучитьИмяКомпьютераТО() Экспорт
    ИмяКомпьютераКлиента = "";
    Попытка
        WshShell = Новый COMОбъект("WScript.Shell");
        WshSysEnv = WshShell.Environment("Process");
        ИмяКомпьютераКлиента = WshSysEnv.Item("CLIENTNAME");
    Исключение
        // Если не удалось получить через COM, оставляем стандартное
    КонецПопытки;

    Если ПустаяСтрока(ИмяКомпьютераКлиента) Или ВРег(СокрЛП(ИмяКомпьютераКлиента)) = "CONSOLE" Тогда
        ИмяКомпьютераКлиента = ИмяКомпьютера();
    КонецЕсли;

    // Для уникальности можно добавить имя пользователя
    Возврат ВРег(ИмяКомпьютераКлиента) + "_" + глЗначениеПеременной("глТекущийПользователь").Наименование;
КонецФункции

После внедрения этого кода для каждого терминального сеанса будет создано свое отдельное «Рабочее место» в справочнике Торгового оборудования. Проблема «опроса чужого ККТ» исчезнет, так как 1С будет пытаться подключить оборудование только там, где оно действительно прописано для конкретного связки компьютер+пользователь.

Решение 2: Оптимизация настроек драйвера и системы

Если программная правка невозможна, проанализируем настройки драйвера ККТ. Часто задержку вызывают попытки драйвера достучаться до устройства через нестабильный канал связи.

  1. Настройка таймаута: В «Тесте драйвера ККТ» (например, АТОЛ 10) зайдите в свойства устройства и установите таймаут в районе 500-1000 мс. По умолчанию он может быть выше, что и создает видимость зависания.
  2. Управление питанием USB: Это критически важно для предотвращения «отвалов» оборудования. В диспетчере устройств Windows на сервере и на клиенте найдите «Корневой USB-концентратор», зайдите в Свойства — Управление электропитанием и снимите галочку «Разрешить отключение этого устройства для экономии энергии».
  3. Протокол RDP: Если вы используете Windows Server 2016 и выше, принудительно отключите использование UDP для RDP через групповые политики. Работа COM-портов через TCP в терминале гораздо стабильнее.

Решение 3: Борьба с последствиями динамических обновлений

Если тормоза появились резко после обновления, которое выполнялось без выгона пользователей, попробуйте выполнить следующие действия:

Решение 4: Настройка проброса портов и устранение конфликтов

Бывают ситуации, когда сканер штрихкода «перехватывает» COM-порт ККТ. Посмотрим на алгоритм исправления:

  1. В диспетчере устройств на клиентской машине вручную назначьте сканеру и ККТ высокие номера портов (например, COM15 и COM16). Это делается в Свойства порта — Параметры порта — Дополнительно.
  2. Если стандартный проброс портов через RDP работает медленно, используйте сторонние утилиты типа Com2TCP или USB Network Gate. Они создают более стабильный туннель для данных оборудования.

Важный момент: В параметрах торгового оборудования в самой 1С обязательно уберите галочку «Не отключаться от ККТ». Если она установлена, 1С будет держать порт занятым всё время работы пользователя, что в терминальном режиме часто приводит к блокировкам и ошибкам «Порт занят».

Подводя итог, можно сказать, что в 90% случаев проблема решается именно через модификацию функции ПолучитьИмяКомпьютераТО. Это позволяет системе корректно разделять окружения пользователей и не тратить время на опросы недоступного оборудования.

← На главную