При работе в среде «1С:Предприятие 8.3» пользователи могут столкнуться с ситуацией, когда стандартная форма выбора даты (выпадающий календарь) отображается искаженно: даты накладываются друг на друга, шрифты отображаются некорректными знаками либо сетка дней полностью деформируется. Данная проблема часто проявляется как в терминальных сессиях RDP на базе Windows Server, так и на локальных клиентских машинах. Рассмотрим причины возникновения этой ошибки и разберем по шагам все способы ее устранения.
Форма выбора даты в платформе 1С не является отдельным объектом конфигурации с настраиваемой версткой — она формируется платформенно на основе стандартных элементов управления операционной системы (системного компонента SysMonthCal32). Сбои в ее работе чаще всего вызываются следующими факторами:
Проанализируем официальную рекомендацию отдела технической поддержки «1С». Чаще всего сбой связан с тем, что системный шрифт MS Shell Dlg перенаправлен на растровый шрифт без поддержки кириллицы или с несовместимым межсимвольным интервалом.
Разберем по шагам процедуру настройки реестра:
regedit и нажмем Enter.MS Shell Dlg.MS Sans Serif, заменим его на полноценный шрифт с поддержкой кириллических глифов — Microsoft Sans Serif.MS Shell Dlg 2 — для него рекомендуется значение Tahoma.Если правка реестра не дала результата, проверим целостность хранилища системных шрифтов в папке C:\Windows\Fonts. На серверных редакциях (Windows Server 2003, 2008, 2012) базовый набор шрифтов может быть урезан.
Для исправления скопируем шрифты из рабочей клиентской операционной системы (например, Windows 7 или Windows 10) и установим их на проблемный сервер или рабочую станцию, пропуская уже существующие файлы шрифтов без их перезаписи.
Выясним причину сжатия элементов: платформа «1С:Предприятие» сохраняет размеры и геометрию окон при их закрытии. Если окно календаря было растянуто или его координаты повредились, сбросим параметры:
%USERPROFILE%\AppData\Local\1C\1Cv8%USERPROFILE%\AppData\Roaming\1C\1Cv8Убедимся, что настройки региональных стандартов операционной системы соответствуют стандарту РФ:
dd.MM.yyyy с точкой в качестве разделителя.В серверных версиях операционных систем выполним дополнительную настройку окружения:
services.msc найдем службу «Темы» (Themes), переведем тип запуска в состояние «Автоматически» и запустим ее.1cv8.exe на вкладке «Совместимость» нажмем «Изменить параметры высокого DPI» и включим переопределение масштабирования с режимом «Приложение».Если доступ к системному администрированию ограничен, а проблему требуется решить на уровне кода конфигурации, используем перехват события НачалоВыбора для элементов формы. Мы можем отключить стандартный диалог и открыть собственную форму выбора даты либо задействовать альтернативные диалоги платформы.
Посмотрим на пример перехвата события ввода даты в управляемой форме:
&НаКлиенте
Процедура ПолеВводаДатыНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
// Отключаем стандартный календарь ОС
СтандартнаяОбработка = Ложь;
// Вызываем альтернативный диалог или собственную форму выбора
ПараметрыФормы = Новый Структура("ТекущаяДата", Объект.ДатаДокумента);
ОткрытьФорму("ОбщаяФорма.ФормаВыбораДаты", ПараметрыФормы, Элемент);
КонецПроцедуры
Для выбора диапазонов дат рекомендуется использовать встроенный объект платформы ДиалогРедактированияСтандартногоПериода, который работает стабильно независимо от системных шрифтов:
&НаКлиенте
Процедура ВыбратьПериодНажатие(Команда)
Диалог = Новый ДиалогРедактированияСтандартногоПериода;
Диалог.Период = ПериодОтчета;
Оповещение = Новый ОписаниеОповещения("ПослеВыбораПериода", ЭтотОбъект);
Диалог.Показать(Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораПериода(ВыбранныйПериод, ДополнительныеПараметры) Экспорт
Если ВыбранныйПериод <> Неопределено Тогда
ПериодОтчета = ВыбранныйПериод;
КонецЕсли;
КонецПроцедуры
Также для строгих полей ввода можно настроить свойство ФорматРедактирования со значением ДФ=dd.MM.yyyy, что позволит пользователям быстро вводить дату вручную с клавиатуры по маске без обязательного вызова выпадающего календаря.