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

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

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

    //    | ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги В (&УникальныеИдентификаторыУслуг))
    
    ИмяТаблицыДляЗапроса = ОбъектПечати.Метаданные().ПолноеИмя() + "." + ТЧДокумента;
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТаблицаУслуг", ИмяТаблицыДляЗапроса);
    
    Если УслугиПечати = Неопределено Тогда
        сообщить("массив");
        Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", Новый Массив);
    Иначе
        сообщить("услуги печати");
        Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", УслугиПечати);
    КонецЕсли;
    
    ПустыеУслуги = (УслугиПечати = Неопределено) ИЛИ (ТипЗнч(УслугиПечати) = Тип("Массив") И УслугиПечати.Количество() = 0);
    
    Запрос.УстановитьПараметр("ОбъектПечати", ОбъектПечати);
    Запрос.УстановитьПараметр("БезОтбораУслуг", ПустыеУслуги);
    
    ТаблицаИсполнителей = Запрос.Выполнить().Выгрузить();
    
    ТаблицаНоменклатур = ТаблицаИсполнителей.Скопировать();
    ТаблицаНоменклатур.Свернуть("Номенклатура");
    МассивНоменклатур = ТаблицаНоменклатур.ВыгрузитьКолонку("Номенклатура");
    
    ТаблицаСотрудников = ТаблицаИсполнителей.Скопировать();
    ТаблицаСотрудников.Свернуть("Сотрудник");
    МассивСотрудников = ТаблицаСотрудников.ВыгрузитьКолонку("Сотрудник");
    
    
    Возврат Новый Структура("СписокУслуг, СписокСотрудников", МассивНоменклатур, МассивСотрудников);
    
КонецФункции
Показать
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Al3x 1 02.11.21 09:23 Сейчас в теме
(1) Попробуйте так: МедицинскиеУслуги.УникальныйИдентификаторУслуги В (&УникальныеИдентификаторыУслуг). А УникальныеИдентификаторыУслуг в массив поместить.
mulenpav12; +1 Ответить
4. mulenpav12 02.11.21 09:26 Сейчас в теме
6. Al3x 1 02.11.21 09:29 Сейчас в теме
(1) либо можете попробовать сделать так, как я написал выше, но УникальныеИдентификаторыУслуг получить из другого запроса, например

УникальныеИдентификаторы = ПолучитьУИДНаСервере();
ВашЗапрос.УстановитьПараметры("УникальныеИдентификаторыУслуг", УникальныеИдентификаторы);

Функция ПолучитьУИДНаСервере()

Запрос*******

РезультатЗапроса = Запрос.Выполнить().Выбрать();
Пока РезультатЗапроса.Следующий() Цикл

МассивУид = Новый Массив;
МассивУид.Добавить(РезультатЗапроса.Уид);

КонецЦикла;

Возврат МассивУид;

КонецФункции
Показать
mulenpav12; +1 Ответить
7. mulenpav12 02.11.21 09:34 Сейчас в теме
(6) Спасибо , буду пытаться пробовать)
9. mulenpav12 02.11.21 09:38 Сейчас в теме
(6)То есть весь код нужно переделывать или только запрос поменять ? , извинюсь за глупые вопрос , просто совсем плохо еще разбираюсь во всем этом (
10. Al3x 1 02.11.21 09:57 Сейчас в теме
(9) Запрос скорее всего менять не надо, если только новые ошибки какие всплывут. Вот

Функция ДанныеУслуг(Знач ОбъектПечати, Знач УслугиПечати)

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

СписокТЧ = ТипыТЧ();

ТЧДокумента = СписокТЧ.Получить(ТипЗнч(ОбъектПечати));
Если ТЧДокумента = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;

// МедицинскиеУслуги.УникальныйИдентификаторУслуги КАК УникальныйИдентификаторУслуги,

// | ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги В (&УникальныеИдентификаторыУслуг))

ИмяТаблицыДляЗапроса = ОбъектПечати.Метаданные().ПолноеИмя() + "." + ТЧДокумента;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТаблицаУслуг", ИмяТаблицыДляЗапроса);

Если УслугиПечати = Неопределено Тогда
сообщить("массив");
Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", Новый Массив); ////Тут судя по всему присваивается параметр уникальным услугам, добавляешь нужные услуги в массив, или добавляешь их запросом, как я писал выше
Иначе
сообщить("услуги печати");
Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", УслугиПечати);
КонецЕсли;

ПустыеУслуги = (УслугиПечати = Неопределено) ИЛИ (ТипЗнч(УслугиПечати) = Тип("Массив") И УслугиПечати.Количество() = 0);

Запрос.УстановитьПараметр("ОбъектПечати", ОбъектПечати);
Запрос.УстановитьПараметр("БезОтбораУслуг", ПустыеУслуги);

ТаблицаИсполнителей = Запрос.Выполнить().Выгрузить();

ТаблицаНоменклатур = ТаблицаИсполнителей.Скопировать();
ТаблицаНоменклатур.Свернуть("Номенклатура");
МассивНоменклатур = ТаблицаНоменклатур.ВыгрузитьКолонку("Номенклатура");

ТаблицаСотрудников = ТаблицаИсполнителей.Скопировать();
ТаблицаСотрудников.Свернуть("Сотрудник");
МассивСотрудников = ТаблицаСотрудников.ВыгрузитьКолонку("Сотрудник");


Возврат Новый Структура("СписокУслуг, СписокСотрудников", МассивНоменклатур, МассивСотрудников);

КонецФункции
Показать
11. mulenpav12 02.11.21 10:03 Сейчас в теме
(10)Спасибо , как я понимаю тут вот нужно запрос вставить - " Тут судя по всему присваивается параметр уникальным услугам, добавляешь нужные услуги в массив, или добавляешь их запросом, как я писал выше"
19. Al3x 1 02.11.21 10:59 Сейчас в теме
(11) Либо запрос, либо массив. Должно выйти примерно так:

Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", МассивУИД/ПолучитьУИДНаСервере());


Если выбираете второй вариант, то создаете

Функция ПолучитьУИДНаСервере

Запрос = Новый Запрос;
Запрос.Текст = *****************

Результат = Запрос.Выполнить().Выбрать();
МассивУИД = Новый Массив;

Пока Результат.Следующий() Цикл

МассивУИД.Добавить(Результат.УИД);

КонецЦикла;

Возврат МассивУИД;

КонецФункции



КонецЦикла;

КонецФункции
Показать
20. mulenpav12 02.11.21 11:11 Сейчас в теме
есть какая то возможность помочь с запросом , что там должно быть ? Если нет то и на том спасибо , я просто сижу не особо все понимаю , я понимаю суть , но сделать блин не могу . (
21. Al3x 1 02.11.21 12:03 Сейчас в теме
(20) Да вам только в запросе конструкцию изменить немного, а именно
строку | ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги = &УникальныеИдентификаторыУслуг) Заменить на | ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги В(&УникальныеИдентификаторыУслуг))

И установить параметр этим идентификаторам,что то наподобие этого:

Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", ПолучитьУИД());


Функция ПолучитьУИД()

Запрос = Новый Запрос;
Запрос.Текст = Выбрать МедУслуги.УникальныйИдентификаторУслуги Как УИД Из Документ.МедУслуги; ///Или справочник, я не знаю где у вас хранятся эти самые услуги.

Результат = Запрос.Выполнить().Выбрать();

МассивУИД = Новый Массив;

Пока Результат.Следующий() Цикл

МассивУИД.Добавить(Результат.УИД);

КонецЦикла;

Возврат МассивУИД;//// Если нужна какая то/какие то конкретные услуги, то Результат.Выполнить().Выгрузить(); .а потом уже добавляете СтруктураОтбора = Новый Структура;
СтруктураОтбора.Вставить("ИмяНужнойКолонки", НужноеЗначение);, и так для всех нужных значений. А дальше уже вот так:

Для Каждого Строка Из Результат Цикл

НужныеДанные = Результат.НайтиСтроки(СтруктураОтбора);

Если Не НужныеДанные.Количество() = 0 Тогда

МассивУИД.Добавить(НужныеДанные[0].УИД);

КонецЕсли;

КонецЦикла;

КонецФункции;
Показать
22. mulenpav12 02.11.21 12:09 Сейчас в теме
(21) Спасибо Огромное , надеюсь сработает)
3. Aitbay 02.11.21 09:26 Сейчас в теме
Выразить(МедицинскиеУслуги.УникальныйИдентификаторУслуги Как строка(100)) В ( &УникальныеИдентификаторыУслуг)

ну и соответственно в массив строки
mulenpav12; +1 Ответить
5. mulenpav12 02.11.21 09:27 Сейчас в теме
8. mulenpav12 02.11.21 09:35 Сейчас в теме
(3) В массив строки тоже нужно выразить то есть или чего , просто совсем еще плохо разбираюсь в 1с (
12. XAKEP 02.11.21 10:07 Сейчас в теме
оформляйте, как вставка кода

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

СписокТЧ = ТипыТЧ();

ТЧДокумента = СписокТЧ.Получить(ТипЗнч(ОбъектПечати));
Если ТЧДокумента = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;

// МедицинскиеУслуги.УникальныйИдентификаторУслуги КАК УникальныйИдентификаторУслуги,

// | ИЛИ МедицинскиеУслуги.УникальныйИдентификаторУслуги В (&УникальныеИдентификаторыУслуг))

ИмяТаблицыДляЗапроса = ОбъектПечати.Метаданные().ПолноеИмя() + "." + ТЧДокумента;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТаблицаУслуг", ИмяТаблицыДляЗапроса);

Если УслугиПечати = Неопределено Тогда
сообщить("массив");
Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", Новый Массив);
Иначе
сообщить("услуги печати");
Запрос.УстановитьПараметр("УникальныеИдентификаторыУслуг", УслугиПечати);
КонецЕсли;

ПустыеУслуги = (УслугиПечати = Неопределено) ИЛИ (ТипЗнч(УслугиПечати) = Тип("Массив") И УслугиПечати.Количество() = 0);

Запрос.УстановитьПараметр("ОбъектПечати", ОбъектПечати);
Запрос.УстановитьПараметр("БезОтбораУслуг", ПустыеУслуги);

ТаблицаИсполнителей = Запрос.Выполнить().Выгрузить();

ТаблицаНоменклатур = ТаблицаИсполнителей.Скопировать();
ТаблицаНоменклатур.Свернуть("Номенклатура");
МассивНоменклатур = ТаблицаНоменклатур.ВыгрузитьКолонку("Номенклатура");

ТаблицаСотрудников = ТаблицаИсполнителей.Скопировать();
ТаблицаСотрудников.Свернуть("Сотрудник");
МассивСотрудников = ТаблицаСотрудников.ВыгрузитьКолонку("Сотрудник");


Возврат Новый Структура("СписокУслуг, СписокСотрудников", МассивНоменклатур, МассивСотрудников);
КонецФункции
Показать
13. mulenpav12 02.11.21 10:11 Сейчас в теме
(12)Извиняюсь , первый раз на форуме )
14. XAKEP 02.11.21 10:13 Сейчас в теме
(13)
да ничего страшного, лишь бы не последний

а так бывает 0дней на сайте . и пропал на годика два .
16. mulenpav12 02.11.21 10:16 Сейчас в теме
(14) Не поможете разобраться с ошибкой ?
17. XAKEP 02.11.21 10:17 Сейчас в теме
(16)
нет, я админ 1с

а код ваш просто оформил, чтобы спецам удобнее смотреть
18. mulenpav12 02.11.21 10:20 Сейчас в теме
15. mulenpav12 02.11.21 10:14 Сейчас в теме
(13) Это вы исправили код или что ?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот