Неверные параметры в операции сравнения. Нельзя сравнивать поля неограниченной длины . Помогите пожалуйста добрые люди , с кодом в 1с. В обработке возникла вот такая ошибка , что делать ?
Ошибка:"{ВнешняяОбработка.ДемоСогласиеНаАнестезиологическоеВмешательство.МодульОбъекта(337)}: Ошибка при вызове метода контекста (Выполнить)
ТаблицаИсполнителей = Запрос.Выполнить().Выгрузить();
по причине:
{(11, 56)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги <<?>>= &УникальныеИдентификаторыУслуг)"
Код:
ТаблицаИсполнителей = Запрос.Выполнить().Выгрузить();
по причине:
{(11, 56)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги <<?>>= &УникальныеИдентификаторыУслуг)"
Код:
Функция ДанныеУслуг(Знач ОбъектПечати, Знач УслугиПечати)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| МедицинскиеУслуги.Ссылка КАК Ссылка,
| ВЫРАЗИТЬ(МедицинскиеУслуги.УникальныйИдентификаторУслуги КАК СТРОКА(150)) КАК УникальныйИдентификаторУслуги,
| МедицинскиеУслуги.Номенклатура КАК Номенклатура
|ПОМЕСТИТЬ ТаблицаУслуг
|ИЗ
| &ТаблицаУслуг КАК МедицинскиеУслуги
|ГДЕ
| МедицинскиеУслуги.Ссылка = &ОбъектПечати
| И (&БезОтбораУслуг = ИСТИНА
| ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги = &УникальныеИдентификаторыУслуг)
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| МедУслуги.Номенклатура КАК Номенклатура,
| МедицинскиеРабочиеМестаИсполнители.Сотрудник КАК Сотрудник
|ИЗ
| ТаблицаУслуг КАК МедУслуги
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СменныеЗадания КАК СменныеЗадания
| ПО МедУслуги.УникальныйИдентификаторУслуги = СменныеЗадания.УникальныйИдентификаторУслуги
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.МедицинскиеРабочиеМеста.Исполнители КАК МедицинскиеРабочиеМестаИсполнители
| ПО (СменныеЗадания.МедицинскоеРабочееМесто = МедицинскиеРабочиеМестаИсполнители.Ссылка)
|ГДЕ
| НЕ МедицинскиеРабочиеМестаИсполнители.Ссылка ЕСТЬ NULL";
СписокТЧ = ТипыТЧ();
ТЧДокумента = СписокТЧ.Получить(ТипЗнч(ОбъектПечати));
Если ТЧДокумента = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
// МедицинскиеУслуги.УникальныйИдентификаторУслуги КАК УникальныйИдентификаторУслуги,
// | ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги В (&УникальныеИдентификаторыУслуг))
ИмяТаблицыДляЗапроса = ОбъектПечати.Метаданные().ПолноеИмя() + "." + ТЧДокумента;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТаблицаУслуг", ИмяТаблицыДляЗапроса);
Если УслугиПечати = Неопределено Тогда
сообщить("массив");
Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", Новый Массив);
Иначе
сообщить("услуги печати");
Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", УслугиПечати);
КонецЕсли;
ПустыеУслуги = (УслугиПечати = Неопределено) ИЛИ (ТипЗнч(УслугиПечати) = Тип("Массив") И УслугиПечати.Количество() = 0);
Запрос.УстановитьПараметр("ОбъектПечати", ОбъектПечати);
Запрос.УстановитьПараметр("БезОтбораУслуг", ПустыеУслуги);
ТаблицаИсполнителей = Запрос.Выполнить().Выгрузить();
ТаблицаНоменклатур = ТаблицаИсполнителей.Скопировать();
ТаблицаНоменклатур.Свернуть("Номенклатура");
МассивНоменклатур = ТаблицаНоменклатур.ВыгрузитьКолонку("Номенклатура");
ТаблицаСотрудников = ТаблицаИсполнителей.Скопировать();
ТаблицаСотрудников.Свернуть("Сотрудник");
МассивСотрудников = ТаблицаСотрудников.ВыгрузитьКолонку("Сотрудник");
Возврат Новый Структура("СписокУслуг, СписокСотрудников", МассивНоменклатур, МассивСотрудников);
КонецФункции
ПоказатьОтветы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) либо можете попробовать сделать так, как я написал выше, но УникальныеИдентификаторыУслуг получить из другого запроса, например
УникальныеИдентификаторы = ПолучитьУИДНаСервере();
ВашЗапрос.УстановитьПараметры("УникальныеИдентификаторыУслуг", УникальныеИдентификаторы);
Функция ПолучитьУИДНаСервере()
Запрос*******
РезультатЗапроса = Запрос.Выполнить().Выбрать();
Пока РезультатЗапроса.Следующий() Цикл
МассивУид = Новый Массив;
МассивУид.Добавить(РезультатЗапроса.Уид);
КонецЦикла;
Возврат МассивУид;
КонецФункции
Показать
(9) Запрос скорее всего менять не надо, если только новые ошибки какие всплывут. Вот
Функция ДанныеУслуг(Знач ОбъектПечати, Знач УслугиПечати)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| МедицинскиеУслуги.Ссылка КАК Ссылка,
| ВЫРАЗИТЬ(МедицинскиеУслуги.УникальныйИдентификаторУслуги КАК СТРОКА(150)) КАК УникальныйИдентификаторУслуги,
| МедицинскиеУслуги.Номенклатура КАК Номенклатура
|ПОМЕСТИТЬ ТаблицаУслуг
|ИЗ
| &ТаблицаУслуг КАК МедицинскиеУслуги
|ГДЕ
| МедицинскиеУслуги.Ссылка = &ОбъектПечати
| И (&БезОтбораУслуг = ИСТИНА
| ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги В (&УникальныеИдентификаторыУслуг))
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| МедУслуги.Номенклатура КАК Номенклатура,
| МедицинскиеРабочиеМестаИсполнители.Сотрудник КАК Сотрудник
|ИЗ
| ТаблицаУслуг КАК МедУслуги
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СменныеЗадания КАК СменныеЗадания
| ПО МедУслуги.УникальныйИдентификаторУслуги = СменныеЗадания.УникальныйИдентификаторУслуги
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.МедицинскиеРабочиеМеста.Исполнители КАК МедицинскиеРабочиеМестаИсполнители
| ПО (СменныеЗадания.МедицинскоеРабочееМесто = МедицинскиеРабочиеМестаИсполнители.Ссылка)
|ГДЕ
| НЕ МедицинскиеРабочиеМестаИсполнители.Ссылка ЕСТЬ NULL";
СписокТЧ = ТипыТЧ();
ТЧДокумента = СписокТЧ.Получить(ТипЗнч(ОбъектПечати));
Если ТЧДокумента = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
// МедицинскиеУслуги.УникальныйИдентификаторУслуги КАК УникальныйИдентификаторУслуги,
// | ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги В (&УникальныеИдентификаторыУслуг))
ИмяТаблицыДляЗапроса = ОбъектПечати.Метаданные().ПолноеИмя() + "." + ТЧДокумента;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТаблицаУслуг", ИмяТаблицыДляЗапроса);
Если УслугиПечати = Неопределено Тогда
сообщить("массив");
Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", Новый Массив); ////Тут судя по всему присваивается параметр уникальным услугам, добавляешь нужные услуги в массив, или добавляешь их запросом, как я писал выше
Иначе
сообщить("услуги печати");
Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", УслугиПечати);
КонецЕсли;
ПустыеУслуги = (УслугиПечати = Неопределено) ИЛИ (ТипЗнч(УслугиПечати) = Тип("Массив") И УслугиПечати.Количество() = 0);
Запрос.УстановитьПараметр("ОбъектПечати", ОбъектПечати);
Запрос.УстановитьПараметр("БезОтбораУслуг", ПустыеУслуги);
ТаблицаИсполнителей = Запрос.Выполнить().Выгрузить();
ТаблицаНоменклатур = ТаблицаИсполнителей.Скопировать();
ТаблицаНоменклатур.Свернуть("Номенклатура");
МассивНоменклатур = ТаблицаНоменклатур.ВыгрузитьКолонку("Номенклатура");
ТаблицаСотрудников = ТаблицаИсполнителей.Скопировать();
ТаблицаСотрудников.Свернуть("Сотрудник");
МассивСотрудников = ТаблицаСотрудников.ВыгрузитьКолонку("Сотрудник");
Возврат Новый Структура("СписокУслуг, СписокСотрудников", МассивНоменклатур, МассивСотрудников);
КонецФункции
Показать
(11) Либо запрос, либо массив. Должно выйти примерно так:
Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", МассивУИД/ПолучитьУИДНаСервере());
Если выбираете второй вариант, то создаете
Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", МассивУИД/ПолучитьУИДНаСервере());
Если выбираете второй вариант, то создаете
Функция ПолучитьУИДНаСервере
Запрос = Новый Запрос;
Запрос.Текст = *****************
Результат = Запрос.Выполнить().Выбрать();
МассивУИД = Новый Массив;
Пока Результат.Следующий() Цикл
МассивУИД.Добавить(Результат.УИД);
КонецЦикла;
Возврат МассивУИД;
КонецФункции
КонецЦикла;
КонецФункции
Показать
(20) Да вам только в запросе конструкцию изменить немного, а именно
строку | ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги = &УникальныеИдентификаторыУслуг) Заменить на | ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги В(&УникальныеИдентификаторыУслуг))
И установить параметр этим идентификаторам,что то наподобие этого:
строку | ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги = &УникальныеИдентификаторыУслуг) Заменить на | ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги В(&УникальныеИдентификаторыУслуг))
И установить параметр этим идентификаторам,что то наподобие этого:
Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", ПолучитьУИД());
Функция ПолучитьУИД()
Запрос = Новый Запрос;
Запрос.Текст = Выбрать МедУслуги.УникальныйИдентификаторУслуги Как УИД Из Документ.МедУслуги; ///Или справочник, я не знаю где у вас хранятся эти самые услуги.
Результат = Запрос.Выполнить().Выбрать();
МассивУИД = Новый Массив;
Пока Результат.Следующий() Цикл
МассивУИД.Добавить(Результат.УИД);
КонецЦикла;
Возврат МассивУИД;//// Если нужна какая то/какие то конкретные услуги, то Результат.Выполнить().Выгрузить(); .а потом уже добавляете СтруктураОтбора = Новый Структура;
СтруктураОтбора.Вставить("ИмяНужнойКолонки", НужноеЗначение);, и так для всех нужных значений. А дальше уже вот так:
Для Каждого Строка Из Результат Цикл
НужныеДанные = Результат.НайтиСтроки(СтруктураОтбора);
Если Не НужныеДанные.Количество() = 0 Тогда
МассивУИД.Добавить(НужныеДанные[0].УИД);
КонецЕсли;
КонецЦикла;
КонецФункции;
Показать
оформляйте, как вставка кода
Функция ДанныеУслуг(Знач ОбъектПечати, Знач УслугиПечати)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| МедицинскиеУслуги.Ссылка КАК Ссылка,
| ВЫРАЗИТЬ(МедицинскиеУслуги.УникальныйИдентификаторУслуги КАК СТРОКА(150)) КАК УникальныйИдентификаторУслуги,
| МедицинскиеУслуги.Номенклатура КАК Номенклатура
|ПОМЕСТИТЬ ТаблицаУслуг
|ИЗ
| &ТаблицаУслуг КАК МедицинскиеУслуги
|ГДЕ
| МедицинскиеУслуги.Ссылка = &ОбъектПечати
| И (&БезОтбораУслуг = ИСТИНА
| ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги = &УникальныеИдентификаторыУслуг)
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| МедУслуги.Номенклатура КАК Номенклатура,
| МедицинскиеРабочиеМестаИсполнители.Сотрудник КАК Сотрудник
|ИЗ
| ТаблицаУслуг КАК МедУслуги
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СменныеЗадания КАК СменныеЗадания
| ПО МедУслуги.УникальныйИдентификаторУслуги = СменныеЗадания.УникальныйИдентификаторУслуги
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.МедицинскиеРабочиеМеста.Исполнители КАК МедицинскиеРабочиеМестаИсполнители
| ПО (СменныеЗадания.МедицинскоеРабочееМесто = МедицинскиеРабочиеМестаИсполнители.Ссылка)
|ГДЕ
| НЕ МедицинскиеРабочиеМестаИсполнители.Ссылка ЕСТЬ NULL";
СписокТЧ = ТипыТЧ();
ТЧДокумента = СписокТЧ.Получить(ТипЗнч(ОбъектПечати));
Если ТЧДокумента = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
// МедицинскиеУслуги.УникальныйИдентификаторУслуги КАК УникальныйИдентификаторУслуги,
// | ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги В (&УникальныеИдентификаторыУслуг))
ИмяТаблицыДляЗапроса = ОбъектПечати.Метаданные().ПолноеИмя() + "." + ТЧДокумента;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТаблицаУслуг", ИмяТаблицыДляЗапроса);
Если УслугиПечати = Неопределено Тогда
сообщить("массив");
Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", Новый Массив);
Иначе
сообщить("услуги печати");
Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", УслугиПечати);
КонецЕсли;
ПустыеУслуги = (УслугиПечати = Неопределено) ИЛИ (ТипЗнч(УслугиПечати) = Тип("Массив") И УслугиПечати.Количество() = 0);
Запрос.УстановитьПараметр("ОбъектПечати", ОбъектПечати);
Запрос.УстановитьПараметр("БезОтбораУслуг", ПустыеУслуги);
ТаблицаИсполнителей = Запрос.Выполнить().Выгрузить();
ТаблицаНоменклатур = ТаблицаИсполнителей.Скопировать();
ТаблицаНоменклатур.Свернуть("Номенклатура");
МассивНоменклатур = ТаблицаНоменклатур.ВыгрузитьКолонку("Номенклатура");
ТаблицаСотрудников = ТаблицаИсполнителей.Скопировать();
ТаблицаСотрудников.Свернуть("Сотрудник");
МассивСотрудников = ТаблицаСотрудников.ВыгрузитьКолонку("Сотрудник");
Возврат Новый Структура("СписокУслуг, СписокСотрудников", МассивНоменклатур, МассивСотрудников);
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот