Помогите с динамическим запросом для формы подбора номенклатуры в УНФ

1. igorK 23 24.01.17 10:34 Сейчас в теме
Есть форма подбора товаров в реализацию. Добавил у договоров уточнение цен по группам товаров. Что бы у клиента на определенную группу товаров вставал свой вид цен. И ни как не могу догнать как сделать что бы выводилась правильная цена.

Вот сам запрос:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ВЫБОР
		КОГДА СправочникНоменклатура.ЭтоГруппа
			ТОГДА ВЫБОР
					КОГДА СправочникНоменклатура.ПометкаУдаления
						ТОГДА 13
					ИНАЧЕ 12
				КОНЕЦ
		ИНАЧЕ -1 + ВЫБОР
				КОГДА СправочникНоменклатура.ПометкаУдаления
					ТОГДА 1
				ИНАЧЕ 0
			КОНЕЦ + ВЫБОР
				КОГДА СправочникНоменклатура.ИспользоватьХарактеристики = ЛОЖЬ
					ТОГДА 1
				ИНАЧЕ 3
			КОНЕЦ
	КОНЕЦ КАК ИндексКартинки,
	СправочникНоменклатура.Ссылка КАК НоменклатураСсылка,
	ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК ХарактеристикаСсылка,
	СправочникНоменклатура.Родитель КАК Родитель,
	СправочникНоменклатура.Код КАК Код,
	СправочникНоменклатура.Наименование КАК Наименование,
	СправочникНоменклатура.Артикул КАК Артикул,
	ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения, СправочникНоменклатура.ЕдиницаИзмерения) КАК ЕдиницаИзмерения,
	СправочникНоменклатура.НаправлениеДеятельности КАК НаправлениеДеятельности,
	СправочникНоменклатура.КатегорияНоменклатуры КАК КатегорияНоменклатуры,
	СправочникНоменклатура.Поставщик КАК Поставщик,
	СправочникНоменклатура.Склад КАК Склад,
	СправочникНоменклатура.СпособПополнения КАК СпособПополнения,
	СправочникНоменклатура.СрокПополнения КАК СрокПополнения,
	СправочникНоменклатура.СтавкаНДС КАК СтавкаНДС,
	СправочникНоменклатура.СчетУчетаЗапасов КАК СчетУчетаЗапасов,
	СправочникНоменклатура.СчетУчетаЗатрат КАК СчетУчетаЗатрат,
	СправочникНоменклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	СправочникНоменклатура.Ячейка КАК Ячейка,
	СправочникНоменклатура.ЦеноваяГруппа КАК ЦеноваяГруппа,
	СправочникНоменклатура.ИспользоватьХарактеристики КАК ИспользоватьХарактеристики,
	СправочникНоменклатура.ИспользоватьПартии КАК ИспользоватьПартии,
	СправочникНоменклатура.СтранаПроисхождения КАК СтранаПроисхождения,
	СправочникНоменклатура.Недействителен КАК Недействителен,
	СправочникНоменклатура.Комментарий КАК Описание,
	ЕСТЬNULL(ВЫРАЗИТЬ(ЦеныНоменклатурыСрезПоследних.Цена * (&ВалютаВидаЦенКурс * &ВалютаДокументаКратность) / (&ВалютаДокументаКурс * &ВалютаВидаЦенКратность) КАК ЧИСЛО(15, 2)), 0) КАК Цена,
	ВЫБОР
		КОГДА ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения ССЫЛКА Справочник.ЕдиницыИзмерения
			ТОГДА ЕСТЬNULL(ОстаткиЗапасов.КоличествоОстаток, 0) / ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения.Коэффициент
		ИНАЧЕ ЕСТЬNULL(ОстаткиЗапасов.КоличествоОстаток, 0)
	КОНЕЦ КАК Остаток,
	ВЫБОР
		КОГДА ЕСТЬNULL(РезервыЗапасов.КоличествоОстаток, 0) = 0
			ТОГДА 1
		ИНАЧЕ 0
	КОНЕЦ КАК Резерв,
	ВЫБОР
		КОГДА ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения ССЫЛКА Справочник.ЕдиницыИзмерения
			ТОГДА (ЕСТЬNULL(ОстаткиЗапасов.КоличествоОстаток, 0) - ЕСТЬNULL(РезервыЗапасов.КоличествоОстаток, 0)) / ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения.Коэффициент
		ИНАЧЕ ЕСТЬNULL(ОстаткиЗапасов.КоличествоОстаток, 0) - ЕСТЬNULL(РезервыЗапасов.КоличествоОстаток, 0)
	КОНЕЦ КАК Свободно,
	ВЫБОР
		КОГДА ДоговорыКонтрагентовЦеновыеГруппы.ВидЦен ЕСТЬ НЕ NULL 
			ТОГДА ДоговорыКонтрагентовЦеновыеГруппы.ВидЦен
		ИНАЧЕ &ВидЦен
	КОНЕЦ КАК ВидЦен
