Нельзя сравнивать поля неограниченной длины и поля несовместимых типов 1с
Приветствую всех, написал запрос в отладчике печатной формы, все нужные данные он мне показывает.
Но как только подставляю этот код в форму списка контрагентов в процедуру, то получаю ошибку.
Тип у "Владелец" - СправочникСсылка.Контрагенты.
Нельзя сравнить поля неограниченной длины и несовместимых типов
Всем ХАЙ)) Тут такое дело: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ.
Тип поля серийного номера большой длины
Добрый день, Подскажите какой лучше/правильнее выбрать тип поля для серийного номера длинной 19.
Увеличить даты из поля дата на основании поля тип и вывести в третье поле
В поле тип может быть несколько вариантов и в зависимости от значения увеличивать дату. Если тип =.
Сумма всех чисел поля, тип поля float.
Здравствуйте, я недавно начал изучать php и сейчас столкнулся с такой вот проблемой. В общем.
а на скрине в модуле какая-то чушь - что за "Справочники.КонтактныеЛицаКонтрагентов"?
Добавлено через 36 секунд
сравните код на скрине и текстовый выше - они разные. К чему бы это?
Добавлено через 4 минуты
Кстати, по поводу скрина с текстом - изучите правила форума. П.5.18:
GreenkA, В коде СсылкаНаОбъект - код в отладчике, а то что на скрине, код уже в справочнике формы списка, поэтому заменяю СсылкаНаОбъект на Справочники.КонтактныеЛицаКонтрагентов.
Сделал так:
Но всё равно ошибку получаю.
Буду знать на будущее, сильно не бейте. ))
Neophyte1C, да как так-то:wall:
У вас используется левое соединение, а таблица КонтактныеЛицаКонтрагентов у вас справа, в случае когда соединение не происходит, то есть в поле Объект таблицы Контактная информация не контактное лицр, а ссылка другого типа, поле КонтактныеЛицаКонтрагентов.Владелец равно NULL и сравнивать с &Владелец его нельзя, поэтому либо сделайте внутреннее соединение, либо условие
И КонтактныеЛицаКонтрагентов.Владелец = &Владелец
перенесите выше в блок ПО
GreenkA, renat_dmitriev, Если делаю так, то всё равно получаю ту же самую ошибку.
Neophyte1C, Я не обратил внимание "СсылкаНаОбъект = Справочники.Контрагенты;"
В чем смысл этого? Вы чего хотите добиться этим?
Добавлено через 34 секунды
То есть что за данные вы пытаетесь получить?
Но как только я подставляю код в процедуру формы списка справочника контрагенты, прописывая для
То получаю ошибку, показанную в 3-ем рисунке заголовка темы.
Neophyte1C, Еще раз - в чем смысл этого отбора "КонтактныеЛицаКонтрагентов.Владелец = &Владелец", что вы пытаетесь им отфильтровать? Потому что во Владелец по логике должна быть ссылка на конкретного контрагента, когда вы присваиваете Справочники.Контрагенты, то есть значение типа СправочникиМенеджер, это вообще не имеет никакого программного или логического смысла.
Посему пока вы не ответите простым русским языком чего вы хотите добиться этой фильтрацией, никто ничем вам помочь здесь не сможет.
renat_dmitriev, объясню, на следующем рисунке показано, что я открываю нужного мне контрагента (1.), где перехожу во вкладку "Контакты", нахожу контактное лицо контрагента (2.), открываю его (3.) и вижу адрес dsdcs@dsc.r, который мне и надо вывести, вывожу запросом в заголовке темы через отладчик.
А следующим рисунком показан реквизит Владелец, к чему он относится и почему я его подставляю в условие.
В табло-1 показаны данные параметров.
renat_dmitriev, Весь этот рабочий код переношу в процедуру формы списка Справочники.Контрагенты и получаю ошибку.
Поэтому у меня возник вопрос.
Соединение с таблицей КонтактныеЛицаКонтрагентов вообще абсолютно бессмысленно. Если вы хотите выбрать контактную информацию определенного типа по конкретному контрагенту, достаточно обращения к таблице контактной информации
Только так и никак иначе. И пока вы будете пихать Справочники.Контрагенты вместо ссылки на ООО Лена, у вас ничего никогда не выйдет.
Добавлено через 1 минуту
Весь этот рабочий код переношу в процедуру формы списка Справочники.Контрагенты и получаю ошибку.
Поэтому у меня возник вопрос.
Помогите пожалуйста добрые люди , с кодом в 1с. В обработке возникла вот такая ошибка , что делать ?
Ошибка:": Ошибка при вызове метода контекста (Выполнить)
ТаблицаИсполнителей = Запрос.Выполнить().Выгрузить();
по причине:
<(11, 56)>: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги >= &УникальныеИдентификаторыУслуг)"
Код:
Функция ДанныеУслуг(Знач ОбъектПечати, Знач УслугиПечати)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| МедицинскиеУслуги.Ссылка КАК Ссылка,
| ВЫРАЗИТЬ(МедицинскиеУслуги.УникальныйИдентификаторУслуги КАК СТРОКА(150)) КАК УникальныйИдентификаторУслуги,
| МедицинскиеУслуги.Номенклатура КАК Номенклатура
|ПОМЕСТИТЬ ТаблицаУслуг
|ИЗ
| &ТаблицаУслуг КАК МедицинскиеУслуги
|ГДЕ
| МедицинскиеУслуги.Ссылка = &ОбъектПечати
| И (&БезОтбораУслуг = ИСТИНА
| ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги = &УникальныеИдентификаторыУслуг)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| МедУслуги.Номенклатура КАК Номенклатура,
| МедицинскиеРабочиеМестаИсполнители.Сотрудник КАК Сотрудник
|ИЗ
| ТаблицаУслуг КАК МедУслуги
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СменныеЗадания КАК СменныеЗадания
| ПО МедУслуги.УникальныйИдентификаторУслуги = СменныеЗадания.УникальныйИдентификаторУслуги
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.МедицинскиеРабочиеМеста.Исполнители КАК МедицинскиеРабочиеМестаИсполнители
| ПО (СменныеЗадания.МедицинскоеРабочееМесто = МедицинскиеРабочиеМестаИсполнители.Ссылка)
|ГДЕ
| НЕ МедицинскиеРабочиеМестаИсполнители.Ссылка ЕСТЬ NULL";
ТЧДокумента = СписокТЧ.Получить(ТипЗнч(ОбъектПечати));
Если ТЧДокумента = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
// МедицинскиеУслуги.УникальныйИдентификаторУслуги КАК УникальныйИдентификаторУслуги,
// | ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги В (&УникальныеИдентификаторыУслуг))
ИмяТаблицыДляЗапроса = ОбъектПечати.Метаданные().ПолноеИмя() + "." + ТЧДокумента;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТаблицаУслуг", ИмяТаблицыДляЗапроса);
Если УслугиПечати = Неопределено Тогда
сообщить("массив");
Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", Новый Массив);
Иначе
сообщить("услуги печати");
Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", УслугиПечати);
КонецЕсли;
ПустыеУслуги = (УслугиПечати = Неопределено) ИЛИ (ТипЗнч(УслугиПечати) = Тип("Массив") И УслугиПечати.Количество() = 0);
Запрос.УстановитьПараметр("ОбъектПечати", ОбъектПечати);
Запрос.УстановитьПараметр("БезОтбораУслуг", ПустыеУслуги);
ТаблицаНоменклатур = ТаблицаИсполнителей.Скопировать();
ТаблицаНоменклатур.Свернуть("Номенклатура");
МассивНоменклатур = ТаблицаНоменклатур.ВыгрузитьКолонку("Номенклатура");
ТаблицаСотрудников = ТаблицаИсполнителей.Скопировать();
ТаблицаСотрудников.Свернуть("Сотрудник");
МассивСотрудников = ТаблицаСотрудников.ВыгрузитьКолонку("Сотрудник");
Возврат Новый Структура("СписокУслуг, СписокСотрудников", МассивНоменклатур, МассивСотрудников);
(0) в выбрать вы строку обрезали до 150 символов, а в отборе сравниваете всю строку. Можете так-же привести к ограниченной строки, а потом уже сравнить
Это было готова обработка, я не сам писал этот код и щас не понимаю в чем проблема , какая тут ошибка , строку обрезал , просто пробовал какие то решения проблемы , но это не помогло
В отборе , это где нужно обрезать строку , я просто недавно работаю и изучаю 1с , не совсем еще все понимаю ?
(4) Поймите, 1ска не умеет проверять на равенство неограниченные поля, о чем вам радостно отрапортовала. В отборе (ГДЕ) Ограничьте строку, например: Подстрока(МедицинскиеУслуги.УникальныйИдентификаторУслуги,0,150)=&УникальныеИдентификаторыУслуг.
То что вы обрезали строку в Выбрать, не значит, что она обрезалась в отборе самостоятельно.
(5) а еще лучше дайте втык тому, кто сделал это поле неограниченным и назвал его идентификатором. Если все данные в этом поле не превышают 150символов, то, сделав копию базы (на всякий случай), можно привести этот реквизит к нужной длине, убрав эту неограниченность.
(5) Подстрока(МедицинскиеУслуги.УникальныйИдентификаторУслуги,0,150)=&УникальныеИдентификаторыУслуг.
Пробовал сделать так , теперь появляется вот такая ошибка
" по причине:
ИЛИ Подстрока(МедицинскиеУслуги.УникальныйИдентификаторУслуги,0,150)=&УникальныеИдентификаторыУслуг)>.
(10) Приведи целиком текст запроса. Ну или хотя бы кусок вокруг данной строки. Возможно точку с запятой затёр или лишний символ поставил
Довольно часто возникает необходимость сравнить значения, которые имеют тип "строка". Первым делом на ум приходит идея воспользоваться оператором сравнения " = ". Однако, в случае, когда одно из сравниваемых текстовых полей имеет неограниченную длину, сравнение закончится ошибкой "Нельзя сравнивать поля неограниченной длины и поля несовместимых типов". Здесь на помощь придёт другой оператор.
Оператор ПОДОБНО - оператор проверки строки на подобие шаблону. Позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если значение выражения удовлетворяет шаблону – результатом оператора будет ИСТИНА, иначе – ЛОЖЬ.
Следующие символы в строке шаблона являются служебными и имеют смысл, отличный от символа строки:
% (процент): последовательность, содержащая любое количество произвольных символов
_ (подчеркивание): один произвольный символ
[…] (в квадратных скобках один или несколько символов): любой одиночный символ из перечисленных внутри квадратных скобок
В перечислении могут встречаться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона.
[^…] (в квадратных скобках значок отрицания, за которым следует один или несколько символов): любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания.
Любой другой символ означает сам себя и не несет никакой дополнительной нагрузки.
Если в качестве самого себя необходимо записать один из перечисленных символов, то ему должен предшествовать . Сам (любой подходящий символ) определяется в этом же операторе после ключевого слова СПЕЦСИМВОЛ.
Например, шаблон "%АБВ5[абвг]\_абв%" СПЕЦСИМВОЛ "\" означает подстроку, состоящую из последовательности символов: буквы А; буквы Б; буквы В; одной цифры; одной из букв а, б, в или г; символа подчеркивания; буквы а; буквы б; буквы в. Причем перед этой последовательностью может располагаться произвольный набор символов.
- Главная
- Программирование 1С
- Сравнение строк в 1С. Ошибка: Нельзя сравнивать поля неограниченной длины и поля несовместимых типов. Оператор ПОДОБНО.
Сравнение строк в 1С. Ошибка: Нельзя сравнивать поля неограниченной длины и поля несовместимых типов. Оператор ПОДОБНО.
Довольно часто возникает необходимость сравнить значения, которые имеют тип "строка". Первым делом на ум приходит идея воспользоваться оператором сравнения " = ". Однако, в случае, когда одно из сравниваемых текстовых полей имеет неограниченную длину, сравнение закончится ошибкой "Нельзя сравнивать поля неограниченной длины и поля несовместимых типов". Здесь на помощь придёт другой оператор.
Оператор ПОДОБНО - оператор проверки строки на подобие шаблону. Позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если значение выражения удовлетворяет шаблону – результатом оператора будет ИСТИНА, иначе – ЛОЖЬ.
Следующие символы в строке шаблона являются служебными и имеют смысл, отличный от символа строки:
% (процент): последовательность, содержащая любое количество произвольных символов
_ (подчеркивание): один произвольный символ
[…] (в квадратных скобках один или несколько символов): любой одиночный символ из перечисленных внутри квадратных скобок
В перечислении могут встречаться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона.
[^…] (в квадратных скобках значок отрицания, за которым следует один или несколько символов): любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания.
Любой другой символ означает сам себя и не несет никакой дополнительной нагрузки.
Если в качестве самого себя необходимо записать один из перечисленных символов, то ему должен предшествовать . Сам (любой подходящий символ) определяется в этом же операторе после ключевого слова СПЕЦСИМВОЛ.
Например, шаблон "%АБВ3[абвг]\_абв%" СПЕЦСИМВОЛ "\" означает подстроку, состоящую из последовательности символов: буквы А; буквы Б; буквы В; одной цифры; одной из букв а, б, в или г; символа подчеркивания; буквы а; буквы б; буквы в. Причем перед этой последовательностью может располагаться произвольный набор символов.
Помогите пожалуйста добрые люди , с кодом в 1с. В обработке возникла вот такая ошибка , что делать ?
Ошибка:": Ошибка при вызове метода контекста (Выполнить)
ТаблицаИсполнителей = Запрос.Выполнить().Выгрузить();
по причине:
<(11, 56)>: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги >= &УникальныеИдентификаторыУслуг)"
Код:
Функция ДанныеУслуг(Знач ОбъектПечати, Знач УслугиПечати)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| МедицинскиеУслуги.Ссылка КАК Ссылка,
| ВЫРАЗИТЬ(МедицинскиеУслуги.УникальныйИдентификаторУслуги КАК СТРОКА(150)) КАК УникальныйИдентификаторУслуги,
| МедицинскиеУслуги.Номенклатура КАК Номенклатура
|ПОМЕСТИТЬ ТаблицаУслуг
|ИЗ
| &ТаблицаУслуг КАК МедицинскиеУслуги
|ГДЕ
| МедицинскиеУслуги.Ссылка = &ОбъектПечати
| И (&БезОтбораУслуг = ИСТИНА
| ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги = &УникальныеИдентификаторыУслуг)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| МедУслуги.Номенклатура КАК Номенклатура,
| МедицинскиеРабочиеМестаИсполнители.Сотрудник КАК Сотрудник
|ИЗ
| ТаблицаУслуг КАК МедУслуги
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СменныеЗадания КАК СменныеЗадания
| ПО МедУслуги.УникальныйИдентификаторУслуги = СменныеЗадания.УникальныйИдентификаторУслуги
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.МедицинскиеРабочиеМеста.Исполнители КАК МедицинскиеРабочиеМестаИсполнители
| ПО (СменныеЗадания.МедицинскоеРабочееМесто = МедицинскиеРабочиеМестаИсполнители.Ссылка)
|ГДЕ
| НЕ МедицинскиеРабочиеМестаИсполнители.Ссылка ЕСТЬ NULL";
ТЧДокумента = СписокТЧ.Получить(ТипЗнч(ОбъектПечати));
Если ТЧДокумента = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
// МедицинскиеУслуги.УникальныйИдентификаторУслуги КАК УникальныйИдентификаторУслуги,
// | ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги В (&УникальныеИдентификаторыУслуг))
ИмяТаблицыДляЗапроса = ОбъектПечати.Метаданные().ПолноеИмя() + "." + ТЧДокумента;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТаблицаУслуг", ИмяТаблицыДляЗапроса);
Если УслугиПечати = Неопределено Тогда
сообщить("массив");
Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", Новый Массив);
Иначе
сообщить("услуги печати");
Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", УслугиПечати);
КонецЕсли;
ПустыеУслуги = (УслугиПечати = Неопределено) ИЛИ (ТипЗнч(УслугиПечати) = Тип("Массив") И УслугиПечати.Количество() = 0);
Запрос.УстановитьПараметр("ОбъектПечати", ОбъектПечати);
Запрос.УстановитьПараметр("БезОтбораУслуг", ПустыеУслуги);
ТаблицаНоменклатур = ТаблицаИсполнителей.Скопировать();
ТаблицаНоменклатур.Свернуть("Номенклатура");
МассивНоменклатур = ТаблицаНоменклатур.ВыгрузитьКолонку("Номенклатура");
ТаблицаСотрудников = ТаблицаИсполнителей.Скопировать();
ТаблицаСотрудников.Свернуть("Сотрудник");
МассивСотрудников = ТаблицаСотрудников.ВыгрузитьКолонку("Сотрудник");
Возврат Новый Структура("СписокУслуг, СписокСотрудников", МассивНоменклатур, МассивСотрудников);
Читайте также: