При эксплуатации платформы 1С:Предприятие 7.7 в среде операционных систем Windows Server (в частности, Windows Server 2003) системные администраторы и разработчики нередко сталкиваются с ситуацией, когда стандартные элементы программы отображаются корректно, а всплывающие подсказки (ToolTip) или контекстные меню, созданные внешними библиотеками (например, RWidjets.dll), выводятся нечитаемыми символами — «кракозябрами» или «каракулями».
Проанализируем природу этой неполадки, разберем причины сбоя кодировок и рассмотрим проверенные способы восстановления корректного отображения кириллицы.
Платформа 1С версии 7.7 и многие внешние библиотеки расширения интерфейса Win32 работают в однобайтовой кодировке (ANSI). Искажение кириллических символов обычно связано со следующими факторами:
ANSI_CHARSET (код 0) вместо кириллического RUSSIAN_CHARSET (код 204).1252 или 1250), русский текст транслируется некорректно.Рассмотрим быстрое решение, предложенное в обсуждении, которое позволяет принудительно перенаправить таблицы перекодировки ANSI на русскую страницу 1251.
Разберем процесс по шагам:
regedit и нажмем Enter.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage1250 до 1255.1250 и 1252) установим значение c_1251.nls (или просто укажем значение 1251 в зависимости от исходного формата записи в вашей версии ОС, приведя их в соответствие с параметром 1251).Важное предостережение: Подмена кодовой страницы 1252 в реестре может повлиять на другое стороннее программное обеспечение, установленное на сервере, если ему требуются оригинальные западноевропейские символы. Если на сервере работают веб-сервисы или специализированные службы, рекомендуется сначала опробовать более мягкие методы настройки.
Если правка системных таблиц NLS нежелательна, более безопасным и точечным решением является перенаправление шрифтов с нулевого набора символов на кириллический (204).
Выполним следующие действия в реестре:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutesREG_SZ):
"Arial,0"="Arial,204""Tahoma,0"="Tahoma,204""MS Sans Serif,0"="MS Sans Serif,204""System,0"="Arial,204"После этой настройки любые запросы к шрифтам со стандартным набором 0 будут автоматически отображаться с использованием кириллических глифов (204), что устраняет каракули в меню и всплывающих подсказках.
Проанализируем стандартные региональные параметры Windows, которые отвечают за интерпретацию однобайтовых строк в не-Unicode программах:
Иногда искажения связаны с повреждением или некорректным выбором системного шрифта для конкретных элементов интерфейса:
Tahoma размером 8 пунктов), поддерживающий кириллицу.При интеграции нестандартных элементов управления через RWidjets.dll полезно учитывать нюансы совместной работы библиотек в 1С 7.7:
Порядок инициализации компонент: Если в вашей конфигурации параллельно используется библиотека 1C++ (1cpp.dll), загрузку библиотек в коде ПриНачалеРаботыСистемы необходимо выполнять строго в правильной последовательности. Компонента 1cpp.dll должна загружаться первой, так как механизм перехвата оконных сообщений (subclassing) может конфликтовать с окнами, порожденными RWidjets.dll.
В качестве альтернативного решения для построения всплывающих подсказок и нестандартного оформления можно рассмотреть библиотеку FormEx или штатные классы пользовательского интерфейса 1С++, которые обладают более стабильной совместимостью с современными версиями Windows.