Ошибка несовместимые типы выразить

функция ВЫРАЗИТЬ в запросе не работает ☑ 0

pppp

01.12.08

13:43

не могу выразить число в строку или наоборот

мож меня глючит пытаюсь в 1с написать аналог sql запроса

select cast(’30’ as numeric(10))

набираю в консоле

ВЫБРАТЬ ВЫРАЗИТЬ(«30» как число)

{ОбщаяФорма.КонсольТестированияЗапроса(35)}: Ошибка при вызове метода контекста (Выполнить): {(1, 9)}: Несовместимые типы «ВЫРАЗИТЬ»

ВЫБРАТЬ <<?>>ВЫРАЗИТЬ(«30» как число)

   ЭлементыФормы.Результат.Значение=Запрос.Выполнить().Выгрузить();

по причине:

{(1, 9)}: Несовместимые типы «ВЫРАЗИТЬ»

ВЫБРАТЬ <<?>>ВЫРАЗИТЬ(«30» как число)

1

Garkin

01.12.08

13:45

RTFM

2

asady

01.12.08

13:45

(0) не взлетит.

3

Mitriy

01.12.08

13:45

ВЫРАЗИТЬ так не умеет… справку читай… очень внимательно…

4

globalasax

01.12.08

13:53

Приведение типа>

ВЫРАЗИТЬ ( <Выражение> КАК <Тип значения> )

<Тип значения>

БУЛЕВО |
ЧИСЛО [(Длина[, Точность])]|
СТРОКА [(Длина)]|
ДАТА |
<Имя таблицы>

<Длина>

Число

<Точность>

Число

5

pppp

01.12.08

13:53

а на выразить и справки нету

6

globalasax

01.12.08

13:54

<Выражение> приводится к одному из примитивных типов, или к ссылочному типу данных; в последнем случае <Имя таблицы> указывает на соответствующую таблицу информационной базы.

Если <Выражение> содержит в составном типе требуемый <Тип значения>, то приведение типа считается осуществимым, и для каждого значения указанного типа результатом будет это самое значение. Для значений других типов результатом приведения типа будет значение NULL.

Если <Выражение> не содержит в составном типе требуемый <Тип значения>, то выполнение данного запроса завершится ошибкой из-за принципиальной невозможности совершить приведение типов.

Для <Тип значения> СТРОКА с указанием длины максимальный размер строки 1024.

7

pppp

01.12.08

13:54

длина точность опциональны, но если их указать точно такая же ошибка

ВЫБРАТЬ ВЫРАЗИТЬ(«30» как число(10,0))

однох…

8

pppp

01.12.08

13:55

и чего 1с не может число в строку и обратно???

9

pppp

01.12.08

13:56

напишите рабочий пример плиз (всего 3 слова писать то)

10

pppp

01.12.08

13:57

почему у 1с строка и число несовместиииииии-и-и-и-и-и-и-имые типы млин

11

globalasax

01.12.08

13:59

дык не работает  ВЫБРАТЬ ВЫРАЗИТЬ(«30» КАК ЧИСЛО). А так  ВЫБРАТЬ ВЫРАЗИТЬ(«30» КАК СТРОКА) работает. Преобразовывать не хочет.

12

pppp

01.12.08

13:59

на sql все легко переводится и туда и обратно с любой точностью и разрадностью

13

globalasax

01.12.08

13:59

(4) из справки

14

pppp

01.12.08

13:59

хахахаха строку в строку и конвертировать то не надо

15

Garkin

01.12.08

13:59

(12) Нет в запросах 1с преобразования типов.

16

globalasax

01.12.08

14:01

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

17

Cheater

01.12.08

14:01

18

pppp

01.12.08

14:06

млин скачай на клиент число переведи в строку и обратно отправь на сервер

