|
Неверные параметры в операции сравнения. Нельзя сравнивать поля неограниченной длины | ☑ | ||
---|---|---|---|---|
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()
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |