Как исправить ошибку «Несовместимые типы ССЫЛКА» при формировании книги продаж в 1С?

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Налоговый учет IT и автоматизация бизнеса
← На главную

При выборочном или поэтапном обновлении нетиповых конфигураций (например, «1С:Бухгалтерия предприятия 2.0») разработчики нередко сталкиваются с падением регламентированных отчетов. Одной из распространенных проблем является ошибка выполнения запроса при формировании отчета КнигаПродаж1137:


{Отчет.КнигаПродаж1137.МодульМенеджера(2003)}: Ошибка при вызове метода контекста (Выполнить)
    Запрос.Выполнить();
по причине:
{(541, 37)}: Несовместимые типы "ССЫЛКА"
И ЗаписиКнигиПродаж.СчетФактура <<?>>ССЫЛКА Документ.ОказаниеУслуг

Разберем подробнее, почему возникает данная ошибка платформы 1С:Предприятие и как правильно её устранить.

Причина возникновения ошибки в механизме запросов

Проанализируем механику работы платформы 1С:Предприятие с оператором ССЫЛКА. В языке запросов конструкция Поле ССЫЛКА ТипДанных выполняет статическую проверку типов еще на этапе компиляции текста запроса перед его трансляцией в SQL.

Если в метаданных конфигурации у реквизита или измерения (в данном случае СчетФактура) не указан ссылочный тип, стоящий в правой части условия (например, ДокументСсылка.ОказаниеУслуг), платформа считает такое выражение заведомо ошибочным. Это происходит в двух случаях:

  1. Измерение или реквизит объявлен как составной тип данных, но флажок напротив конкретного документа (например, Документ.ОказаниеУслуг) был снят или не перенесен при обновлении метаданных.
  2. Поле имеет простой примитивный тип (строка, число) или одиночный ссылочный тип, не совпадающий с проверяемым в запросе.

Пошаговое решение проблемы через дерево метаданных

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

  1. Откроем текст запроса в модуле отчета (по указанной в ошибке строке) и выясним, из какого источника выбираются данные. В данном случае источником выступает регистр накопления или регистр сведений подсистемы учета НДС (например, НДСПродажи, ЗаписиНДСПродажи или ЗаписиКнигиПродаж).
  2. В дереве конфигурации перейдем к найденному регистру и откроем свойства измерения или реквизита СчетФактура (либо ДокументОснование).
  3. Нажмем кнопку выбора типа данных (кнопка с многоточием напротив свойства Тип).
  4. В открывшемся окне Редактирование типа данных найдем ветку Документ ссылка, найдем нужный вид документа (например, ОказаниеУслуг) и установим напротив него флажок.
  5. Сохраним изменения и применим обновление конфигурации базы данных (нажатием клавиши F7).

После расширения состава типов оператор ССЫЛКА Документ.ОказаниеУслуг успешно пройдет валидацию платформы, и отчет КнигаПродаж1137 сформируется без ошибок.

Смежные объекты подсистемы НДС, требующие проверки

При обновлении нетиповых конфигураций добавление документов в учетную цепочку НДС затрагивает не один регистр, а группу связанных объектов. Рекомендуется сразу проверить состав типов измерений и реквизитов в следующих объектах:

  1. Регистры накопления: НДСПродажи, НДСНачисленный, НДС по приобретенным ценностям, НДС включенный в стоимость.
  2. Регистры сведений: Журнал учета счетов-фактур, ЗаписиКнигиПродаж, ЗаписиКнигиПокупок.
  3. Документы подсистемы НДС: реквизиты оснований в документах СчетФактураВыданный, СчетФактураПолученный, а также составные типы колонок в табличных частях документа Формирование записей книги продаж.

Альтернативные конструкции в языке запросов

Посмотрим на поведение альтернативных конструкций языка запросов в подобных ситуациях:

  1. Оператор ВЫРАЗИТЬ: конструкция ВЫРАЗИТЬ(Таблица.СчетФактура КАК Документ.ОказаниеУслуг) ведет себя аналогично оператору ССЫЛКА. Если тип не включен в описание метаданных, платформа сгенерирует ошибку «Несовместимые типы "ВЫРАЗИТЬ"».
  2. Функция ТИПЗНАЧЕНИЯ: проверка вида ТИПЗНАЧЕНИЯ(Таблица.СчетФактура) = ТИП(Документ.ОказаниеУслуг) компилируется без ошибки даже при отсутствии типа в метаданных, однако оператор ССЫЛКА работает производительнее на уровне СУБД, поэтому добавление типа в метаданные является единственно верным архитектурным решением.
  3. Левое соединение: еще один обходной вариант без изменения метаданных — использование ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОказаниеУслуг КАК Док ON Таблица.СчетФактура = Док.Ссылка с проверкой НЕ Док.Ссылка ЕСТЬ NULL, однако в типовых запросах отчетности всегда используется стандартный оператор ССЫЛКА.

Рекомендации при реструктуризации

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

← На главную