Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
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), а запрос ищет без учета регистра через ВРЕГ(), индекс перестает работать.