Доброго времени суток знатоки.
Платформа 1С:Предприятие 8.3 (8.3.9.1850)
Конфигурация : УТ 2.3.25.1
Внешняя обработка( условно прайс) . Должна выбирать товар на складах ,цены и т.д.
С этим вроде проблем нет, но на форме есть до 6 фильтров. Городить огород с условиями не хотелось. По уму вычитал что использовать
выбор когда .
roman457 @ Сегодня, 17:17
,
Нужна конкретика. Ну а если в общем и целом, то стройте на скд.
Спасибо пойду курить СКД видимо пришло время .
roman457 @ Сегодня, 17:17
,
Вообщем-то соглашусь с предыдущим постом, конкретнее скажите что вы делаете, на чем отчет пишите.
Если вы в ручную выполняете запрос и выводите результат на форму, то тогда либо делать это все с помощью Построителя либо динамически формировать текст запроса, например так:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Реализация.Ссылка КАК Док,
| Реализация.Контрагент КАК Контрагент,
| Реализация.ДоговорКонтрагента КАК ДоговорКонтрагента
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Реализация
|ГДЕ
| Реализация.Проведен = ИСТИНА
| "+?(ЗначениеЗаполнено(КонтрагентФильтр), "И Реализация.Контрагент = &Контрагент", "")+"
| "+?(ЗначениеЗаполнено(ДоговорФильтр), "И Реализация.ДоговорКонтрагента = &Договор", "")+"
|"
| "+?(ЗначениеЗаполнено(КонтрагентФильтр), "И Реализация.Контрагент = &Контрагент", "")+"
| "+?(ЗначениеЗаполнено(ДоговорФильтр), "И Реализация.ДоговорКонтрагента = &Договор", "")+"
Ну-ну. Такой запрос уже не откроете в конструкторе запроса. А если запрос составной, и кучей условий, то можно идти за веревкой с мылом...
Поэтому я применяю чутка другой подход.
ТекстЗапроса =
"ВЫБРАТЬ
| ДоговорыКонтрагентов.Ссылка
|ИЗ
| Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
|ГДЕ
| &УсловиеКонтрагент";
Если ЗначениеЗаполнено(ЭтотОбъект.ОтборКонтрагент) Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"&УсловиеКонтрагент","ДоговорыКонтрагентов.Владелец = &Контрагент");
Запрос.УстановитьПараметр("Контрагент", ЭтотОбъект.ОтборКонтрагент);
Иначе
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"&УсловиеКонтрагент","Истина");
КонецЕсли; // ЗначениеЗаполнено(ЭтотОбъект.ОтборОрганизация)
Santino @ 19.07.17, 17:39
,
Спасибо за Предложение. Идея конструктора и предложения у меня открылось как говорится второе дыхание , а если по сути то заказчик вспомнил что он по дороге жизни хочет ещё пару условий.
Решил использовать метод , но что-то в синтаксисе упускаю ??
Запрос = Новый Запрос;
ТекстЗапроса =
"ВЫБРАТЬ
| ТоварыНаСкладахОстаткиИОбороты.Склад,
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
| ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК Кво,
| ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура1,
| ЦеныНоменклатурыСрезПоследних.ТипЦен,
| ЦеныНоменклатурыСрезПоследних.Валюта,
| ЦеныНоменклатурыСрезПоследних.Цена,
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Родитель КАК Категории,
| ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения,
| ЦеныНоменклатурыСрезПоследних.СпособРасчетаЦены
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, &ТекДата, , ДвиженияИГраницыПериода, ) КАК ТоварыНаСкладахОстаткиИОбороты
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
| ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
|ГДЕ
| &УСловиеСоставное";
//| И ЦеныНоменклатурыСрезПоследних.Цена МЕЖДУ &СуммаС И &СУммаПо";
Запрос.УстановитьПараметр("ТекДата", Дата(ТекущаяДата()));
Если ЗначениеЗаполнено(СуммаС)Или ЗначениеЗаполнено(СуммаПо) Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"&УсловиеСоставное","ЦеныНоменклатурыСрезПоследних.Цена МЕЖДУ &СуммаС И &СУммаПо");
Запрос.УстановитьПараметр("СуммаС", Строка(Элементыформы.Суммас.Значение));
Запрос.УстановитьПараметр("СуммаПо", Строка(Элементыформы.СуммаПо.Значение));
Иначе
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"&УсловиеСоставное","Истина");
КонецЕсли;
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
ф = Запрос.Выполнить().Выгрузить();
...
"ВЫБРАТЬ
| ТоварыНаСкладахОстаткиИОбороты.Склад,
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
| ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК Кво,
| ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура1,
| ЦеныНоменклатурыСрезПоследних.ТипЦен,
| ЦеныНоменклатурыСрезПоследних.Валюта,
| ЦеныНоменклатурыСрезПоследних.Цена,
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Родитель КАК Категории,
| ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения,
| ЦеныНоменклатурыСрезПоследних.СпособРасчетаЦены
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, &ТекДата, , ДвиженияИГраницыПериода, ) КАК ТоварыНаСкладахОстаткиИОбороты
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ТекДата, &УСловиеСоставное ) КАК ЦеныНоменклатурыСрезПоследних
| ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
//|ГДЕ
//| &УСловиеСоставное
|";
...
Flexy @ Сегодня, 15:04
,
Увы но комментировать нельзя нужен результат по условиям с текстом автора. в ответе выше моего . спасибо .
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ТекДата, &УСловиеСоставное )
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua