Как увеличить длину числового реквизита более 15 знаков в Плане видов характеристик?

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

При разработке или глубокой настройке конфигураций на платформе «1С:Предприятие 8» часто возникает необходимость хранения специфических данных в Планах видов характеристик (ПВХ). Одной из типичных проблем, с которыми сталкиваются разработчики, является ограничение длины числового типа данных. По умолчанию при выборе типа Число многие привыкли видеть ограничение в 15 знаков, что обусловлено стандартами финансового учета (например, формат 15.2 для хранения денежных сумм). Однако в реальности платформа позволяет использовать гораздо большие значения.

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

Пошаговое изменение длины числа в конфигураторе

Проанализируем ситуацию: когда вы работаете с Планом видов характеристик, тип значения каждой характеристики определяется свойством Тип значения характеристик. Это не просто выбор одного типа, а создание объекта ОписаниеТипов, который может включать как один, так и несколько типов данных.

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

  1. Откройте конфигуратор и найдите нужный ПланВидовХарактеристик в дереве объектов метаданных.
  2. Двойным кликом откройте окно редактирования объекта.
  3. На первой же вкладке «Основные» найдите поле «Тип значения характеристик» и нажмите на кнопку выбора (три точки).
  4. В открывшемся окне «Описание типов» выберите в списке доступных типов Число.
  5. Обратите внимание на нижнюю часть окна, где располагаются свойства выбранного типа. Именно здесь находятся поля «Длина» и «Точность».
  6. В поле «Длина» введите необходимое значение (например, 20 или 25). Платформа 1С поддерживает длину числа до 32 знаков.
  7. Нажмите «ОК» и обновите конфигурацию базы данных (клавиша F7).

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

Технические ограничения платформы и СУБД

Выясним причину, по которой иногда не удается сразу установить нужное значение. Платформа «1С:Предприятие 8» спроектирована как кроссплатформенная система. Хотя современные СУБД, такие как MS SQL Server или PostgreSQL, позволяют хранить числа с точностью до 38 знаков, 1С устанавливает жесткий верхний предел в 32 знака. Это гарантирует, что данные будут корректно обрабатываться встроенным языком и передаваться между различными серверами без потерь.

Посмотрим на пример того, как это выглядит на уровне хранения. В SQL-таблицах для таких чисел используется тип NUMERIC или DECIMAL. Если вы увеличиваете длину числа в метаданных, 1С пересоздает колонку в таблице значений, чтобы она соответствовала новому описанию. Если число используется в составе сложного (составного) типа данных, оно может храниться в специальных полях, и значительное увеличение длины приведет к увеличению объема занимаемой памяти на диске.

Проблема точности и типы данных Double vs Decimal

Проанализируем ситуацию с потерей точности. В 1С тип Число — это число с фиксированной точкой. Это критически важно для бухгалтерского учета, так как позволяет избежать ошибок округления, которые всегда присутствуют в числах с плавающей точкой (тип Double). Однако при передаче данных во внешние системы (через COM, веб-сервисы или при работе в веб-клиенте через JavaScript) числа длиннее 15-17 знаков могут неявно преобразовываться системой в тип с плавающей точкой.

Почему 15 знаков считаются «безопасным» пределом? Потому что стандарт IEEE 754 (числа двойной точности) гарантирует точное представление только первых 15–17 значащих цифр. Если ваше число длиннее, последние разряды могут самопроизвольно измениться при вычислениях или даже просто при выводе на форму в браузере. Если вам нужно хранить 20-значные номера, которые не участвуют в арифметике, использование числового типа становится рискованным.

Когда использовать тип «Строка» вместо «Числа»

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

Если ваша задача — хранить длинный идентификатор, настоятельно рекомендуем в окне «Описание типов» вашего ПВХ выбрать Строка. Это избавит вас от проблем с форматом вывода, экспоненциальной записью в Excel (типа 1.23E+19) и сложностями с масками ввода.

Работа с длинными числами в программном коде

Если вам необходимо программно ограничить или расширить типы в ОписаниеТипов, используйте конструктор этого объекта. Рассмотрим пример, как можно программно задать описание типа для числа большой разрядности:


// Создаем массив типов, включающий только число
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("Число"));

// Задаем квалификаторы числа: Длина 25, Точность 5, Допустимый знак - Любой
КвалификаторыЧисла = Новый КвалификаторыЧисла(25, 5, ДопустимыйЗнак.Любой);

// Формируем описание типов для программного использования
НовоеОписание = Новый ОписаниеТипов(МассивТипов, , КвалификаторыЧисла);

// Теперь это описание можно применить, например, к программно созданному реквизиту формы

Посмотрим на использование в контексте ПВХ. Если вы программно создаете виды характеристик, убедитесь, что в метаданных самого ПВХ в поле «Тип значения характеристик» включено Число с максимальной потенциально возможной длиной. Программно вы сможете «сузить» это значение для конкретного элемента, но «расширить» его больше, чем задано в метаданных, не получится.

Отображение в интерфейсе

Иногда проблема кроется не в метаданных, а в визуальном отображении. Если в конфигураторе длина установлена верно (например, 20), а в пользовательском режиме вы все равно не можете ввести больше 15 символов, нужно проверить свойства элемента формы. Разберем основные причины:

  1. Форматная строка: Проверьте свойство Формат у поля ввода. Там может стоять ограничение отображения.
  2. Ширина элемента: Если поле слишком узкое, цифры могут просто скрываться за границей элемента.
  3. Маска ввода: Убедитесь, что в поле Маска не задано жесткое ограничение на количество символов.

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

← На главную