Имя: Пароль:
1C
1С v8
Неверные параметры в операции сравнения. Нельзя сравнивать поля неограниченной длины
, ,
0 mulenpav12
 
02.11.21
09:01
Помогите пожалуйста добрые люди , с кодом в 1с. В обработке возникла вот такая ошибка , что делать ?

Ошибка:"{ВнешняяОбработка.ДемоСогласиеНаАнестезиологическоеВмешательство.МодульОбъекта(337)}: Ошибка при вызове метода контекста (Выполнить)
    ТаблицаИсполнителей = Запрос.Выполнить().Выгрузить();
по причине:
{(11, 56)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги <<?>>= &УникальныеИдентификаторыУслуг)"

Код:
Функция ДанныеУслуг(Знач ОбъектПечати, Знач УслугиПечати)
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ РАЗЛИЧНЫЕ
        |    МедицинскиеУслуги.Ссылка КАК Ссылка,
        |    ВЫРАЗИТЬ(МедицинскиеУслуги.УникальныйИдентификаторУслуги КАК СТРОКА(150)) КАК УникальныйИдентификаторУслуги,
        |    МедицинскиеУслуги.Номенклатура КАК Номенклатура
        |ПОМЕСТИТЬ ТаблицаУслуг
        |ИЗ
        |    &ТаблицаУслуг КАК МедицинскиеУслуги
        |ГДЕ
        |    МедицинскиеУслуги.Ссылка = &ОбъектПечати
        |    И (&БезОтбораУслуг = ИСТИНА
        |            ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги = &УникальныеИдентификаторыУслуг)
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    МедУслуги.Номенклатура КАК Номенклатура,
        |    МедицинскиеРабочиеМестаИсполнители.Сотрудник КАК Сотрудник
        |ИЗ
        |    ТаблицаУслуг КАК МедУслуги
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СменныеЗадания КАК СменныеЗадания
        |        ПО МедУслуги.УникальныйИдентификаторУслуги = СменныеЗадания.УникальныйИдентификаторУслуги
        |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.МедицинскиеРабочиеМеста.Исполнители КАК МедицинскиеРабочиеМестаИсполнители
        |        ПО (СменныеЗадания.МедицинскоеРабочееМесто = МедицинскиеРабочиеМестаИсполнители.Ссылка)
        |ГДЕ
        |    НЕ МедицинскиеРабочиеМестаИсполнители.Ссылка ЕСТЬ NULL";
    
    СписокТЧ = ТипыТЧ();
    
    ТЧДокумента = СписокТЧ.Получить(ТипЗнч(ОбъектПечати));
    Если ТЧДокумента = Неопределено Тогда
        Возврат Неопределено;
    КонецЕсли;
    
     //   МедицинскиеУслуги.УникальныйИдентификаторУслуги КАК УникальныйИдентификаторУслуги,

    //    | ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги В (&УникальныеИдентификаторыУслуг))
    
    ИмяТаблицыДляЗапроса = ОбъектПечати.Метаданные().ПолноеИмя() + "." + ТЧДокумента;
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТаблицаУслуг", ИмяТаблицыДляЗапроса);
    
    Если УслугиПечати = Неопределено Тогда
        сообщить("массив");
        Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", Новый Массив);
    Иначе
        сообщить("услуги печати");
        Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", УслугиПечати);
    КонецЕсли;
    
    ПустыеУслуги = (УслугиПечати = Неопределено) ИЛИ (ТипЗнч(УслугиПечати) = Тип("Массив") И УслугиПечати.Количество() = 0);
    
    Запрос.УстановитьПараметр("ОбъектПечати", ОбъектПечати);
    Запрос.УстановитьПараметр("БезОтбораУслуг", ПустыеУслуги);
    
    ТаблицаИсполнителей = Запрос.Выполнить().Выгрузить();
    
    ТаблицаНоменклатур = ТаблицаИсполнителей.Скопировать();
    ТаблицаНоменклатур.Свернуть("Номенклатура");
    МассивНоменклатур = ТаблицаНоменклатур.ВыгрузитьКолонку("Номенклатура");
    
    ТаблицаСотрудников = ТаблицаИсполнителей.Скопировать();
    ТаблицаСотрудников.Свернуть("Сотрудник");
    МассивСотрудников = ТаблицаСотрудников.ВыгрузитьКолонку("Сотрудник");
    
    
    Возврат Новый Структура("СписокУслуг, СписокСотрудников", МассивНоменклатур, МассивСотрудников);
    
КонецФункции
1 ДенисЧ
 
