При выборочном или поэтапном обновлении нетиповых конфигураций (например, «1С:Бухгалтерия предприятия 2.0») разработчики нередко сталкиваются с падением регламентированных отчетов. Одной из распространенных проблем является ошибка выполнения запроса при формировании отчета КнигаПродаж1137:
{Отчет.КнигаПродаж1137.МодульМенеджера(2003)}: Ошибка при вызове метода контекста (Выполнить)
Запрос.Выполнить();
по причине:
{(541, 37)}: Несовместимые типы "ССЫЛКА"
И ЗаписиКнигиПродаж.СчетФактура <<?>>ССЫЛКА Документ.ОказаниеУслуг
Разберем подробнее, почему возникает данная ошибка платформы 1С:Предприятие и как правильно её устранить.
Проанализируем механику работы платформы 1С:Предприятие с оператором ССЫЛКА. В языке запросов конструкция Поле ССЫЛКА ТипДанных выполняет статическую проверку типов еще на этапе компиляции текста запроса перед его трансляцией в SQL.
Если в метаданных конфигурации у реквизита или измерения (в данном случае СчетФактура) не указан ссылочный тип, стоящий в правой части условия (например, ДокументСсылка.ОказаниеУслуг), платформа считает такое выражение заведомо ошибочным. Это происходит в двух случаях:
Документ.ОказаниеУслуг) был снят или не перенесен при обновлении метаданных.Разберем по шагам, как исправить состав типов в конфигураторе:
НДСПродажи, ЗаписиНДСПродажи или ЗаписиКнигиПродаж).СчетФактура (либо ДокументОснование).ОказаниеУслуг) и установим напротив него флажок.F7).После расширения состава типов оператор ССЫЛКА Документ.ОказаниеУслуг успешно пройдет валидацию платформы, и отчет КнигаПродаж1137 сформируется без ошибок.
При обновлении нетиповых конфигураций добавление документов в учетную цепочку НДС затрагивает не один регистр, а группу связанных объектов. Рекомендуется сразу проверить состав типов измерений и реквизитов в следующих объектах:
НДСПродажи, НДСНачисленный, НДС по приобретенным ценностям, НДС включенный в стоимость.Журнал учета счетов-фактур, ЗаписиКнигиПродаж, ЗаписиКнигиПокупок.СчетФактураВыданный, СчетФактураПолученный, а также составные типы колонок в табличных частях документа Формирование записей книги продаж.Посмотрим на поведение альтернативных конструкций языка запросов в подобных ситуациях:
ВЫРАЗИТЬ: конструкция ВЫРАЗИТЬ(Таблица.СчетФактура КАК Документ.ОказаниеУслуг) ведет себя аналогично оператору ССЫЛКА. Если тип не включен в описание метаданных, платформа сгенерирует ошибку «Несовместимые типы "ВЫРАЗИТЬ"».ТИПЗНАЧЕНИЯ: проверка вида ТИПЗНАЧЕНИЯ(Таблица.СчетФактура) = ТИП(Документ.ОказаниеУслуг) компилируется без ошибки даже при отсутствии типа в метаданных, однако оператор ССЫЛКА работает производительнее на уровне СУБД, поэтому добавление типа в метаданные является единственно верным архитектурным решением.ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОказаниеУслуг КАК Док ON Таблица.СчетФактура = Док.Ссылка с проверкой НЕ Док.Ссылка ЕСТЬ NULL, однако в типовых запросах отчетности всегда используется стандартный оператор ССЫЛКА.Важно: расширение состава типов составного поля изменяет внутреннюю структуру таблиц базы данных и состав индексов. После обновления нетиповой конфигурации и применения изменений метаданных рекомендуется запустить процедуру Тестирование и исправление информационной базы с проверкой логической и ссылочной целостности.