Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

22003 1С:Предприятие и СУБД

Ошибка PostgreSQL 22003 numeric_value_out_of_range: переполнение чисел

Обновлено: 26.08.2026 · Официальная документация ↗

СУБД прерывает выполнение операции при попытке записать числовое значение, выходящее за границы допустимого диапазона типа данных:

ERROR: integer out of range
-- либо:
ERROR: numeric field overflow
DETAIL: A field with precision 10, scale 2 must round to an absolute value less than 10^8.
SQLSTATE: 22003

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

1. Анализ диапазона типов данных в PostgreSQL

Тип данныхХранениеМинимальное значениеМаксимальное значение
smallint2 байта-32,768+32,767
integer4 байта-2,147,483,648+2,147,483,647
bigint8 байт-9,223,372,036,854,775,808+9,223,372,036,854,775,807
numeric(p, s)переменнаяОпределяется точностью (p) и масштабом (s)

2. Проверка последовательностей (Sequences) на исчерпание пула ID

SELECT sequencename, last_value, max_value, is_cycled 
FROM pg_sequences 
WHERE last_value >= max_value - 10000;

3. Миграция поля с INTEGER на BIGINT

-- Изменение типа колонки первичного ключа
ALTER TABLE "my_table" ALTER COLUMN "id" TYPE bigint;

-- Изменение последовательности автоинкремента
ALTER SEQUENCE my_table_id_seq AS bigint MAXVALUE 9223372036854775807;

4. Исправление переполнения точности Numeric в 1С:Предприятие

  1. Найдите соответствующий ресурс регистра или реквизит документа в метаданных 1С.
  2. Увеличьте параметр Длина (общая точность) с сохранением нужной Точности (количество знаков после запятой).
  3. Если ошибка возникает внутри запроса СКД/расчета, используйте явное округление или приведение типов: CAST(Выражение КАК ЧИСЛО(18, 2)).
💡 Практика специалистов: При работе с регистрами накопления 1С переполнение числовых полей чаще всего сигнализирует о зацикливании алгоритма распределения сумм в коде проведения документов либо о наличии 'висячих' остатков с отрицательными числами.

Частые вопросы (FAQ)

Что делать, если исчерпался serial (int4) первичного ключа крупной таблицы?

Необходимо изменить тип на bigint. Для больших production-таблиц во избежание многочасовой эксклюзивной блокировки миграцию производят созданием новой таблицы с переливом данных через логическую репликацию или утилиту pg_repack.

Почему при делении чисел с плавающей точкой возникает ошибка 22003?

Если результат промежуточного умножения перед делением превышает разрядность целевого NUMERIC(P,S), PostgreSQL вызывает numeric field overflow. Необходимо явно расширять разрядность промежуточных вычислений с помощью CAST(... AS numeric(30, 10)).

Как предотвратить падение сервисов при приближении sequences к максимуму?

Настройте мониторинг в Prometheus/Zabbix через запрос к представлению pg_sequences: percent_used = (last_value::float / max_value::float) * 100 и установите алерт на пороге 85%.

Какова максимальная точность (precision) для типа NUMERIC в PostgreSQL?

В PostgreSQL тип numeric может хранить числа с точностью до 1000 десятичных знаков. Ограничения обычно диктуются клиентским приложением (в 1С максимальная разрядность чисел ограничена 38 знаками).

Полезные материалы
Рекомендуем