02.11.21
09:05
А зачем ты сравниваешь значение с массивом?
2 Kassern
 
02.11.21
09:06
(0) в выбрать вы строку обрезали до 150 символов, а в отборе сравниваете всю строку. Можете так-же привести к ограниченной строки, а потом уже сравнить
3 mulenpav12
 
02.11.21
09:10
Это было готова обработка, я не сам писал этот код и щас не понимаю в чем проблема , какая тут ошибка , строку обрезал , просто пробовал какие то решения проблемы , но это не помогло
4 mulenpav12
 
02.11.21
09:11
В отборе , это где нужно обрезать строку , я просто недавно работаю и изучаю 1с , не совсем еще все понимаю ?
5 Kassern
 
02.11.21
09:20
(4) Поймите, 1ска не умеет проверять на равенство неограниченные поля, о чем вам радостно отрапортовала. В отборе (ГДЕ) Ограничьте строку, например: Подстрока(МедицинскиеУслуги.УникальныйИдентификаторУслуги,0,150)=&УникальныеИдентификаторыУслуг.
То что вы обрезали строку в Выбрать, не значит, что она обрезалась в отборе самостоятельно.
6 mulenpav12
 
02.11.21
09:23
(5) Спасибо, щас попробую
7 Kassern
 
02.11.21
09:23
(5) а еще лучше дайте втык тому, кто сделал это поле неограниченным и назвал его идентификатором. Если все данные в этом поле не превышают 150символов, то, сделав копию базы (на всякий случай), можно привести этот реквизит к нужной длине, убрав эту неограниченность.
8 mulenpav12
 
02.11.21
09:26
(7) Мне дали на работе эту обработку и сказали ну загрузить ее и если есть ошибки исправить , и вот возникла такая ошибка, вот сижу не понимаю что и как , просто совсем еще мало этим занмаюсь)
9 mulenpav12
 
02.11.21
09:32
(5) Ошибка только в этом , или может быть такое не из за этого ?
10 mulenpav12
 
02.11.21
10:10
(5) Подстрока(МедицинскиеУслуги.УникальныйИдентификаторУслуги,0,150)=&УникальныеИдентификаторыУслуг.
Пробовал сделать так , теперь появляется  вот такая ошибка
" по причине:
{(11, 104)}: Ожидается имя
ИЛИ Подстрока(МедицинскиеУслуги.УникальныйИдентификаторУслуги,0,150)=&УникальныеИдентификаторыУслуг)<<?>>.
11 Bukasoid
 
02.11.21
10:16
(10) Приведи целиком текст запроса. Ну или хотя бы кусок вокруг данной строки. Возможно точку с запятой затёр или лишний символ поставил
12 mulenpav12
 
02.11.21
10:16
(11) "ВЫБРАТЬ РАЗЛИЧНЫЕ
        |    МедицинскиеУслуги.Ссылка КАК Ссылка,
        |    ВЫРАЗИТЬ(МедицинскиеУслуги.УникальныйИдентификаторУслуги КАК СТРОКА(150)) КАК УникальныйИдентификаторУслуги,
        |    МедицинскиеУслуги.Номенклатура КАК Номенклатура
        |ПОМЕСТИТЬ ТаблицаУслуг
        |ИЗ
        |    &ТаблицаУслуг КАК МедицинскиеУслуги
        |ГДЕ
        |    МедицинскиеУслуги.Ссылка = &ОбъектПечати
        |    И (&БезОтбораУслуг = ИСТИНА
        |            ИЛИ Подстрока(МедицинскиеУслуги.УникальныйИдентификаторУслуги,0,150)=&УникальныеИдентификаторыУслуг).
        |;
        |
13 Bukasoid
 
02.11.21
10:17
(10) Точку после скобки убери
14 mulenpav12
 
02.11.21
10:18
(12) спасибо , попробую сейчас , напишу)
15 mulenpav12
 
02.11.21
10:20
(13) по причине:
{(11, 18)}: Неверные параметры "ПОДСТРОКА"
ИЛИ Подстрока(<<?>>МедицинскиеУслуги.УникальныйИдентификаторУслуги,0,150)=&УникальныеИдентификаторыУслуг)

Теперь другое
16 Bukasoid
 
02.11.21
10:24
(15) Синтаксически всё верно. Значит у тебя в "МедицинскиеУслуги.УникальныйИдентификаторУслуги" не строка попадает, а что-то другое
17 Kassern
 
02.11.21
10:31
(15) тип какой у УникальныйИдентификаторУслуги?
18 mulenpav12
 
