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

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

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

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

SQLSTATE 22001 Ошибка усечения строковых данных справа: 1С и PostgreSQL

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

Архитектура ошибки SQLSTATE 22001

Ошибка SQLSTATE 22001 (value too long for type character varying) возникает на уровне СУБД PostgreSQL, когда рабочий процесс сервера 1С (rphost.exe/rphost) пытается записать в колонку таблицы строку, длина которой превышает ограничение (Max Length), заданное в схеме таблицы. В архитектуре 1С:Предприятие длина строковых реквизитов жестко декларируется в метаданных конфигуратора. Бизнес-риски: аварийное прерывание транзакций при проведении документов, невозможность загрузки данных из внешних систем (XML/JSON), блокировка обменов РИБ.

Основные триггеры рассогласования

Источник проблемыОписание сбояСпособ локализации
Изменение длины реквизитаВ Конфигураторе длину строки уменьшили (например, с 150 до 100), но в БД остались строки > 100 символов. Реструктуризация завершилась с ошибкой, но изменения частично применились.Анализ журнала регистрации (Событие: Ошибка СУБД).
Прямая запись SQLДанные были вставлены в таблицу PostgreSQL напрямую (INSERT/UPDATE), минуя сервер 1С, с нарушением длины поля.Поиск запросов в логах PostgreSQL (postgresql.conf).
Обмен данными (РИБ)В узлах РИБ разные версии конфигурации. Подчиненный узел присылает строку, которая не помещается в реквизит главного узла.Анализ XML файла сообщения обмена.

Алгоритм устранения усечения данных

Сценарий 1: Локализация сбойной таблицы и реквизита

В тексте ошибки 1С обычно выводится SQL-запрос. Необходимо найти в нем имя таблицы (например, _Document154) и поля (_Fld155).

-- Запрос к PostgreSQL для получения структуры таблицы
SELECT column_name, character_maximum_length 
FROM information_schema.columns 
WHERE table_name = '_document154';

-- Поиск строк, превышающих лимит (например, лимит 100)
SELECT _idrref FROM _document154 WHERE LENGTH(_fld155) > 100;

Сценарий 2: Приведение данных в соответствие (через 1С)

Никогда не меняйте структуру таблиц 1С напрямую через SQL ALTER TABLE. Это приведет к фатальному рассогласованию метаданных.

  1. Откройте Конфигуратор и найдите проблемный реквизит документа/справочника.
  2. Увеличьте длину строки (например, верните до 150) или установите тип строки "Неограниченная длина".
  3. Выполните обновление конфигурации БД (F7).
  4. Если необходимо обрезать данные, напишите внешнюю обработку на встроенном языке 1С, которая через Лев(Строка, 100) обрежет реквизиты объектов и перезапишет их через ОбменДанными.Загрузка = Истина.
  5. После очистки данных в 1С, снова уменьшите длину в Конфигураторе и обновите БД.

Типовые ошибки администраторов

  • Ручной ALTER TABLE в PostgreSQL: Расширение поля типа varchar напрямую в СУБД снимет ошибку временно, но при следующем обновлении платформы или конфигурации 1С обнаружит рассогласование и может разрушить таблицу (выдав ошибку целостности).
  • Игнорирование пробелов: В 1С строки фиксированной длины дополняются пробелами справа. При интеграции с другими системами эти пробелы могут восприниматься СУБД как значимые символы. Обязательно используйте функцию СокрЛП() при загрузке данных.
💡 Практика специалистов: Практика ITSTM: При массовых загрузках данных из Excel или внешних SQL-баз мы рекомендуем загружать данные во временные таблицы (в памяти 1С) или нетипизированные структуры, а перед записью в объекты БД принудительно обрезать строки через функцию Лев(Значение, Метаданные.Длина).

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

Как включить детализацию логов PostgreSQL для поиска сбойного запроса?

В файле postgresql.conf установите параметры: log_min_error_statement = error (или warning), log_min_messages = warning. Перезагрузите службу PostgreSQL. Ошибки SQLSTATE будут писаться в pg_log с полным текстом запроса.

Почему ошибка появляется только при использовании PostgreSQL, а на MS SQL работало нормально?

MS SQL Server в связке с 1С может молча обрезать данные (зависит от настроек ANSI_WARNINGS), в то время как PostgreSQL строго соблюдает стандарт SQL и всегда генерирует ошибку 22001 при попытке вставить данные, превышающие размер поля.

Что делать, если база не обновляется в Конфигураторе из-за этой ошибки?

Отмените изменения конфигурации БД (Вернуться к конфигурации БД). Запустите платформу в режиме Предприятия, найдите данные, превышающие новую длину, исправьте их (сократите текст), и только потом повторите реструктуризацию в Конфигураторе.

Влияет ли кодировка UTF-8 на расчет длины строки?

Тип character varying (varchar) в PostgreSQL хранит длину в символах, а не в байтах. Поэтому кириллические символы (занимающие 2 байта в UTF-8) считаются как один символ. Ошибка возникает именно из-за количества символов.

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