helpf.pro
Регистрация

v8.2 УП: Параметр условие в Запросе

Bell
01.07.2015 12:01Прочитано: 5319
Код 1C v 8.3
 Здравствуйте   

Сделал Запрос с условиями РАВНО И В СПИСКЕ

1.При загрузке загружаются УсловияСравнения,

2.При Измеении ВидаСравнения тоже все работает

3.Номенклатура отбирается в списке

Как установить условие параметра в звпросе что бы он выполнялся (Номенклатура)

/// Мне надо что бы можно было выбрать из списка выбранной номенклатуры

САМ ЗАПРОС


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

Yandex
Возможно, вас также заинтересует
Реклама на портале
Bell
01.07.2015 12:07Ответ № 1

Bell
01.07.2015 12:07Ответ № 2

Что то код не выделяется

IBReiter
01.07.2015 13:42Ответ № 3

Т.е. не одна позиция, а несколько?

IBReiter
01.07.2015 13:52Ответ № 4

Ну и вложенный там не нужно, условия лучше наложить на параметры виртуальной таблицы

EMigachev
01.07.2015 16:07Ответ № 5

(0) если я правильно понял, то тебе нужно Как в запросе задать условие на параметр? Параметр может быть задан или нет, а запрос выполняется!

Bell
01.07.2015 17:21Ответ № 6

(3) Да

IBReiter
01.07.2015 17:26Ответ № 7

Нужно заменить " =Номенклатура" на " В (&Номенклатура)".

В параметрНоменклатура передавайте список.

Bell
01.07.2015 17:40Ответ № 8

(3)Как у УФ через КомпоновщикНастроек.ОТБОР. А с обычными формами давно не сталкивался и в интернете ничего не нашел

Bell
01.07.2015 17:42Ответ № 9

ГДе заменть в параметрах. Если можно в контексте запроса.

Bell
01.07.2015 17:52Ответ № 10

Так не работает Виртуальные параметры

| РегистрНакопления.ТоварыНаСкладах.Остатки( | &НачалоПериода, | Склад =Склад | И ВЫБОР | КОГДАНоменклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) | ТОГДА ИСТИНА | ИНАЧЕ Номенклатура В (&Номенклатура) /// ???? | КОНЕЦ) КАК ТоварыНаСкладахОстатки

Bell
02.07.2015 09:15Ответ № 11

AAAAA.zipВысылаю (шаблон )внешний отчет. Розница 1.0

IBReiter
02.07.2015 09:16Ответ № 12

В первое условие запрос у вас не попадает, потому что остатков номенклатуры по пустой ссылке не может быть в регистре. У Вас изначально там было условие "ВЫБОР КОГДАВсеНоменклатура".

А условие " В (&Номенклатура)" работает и на равенство (если параметр - это элемент справочника и Вам нужно проверять "РАВНО") и на вхождение (если это список значений и Вам нужно проверять "В СПИСКЕ"), все зависит от того, какое значение вы в него передадите.

Ниже запрос к моей базе, некоторые поля заменены, т.к. у вас база специфичная, ну а вообще не работать не должно

Код 1C v 8.3
 

"ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Склад                       КАК Склад,
| ТоварыНаСкладахОстатки.Склад.ТипСклада             КАК СкладТипСклада,
| ТоварыНаСкладахОстатки.Номенклатура.Артикул        КАК НоменклатураАртикул,
| ТоварыНаСкладахОстатки.Номенклатура.Код            КАК НоменклатураКод,
| ТоварыНаСкладахОстатки.Номенклатура.Контрагент.ИНН КАК НоменклатураКонтрагентШифр,
| ТоварыНаСкладахОстатки.Номенклатура                КАК Номенклатура,
| ТоварыНаСкладахОстатки.Характеристика              КАК ХарактеристикаНоменклатуры,
| ТоварыНаСкладахОстатки.ВНаличииОстаток             КАК КоличествоОстаток,
| ЦеныНоменклатурыСрезПоследних.Цена                 КАК Цена1го,
| ЦеныНоменклатурыСрезПоследних.Цена                 КАК Цена
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(
| &НачалоПериода,
| Склад =Склад И
| ВЫБОР
| КОГДАВсеНоменклатура ТОГДА ИСТИНА
| ИНАЧЕ Номенклатура В (&Номенклатура)
| КОНЕЦ)                                         КАК ТоварыНаСкладахОстатки
|
|ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НачалоПериода, ) КАК ЦеныНоменклатурыСрезПоследних
| ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
| И ТоварыНаСкладахОстатки.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика"
IBReiter
02.07.2015 09:21Ответ № 13

Посмотрю шаблон чуть позже

EMigachev
02.07.2015 11:22Ответ № 14

Замени

ИНАЧЕ Номенклатура В (&Номенклатура)[/pre]

на

Код 1C v 8.х
 ИНАЧЕ Номенклатура В (&Номенклатура) ИЛИНоменклатура= ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)   
EMigachev
02.07.2015 11:24Ответ № 15

опс, не так написал, кот так:

Код 1C v 8.х
 | КОГДАНоменклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)   
Код 1C v 8.х
         |               ТОГДА ИСТИНА   
Код 1C v 8.х
         |           ИНАЧЕ Номенклатура В (&Номенклатура)   
Код 1C v 8.х
         |       КОНЕЦ   
IBReiter
03.07.2015 10:31Ответ № 16

AAAAA.erf

В форме подправил, там идею увидите.

Переменная "Номенклатура" не совсем понятно откуда берется, вернитесь к старому варианту с параметром "ВидСравнения"

Bell
07.07.2015 12:13Ответ № 17

СПАСИБО. Понял исправил. Заработало

Подсказка: Для выделения Кода используйте (в редакторе).
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.