ИЗ
	Справочник.Номенклатура КАК СправочникНоменклатура
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
				&ПериодЦен,
				Актуальность
					И ВидЦен = &ВидЦен
					И Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяССылка)) КАК ЦеныНоменклатурыСрезПоследних
		ПО СправочникНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗапасыНаСкладах.Остатки(, Организация = &Организация) КАК ОстаткиЗапасов
		ПО СправочникНоменклатура.Ссылка = ОстаткиЗапасов.Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Запасы.Остатки(
				,
				Организация = &Организация
					И СтруктурнаяЕдиница ССЫЛКА Справочник.СтруктурныеЕдиницы
					И ЗаказПокупателя <> ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяССылка)) КАК РезервыЗапасов
		ПО СправочникНоменклатура.Ссылка = РезервыЗапасов.Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов.ЦеновыеГруппы КАК ДоговорыКонтрагентовЦеновыеГруппы
		ПО СправочникНоменклатура.ЦеноваяГруппа = ДоговорыКонтрагентовЦеновыеГруппы.ЦеноваяГруппа
ГДЕ
	НЕ СправочникНоменклатура.ЭтоГруппа
Показать


Дополнительно сделал колону вид цены и он правильно его выводит а как сделать что бы еще цена правильно считалась по этому виду цены из этого поля ?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
8. zoomzd1234 25.01.17 17:18 Сейчас в теме
(1)
ВЫБРАТЬ
     РегистрСведенийЦеныТоваров.Период,
     РегистрСведенийЦеныТоваров.Товар,
     РегистрСведенийЦеныТоваров.Цена
ИЗ
     РегистрСведений.ЦеныТоваров КАК РегистрСведенийЦеныТоваров
ГДЕ
     РегистрСведенийЦеныТоваров.Товар = &Товар
     И РегистрСведенийЦеныТоваров.Период >= &НачалоПериода
     И РегистрСведенийЦеныТоваров.Период <= &КонецПериода
Показать

Как видно из текста запроса, у запроса есть три параметра: Товар, НачалоПериода и КонецПериода. Для нормального функционирования формы значения этих параметров должны быть заданы при открытии формы, иначе в результате открытия формы будет получена ошибка.

Чтобы передать собственные параметры в форму, желательно создать их в редакторе формы.

Вообще говоря, делать это не обязательно. Любые параметры, переданные в метод ОткрытьФорму(), будут доступны в обработчике события формы При создании на сервере. Но все же лучше создать их у формы в явном виде.
(1)
9. igorK 23 25.01.17 23:47 Сейчас в теме
10. zoomzd1234 26.01.17 06:00 Сейчас в теме
2. SyachinS 24.01.17 15:09 Сейчас в теме
Вид цен указан в параметре виртуальной таблицы ЦеныНоменклатурыСрезПоследних, соответственно выборка происходит по этому виду цен, уберите параметр из виртуальной таблицы и сделайте связь по виду цен с условием:
Выбор Когда ДоговорыКонтрагентовЦеновыеГруппы.ВидЦен = NULL Тогда ЦеныНоменклатурыСрезПоследних.ВидЦен = &ВидЦен
Иначе
ЦеныНоменклатурыСрезПоследних.ВидЦен = ДоговорыКонтрагентовЦеновыеГруппы.ВидЦен
Конец

так я думаю сработает, проверить не на чем, но суть такая.
3. igorK 23 24.01.17 16:56 Сейчас в теме
Оказывается еще не учел что договор то же выбран скажем "&Договор"

Пытался вставить заместо ВидЦен = .........

Тогда ругается что ДоговорыКонтрагентов.ЦеновыеГруппы нет такого.
4. igorK 23 24.01.17 22:36 Сейчас в теме
Подскажите еще чуть чуть осталось, вот что имеем:

ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ВЫБОР
		КОГДА СправочникНоменклатура.ЭтоГруппа
			ТОГДА ВЫБОР
					КОГДА СправочникНоменклатура.ПометкаУдаления
						ТОГДА 13
					ИНАЧЕ 12
				КОНЕЦ
		ИНАЧЕ -1 + ВЫБОР
				КОГДА СправочникНоменклатура.ПометкаУдаления
					ТОГДА 1
				ИНАЧЕ 0
			КОНЕЦ + ВЫБОР
				КОГДА СправочникНоменклатура.ИспользоватьХарактеристики = ЛОЖЬ
					ТОГДА 1
				ИНАЧЕ 3
			КОНЕЦ
	КОНЕЦ КАК ИндексКартинки,
	СправочникНоменклатура.Ссылка КАК НоменклатураСсылка,
	ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК ХарактеристикаСсылка,
	СправочникНоменклатура.Родитель КАК Родитель,
	СправочникНоменклатура.Код КАК Код,
	СправочникНоменклатура.Наименование КАК Наименование,
	СправочникНоменклатура.Артикул КАК Артикул,
	ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения, СправочникНоменклатура.ЕдиницаИзмерения) КАК ЕдиницаИзмерения,
	СправочникНоменклатура.НаправлениеДеятельности КАК НаправлениеДеятельности,
	СправочникНоменклатура.КатегорияНоменклатуры КАК КатегорияНоменклатуры,
	СправочникНоменклатура.Поставщик КАК Поставщик,
	СправочникНоменклатура.Склад КАК Склад,
	СправочникНоменклатура.СпособПополнения КАК СпособПополнения,
	СправочникНоменклатура.СрокПополнения КАК СрокПополнения,
	СправочникНоменклатура.СтавкаНДС КАК СтавкаНДС,
	СправочникНоменклатура.СчетУчетаЗапасов КАК СчетУчетаЗапасов,
	СправочникНоменклатура.СчетУчетаЗатрат КАК СчетУчетаЗатрат,
	СправочникНоменклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	СправочникНоменклатура.Ячейка КАК Ячейка,
	СправочникНоменклатура.ЦеноваяГруппа КАК ЦеноваяГруппа,
	СправочникНоменклатура.ИспользоватьХарактеристики КАК ИспользоватьХарактеристики,
	СправочникНоменклатура.ИспользоватьПартии КАК ИспользоватьПартии,
	СправочникНоменклатура.СтранаПроисхождения КАК СтранаПроисхождения,
	СправочникНоменклатура.Недействителен КАК Недействителен,
	СправочникНоменклатура.Комментарий КАК Описание,
	ЕСТЬNULL(ВЫРАЗИТЬ(ЦеныНоменклатурыСрезПоследних.Цена * (&ВалютаВидаЦенКурс * &ВалютаДокументаКратность) / (&ВалютаДокументаКурс * &ВалютаВидаЦенКратность) КАК ЧИСЛО(15, 2)), 0) КАК Цена,
	ВЫБОР
		КОГДА ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения ССЫЛКА Справочник.ЕдиницыИзмерения
			ТОГДА ЕСТЬNULL(ОстаткиЗапасов.КоличествоОстаток, 0) / ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения.Коэффициент
		ИНАЧЕ ЕСТЬNULL(ОстаткиЗапасов.КоличествоОстаток, 0)
	КОНЕЦ КАК Остаток,
	ВЫБОР
		КОГДА ЕСТЬNULL(РезервыЗапасов.КоличествоОстаток, 0) = 0
			ТОГДА 1
		ИНАЧЕ 0
	КОНЕЦ КАК Резерв,
	ВЫБОР
		КОГДА ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения ССЫЛКА Справочник.ЕдиницыИзмерения
			ТОГДА (ЕСТЬNULL(ОстаткиЗапасов.КоличествоОстаток, 0) - ЕСТЬNULL(РезервыЗапасов.КоличествоОстаток, 0)) / ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения.Коэффициент
		ИНАЧЕ ЕСТЬNULL(ОстаткиЗапасов.КоличествоОстаток, 0) - ЕСТЬNULL(РезервыЗапасов.КоличествоОстаток, 0)
	КОНЕЦ КАК Свободно
//	ВЫБОР
//		КОГДА ДоговорыКонтрагентовЦеновыеГруппы.ВидЦен ЕСТЬ НЕ NULL 
//			ТОГДА ДоговорыКонтрагентовЦеновыеГруппы.ВидЦен
//		ИНАЧЕ &ВидЦен
//	КОНЕЦ КАК ВидЦен	
ИЗ
	Справочник.Номенклатура КАК СправочникНоменклатура
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
				&ПериодЦен,
				Актуальность
					И ВидЦен В 
						(ВЫБРАТЬ 
							ДоговорыКонтрагентовЦеновыеГруппы.ВидЦен
						ИЗ
							Справочник.ДоговорыКонтрагентов.ЦеновыеГруппы КАК ДоговорыКонтрагентовЦеновыеГруппы
						ГДЕ
							ДоговорыКонтрагентовЦеновыеГруппы.Ссылка = &Договор
						)
							
							
					И Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяССылка)) КАК ЦеныНоменклатурыСрезПоследних
		ПО (СправочникНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура)
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗапасыНаСкладах.Остатки(, Организация = &Организация) КАК ОстаткиЗапасов
		ПО (СправочникНоменклатура.Ссылка = ОстаткиЗапасов.Номенклатура)
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Запасы.Остатки(
				,
				Организация = &Организация
					И СтруктурнаяЕдиница ССЫЛКА Справочник.СтруктурныеЕдиницы
					И ЗаказПокупателя <> ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяССылка)) КАК РезервыЗапасов
		ПО (СправочникНоменклатура.Ссылка = РезервыЗапасов.Номенклатура)
ГДЕ
	СправочникНоменклатура.ТипНоменклатуры В (&ТипНоменклатуры)
	И НЕ СправочникНоменклатура.ЭтоГруппа
Показать


Все хорошо уже подставляет цену если в договоре было уточнение цены.
Единственное что он не выводит остальные цена если не указаны в договоре, т.е. основная цена.
5. igorK 23 24.01.17 22:39 Сейчас в теме
Как в этом куске указать если не получили вид цены то подставить мой вид цены предопределенный

Справочник.Номенклатура КАК СправочникНоменклатура
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
				&ПериодЦен,
				Актуальность
					И ВидЦен В 
						(ВЫБРАТЬ 
							ДоговорыКонтрагентовЦеновыеГруппы.ВидЦен
						ИЗ
							Справочник.ДоговорыКонтрагентов.ЦеновыеГруппы КАК ДоговорыКонтрагентовЦеновыеГруппы
						ГДЕ
							ДоговорыКонтрагентовЦеновыеГруппы.Ссылка = &Договор
						)
Показать
6. starjevschik 25.01.17 10:48 Сейчас в теме
(5) примерно так
ВидЦен В
(ВЫБРАТЬ isnull(
ДоговорыКонтрагентовЦеновыеГруппы.ВидЦен, &ПредопределенныйВидЦен) как ВидЦен
ИЗ
Справочник.ДоговорыКонтрагентов.ЦеновыеГруппы КАК ДоговорыКонтрагентовЦеновыеГруппы
ГДЕ
ДоговорыКонтрагентовЦеновыеГруппы.Ссылка = &Договор
) 
7. igorK 23 25.01.17 15:05 Сейчас в теме
(6)

Так пробовал не прокатывает, уже делаю на вложенных запросах.
Оставьте свое сообщение

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