Выпуск новых релизов платформы 1С:Предприятие часто сопровождается не только появлением новых возможностей, но и выявлением неочевидных ошибок. Давайте подробно разберем основные технические сложности, с которыми сталкиваются программисты и администраторы при переходе на версию 8.3.12, и рассмотрим проверенные способы их решения.
Одной из самых частых и неприятных проблем релиза 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С внедрила строгий и агрессивный механизм защиты от нелегального использования. Платформа сканирует систему и блокирует работу, если находит:
backbas.dll).Чтобы восстановить работоспособность, необходимо выполнить полную очистку сервера или клиентского ПК. Удалите все нелегальные эмуляторы через диспетчер устройств, вычистите связанные с ними ветки реестра, полностью деинсталлируйте платформу 1С, удалите ее папку из каталога Program Files и установите дистрибутив заново. Обязательно используйте только официальные программные пин-коды или легальные аппаратные USB-ключи.
Еще одна боль разработчиков — отказ механизма отладки в клиент-серверном варианте. Вы запускаете конфигуратор с ключом -debug, расставляете точки останова, но при выполнении кода в режиме предприятия выполнение "весело проскакивает" мимо них.
Разберем по шагам, как вернуть отладку к жизни:
-debug на -debug -tcp (для классического протокола по локальной сети) или -debug -http (для нового протокола по HTTP).Платформа 8.3.12 принесла важные изменения в механизм расширений, но оставила ряд жестких ограничений. Рассмотрим подробнее.
Теперь реализована возможность формировать движения документов (как собственных из расширения, так и заимствованных) по заимствованным регистрам основной конфигурации. Однако, создать полностью свой собственный регистр накопления внутри расширения в 8.3.12 нельзя. Эта архитектурная возможность появилась только в версии 8.3.13.
Если вам необходимо реализовать сложную логику, рабочая схема для 8.3.12 выглядит так: добавляем новый регистр в саму основную конфигурацию, а всю программную логику проведения и алгоритмы выносим в расширение.
Также помните, что для полноценной работы с добавлением новых объектов данных (справочников, документов) основная конфигурация должна работать без режима совместимости с устаревшими версиями. Режим совместимости в свойствах конфигурации должен быть установлен в значение Не использовать или строго Версия 8.3.12.
Пользователи отмечают периодические проблемы с прорисовкой списков (не листаются процедуры, свернутые группы всегда свернуты) и фантомные ошибки после демонического (динамического) обновления.
Мы рекомендуем использовать динамическое обновление только для точечной правки программного кода в модулях. Если ваши изменения затрагивают структуру метаданных (вы добавили новый реквизит, изменили тип данных, добавили новый объект), обновление базы следует выполнять исключительно в монопольном режиме. Если после динамического обновления база все же начала вести себя нестабильно, необходимо остановить службу сервера 1С, очистить сеансовые данные кластера и удалить папки локального кэша на клиентах.