проще быстрее ;((

19

pppp

01.12.08

14:08

в общем функцию cast 1с решила не реализовывать а написала свою великую выразить для выражения типа в самого себя если он идет в выборке а остальные подтипы составного типа в NULL це глобально можно было решить

ВЫБРАТЬ КОГДА поле1 ССЫЛКА Справочник.Номенклатура ТОГДА поле1 ИНАЧЕ NULL КОНЕЦ

20

MSensey

01.12.08

15:23

(19) не совсем ты прав, что можно вместо ВЫРАЗИТЬ использовать ВЫБОР …
почему? подумай сам

Несовместимые типы ВЫРАЗИТЬ в запросе

Автор eladan, 16 мая 2022, 18:14

0 Пользователей и 1 гость просматривают эту тему.

После обновления с УТ 11.4 на 11.5 перестала работать функция ВЫРАЗИТЬ в запросе для вывода Списка Реализаций. Не могу понять в чем дело.

{(4, 2)}: Несовместимые типы «ВЫРАЗИТЬ»
<<?>>ВЫРАЗИТЬ(РеализацияТоваровУслугДополнительныеРеквизиты.Значение КАК Перечисление.ФормыОплаты) КАК Значение

Сам код

ВЫБРАТЬ
РеализацияТоваровУслугДополнительныеРеквизиты.Ссылка КАК Ссылка,
РеализацияТоваровУслугДополнительныеРеквизиты.Свойство КАК Свойство,
ВЫРАЗИТЬ(РеализацияТоваровУслугДополнительныеРеквизиты.Значение КАК Перечисление.ФормыОплаты) КАК Значение
ПОМЕСТИТЬ ВТСвойства
ИЗ
Документ.РеализацияТоваровУслуг.ДополнительныеРеквизиты КАК РеализацияТоваровУслугДополнительныеРеквизиты
ГДЕ
РеализацияТоваровУслугДополнительныеРеквизиты.Свойство = &Свойство
;


eladan, так нормальная ситуация, ошибки в новом коде!
два варианта, либо сами исправляете, либо ждете новое обновление (где будут исправлены эти ошибки (и добавлены новые))

если помогло нажмите: Спасибо!


ВЫБРАТЬ Договора — это временная таблица, предварительно загружена из регистра Когда происходит обращение к Договора.Ссылка.ВидДоговора возникает сабж. Попробовал ЕСТЬNULL(Договора.Ссылка.ВидДоговора,»»пустой»» ) сделать — тоже самое. Изначально было условие ГДЕ Договора.Ссылка.ВидДоговора = ЗНАЧЕНИЕ(Перечисления.ВидыДоговоров.СПоставщиком) тот же хальт.

А если это временная таблица, то что мешает сразу в нее загружать ВидДоговора. А так по ходу видимо косяк во временной таблице

Только что добавил, на ней теперь сбоит

а тип этого реквизита какой? Сдается мне что не ссылка, или во всяком случае есть строки в таблице с незаполненными значениями данного реквизита

имею ввиду УникальныеИдентификаторыСтороннихБазДанных.Ссылка

а что как сбоит, ты обращаешься через точку к реквизиту объекта, а в базе объекта нет, вот и кричит

задавай тогда условие типа УникальныеИдентификаторыСтороннихБазДанных.Ссылка ССЫЛКА …. там что-то, что тебе нужно

А єто что по твоему |ГДЕ    |    И УникальныеИдентификаторыСтороннихБазДанных.Ссылка ССЫЛКА Справочник.ДоговорыКонтрагентов

{Форма.Форма(1985)}: Помилка при виклику методу контексту (Выполнить): {(50, 2)}: Несумісні типи <<?>>УникальныеИдентификаторыСтороннихБазДанных.Ссылка.ВидДоговора,    Запрос.Выполнить;

сдается мне, дело в строгой типизации измерения ссылка в регистре. Это база новая, я туда при добавлении этого регистра поставил типы Справочник.Ссылка и Документ.Ссылка, а в оргинале перечислены все выборочно

Самое что интересное делал выгрузку в таблицу значений ( выборка производилась без поля ВидДоговора) — все нормально, в цикле проверил каждую ссылку на наличие этого реквизита — и… все ок. ничего не понимаю.

Запрос делай иерархически (в подзапросе выбирай строки из базы соответствующие типу ссылки, а в основном запросе соответсвующие уже виду договора). Тогда не будет кричать и при такой организации

думал про подзапрос уже, делаю

Не работает =(, та же песня

Несовместимые типы <?>ОтобранныеДоговоры.Ссылка.ВидДоговора КАК ВидДоговора

И что, никто ничего не знает?

а в консоли запросов нормально работает?

в консоли — тоже самое при проверке ругается на ВидДоговора

Причем не пойму, в оригинальной конфигурации работает, в этой нет. Регистра измерение ссылка уже идентично сделал по типам, ничего не помогает.

а в конструкторе запросов открывается?

Попробуй Выразить УникальныеИдентификаторыСтороннихБазДанных.Ссылка как Справочник.ДоговорыКонтрагентов С составными типами бывает

Хотя к этому времени я переписал запрос так чтоб избавится этого в таком виде

Кстати, в свое время позабавил синтаксис наподобие Выразить(УникальныеИдентификаторыСтороннихБазДанных.Ссылка как Справочник.ДоговорыКонтрагентов).ВидДоговора

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

Доброго дня, коллеги!

Помните, мы уже разбирали вопрос, где наша внимательная слушательница решила самостоятельно исследовать метаданные конфигурации, в результате чего у нее появились интересные вопросы?

Сегодня у нас похожий случай, когда очередной слушатель, изучая курс Разработка и оптимизация запросов в 1С:Предприятие 8.3, разбираясь в синтаксисе языка запросов 1С, обнаружил занятную деталь.

Вопрос

Если необходимо отобрать тип регистратора для записей регистра, то можно воспользоваться несколькими разными вариантами:

● ГДЕ ТИПЗНАЧЕНИЯ(ТоварныеЗапасы.Регистратор) = ТИП(Документ.РасходТовара)
● ГДЕ ТоварныеЗапасы.Регистратор ССЫЛКА Документ.РасходТовара
● ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.РасходТовара)

А какой из вариантов оптимален с методической точки зрения? Предположительно ВЫРАЗИТЬ исполнится до отбора данных. Так ли это?

Ответ

Можно использовать первые два варианта – оператор ССЫЛКА или функцию ТИПЗНАЧЕНИЯ.
При помощи оператора ВЫРАЗИТЬ можно привести значение только к одному типу:

ВЫРАЗИТЬ Поле КАК Тип

Т.е. сам по себе он не выполняет отбор. Нужно дополнительно в секции ГДЕ установить отбор.


Оператор ССЫЛКА не убирает лишние неявные соединения (это можно проверить при помощи просмотра плана запроса в консоли), а накладывает отбор по типу. А ВЫРАЗИТЬ явно говорит, что поле будет иметь не составной тип, а одну конкретную ссылку, поэтому не будет лишних соединений.

У оператора ССЫЛКА есть особенность.


Пусть используется следующий фрагмент запроса:

&ЦеноваяГруппа ССЫЛКА Справочник.ЦеновыеГруппы


Если в качестве значения параметра ЦеноваяГруппа установить, например, ссылку на справочник «Номенклатура», система выдаст ошибку:


Несовместимые типы “ССЫЛКА”
& ЦеноваяГруппа <<?>>ССЫЛКА Справочник.ЦеновыеГруппы


При работе с реквизитами составного типа тоже может возникать такая же ошибка. Например, документ «РеализацияТоваровУслуг» не входит в составной тип реквизита ДокументОснование документа «Авансовый Отчет». При выполнении запроса будет ошибка:

ВЫБРАТЬ
    АвансовыйОтчет.ДокументОснование ССЫЛКА Документ.РеализацияТоваровУслуг
 ИЗ Документ.АвансовыйОтчет КАК АвансовыйОтчет

Причем конструктор запроса даже не будет открываться. ТИПЗНАЧЕНИЯ при этом отработает корректно.


Фирма 1С поясняет это следующим образом:
«Язык запросов выдает эту ошибку, если в типе проверяемого выражения отсутствует ссылка на проверяемую таблицу

Вот такую особенность нужно учитывать при разработке запросов.

Кстати, завтра мы вновь вернемся к запросам. Обещаем, будет интересно!

P.S.

Понимать, как работают запросы и уметь их строить — обязательный навык для всех, кто дорабатывает и внедряет 1С.

После курса Вы сможете:

  • Строить сложные запросы с несколькими источниками данных
  • Уверенно задействовать вложенные запросы и временные таблицы
  • Использовать встроенный язык для обработки результатов запроса
  • Учитывать особенности соединений и объединений нескольких таблиц.
  • Разрабатывать запросы на уровне задач Аттестации 1С:Специалист по платформе.

«Нельзя сравнивать поля неограниченной длины и поля несовместимых типов» — эта ошибка возникает, когда в запросе, мы осуществляем отбор, группировку или создаём связи по полям неограниченной длины.

Оператор «ВЫРАЗИТЬ()», поможет нам не допустить такую ошибку.

В приведённом примере кода, поле неограниченной длины «Представление» выразим, как строку длиной 150 символов.

Запрос = Новый Запрос;

Запрос.Текст =

«ВЫБРАТЬ

|       ДополнительнаяИнф.Объект,

|       ВЫРАЗИТЬ(ДополнительнаяИнф.Представление КАК СТРОКА(150)) КАК Представление

|ИЗ

|       РегистрСведений.ДополнительнаяИнф КАК ДополнительнаяИнф

|

|СГРУППИРОВАТЬ ПО

|       ВЫРАЗИТЬ(ДополнительнаяИнф.Представление КАК СТРОКА(150)),

|       ДополнительнаяИнф.Объект»;


Понравилась статья? Поделить с друзьями:
  • Ошибка неправильный аргумент
  • Ошибка несовместимости программы
  • Ошибка неправильно отрегулирована 3 передача
  • Ошибка неправильное значение хеша технокад
  • Ошибка несовместимости единиц инвентор