02.11.21
10:35
(17) Тип:  ID  "УникальныйИдентифмкатор"
19 Kassern
 
02.11.21
10:41
(18) тогда попробуйте так  ВЫРАЗИТЬ(МедицинскиеУслуги.УникальныйИдентификаторУслуги КАК СТРОКА(150))=&УникальныеИдентификаторыУслуг. Подстрока работает лишь со строковыми типами
20 ДенисЧ
 
02.11.21
10:44
(19) Плохой совет )))
21 mulenpav12
 
02.11.21
10:47
(20) Почему ?
22 mulenpav12
 
02.11.21
10:48
(19) Все это не помогает видимо ошибка в чем то другом (

по причине:
{(11, 8)}: Несовместимые типы "ВЫРАЗИТЬ"
ИЛИ <<?>>ВЫРАЗИТЬ(МедицинскиеУслуги.УникальныйИдентификаторУслуги КАК СТРОКА(150))=&УникальныеИдентификаторыУслуг)
23 Kassern
 
02.11.21
10:59
(22) Если у вас МедицинскиеУслуги.УникальныйИдентификаторУслуги тип УникальныйИдентификатор, то вы можете без проблем сравнивать его с таким же типом. У вас, что хранится в &УникальныеИдентификаторыУслуг ? Какой тип?
24 mulenpav12
 
02.11.21
11:04
(23) Что то я уже совсем запутался (
25 ДенисЧ
 
02.11.21
11:14
(21) Потому что в запросе приведения типов не работают.
26 Ryzeman
 
02.11.21
11:17
Если УслугиПечати = Неопределено Тогда
        сообщить("массив");
        Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", Новый Массив);
    Иначе
        сообщить("услуги печати");
        Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", УслугиПечати);
    КонецЕсли;

Нельзя сравнивать с массивом на равно. Нельзя сравнивать УникальныйИдентификатор с чем-либо кроме УникальныхИдентификаторов... Что в переменной УслугиПечати?
27 Kassern
 
02.11.21
11:18
(24) наставник ваш совсем не помогает?
28 mulenpav12
 
02.11.21
11:24
(25) Да есть такое (
уже не знаю как и чего
29 Kassern
 
02.11.21
11:31
(28) у вас уже множество раз спрашивали, что в параметре УникальныеИдентификаторыУслуг и какого он типа
30 mulenpav12
 
02.11.21
11:34
29 Вроде бы же отвечал что Тип:  ID  "УникальныйИдентификатор , в нем какой то наверное идентификатор услуги , я сам эту обработку в толком первый раз , дали делай то , сам не знаешь что.
31 Kassern
 
02.11.21
11:40
(30) чудес не бывает. Значит либо слева, либо справа от сравнения не уникальный идентификатор тип.
Я у вас спрашивал какого типа МедицинскиеУслуги.УникальныйИдентификаторУслуги, вы ответили, что Уникальный идентификатор
Далее я спросил, какой тип у правого значения &УникальныеИдентификаторыУслуг, вы сейчас пишите, что тоже уникальный идентификатор.
Если бы все было так как вы пишите, то 1ска бы не ругалась на этом сравнении. Еще раз гляньте внимательно, какого типа левое и правое значение.
Так же посмотрите вашу таблицу &ТаблицаУслуг в ней типы колонок явно указаны?
И еще, не надо группировать и накладывать условия, когда вы временную таблицу создаете. Вы ее вначале создайте, а уже в следующем пакете запроса группируйте и сравнивайте
32 Kassern
 
02.11.21
11:41
(31) Если ваша таблица &ТаблицаУслуг получается посредством ТЗ=Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("УникальныйИдентификаторУслуги"), то явно укажите тип при создании добавлении этой колонки
33 mulenpav12
 
02.11.21
11:42
Как же это все сложно , для начинающего человека
34 mulenpav12
 
02.11.21
11:46
Точнее в чужом коде , что поменять это ужас
35 Kassern
 
02.11.21
11:46
(33) ну так начинайте с азов, изучите запросы 1с, как они работают, как работать с временными таблицами, какие бывают связи таблиц и т.д.
36 ДядяМитяй
 
02.11.21
11:50
судя по имени &УникальныеИдентификаторыУслуг - это массив. Попробовать заменить = на В
37 mulenpav12
 
02.11.21
11:51
(34) пробовал заменить на в , не помогает
38 ДядяМитяй
 
02.11.21
11:51
(37) Скобочки не забыл?
39 mulenpav12
 
02.11.21
11:54
(38) И (&БезОтбораУслуг = ИСТИНА
ИЛИ  МедицинскиеУслуги.УникальныйИдентификаторУслуги В (&УникальныеИдентификаторыУслуг))

Вроде бы все на месте
40 mulenpav12
 
02.11.21
11:54
(39)

И (&БезОтбораУслуг = ИСТИНА
ИЛИ  МедицинскиеУслуги.УникальныйИдентификаторУслуги В (&УникальныеИдентификаторыУслуг))

Вроде бы все на месте
41 ДядяМитяй
 
02.11.21
11:58
Тогда в отладчике посмотреть Запрос.УстановитьПараметр("Уни....луг", ВотЧтоЗдесьПосмотреть)
42 Ryzeman
 
02.11.21
12:01
(30) Вопрос про параметр, судя по коду из (0) это переменная УслугиПечати, про которую я спрашивал в (26)
Посмотреть что туда пишется можешь по коду (правой кнопкой мышки - перейти к определению, а дальше ищешь где заполняется).
Либо в ставишь точку останова и через shift+F9 смотришь что в переменной.

Отладчиком пользоваться научили?...
43 mulenpav12
 
02.11.21
12:10
(40) Да научили , попробую после обеда
44 hhhh
 
02.11.21
17:25
(5) задним числом. Вот здесь

Подстрока(МедицинскиеУслуги.УникальныйИдентификаторУслуги,0,150)

нужно

Подстрока(МедицинскиеУслуги.УникальныйИдентификаторУслуги,1,150)
45 ДенисЧ
 
02.11.21
17:30
(44) ИсчоОдин(с)
как ты в запросе УникальныйИдентификатор к строке собираешься?
46 Kassern
 
02.11.21
17:50
(43) походу плохо научили...
47 серый КТУЛХУ
 
02.11.21
18:03
ну, допустим, преобразовать в запросе значение любого типа к строке можно - функцией ПРЕДСТАВЛЕНИЕ.
48 ДенисЧ
 
02.11.21
18:30
(47) Мда... Not hired...
Как ты представление в запросе (!!!) со строкой сравнишь?
49 серый КТУЛХУ
 
02.11.21
18:37
(48): я? я - никак.
50 ДенисЧ
 
02.11.21
18:43
(49) Хорошо. Как ты заставишь 1с это сделать? )))
51 серый КТУЛХУ
 
