Обновление платформы 1С:Предприятие — это всегда ответственный шаг, который нередко преподносит разработчикам и администраторам неприятные сюрпризы. В процессе эволюции системы, начиная с релизов ветки 8.3.12 (в частности, с релиза 8.3.12.1685) и заканчивая актуальными сборками 8.3.13, специалисты столкнулись с критическими багами интерфейса. Самыми заметными и болезненными из них стали полная поломка сочетания клавиш Ctrl+Break (остановка глобального поиска и фоновых процессов в Конфигураторе) и кардинальное изменение логики поиска в списках в пользовательском режиме.
В этой статье мы подробно разберем причины возникновения этих проблем, погрузимся во внутреннюю кухню разработки платформы 1С, выясним технические нюансы работы операционных систем и найдем практические способы обхода и устранения данных ошибок.
Для того чтобы понять, почему годами стабильно работавшее сочетание клавиш Ctrl+Break (или Ctrl+Pause) внезапно перестало реагировать на нажатия, нам необходимо заглянуть под капот самой платформы. Фирма 1С предприняла масштабную модернизацию своего программного продукта. Кодовая база 1С:Предприятия, объем которой превышает 10 миллионов строк кода на C++, переводилась на современные стандарты компиляторов.
Перевод кодовой базы на стандарт C++14, а затем и на C++17 (начиная с тестовых версий 8.3.14) потребовал замены старых библиотек времени выполнения (runtime) и систем управления памятью. Долгое время платформа использовала специализированную библиотеку распределения памяти STLport с собственным менеджером кучи. В новых версиях разработчики перешли на стандартный аллокатор компилятора Microsoft Visual C++ (MSVC).
Такой масштабный рефакторинг неизбежно привел к сопутствующим ошибкам:
VK_CANCEL (который генерируется при нажатии Ctrl+Pause).Пока фирма 1С стабилизирует работу платформы на новых стандартах C++, разработчикам приходится искать обходные пути. Рассмотрим наиболее эффективные варианты решения этой проблемы.
Способ 1. Использование альтернативных аппаратных комбинаций (для ноутбуков)
На современных клавиатурах и ноутбуках физическая клавиша Break/Pause часто отсутствует или вынесена в функциональный слой через клавишу Fn. Если стандартное нажатие не работает, попробуйте протестировать следующие аппаратные сочетания:
Fn + PFn + Ctrl + BFn + CFn + Right ShiftCtrl + Fn + PauseСпособ 2. Программная эмуляция нажатия через VBS-скрипт
Если поток конфигуратора завис, но операционная система продолжает реагировать, можно использовать простой скрипт автоматизации Windows Script Host. Мы можем создать файл с расширением .vbs и запускать его в моменты, когда требуется прервать операцию в 1С. Рассмотрим пример кода для такого скрипта:
Set WshShell = WScript.CreateObject("WScript.Shell")
' Активируем окно конфигуратора 1С
WshShell.AppActivate "Конфигуратор"
WScript.Sleep 500
' Посылаем комбинацию Ctrl+Break в активное окно несколько раз
For i = 1 To 5
WshShell.SendKeys "^({BREAK})"
WScript.Sleep 100
Next
Этот скрипт пытается «поймать» кратковременные моменты освобождения очереди сообщений операционной системы и принудительно отправляет команду прерывания непосредственно в дескриптор окна 1С.
Способ 3. Переназначение клавиш и использование TurboConf
Для постоянной работы специалисты рекомендуют использовать утилиты переназначения клавиш (например, SharpKeys или MapKeyboard), чтобы перенаправить функцию VK_CANCEL на более удобную и гарантированно срабатывающую физическую клавишу. Также проблему отлично решают специализированные программные ассистенты разработчика 1С, такие как TurboConf, которые перехватывают управление клавиатурным вводом на низком уровне API Windows.
Вторая частая жалоба пользователей после обновления платформы — пропажа привычного быстрого поиска «по первой букве» в динамических списках (справочники контрагентов, номенклатуры, документов). Пользователи привыкли: открываешь список, нажимаешь на клавиатуре, например, букву «М», и курсор сразу позиционируется на первый элемент, начинающийся с этой буквы.
Рассмотрим, почему это произошло и как теперь работает система:
В управляемом интерфейсе 1С:Предприятия произошел методологический отказ от старого поиска в пользу Полнотекстового поиска данных (ППД). Нажатие клавиш теперь автоматически открывает единую строку поиска. Это сделано для повышения универсальности, но часто приводит к замешательству пользователей.
Чтобы найти элемент в современном списке:
Ctrl + F. Оно открывает специализированное окно поиска, где можно настроить параметры сопоставления (по началу строки, по части строки или по точному совпадению).Если поиск в пользовательском режиме ведет себя некорректно, выполните следующие шаги по перестроению поисковых индексов базы данных:
Рекомендуем также проверить состояние регламентного задания ОбновлениеИндексаППД в консоли регламентных заданий. Оно должно выполняться с периодичностью раз в несколько минут, чтобы пользователи всегда искали по актуальным данным.
Стоит отдельно упомянуть важную проблему совместимости, с которой столкнулись системные администраторы при обновлении на платформы версий 8.3.11, 8.3.12 и 8.3.13. При работе на старых операционных системах Windows XP и Windows Server 2003 наблюдалось катастрофическое падение производительности.
Анализ системных вызовов с помощью профайлеров показал, что практически всё процессорное время уходило на выполнение функции malloc (выделение памяти) внутри библиотеки nuke83.dll. Переход платформы на новый рантайм заставил 1С использовать стандартный системный кучевой распределитель Windows. На современных ОС эта проблема незаметна благодаря технологии LFH (Low Fragmentation Heap), которая автоматически оптимизирует работу с мелкими блоками памяти. В старых ОС Windows Server 2003 поддержка LFH отсутствовала или работала некорректно, что вызывало бесконечные зависания.
Хотя фирма 1С официально сняла с поддержки эти операционные системы, в версии платформы 8.3.14 механизмы работы с памятью были дополнительно переработаны, что позволило устранить симптомы критических тормозов даже на устаревшем оборудовании и программном обеспечении.
Разберем основные выводы нашего исследования:
Ctrl+Break — это временная плата за технологический скачок платформы 1С при переходе на современный стандарт C++17.Ctrl+Break на крупных базах данных, рассмотрите возможность обновления платформы до стабильных релизов ветки 8.3.14 или выше, где ошибки обработки клавиатурных событий были точечно исправлены.Ctrl+F и следите за актуальностью индекса полнотекстового поиска в регламентных заданиях.