|   |   | 
| 
 | Проверка на заполнение параметра в запросе | ☑ | ||
|---|---|---|---|---|
| 0
    
        ac13 01.02.18✎ 16:27 | 
        Параметр &ГруппыТоваров может быть заполнен, а может быть пустой.
 Если заполнен, то нужно отбирать по условию, а если не заполнен, то отбирать всё. Устанавливаю значение параметра запроса: Если ГруппыНоменклатуры.Количество() > 0 Тогда З.УстановитьПараметр("ГруппыТоваров", ГруппыНоменклатуры.ВыгрузитьЗначения()); Иначе З.УстановитьПараметр("ГруппыТоваров", Неопределено); КонецЕсли; А в запросе пишу такое условие: ВЫБОР КОГДА &ГруппыТоваров <> НЕОПРЕДЕЛЕНО ТОГДА ТоварыНаСкладахОстатки.Номенклатура В ИЕРАРХИИ (&ГруппыТоваров) КОНЕЦ Ошибка: Неверные параметры в операции сравнения. Нельзя сравнивать поля неограниченной длины и поля несовместимых типов. КОГДА &ГруппыТоваров <<?>><> НЕОПРЕДЕЛЕНО Как прописать условие? | |||
| 1
    
        leonidkorolev 01.02.18✎ 16:32 | 
        Заведи ещё один параметр, типа ИспользоватьОтбор     | |||
| 2
    
        ac13 01.02.18✎ 16:33 | 
        (1) типа так:
 ВЫБОР КОГДА &ИспользоватьОтбор = Истина ТОГДА ТоварыНаСкладахОстатки.Номенклатура В ИЕРАРХИИ (&ГруппыТоваров) | |||
| 3
    
        dezss 01.02.18✎ 16:38 | 
        ОФФ: народ, объясните мне, пожалуйста, зачем люди сравнивают с ИСТИНА?     | |||
| 4
    
        drcrasher 01.02.18✎ 16:41 | 
        (3) З.УстановитьПараметр("ИспОтбор", "ИспОтбор");     | |||
| 5
    
        dezss 01.02.18✎ 16:45 | 
        (4) хм...ну тогда ж ничего не отработает нормально, т.е. будет ошибка, которую еще фиг найдешь.     | |||
| 6
    
        ac13 01.02.18✎ 16:46 | 
        Нет, не работает. Вопрос - как условие правильно прописать?
 ВЫБОР КОГДА &ИспользоватьОтбор ТОГДА ТоварыНаСкладахОстатки.Номенклатура В ИЕРАРХИИ (&ГруппыТоваров) КОНЕЦ Если группы выбираю - заполняет, если не выбираю, ничего не заполняет. | |||
| 7
    
        ac13 01.02.18✎ 16:47 | 
        Если ЗначениеЗаполнено(ГруппыНоменклатуры) Тогда
 З.УстановитьПараметр("ИспользоватьОтбор", Истина); Иначе З.УстановитьПараметр("ИспользоватьОтбор", Ложь); КонецЕсли; __________________________________________________________ ВЫБОР КОГДА &ИспользоватьОтбор ТОГДА ТоварыНаСкладахОстатки.Номенклатура В ИЕРАРХИИ (&ГруппыТоваров) КОНЕЦ __________________________________________________________ не работает | |||
| 8
    
        Timon1405 01.02.18✎ 16:48 | 
        ТОГДА 
 ТоварыНаСкладахОстатки.Номенклатура В ИЕРАРХИИ (&ГруппыТоваров) Иначе Истина КОНЕЦ | |||
| 9
    
        ac13 01.02.18✎ 16:49 | 
        (1), (8) - спасибо!     | |||
| 10
    
        Diman000 01.02.18✎ 16:52 | 
        (3)
 Когда-нибудь значение может быть не булевым и выскочит ошибка. Особенно актуально при проверках значений полученных в результате запросов или сложных алгоритмов. С тех пор как на такое наткнешься разок-другой-третий начинаешь везде писать = ИСТИНА. | |||
| 11
    
        hhhh 01.02.18✎ 16:52 | 
        (3) бывает, когда составной тип данных, может быть Булево и не Булево. Тогда нужно КОГДА &ИспользоватьОтбор = Истина
 Если мы на 100% уверены, что значение параметра всегда Булево, тогда пишем КОГДА &ИспользоватьОтбор | |||
| 12
    
        dezss 01.02.18✎ 17:04 | 
        (10) (11) а можно конкретный пример из практики?     | |||
| 13
    
        Diman000 02.02.18✎ 19:03 | 
        (12) Сегодня выловил очередную ошибку такого рода.
 Функция ОбщегоНазначения.ПолучитьЗначениеРеквизита возвращает НЕОПРЕДЕЛЕНО, если переданная ссылка пустая. А реквизит булевый и в коде написано без = ИСТИНА. Сразу ошибка, а было бы = ИСТИНА все бы работало. | |||
| 14
    
        mikecool 02.02.18✎ 19:06 | 
        (6) &Параметр = Неопределено  Или ТвоеПоле = &Параметр
 устанавливать Неопределено в Параметр обязательно | |||
| 15
    
        AlvlSpb naïve 02.02.18✎ 19:14 | 
        (0) А зачем вообще заниматься выбором параметра, если второго значения не существует? Не проще варьировать текстом запроса? Сам запрос без условия, а дальше
 Если ЗначениеЗаполнено(ГруппыНоменклатуры) Тогда З.Текст = З.Текст + "ГДЕ что-то там &Параметр" // ваше условие З.УстановитьПараметр("Параметр", значение параметра); КонецЕсли; Чем не устраивает? Понимаю выбирать когда параметр может принимать два значения, а так.... смысл мудрить? | |||
| 16
    
        mikecool 02.02.18✎ 19:16 | 
        (15) чтобы запрос не парсился каждый раз при попадании в скуль     | |||
| 17
    
        Diman000 02.02.18✎ 19:17 | 
        И еще весь текст запроса не хавается конструктором.
 И ГДЕ не всегда последняя конструкция. Так делать плохая привычка. | |||
| 18
    
        AlvlSpb naïve 02.02.18✎ 19:34 | 
        (16) Не утверждаю, но предполагаю что парсинг все же происходит в момент Запрос.Выполнить, а значит - единожды. (17) А вот здесь, ваше замечание о привычках - для разработчиков типовых. Спецом посмотрел из любопыства, в УТ 11.3 такой метод (варьирование текстом запроса) использован 343 раза
 Что касается "не всегда последняя конструкция" - СтрЗаменить тоже пока не отменяли. Не знаю, на мой взгляд, вполне рабочее и быстрое решение | |||
| 19
    
        Diman000 02.02.18✎ 19:56 | 
        (18) Ну с типовыми я давно не работал, не могу ничего сказать.
 СтрЗаменить хорошая тема, "ГДЕ &Условие", а затем это &Условие варьировать как по мне хороший вариант. Но в простейших случаях типа (0) лучше два параметра ЕстьОтбор и ЗначениеОтбора | |||
| 20
    
        youalex 02.02.18✎ 20:09 | 
        (0) если извратиться, можно написать примерно так:
 ВЫБОР КОГДА НЕ 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ Справочник.Номенклатура ГДЕ Ссылка В (&ГруппыТоваров)) ТОГДА ИСТИНА ИНАЧЕ ТоварыНаСкладахОстатки.Номенклатура В ИЕРАРХИИ (&ГруппыТоваров) КОНЕЦ | |||
| 21
    
        Малыш Джон 02.02.18✎ 20:15 | 
        (0) Довольно странный подход...
 Сначала засовывать в параметры запроса значения разного типа, а потом пытаться вырулить как-то ситуацию в самом запросе. Почему нельзя сделать так? : Если ГруппыНоменклатуры.Количество() > 0 Тогда З.УстановитьПараметр("ГруппыТоваров", ГруппыНоменклатуры.ВыгрузитьЗначения()); Иначе З.УстановитьПараметр("ГруппыТоваров", Справочники.Номенклатура.ПустаяСсылка()); КонецЕсли; а в самом запросе просто поставить условие ТоварыНаСкладахОстатки.Номенклатура В ИЕРАРХИИ (&ГруппыТоваров) | |||
| 22
    
        DES 02.02.18✎ 20:27 | 
        или так 
 ГДЕ ГруппыТоваров = &ГруппыТоваров ИЛИ &ГруппыТоваров <> НЕОПРЕДЕЛЕНО | |||
| 23
    
        Малыш Джон 02.02.18✎ 20:30 | 
        (22) ГДЕ  ГруппыТоваров = &ГруппыТоваров 
 ИЛИ &ГруппыТоваров = НЕОПРЕДЕЛЕНО | |||
| 24
    
        DES 03.02.18✎ 08:14 | 
        (23) да , сорь. копипастил из (0)     | |||
| 25
    
        breezee 03.02.18✎ 11:26 | 
        (15) Так не правильно. В рекомендациях 1С в таких случаях стоит использовать "СТРЗаменить()"     | |||
| 26
    
        AlvlSpb naïve 03.02.18✎ 12:01 | 
        (25) СтрЗаменить рекомендуют использовать, если вставляемая в запрос конструкция, не заканчивает этот запрос (о чем я и напомнил в (18) ).     | |||
| 27
    
        breezee 03.02.18✎ 12:17 | 
        (26) Не знал, спасибо за информацию! Запомню     | |||
| 28
    
        Новиков 03.02.18✎ 13:16 | 
        Для истории вставлю пруф 6-ти летней давности на тему сабжа: https://forum.infostart.ru/forum9/topic52154/     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |