Почему 1С съедает несколько лицензий под разные типы клиентов в одной терминальной сессии и как это исправить

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

В процессе администрирования терминальных серверов с установленной платформой 1С:Предприятие 8.3 системные администраторы часто сталкиваются с неочевидным поведением системы лицензирования. Одной из самых неприятных ситуаций является «двойной» захват лицензий: когда один и тот же пользователь в рамках одной терминальной сессии запускает несколько информационных баз, и система списывает одну лицензию на все запущенные тонкие клиенты и еще одну — на толстые клиенты. Согласно документации, при работе в терминальном режиме должна использоваться одна лицензия на сессию, независимо от количества запущенных баз и типов используемых клиентов. Рассмотрим подробно, почему это происходит и как привести потребление лицензий в норму.

Анализируем причины избыточного потребления лицензий

Для начала разберем механизм, по которому платформа «понимает», что лицензия уже получена. В терминальной среде основным идентификатором для 1С является Terminal Session ID. Если программные лицензии активированы правильно (как многопользовательские на компьютер), то при запуске первого приложения (например, 1cv8c.exe — тонкий клиент) оно захватывает лицензию и оставляет информацию об этом в специальном файле. При запуске второго приложения (например, 1cv8.exe — толстый клиент) платформа должна проверить наличие свободных лицензий в рамках текущего идентификатора сессии и «подцепиться» к уже существующей.

Однако этот механизм часто дает сбой по нескольким причинам:

  1. Разная разрядность клиентских приложений. Если один сеанс запущен в 32-битной версии клиента, а другой в 64-битной, 1С всегда будет считать их разными сущностями.
  2. Смешивание типов лицензирования. Конфликт возникает, когда тонкий клиент находит программную лицензию (.lic), а толстый — аппаратную (HASP), или наоборот.
  3. Повреждение кэша лицензирования. Служебные файлы, хранящие информацию о выданных лицензиях, могут быть заблокированы или содержать некорректные данные.
  4. Особенности версии 8.3.27. В новых релизах платформы изменены алгоритмы работы защищенного хранилища, что иногда приводит к изоляции процессов разных бинарных файлов.

Шаг 1: Проверка и очистка кэша лицензий

Проанализируем состояние служебных файлов 1С. Одним из ключевых файлов, отвечающих за связку сессий и лицензий, является 1cv8conn.pfl. Этот файл хранит информацию о параметрах последнего успешного подключения и полученной лицензии. Если данные в нем некорректны или у пользователя недостаточно прав на запись в этот файл, платформа может игнорировать существующую лицензию и запрашивать новую.

Выполним следующие действия:

  1. Завершим все сеансы 1С на терминальном сервере.
  2. Найдем файл 1cv8conn.pfl. Обычно он располагается в папках:
    • C:\ProgramData\1C\1cv8\conf\
    • %AppData%\1C\1cv8\
  3. Удалим этот файл. При следующем запуске платформа создаст его заново с актуальными данными.
  4. Проверим права доступа. Убедимся, что группа «Пользователи» (или конкретные пользователи терминала) имеют права «Изменение» на папку C:\ProgramData\1C\Licenses и на общую папку настроек C:\ProgramData\1C\1cv8\conf.

Посмотрим на пример расположения файлов лицензий, которые также стоит проверить на наличие «мусорных» временных файлов с расширением .lgp или .tmp, которые могут оставаться после аварийного завершения работы:


C:\ProgramData\1C\Licenses\*.lic
C:\Users\ИмяПользователя\AppData\Local\1C\1cv8\*.pfl

Шаг 2: Устранение конфликта разрядности клиентов

Выясним, не установлены ли на сервере одновременно разные версии платформы по разрядности. В Windows Server 2019 часто устанавливают и x86, и x86_64 версии для совместимости со старыми драйверами или внешними компонентами. Если пользователь через стартер 1С запускает одну базу, где в настройках жестко прописано «32 (x86)», а другую с параметром «64 (x86_64)», то экономии лицензий не будет.

Проанализируем настройки в окне запуска 1С:

  1. Нажмем кнопку «Изменить» для каждой информационной базы.
  2. Перейдем на последнюю закладку настроек.
  3. Убедимся, что поле «Разрядность» либо пустое (по умолчанию), либо везде установлено одинаковое значение (например, только 64-бит).

Шаг 3: Настройка приоритета поиска лицензий (nnhasp.ini)

Рассмотрим ситуацию, когда в сети есть и физические ключи, и программные лицензии. Если терминальный сервер настроен на поиск лицензий по сети через 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

Такая настройка гарантирует, что оба типа клиента (тонкий и толстый) будут обращаться к одним и тем же менеджерам лицензий в одинаковом порядке, что повышает шансы на повторное использование уже захваченной лицензии.

Шаг 4: Использование механизма раздачи лицензий сервером 1С

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

Почему это работает? Когда лицензию берет клиент (тонкий или толстый), он сам отвечает за поиск ключа. Когда лицензию выдает сервер, он анализирует список всех активных соединений. Сервер видит, что пользователь Ivanov с компьютера TERM-SRV уже имеет активный сеанс, и просто разрешает запуск еще одной базы, не тратя дополнительную лицензию из общего пула.

Для включения этого режима выполним следующее:

  1. Убедимся, что программные лицензии .lic скопированы в каталог, доступный службе сервера 1С (обычно C:\ProgramData\1C\Licenses).
  2. В консоли администрирования серверов 1С зайдём в свойства каждой информационной базы.
  3. Установим галочку «Разрешить выдачу лицензий сервером 1С» в значение «Да».
  4. В настройках баз у пользователей (в стартере) желательно отключить параметр «Использовать аппаратный ключ», чтобы клиент не пытался искать HASP самостоятельно, а сразу шел к серверу.

Шаг 5: Проверка специфики Windows Server 2019

В современных ОС Windows Server существуют механизмы изоляции сессий. Выясним, не препятствуют ли политики безопасности доступу к общим файлам. В редких случаях помогает перенос всех файлов лицензий из папок конкретных версий bin\conf в общую папку C:\ProgramData\1C\1cv8\conf. Также стоит убедиться, что переменная окружения TNS_ADMIN или другие специфические настройки среды не переопределяют пути к конфигурационным файлам 1С.

Важный момент: если вы используете программные лицензии, проверьте, не активированы ли они «на пользователя». Для терминала лицензии обязательно должны быть активированы с типом «на этот компьютер» (многопользовательские). Если вы по ошибке активировали однопользовательские лицензии и разложили их по профилям пользователей, 1С будет считать их индивидуальными для каждого процесса.

Подводя итог, можно сказать, что решение проблемы чаще всего кроется в обеспечении единообразия: одинаковая разрядность (64-bit), единый источник лицензий (лучше серверный) и чистый кэш в ProgramData. Выполнив последовательно очистку 1cv8conn.pfl и настроив выдачу лицензий через сервер 1С, вы добьетесь правильного и экономного распределения ресурсов терминального сервера.

← На главную