Запрос "ПредыдущаяЗакупочнаяЦена"

1. tosia 16.02.19 14:56 Сейчас в теме
Далион УМ. ПРО. Всех жителей и гостей приветствую. Давайте тряхнем стариной. Запрос задачка. Требуется в документ установки цены поставить дополнительный столбец "закупочная цена предыдущая". В каких событиях обновлять и вставлять значение - это не важно. Важно создать запрос, где по всему списку табличной части мы получим предыдущую стоимость. Я нашел процедуру в глобальном модуле Процедура ЗаполнитьЦену(ОформленияСтрок, СписокНоменклатуры, ИмяКолонкиЦена, КатегорияЦен). Скопировал ее, в наименование добавил слово предыдущая. Чую что клиент с характером и подобные запросы будут в моде. Дабы не лепить частные хочу создать глобальный.
Запрос типовой вижу, но что в него добавить, что бы возвращалась вторая строка, а не первая или не не две пока не могу придумать. В голову приходит "выбрать первые 2".... Помогайте
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. independ 1520 16.02.19 17:32 Сейчас в теме
(1) вот простой пример, цены берутся из документов поступления
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	ПоступлениеТоваровТовары.Номенклатура КАК Номенклатура,
	|	ПоступлениеТоваровТовары.Ссылка.Дата КАК Дата,
	|	ПоступлениеТоваровТовары.Цена КАК Цена
	|ИЗ
	|	Документ.ПоступлениеТоваров.Товары КАК ПоступлениеТоваровТовары
	|ГДЕ
	|	ПоступлениеТоваровТовары.Ссылка.Проведен
	|	И ПоступлениеТоваровТовары.Номенклатура В (&СписокНоменклатуры)
	|
	|УПОРЯДОЧИТЬ ПО
	|	Номенклатура,
	|	Дата УБЫВ
	|ИТОГИ ПО
	|	Номенклатура";
	
	Запрос.УстановитьПараметр("СписокНоменклатуры", Товары.Выгрузить());
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаНоменклатура = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
	Пока ВыборкаНоменклатура.Следующий() Цикл
		ВыборкаДетальныеЗаписи = ВыборкаНоменклатура.Выбрать();
		Сч=1;
		Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
			Если Сч=1 Тогда
				ЦенаПоследнейПоставки=ВыборкаДетальныеЗаписи.Цена;
			ИначеЕсли Сч=2 Тогда
				ЦенаПредПоследнейПоставки=ВыборкаДетальныеЗаписи.Цена;
			Иначе
				Прервать;
			КонецЕсли;
			Сч=Сч+1;
		КонецЦикла;
	КонецЦикла;
Показать
2. tosia 16.02.19 15:01 Сейчас в теме
Запрос.Текст =
"ВЫБРАТЬ
| ПараметрыНоменклатуры.Номенклатура,
| ПараметрыНоменклатуры.Период,
| ПараметрыНоменклатуры.ЦенаЗадаетсяНаХарактеристику
|ПОМЕСТИТЬ ПараметрыНоменклатурыФильтр
|ИЗ
| РегистрСведений.ПараметрыНоменклатуры КАК ПараметрыНоменклатуры
|ГДЕ
| ПараметрыНоменклатуры.Номенклатура В(&СписокНоменклатуры)
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
| ПараметрыНоменклатурыФильтр.Номенклатура,
| МАКСИМУМ(ПараметрыНоменклатурыФильтр.Период) КАК Период
|ПОМЕСТИТЬ ПараметрыНоменклатурыМаксПериод
|ИЗ
| ПараметрыНоменклатурыФильтр КАК ПараметрыНоменклатурыФильтр
|
|СГРУППИРОВАТЬ ПО
| ПараметрыНоменклатурыФильтр.Номенклатура
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
| ПараметрыНоменклатурыФильтр.Период,
| ПараметрыНоменклатурыФильтр.Номенклатура,
| ПараметрыНоменклатурыФильтр.ЦенаЗадаетсяНаХарактеристику
|ПОМЕСТИТЬ ПараметрыНоменклатуры
|ИЗ
| ПараметрыНоменклатурыФильтр КАК ПараметрыНоменклатурыФильтр
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПараметрыНоменклатурыМаксПериод КАК ПараметрыНоменклатурыМаксПериод
| ПО ПараметрыНоменклатурыФильтр.Номенклатура = ПараметрыНоменклатурыМаксПериод.Номенклатура
| И ПараметрыНоменклатурыФильтр.Период = ПараметрыНоменклатурыМаксПериод.Период
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
| ЦеныНоменклатуры.Период,
| ЦеныНоменклатуры.Номенклатура,
| ЦеныНоменклатуры.Цена
|ПОМЕСТИТЬ ТаблицаЦенФильтр
|ИЗ
| РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
|ГДЕ
| ЦеныНоменклатуры.Номенклатура В(&СписокНоменклатуры)
| И ЦеныНоменклатуры.ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
| И ЦеныНоменклатуры.КатегорияЦен = &КатегорияЦен
| И ЦеныНоменклатуры.Активность
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
| ТаблицаЦенФильтр.Номенклатура,
| МАКСИМУМ(ТаблицаЦенФильтр.Период) КАК Период
|ПОМЕСТИТЬ ТаблицаЦенМаксПериод
|ИЗ
| ТаблицаЦенФильтр КАК ТаблицаЦенФильтр
|
|СГРУППИРОВАТЬ ПО
| ТаблицаЦенФильтр.Номенклатура
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
| ТаблицаЦенФильтр.Номенклатура,
| ТаблицаЦенФильтр.Цена,
| ТаблицаЦенФильтр.Период
|ПОМЕСТИТЬ ТаблицаЦенСрезПоследних
|ИЗ
| ТаблицаЦенФильтр КАК ТаблицаЦенФильтр
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаЦенМаксПериод КАК ТаблицаЦенМаксПериод
| ПО ТаблицаЦенФильтр.Номенклатура = ТаблицаЦенМаксПериод.Номенклатура
| И ТаблицаЦенФильтр.Период = ТаблицаЦенМаксПериод.Период
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
| ТаблицаЦенСрезПоследних.Номенклатура КАК Номенклатура,
| ТаблицаЦенСрезПоследних.Цена КАК Цена,
| ТаблицаЦенСрезПоследних.Период КАК ПериодЦена,
| ЕСТЬNULL(ПараметрыНоменклатуры.ЦенаЗадаетсяНаХарактеристику, ЛОЖЬ) КАК ЦенаЗадаетсяНаХарактеристику,
| ЕСТЬNULL(ПараметрыНоменклатуры.Период, ДАТАВРЕМЯ(1980, 1, 1)) КАК ПериодЦенаЗадаетсяНаХарактеристику,
| ТаблицаЦенСрезПоследних.Номенклатура.ОбязательноеЗаполнениеХарактеристикиНоменклатуры КАК ОбязательноеЗаполнениеХарактеристикиНоменклатуры
|ИЗ
| ТаблицаЦенСрезПоследних КАК ТаблицаЦенСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ ПараметрыНоменклатуры КАК ПараметрыНоменклатуры
| ПО ТаблицаЦенСрезПоследних.Номенклатура = ПараметрыНоменклатуры.Номенклатура";
3. alxarz 31 16.02.19 16:32 Сейчас в теме
тут и по шагам и с объяснениями...
https://infostart.ru/public/185506/
5. pm74 199 18.02.19 13:40 Сейчас в теме
Топ 2 вернёт 2 строки , вам же не это нужно .
Оставьте свое сообщение

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