02.11.21
19:09
(50) плохо. никак. представление цуко преобразовывает не при выполнении запроса - а при получении результата на клиенте, учитывая, например, региональную усстановку и все такоэ... бяда кароч. но - преобразует же!
52 ДенисЧ
 
02.11.21
19:10
(51) Бинго, догадался )))
Причём преобразует в строки неограниченной строки ИЛИ NULL...
53 серый КТУЛХУ
 
02.11.21
20:48
(52): я не догадался - я знал. просто ответил изначально на формальном уровне - про невозможность преобразования типов в запросе. как оно возможно. а уж с тобой - мы уточнили, каким это образом происходит и с какими оговорками. согласись - кому-то и пригодиться могло (чтобы не лелеял надежду и не тратил понапрасну время)?
ЗЫ: там в каком-то релизе кстати вроде же обещали сделать преобразование типов в запросе. и вообще кучу функций в запрос всандалить. нэ?
54 Bukasoid
 
03.11.21
09:38
(53) В 8.3.20 добавлен в язык запросов целый набор функций работы со строками и числами по аналогии с функциями из основного языка, но вот преобразования типов в запросе по прежнему нет, и, вроде, пока никто не обещал
55 Bukasoid
 
03.11.21
09:40
(43) Автор, ну ты хоть отпишись, решил ли проблему
56 Kassern
 
03.11.21
09:57
(55) автор походу тестовое задание завалил...
57 mulenpav12
 
03.11.21
13:09
(56) Нет проблему не решил, просто сегодня целый день не до этого было, другим занимаюсь  и нет это было не тестовое задание
58 Kassern
 
03.11.21
13:34
(57) Вас всего лишь попросили в отладке посмотреть, что вы в параметрах передаете, даже детально расписали как это сделать. Это занимает меньше минуты времени в открытом конфигураторе. Но раз на это у вас нет времени, значит задачка не актуальная
59 mulenpav12
 
03.11.21
14:07
(58) задача актуальна , просто щас занимаемся другим более важным делом !
60 youalex
 
03.11.21
14:31
(54) Строка() есть, посмотрел, выполняется на движке СУБД, в tsql - через FORMAT()
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший