Переход на новые релизы платформы «1С:Предприятие» — это всегда ответственный шаг, который может сопровождаться непредвиденным поведением системы. Сборка 8.3.12.1714, выпущенная в конце 2018 года, стала одной из самых обсуждаемых в сообществе из-за целого ряда критических ошибок. Пользователи и администраторы столкнулись со сбоями при обновлении конфигураций (в частности, ЗУП и Комплексной автоматизации), ошибками интерфейса и аварийным завершением работы процессов.
В этой статье мы подробно проанализируем ключевые проблемы данного релиза, выясним причины их возникновения и разберем по шагам практические методы их устранения и обхода.
---
Эта ошибка чаще всего возникает при обновлении конфигураций на новые релизы, формировании сложных отчетов или выводе документов на печать. Платформа внезапно закрывается, и операционная система Windows выводит сообщение о невозможности запустить Just-In-Time (JIT) отладчик.
Выясним причину: появление этого окна указывает не на проблему в настройках конфигуратора 1С, а на аварийное завершение (краш) процесса 1cv8.exe или rphost.exe. Когда в коде C++, на котором написана платформа, происходит критическое исключение (например, Access Violation из-за утечки памяти или обращения к несуществующему адресу), операционная система Windows пытается передать управление зарегистрированному в системе отладчику по умолчанию (например, Visual Studio). Если отладчик не настроен или удален, ОС выдает указанное системное предупреждение. В релизе 8.3.12.1714 критический сбой происходил из-за некорректной работы платформы с системными библиотеками печати и механизмами реструктуризации баз данных.
Рассмотрим способы решения этой проблемы.
Способ А. Установка распространяемых пакетов Visual C++
В ряде случаев падение платформы вызвано отсутствием или повреждением необходимых системных компонентов. В комплекте поставки дистрибутива 1С присутствует необходимый установщик.
vc_redist.x64.exe (или vc_redist.x86.exe для 32-битных систем).Способ Б. Отключение JIT-отладки в реестре Windows
Если сама программа продолжает падать, но мы хотим избавиться от назойливого окна Windows, блокирующего автоматические процессы (например, ночное обновление баз), мы можем отключить вызов JIT-отладчика через системный реестр. Проанализируем эту процедуру подробнее:
regedit и нажмем Enter для запуска Редактора реестра.Debugger в ветках:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebugHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebuggerHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebugHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebuggerСпособ В. Откат или обновление платформы
Поскольку корень проблемы лежит в ошибках самого исполняемого кода платформы 8.3.12.1714, наиболее надежным решением является смена релиза:
8.3.12.1685.8.3.12.1790, а также в ветке 8.3.13 (например, 8.3.13.1644 и выше).---
Эта ошибка часто возникает при попытке обновить тяжелые конфигурации (например, Комплексная автоматизация 2.4 или ERP) на релизе 8.3.12.1714. SDBL (Simple Data Base Layer) отвечает за взаимодействие платформы с СУБД, и данная ошибка говорит о нарушении внутренней логики работы с таблицами конфигурации.
Разберем по шагам, как исправить эту ситуацию:
%userprofile%\AppData\Local\1C\1Cv8 и %userprofile%\AppData\Roaming\1C\1Cv8), а также обязательно очистить кэш сервера 1С. Для этого остановим службу сервера «1С:Предприятия» и удалим содержимое каталогов snccntx в папке службы (по умолчанию C:\Program Files\1cv8\srvinfo\)..dt, создадим новую чистую базу в СУБД и загрузим полученный файл туда. Данная операция принудительно пересоздает структуру таблиц SDBL на стороне СУБД, устраняя «фантомные» ссылки на таблицы расширений.---
Многие разработчики столкнулись с тем, что после обновления на платформу 8.3.12.1714 в их кастомных обработках и даже в типовом коде конфигураций нарушилась логика обработки данных. Элементы коллекции Соответствие при обходе в цикле стали возвращаться в ином порядке (часто в обратном порядке добавления, по принципу стека).
Анализ причин изменения поведения: начиная с версий 8.3.11 и 8.3.12, фирма 1С отказалась от использования старой библиотеки STLport в пользу современных стандартов STL для ускорения работы с памятью и оптимизации производительности. Из-за этого изменилась реализация хэш-таблиц под капотом платформы. Хотя в документации к 1С всегда декларировалось, что порядок элементов в Соответствии и Структуре не определен, на практике во всех предыдущих версиях платформы (8.0–8.3.10) элементы обходились в порядке их добавления. В новых релизах этот порядок изменился.
Посмотрим на пример некорректного кода, который часто использовался разработчиками:
// Пример кода, зависящего от порядка (работал в старых версиях, но сломался в 8.3.12)
МоеСоответствие = Новый Соответствие;
МоеСоответствие.Вставить("Первый", "Значение1");
МоеСоответствие.Вставить("Второй", "Значение2");
Для Каждого Элемент Из МоеСоответствие Цикл
// Разработчик ожидает, что "Первый" обработается раньше, чем "Второй"
Сообщить(Элемент.Ключ);
КонецЦикла;
Для того чтобы исправить подобные алгоритмы и сделать их независимыми от платформенных изменений хэш-функций, применим гарантированный обход. Разберем правильный подход с использованием вспомогательного массива ключей:
// Правильный подход с сохранением порядка добавления
СписокКлючей = Новый Массив;
МоеСоответствие = Новый Соответствие;
// Добавляем данные и фиксируем порядок в массиве
МоеСоответствие.Вставить("Первый", "Значение1");
СписокКлючей.Добавить("Первый");
МоеСоответствие.Вставить("Второй", "Значение2");
СписокКлючей.Добавить("Второй");
// Обходим строго по зафиксированному списку ключей
Для Каждого Ключ Из СписокКлючей Цикл
ТекущееЗначение = МоеСоответствие.Получить(Ключ);
Сообщить("Ключ: " + Ключ + ", Значение: " + ТекущееЗначение);
КонецЦикла;
Также для хранения упорядоченных пар данных отлично подходит объект ТаблицаЗначений или СписокЗначений, в которых порядок строк гарантированно сохраняется в соответствии с индексом добавления.
---
Пользователи заметили неудобство: в дереве «Все функции» (ныне «Функции для технического специалиста»), а также в иерархических списках отчетов перестал работать быстрый поиск по первым буквам при нажатии клавиш на клавиатуре. Раньше достаточно было набрать первые символы названия обработки, чтобы курсор автоматически сфокусировался на ней.
Позиция разработчиков 1С: это изменение официально объявлено не ошибкой, а особенностью реализации (фичей). Отказ от мгновенного позиционирования по символам в деревьях управляемых форм был сделан для оптимизации работы Веб-клиента. В браузере перехват посимвольного ввода на лету вызывал значительные задержки интерфейса. Чтобы поведение платформы в тонком, толстом и веб-клиентах было абсолютно одинаковым, этот функционал убрали.
Как с этим работать в современных реалиях?