Как исправить некорректное отображение формы выбора даты в 1С на терминальном сервере и рабочих станциях

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

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

Причины сбоя отрисовки календаря

Форма выбора даты в платформе 1С не является отдельным объектом конфигурации с настраиваемой версткой — она формируется платформенно на основе стандартных элементов управления операционной системы (системного компонента SysMonthCal32). Сбои в ее работе чаще всего вызываются следующими факторами:

  1. Некорректная подстановка системных шрифтов: при отсутствии нужной кодировки или неверных сопоставлениях шрифтов в реестре Windows стандартные диалоги интерфейса не могут корректно отрисовать надписи.
  2. Повреждение кэша настроек и геометрии окна: платформа сохраняет координаты и размеры окон в профиле пользователя. Если всплывающее окно календаря растянулось, компонент пытается отрисовать сетку сразу нескольких месяцев, что приводит к сжатию и нечитаемости элементов.
  3. Сбои региональных настроек Windows: нестандартные форматы краткой даты или разделители компонентов даты нарушают работу встроенного парсера календаря.
  4. Отключение служб визуализации и оформления: на серверных версиях ОС по умолчанию отключены темы оформления и компоненты рабочего стола.
  5. Нестандартное масштабирование экрана (DPI): в RDP-сеансах масштабирование 125% или 150% может искажать пропорции встроенных контролов.

Способ 1. Корректировка параметров подстановки шрифтов в реестре Windows

Проанализируем официальную рекомендацию отдела технической поддержки «1С». Чаще всего сбой связан с тем, что системный шрифт MS Shell Dlg перенаправлен на растровый шрифт без поддержки кириллицы или с несовместимым межсимвольным интервалом.

Разберем по шагам процедуру настройки реестра:

  1. Откроем редактор реестра: нажмем сочетание клавиш Win + R, введем regedit и нажмем Enter.
  2. Перейдем в следующую ветку реестра: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes
  3. Найдем строковый параметр с именем MS Shell Dlg.
  4. Если в его значении указан шрифт MS Sans Serif, заменим его на полноценный шрифт с поддержкой кириллических глифов — Microsoft Sans Serif.
  5. Проверим наличие и значение параметра MS Shell Dlg 2 — для него рекомендуется значение Tahoma.
  6. Перезагрузим компьютер или терминальный сервер для применения внесенных изменений.

Способ 2. Проверка и установка недостающих шрифтов

Если правка реестра не дала результата, проверим целостность хранилища системных шрифтов в папке C:\Windows\Fonts. На серверных редакциях (Windows Server 2003, 2008, 2012) базовый набор шрифтов может быть урезан.

Для исправления скопируем шрифты из рабочей клиентской операционной системы (например, Windows 7 или Windows 10) и установим их на проблемный сервер или рабочую станцию, пропуская уже существующие файлы шрифтов без их перезаписи.

Способ 3. Очистка пользовательского кэша и сброс положения окна

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

  1. Откроем форму выбора даты, нажмем правой кнопкой мыши по ее заголовку и выберем команду «Восстановить положение окна».
  2. Вручную потянем за угол всплывающего окна календаря мышью, уменьшив его область до размеров одного календарного месяца.
  3. Если сброс окна не помог, выполним полную очистку пользовательского кэша, удалив временные каталоги:
    1. %USERPROFILE%\AppData\Local\1C\1Cv8
    2. %USERPROFILE%\AppData\Roaming\1C\1Cv8

Способ 4. Проверка региональных стандартов Windows

Убедимся, что настройки региональных стандартов операционной системы соответствуют стандарту РФ:

  1. Откроем «Панель управления» → «Региональные стандарты» (Regional Settings).
  2. На вкладке «Форматы» проверим, чтобы формат краткой даты имел вид dd.MM.yyyy с точкой в качестве разделителя.
  3. Проверим, чтобы первым днем недели был установлен Понедельник.
  4. На вкладке «Дополнительно» убедимся, что языком программ, не поддерживающих Юникод, выбран Русский (Россия).

Способ 5. Настройка параметров совместимости и служб Windows Server

В серверных версиях операционных систем выполним дополнительную настройку окружения:

  1. В диспетчере служб services.msc найдем службу «Темы» (Themes), переведем тип запуска в состояние «Автоматически» и запустим ее.
  2. Через «Диспетчер сервера» добавим компонент «Возможности рабочего стола» (Desktop Experience).
  3. В свойствах ярлыка или исполняемого файла 1cv8.exe на вкладке «Совместимость» нажмем «Изменить параметры высокого DPI» и включим переопределение масштабирования с режимом «Приложение».

Программные способы обхода проблемы в конфигураторе

Если доступ к системному администрированию ограничен, а проблему требуется решить на уровне кода конфигурации, используем перехват события НачалоВыбора для элементов формы. Мы можем отключить стандартный диалог и открыть собственную форму выбора даты либо задействовать альтернативные диалоги платформы.

Посмотрим на пример перехвата события ввода даты в управляемой форме:


&НаКлиенте
Процедура ПолеВводаДатыНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    // Отключаем стандартный календарь ОС
    СтандартнаяОбработка = Ложь;
    
    // Вызываем альтернативный диалог или собственную форму выбора
    ПараметрыФормы = Новый Структура("ТекущаяДата", Объект.ДатаДокумента);
    ОткрытьФорму("ОбщаяФорма.ФормаВыбораДаты", ПараметрыФормы, Элемент);
КонецПроцедуры

Для выбора диапазонов дат рекомендуется использовать встроенный объект платформы ДиалогРедактированияСтандартногоПериода, который работает стабильно независимо от системных шрифтов:


&НаКлиенте
Процедура ВыбратьПериодНажатие(Команда)
    Диалог = Новый ДиалогРедактированияСтандартногоПериода;
    Диалог.Период = ПериодОтчета;
    
    Оповещение = Новый ОписаниеОповещения("ПослеВыбораПериода", ЭтотОбъект);
    Диалог.Показать(Оповещение);
КонецПроцедуры

&НаКлиенте
Процедура ПослеВыбораПериода(ВыбранныйПериод, ДополнительныеПараметры) Экспорт
    Если ВыбранныйПериод <> Неопределено Тогда
        ПериодОтчета = ВыбранныйПериод;
    КонецЕсли;
КонецПроцедуры

Также для строгих полей ввода можно настроить свойство ФорматРедактирования со значением ДФ=dd.MM.yyyy, что позволит пользователям быстро вводить дату вручную с клавиатуры по маске без обязательного вызова выпадающего календаря.

← На главную