Почему 1С аварийно завершается при навигации по строкам в документе через RDP и как это исправить?

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

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

Разберем детально, почему это происходит, и проанализируем последовательность шагов, которые помогут нам стабилизировать работу системы.

Анализ технической стороны ошибки

Прежде всего, проанализируем информацию из логов. Ошибка 0xc0000005 (Access Violation) означает, что поток программы попытался обратиться к адресу памяти, к которому у него нет прав доступа (либо адрес не существует, либо он защищен). В контексте 1С и RDP это чаще всего происходит в момент перерисовки графического интерфейса. Когда мы перемещаемся по строкам списка, программа должна мгновенно пересчитывать координаты фокуса и отрисовывать выделение. Если в расчетах координат возникает ошибка, вызванная некорректным масштабированием, происходит обращение к неверному участку памяти, и ntdll.dll (ядро пользовательского режима Windows) принудительно завершает процесс 1cv8c.exe.

Шаг 1. Диагностика окружения

Для начала выясним, носит ли проблема массовый характер или локализована на конкретном рабочем месте. Проанализируем следующие моменты:

  1. Проверка под другим пользователем: Попробуем зайти в базу под тем же пользователем, но с другого клиентского компьютера. Если проблема исчезает — значит, корень зла кроется в настройках локальной станции или параметрах отображения конкретного монитора.
  2. Тестирование базы: Хотя ошибка часто выглядит как аппаратная или системная, исключим повреждение данных. Запустим конфигуратор и выполним Тестирование и исправление (ТиИ), а также воспользуемся утилитой chdbfl.exe. Если проверка не выявила ошибок, переходим к настройкам интерфейса.

Шаг 2. Корректировка масштабирования Windows (DPI)

Как показывает практика, основной причиной «чудес» в версиях платформы 8.3.15.х и выше является механизм High DPI. Если у пользователя установлено два монитора или используется монитор с высоким разрешением, Windows часто предлагает масштаб 125% или 150%. Платформа 1С в терминальной сессии может некорректно обрабатывать такие значения.

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

Если после установки масштаба 100% вылеты прекратились, мы нашли причину. Однако работать на мелком шрифте может быть неудобно, поэтому рассмотрим альтернативные способы исправления без изменения глобального масштаба.

Шаг 3. Настройка совместимости исполняемого файла

Если нам необходимо оставить масштаб 125% в системе, попробуем заставить 1С игнорировать системное масштабирование. Разберем, как это сделать:

  1. Перейдем в каталог установки платформы (обычно это C:\Program Files (x86)\1cv8\номер_версии\bin\).
  2. Найдем файл 1cv8c.exe и нажмем правую кнопку мыши, выбрав «Свойства».
  3. На вкладке «Совместимость» нажмем кнопку «Изменить параметры высокого DPI».
  4. Установим галочку «Переопределите режим масштабирования высокого разрешения» и в выпадающем списке выберем пункт «Приложение».

Это заставит саму платформу отрисовывать интерфейс, не полагаясь на алгоритмы Windows, которые могут конфликтовать с RDP-драйвером.

Шаг 4. Оптимизация параметров RDP-подключения

Поскольку проблема проявляется именно в терминальном режиме, проанализируем настройки клиента Remote Desktop Connection (mstsc.exe):

Шаг 5. Работа с DEP (Предотвращение выполнения данных)

Код исключения 0xc0000005 напрямую связан с механизмом безопасности DEP. Если система защиты считает, что 1С пытается выполнить код в сегменте памяти, предназначенном только для данных, она мгновенно «убивает» процесс. Рассмотрим, как добавить 1С в исключения:

  1. Откроем «Панель управления» -> «Система» -> «Дополнительные параметры системы».
  2. На вкладке «Дополнительно» в разделе «Быстродействие» нажмем «Параметры».
  3. Выберем вкладку «Предотвращение выполнения данных».
  4. Если выбран второй пункт («Включить DEP для всех программ, кроме выбранных»), нажмем «Добавить» и укажем путь к 1cv8c.exe.

Важно: На 64-битных системах DEP для 64-битных процессов отключить невозможно, но для 32-битного клиента 1С (x86) это действие может помочь.

Шаг 6. Очистка пользовательских настроек интерфейса

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

Шаг 7. Обновление платформы

Версия платформы 8.3.15.1869, упомянутая в обсуждении, имеет известные ошибки взаимодействия с графической подсистемой Windows в режиме терминального сервера. Разработчики 1С регулярно выпускают исправления для ветки 8.3.18, 8.3.20 и выше, где работа с DPI была существенно пересмотрена.

Если вышеперечисленные методы не принесли стабильного результата, настоятельно рекомендуем обновить платформу до актуального релиза. Это позволит не только избавиться от вылетов ntdll.dll, но и повысить общую производительность системы в режиме «Тонкого клиента».

Резюме

Мы выяснили, что основной причиной аварийного завершения 1С при навигации по строкам является конфликт масштабирования DPI в сессиях RDP. Наиболее быстрым решением является возврат к масштабу 100% или настройка переопределения DPI в свойствах ярлыка. Совместное применение этих мер вместе с очисткой кэша позволяет полностью устранить ошибку 0xc0000005.

← На главную