В процессе администрирования терминальных серверов с установленной платформой 1С:Предприятие 8.3 системные администраторы часто сталкиваются с неочевидным поведением системы лицензирования. Одной из самых неприятных ситуаций является «двойной» захват лицензий: когда один и тот же пользователь в рамках одной терминальной сессии запускает несколько информационных баз, и система списывает одну лицензию на все запущенные тонкие клиенты и еще одну — на толстые клиенты. Согласно документации, при работе в терминальном режиме должна использоваться одна лицензия на сессию, независимо от количества запущенных баз и типов используемых клиентов. Рассмотрим подробно, почему это происходит и как привести потребление лицензий в норму.
Для начала разберем механизм, по которому платформа «понимает», что лицензия уже получена. В терминальной среде основным идентификатором для 1С является Terminal Session ID. Если программные лицензии активированы правильно (как многопользовательские на компьютер), то при запуске первого приложения (например, 1cv8c.exe — тонкий клиент) оно захватывает лицензию и оставляет информацию об этом в специальном файле. При запуске второго приложения (например, 1cv8.exe — толстый клиент) платформа должна проверить наличие свободных лицензий в рамках текущего идентификатора сессии и «подцепиться» к уже существующей.
Однако этот механизм часто дает сбой по нескольким причинам:
Проанализируем состояние служебных файлов 1С. Одним из ключевых файлов, отвечающих за связку сессий и лицензий, является 1cv8conn.pfl. Этот файл хранит информацию о параметрах последнего успешного подключения и полученной лицензии. Если данные в нем некорректны или у пользователя недостаточно прав на запись в этот файл, платформа может игнорировать существующую лицензию и запрашивать новую.
Выполним следующие действия:
1cv8conn.pfl. Обычно он располагается в папках:
C:\ProgramData\1C\1cv8\conf\%AppData%\1C\1cv8\C:\ProgramData\1C\Licenses и на общую папку настроек C:\ProgramData\1C\1cv8\conf.Посмотрим на пример расположения файлов лицензий, которые также стоит проверить на наличие «мусорных» временных файлов с расширением .lgp или .tmp, которые могут оставаться после аварийного завершения работы:
C:\ProgramData\1C\Licenses\*.lic
C:\Users\ИмяПользователя\AppData\Local\1C\1cv8\*.pfl
Выясним, не установлены ли на сервере одновременно разные версии платформы по разрядности. В Windows Server 2019 часто устанавливают и x86, и x86_64 версии для совместимости со старыми драйверами или внешними компонентами. Если пользователь через стартер 1С запускает одну базу, где в настройках жестко прописано «32 (x86)», а другую с параметром «64 (x86_64)», то экономии лицензий не будет.
Проанализируем настройки в окне запуска 1С:
Рассмотрим ситуацию, когда в сети есть и физические ключи, и программные лицензии. Если терминальный сервер настроен на поиск лицензий по сети через Broadcast-запросы, тонкий и толстый клиенты могут находить лицензии на разных серверах ключей HASP. В этом случае они не «схлопнутся».
Для исправления ситуации отредактируем файл nnhasp.ini, который обычно находится в папке C:\Program Files\1cv8\conf\ (или в папке bin\conf конкретной версии). Нам нужно жестко ограничить список серверов, где искать ключи, и отключить широковещательный поиск.
Пример настройки nnhasp.ini для стабильной работы:
[NH_COMMON]
NH_TCPIP = Enabled
[NH_TCPIP]
; Указываем конкретные IP серверов с ключами
NH_SERVER_ADDR = 192.168.1.10, 192.168.1.11
; Выключаем широковещательный поиск
NH_USE_BROADCAST = Disabled
; Устанавливаем лимит времени ожидания
NH_TCPIP_METHOD = TCP
Такая настройка гарантирует, что оба типа клиента (тонкий и толстый) будут обращаться к одним и тем же менеджерам лицензий в одинаковом порядке, что повышает шансы на повторное использование уже захваченной лицензии.
Проанализируем самый эффективный способ решения проблемы. Несмотря на то, что в исходной ситуации сервер 1С не раздает лицензии, включение этой функции часто является единственным стопроцентным решением для корректного подсчета сессий.
Почему это работает? Когда лицензию берет клиент (тонкий или толстый), он сам отвечает за поиск ключа. Когда лицензию выдает сервер, он анализирует список всех активных соединений. Сервер видит, что пользователь Ivanov с компьютера TERM-SRV уже имеет активный сеанс, и просто разрешает запуск еще одной базы, не тратя дополнительную лицензию из общего пула.
Для включения этого режима выполним следующее:
.lic скопированы в каталог, доступный службе сервера 1С (обычно C:\ProgramData\1C\Licenses).HASP самостоятельно, а сразу шел к серверу.В современных ОС Windows Server существуют механизмы изоляции сессий. Выясним, не препятствуют ли политики безопасности доступу к общим файлам. В редких случаях помогает перенос всех файлов лицензий из папок конкретных версий bin\conf в общую папку C:\ProgramData\1C\1cv8\conf. Также стоит убедиться, что переменная окружения TNS_ADMIN или другие специфические настройки среды не переопределяют пути к конфигурационным файлам 1С.
Важный момент: если вы используете программные лицензии, проверьте, не активированы ли они «на пользователя». Для терминала лицензии обязательно должны быть активированы с типом «на этот компьютер» (многопользовательские). Если вы по ошибке активировали однопользовательские лицензии и разложили их по профилям пользователей, 1С будет считать их индивидуальными для каждого процесса.
Подводя итог, можно сказать, что решение проблемы чаще всего кроется в обеспечении единообразия: одинаковая разрядность (64-bit), единый источник лицензий (лучше серверный) и чистый кэш в ProgramData. Выполнив последовательно очистку 1cv8conn.pfl и настроив выдачу лицензий через сервер 1С, вы добьетесь правильного и экономного распределения ресурсов терминального сервера.