При работе «1С:Предприятия» на терминальном сервере (RDP) системные администраторы часто сталкиваются с ситуацией, когда при входе пользователей система сообщает о нехватке лицензий. При этом руководство уверено, что было куплено и установлено достаточное количество рабочих мест. Особую путаницу вносит раздел «О программе», где могут отображаться давно отсутствующие аппаратные USB-ключи HASP или эмуляторы, в то время как реальные программные файлы лицензий (.lic) выдают ошибки в системном журнале.
В этой статье мы подробно разберем, как устроено программное лицензирование в «1С:Предприятии 8», научимся читать логи ошибок, выясним разницу между клиентскими и серверными лицензиями, рассмотрим процесс диагностики с помощью утилиты 1С:Enterprise Ring, а также оптимизируем скорость запуска программы за счет отключения опроса аппаратных ключей.
Рассмотрим классическую ситуацию. На терминальном сервере администратор видит следующую картину в окне «О программе»:
При этом пользователи регулярно получают ошибку: «Не обнаружено свободной лицензии!». Почему так происходит?
Дело в том, что в разделе «О программе» отображается исторический лог всех когда-либо успешно подключенных и использованных ключей на данном компьютере. Если ранее на сервере физически стояли USB-ключи (или использовались их программные эмуляторы), информация о них останется в этом списке навсегда. Доверять этим данным для оперативной диагностики текущего состояния лицензий нельзя. Единственная актуальная строчка там — это «Текущая лицензия».
Для понимания реальной картины необходимо проанализировать полный текст технического сообщения об ошибке, которое выдает платформа при отказе в доступе.
Проанализируем детальный лог поиска лицензий, который формирует платформа 1С:
Ошибка программного лицензирования. Превышено максимальное количество пользователей, разрешенное файлом программной лицензии: file://C:/ProgramData/1C/licenses/20160615111933.lic
Ошибка программного лицензирования. Файл программной лицензии не предусматривает возможность запуска клиентских приложений 1С:Предприятия или внешних соединений: file://C:/ProgramData/1C/licenses/20160615112104.lic
Ошибка программного лицензирования. Превышено максимальное количество пользователей, разрешенное файлом программной лицензии: file://C:/ProgramData/1C/licenses/20170816101321.lic
Этот лог — ключ к решению нашей проблемы. Давайте разберем каждую строчку подробно:
20160615112104.lic возвращает ошибку «не предусматривает возможность запуска клиентских приложений». Это однозначно указывает на то, что перед нами **серверная лицензия** (на 32-разрядный или 64-разрядный сервер «1С:Предприятия»). Данная лицензия разрешает работу самой службы сервера приложений 1С, но она физически не может выделять рабочие места пользователям. То, что она лежит в общей папке, абсолютно нормально, но рассчитывать на нее как на клиентскую нельзя.20160615111933.lic и 20170816101321.lic выдают ошибку «Превышено максимальное количество пользователей...». Это означает, что данные лицензии являются клиентскими и они полностью исправны. Однако на текущий момент все доступные по ним рабочие места (например, 10 и 20 мест соответственно) уже заняты другими активными терминальными сессиями пользователей.Таким образом, мы видим, что сервер видит только две рабочие клиентские лицензии (суммарно на 30 мест), а новая лицензия (например, на 5 мест, которую недавно приобрела компания) в каталоге C:\ProgramData\1C\licenses\ просто отсутствует. Это частая организационная ошибка: руководство приобретает конверт с пин-кодами, но системные администраторы забывают выполнить физическую активацию лицензии на сервере.
Для того чтобы точно определить, какой регистрационный номер, номинал (количество пользователей) и параметры организации зашиты в файлах программных лицензий .lic, мы можем использовать штатную консольную утилиту 1С:Enterprise Ring.
Для работы утилиты на сервере должна быть установлена среда выполнения Java (JRE версии 8 или 11), а в системных переменных окружения прописан путь к ней через переменную JAVA_HOME.
Рассмотрим основные команды для работы с утилитой через командную строку (cmd) от имени администратора:
1. Перейдем в каталог с установленной утилитой (путь может отличаться в зависимости от версии платформы):
cd "C:\Program Files\1cv8\common"
2. Получим список всех установленных лицензий в системном каталоге:
ring license list --path "C:\ProgramData\1C\licenses"
3. Проанализируем детальные параметры конкретного файла лицензии (например, клиентской лицензии на 10 мест), чтобы узнать регистрационный номер продукта и данные владельца:
ring license info --name 20170816101321 --path "C:\ProgramData\1C\licenses"
Эта команда выведет на экран тип лицензии, номинал лицензии (количество рабочих мест), регистрационный номер комплекта и подробную информацию об организации, которая вводилась при активации.
Если в ходе анализа выяснилось, что новая лицензия на 5 пользователей не активирована (отсутствует четвертый файл в каталоге лицензий), необходимо выполнить ее активацию. При работе в терминальном режиме (RDP) крайне важно соблюдать следующие правила:
.lic) должны находиться исключительно в системном каталоге общего доступа, например: C:\ProgramData\1C\licenses\. Не допускается копирование одного и того же файла лицензии в папки отдельных пользователей или в каталоги платформы. Защита 1С обнаружит дублирование уникального файла лицензии в рамках одной сети, расценит это как нарушение и заблокирует файл, переименовав его в формат .oldlic.Если мы обратим внимание на лог поиска лицензий из Шага 1, то увидим, что система тратит значительное время на попытки опроса локальных USB-портов и поиск сетевых менеджеров лицензий NetHASP по сети (строки с ошибками Net Status=0, System Error=0, Warning=129, ORGL8 Сетевой, не установлен).
Когда на сервере используются исключительно программные лицензии (файлы .lic), эти бесполезные сетевые запросы приводят к существенным задержкам при запуске программы у пользователей. Давайте оптимизируем этот процесс и полностью отключим поиск аппаратной защиты.
Способ 1. Отключение через параметры запуска базы
В окне запуска списка информационных баз выделите необходимую базу, нажмите кнопку «Изменить», перейдите на самую последнюю вкладку настроек и в поле «Дополнительные параметры запуска» пропишите следующий ключ защиты:
/UseHwLicenses-
Знак минус в конце ключа жестко приказывает платформе игнорировать поиск физических HASP-ключей и сразу обращаться к программным лицензиям.
Способ 2. Глобальное отключение через nethasp.ini
Для того чтобы применить эту настройку ко всем базам для всех пользователей терминала разом, отредактируем конфигурационные файлы сетевой защиты. Выясним их расположение на сервере:
C:\Program Files\1cv8\conf\nethasp.iniC:\Program Files (x86)\1cv8\conf\nethasp.iniОткроем эти файлы с помощью текстового редактора (например, Блокнота) от имени Администратора. Найдем секцию [NH_COMMON] и принудительно отключим использование сетевых протоколов поиска менеджера лицензий, приведя параметры к следующему виду:
[NH_COMMON]
NH_IPX = Disabled
NH_NETBIOS = Disabled
NH_TCPIP = Disabled
Сохраним изменения. Теперь платформа 1С перестанет тратить время на сканирование локальной сети, портов и широковещательные запросы. Программа будет запускаться мгновенно, сразу считывая объединенный пул лицензий из каталога программных лицензий.