Какие ошибки возникают при переходе на платформу 1С 8.3.12 и как их исправить?

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

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

Ошибка СУБД: превышение максимально допустимой точности 38

Одной из самых частых и неприятных проблем релиза 8.3.12.1412 стала ошибка, возникающая при выполнении ресурсоемких запросов в клиент-серверном варианте базы на MS SQL Server. Система внезапно прерывает работу пользователя (например, при заполнении ведомостей в ЗУП) с сообщением:

Ошибка СУБД: Microsoft SQL Server Native Client: Столбец или параметр #3: указанная точность столбца 44 превышает максимальную допустимую точность 38. HRESULT=80040E14.

Проанализируем ситуацию. Ограничение связано со спецификой работы MS SQL Server, который не способен обработать числа с разрядностью более 38 знаков. В 1С эта проблема чаще всего проявляется при математических операциях внутри запросов, особенно при делении на результаты агрегатных функций, таких как СУММА. Например, если в запросе выполняется деление единицы на огромную сумму, сервер падает.

Рассмотрим, как обойти эту проблему на уровне программного кода. Нам необходимо принудительно ограничить размерность результата прямо в тексте запроса. Для этого используется функция приведения типов ВЫРАЗИТЬ. Посмотрим на пример исправления кода:


// Код, вызывающий ошибку:
ВЫБРАТЬ 
    1 / СУММА(ПолеСБольшимЧислом) КАК Результат

// Исправленный безопасный код:
ВЫБРАТЬ 
    ВЫРАЗИТЬ((1 / СУММА(ПолеСБольшимЧислом)) КАК ЧИСЛО(15, 2)) КАК Результат

Применяя конструкцию ВЫРАЗИТЬ, мы жестко задаем разрядность, и SQL Server корректно отрабатывает запрос. Стоит отметить, что разработчики 1С устранили этот баг на уровне платформы в последующих тестовых сборках (начиная с 8.3.12.1469).

Ошибка "Обнаружено нарушение целостности системы"

Многие системные администраторы при обновлении до платформы 8.3.11 и 8.3.12 столкнулись с внезапным появлением сообщения об обнаружении нарушения целостности системы. Важно понимать: эта ошибка не свидетельствует о физическом повреждении вашей информационной базы.

Выясним причину. В данных релизах 1С внедрила строгий и агрессивный механизм защиты от нелегального использования. Платформа сканирует систему и блокирует работу, если находит:

  1. Следы установки эмуляторов аппаратных ключей HASP (таких как VUSBBus, MultiKey, драйвер vusbbus.sys).
  2. Модифицированные (пропатченные) файлы самой платформы (например, измененный backbas.dll).
  3. Остаточные записи в системном реестре от старых средств обхода лицензирования.

Чтобы восстановить работоспособность, необходимо выполнить полную очистку сервера или клиентского ПК. Удалите все нелегальные эмуляторы через диспетчер устройств, вычистите связанные с ними ветки реестра, полностью деинсталлируйте платформу 1С, удалите ее папку из каталога Program Files и установите дистрибутив заново. Обязательно используйте только официальные программные пин-коды или легальные аппаратные USB-ключи.

Проблемы с отладкой: проскакивание точек останова

Еще одна боль разработчиков — отказ механизма отладки в клиент-серверном варианте. Вы запускаете конфигуратор с ключом -debug, расставляете точки останова, но при выполнении кода в режиме предприятия выполнение "весело проскакивает" мимо них.

Разберем по шагам, как вернуть отладку к жизни:

  1. Проверьте протокол отладки. В новых версиях платформы приоритеты протоколов могли измениться. Рекомендуется явно прописывать нужный протокол в параметрах запуска службы сервера 1С. Замените простой ключ -debug на -debug -tcp (для классического протокола по локальной сети) или -debug -http (для нового протокола по HTTP).
  2. Если отладка отваливается периодически или не цепляются внешние обработки, причина кроется в кэшировании сеансов. Помогает полная очистка локального кэша пользователя и ручной перезапуск Конфигуратора с переподключением предмета отладки.

Особенности работы с расширениями

Платформа 8.3.12 принесла важные изменения в механизм расширений, но оставила ряд жестких ограничений. Рассмотрим подробнее.

Теперь реализована возможность формировать движения документов (как собственных из расширения, так и заимствованных) по заимствованным регистрам основной конфигурации. Однако, создать полностью свой собственный регистр накопления внутри расширения в 8.3.12 нельзя. Эта архитектурная возможность появилась только в версии 8.3.13.

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

Также помните, что для полноценной работы с добавлением новых объектов данных (справочников, документов) основная конфигурация должна работать без режима совместимости с устаревшими версиями. Режим совместимости в свойствах конфигурации должен быть установлен в значение Не использовать или строго Версия 8.3.12.

Глюки интерфейса и динамическое обновление

Пользователи отмечают периодические проблемы с прорисовкой списков (не листаются процедуры, свернутые группы всегда свернуты) и фантомные ошибки после демонического (динамического) обновления.

Мы рекомендуем использовать динамическое обновление только для точечной правки программного кода в модулях. Если ваши изменения затрагивают структуру метаданных (вы добавили новый реквизит, изменили тип данных, добавили новый объект), обновление базы следует выполнять исключительно в монопольном режиме. Если после динамического обновления база все же начала вести себя нестабильно, необходимо остановить службу сервера 1С, очистить сеансовые данные кластера и удалить папки локального кэша на клиентах.

← На главную