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

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

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

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

Устранение неявных преобразований типов в соединениях запросов 1С

Обновлено: 26.08.2026 · Официальная документация ↗
  • СУБД выполняет сканирование индекса (Index Scan) вместо точечного поиска (Index Seek) даже при наличии точного индекса.
  • Высокая загрузка CPU при операциях соединения таблиц по строковым или составным полям.
  • В планах SQL Server присутствует предупреждение CONVERT_IMPLICIT в секции Seek Predicate.

1. Суть проблемы неявного приведения типов

В платформе 1С поля ссылочного типа имеют строгую типизацию (UUID/Binary), а составные типы данных хранятся в виде нескольких колонок (тип + ссылка). Если в условии соединения сравниваются несовместимые типы (например, строка фиксированной длины Строка(10) и переменной Строка(неограниченная), либо число и строка), СУБД накладывает функцию приведения на каждую строку таблицы, полностью отключая использование индекса.

2. Типичная ошибка в коде запроса 1С

// НЕПРАВИЛЬНО: Соединение по полям разной длины или типов
ВЫБРАТЬ Заказ.Ссылка
ИЗ Документ.ЗаказКлиента КАК Заказ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Ном
    ПО Заказ.Комментарий = Ном.Наименование; // Комментарий - неограниченная строка!

3. Исправление через явное приведение типов (ВЫРАЗИТЬ)

// ПРАВИЛЬНО: Приведение к фиксированной длине для использования индексов
ВЫБРАТЬ Заказ.Ссылка
ИЗ Документ.ЗаказКлиента КАК Заказ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Ном
    ПО ВЫРАЗИТЬ(Заказ.Комментарий КАК СТРОКА(150)) = Ном.Наименование;

4. Соединение составных типов данных через проверку типа

// Ограничение составного типа до конкретной таблицы
ВЫБРАТЬ Движения.Сумма
ИЗ РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто КАК Движения
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контр
    ПО Движения.Субконто1 = Контр.Ссылка
    И Движения.Субконто1 ССЫЛКА Справочник.Контрагенты;
💡 Практика специалистов: Всегда проверяйте типы и длины реквизитов при соединении пользовательских справочников и регистров. Разница между Строка(50) и Строка(100) превращает Index Seek в Table Scan.

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

Что такое CONVERT_IMPLICIT в планах MS SQL?

Это внутреннее преобразование одного типа данных в другой по правилам приоритета типов SQL (например, VARCHAR в NVARCHAR), делающее невозможным быстрый поиск по B-Tree индексу.

Почему нельзя использовать поля неограниченной длины в соединениях?

Поля неограниченной длины (TEXT/NVARCHAR(MAX)) не могут быть проиндексированы стандартными B-деревьями и всегда приводят к полному сканированию таблицы.

Зачем указывать конструкцию 'ССЫЛКА Справочник.Имя' для составных типов?

Она позволяет платформе 1С отфильтровать только нужный тип метаданных на уровне SQL без выполнения тяжелых объединений (UNION) со всеми возможными таблицами типа.

Влияет ли регистр символов при сравнении строк на производительность?

Если база данных создана с регистрозависимой коллацией (CS), а запрос ищет без учета регистра через ВРЕГ(), индекс перестает работать.

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