Срез предпоследних

1. user645801_yyyuuu123q 16.04.20 06:18 Сейчас в теме
Здравствуйте ребята, хочу получить предпоследнее значение в регистре сведений.
Вроде все как по учебнику но на деле не получает то что Я хочу.


ВЫБРАТЬ
	НаливПродуктаНовСрезПоследних.Грязь КАК ГрязьПоследняя,
	НаливПродуктаНовСрезПоследних.Грузополучатель,
	НаливПродуктаНовСрезПоследних.Период,
	НаливПродуктаНовСрезПоследних.Вагон КАК Вагон,
	НаливПродуктаНов.Грязь,
	МАКСИМУМ(НаливПродуктаНов.Регистратор.Дата) КАК РегистраторСсылка
ИЗ
	РегистрСведений.НаливПродуктаНов.СрезПоследних(&ДатаОтчета, Вагон.СобственникОКПО = 58300903) КАК НаливПродуктаНовСрезПоследних
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаливПродуктаНов КАК НаливПродуктаНов
		ПО НаливПродуктаНовСрезПоследних.Вагон = НаливПродуктаНов.Вагон
			И НаливПродуктаНовСрезПоследних.Период <> НаливПродуктаНов.Период

СГРУППИРОВАТЬ ПО
	НаливПродуктаНов.Период,
	НаливПродуктаНовСрезПоследних.Грязь,
	НаливПродуктаНовСрезПоследних.Грузополучатель,
	НаливПродуктаНовСрезПоследних.Вагон,
	НаливПродуктаНовСрезПоследних.Период,
	НаливПродуктаНов.Грязь

УПОРЯДОЧИТЬ ПО
	Вагон
Показать


Подставляет вообще все что вагоны что есть а не предпоследний.
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
7. ab_initio 95 16.04.20 09:00 Сейчас в теме
Попробуйте так:


ВЫБРАТЬ
    НаливПродуктаНовСрезПоследних.Период,
    НаливПродуктаНовСрезПоследних.Вагон,
    НаливПродуктаНовСрезПоследних.Грязь,
    НаливПродуктаНовСрезПоследних.Грузополучатель
ПОМЕСТИТЬ втПоследняя
ИЗ
    РегистрСведений.НаливПродуктаНов.СрезПоследних(, Вагон=&ОдинКонкретныйВагон) КАК НаливПродуктаНовСрезПоследних
;

////////////////////////////////////////////////////////////­­////////////////////
ВЫБРАТЬ
    МАКСИМУМ(НаливПродуктаНов.Период) КАК Период,
    НаливПродуктаНов.Вагон
ПОМЕСТИТЬ втПредпоследняя
ИЗ
    РегистрСведений.НаливПродуктаНов КАК НаливПродуктаНов
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ втПоследняя КАК втПоследняя
        ПО НаливПродуктаНов.Вагон = втПоследняя.Вагон
            И НаливПродуктаНов.Период < втПоследняя.Период

СГРУППИРОВАТЬ ПО
    НаливПродуктаНов.Вагон
;

////////////////////////////////////////////////////////////­­////////////////////
ВЫБРАТЬ
    НаливПродуктаНов.Период,
    НаливПродуктаНов.Грузополучатель,
    НаливПродуктаНов.Грязь,
    НаливПродуктаНов.Вагон
ИЗ
    втПредпоследняя КАК втПредпоследняя
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаливПродуктаНов КАК НаливПродуктаНов
        ПО втПредпоследняя.Период = НаливПродуктаНов.Период
            И втПредпоследняя.Вагон = НаливПродуктаНов.Вагон

Показать



По одному конкретному вагону в целях отладки надо попробовать.
Если не получается, то надо смотреть что второй запрос из пакета возвращает.
user645801_yyyuuu123q; +1 Ответить
Остальные ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. ab_initio 95 16.04.20 07:36 Сейчас в теме
Подход немножко не верный в использовании агрегатной функции МАКСИМУМ. Оно так не найти предпоследнее значение.
Но задача чертовски интересная.
Посмотрите вот такой пример нахождения предпоследнего значения цены. Это 100% работает на УТ-11. И можно принцип применить для Ваших вагонов:

ВЫБРАТЬ
	ЦеныНоменклатурыСрезПоследних.Период КАК Период,
	ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ втПоследняяЦена
ИЗ
	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
			&НаДату,
			Номенклатура = &Номенклатура
				И ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период,
	ЦеныНоменклатуры.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ втПредпоследняяЦена
ИЗ
	РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ втПоследняяЦена КАК втПоследняяЦена
		ПО ЦеныНоменклатуры.Номенклатура = втПоследняяЦена.Номенклатура
			И ЦеныНоменклатуры.Период < втПоследняяЦена.Период

СГРУППИРОВАТЬ ПО
	ЦеныНоменклатуры.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ЦеныНоменклатуры.Период КАК Период,
	ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
	ЦеныНоменклатуры.Цена КАК Цена
ИЗ
	РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ втПредпоследняяЦена КАК втПредпоследняяЦена
		ПО (втПредпоследняяЦена.Период = ЦеныНоменклатуры.Период
				И втПредпоследняяЦена.Номенклатура = ЦеныНоменклатуры.Номенклатура)
Показать
3. user645801_yyyuuu123q 16.04.20 07:58 Сейчас в теме
ВЫБРАТЬ
	НаливПродуктаНовСрезПоследних.Период,
	НаливПродуктаНовСрезПоследних.Вагон,
	НаливПродуктаНовСрезПоследних.Грязь,
	НаливПродуктаНовСрезПоследних.Грузополучатель
ПОМЕСТИТЬ втПоследняя
ИЗ
	РегистрСведений.НаливПродуктаНов.СрезПоследних(, Вагон.СобственникОКПО = 30006903) КАК НаливПродуктаНовСрезПоследних
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	МАКСИМУМ(НаливПродуктаНов.Период) КАК Период,
	НаливПродуктаНов.Вагон,
	НаливПродуктаНов.Грузополучатель,
	НаливПродуктаНов.Грязь
ПОМЕСТИТЬ втПредпоследняя
ИЗ
	РегистрСведений.НаливПродуктаНов КАК НаливПродуктаНов
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ втПоследняя КАК втПоследняя
		ПО НаливПродуктаНов.Вагон = втПоследняя.Вагон
			И НаливПродуктаНов.Период < втПоследняя.Период

СГРУППИРОВАТЬ ПО
	НаливПродуктаНов.Вагон,
	НаливПродуктаНов.Грузополучатель,
	НаливПродуктаНов.Грязь
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	НаливПродуктаНов.Период,
	НаливПродуктаНов.Грузополучатель,
	НаливПродуктаНов.Грязь,
	НаливПродуктаНов.Вагон
ИЗ
	втПредпоследняя КАК втПредпоследняя
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаливПродуктаНов КАК НаливПродуктаНов
		ПО втПредпоследняя.Период = НаливПродуктаНов.Период
			И втПредпоследняя.Вагон = НаливПродуктаНов.Вагон
Показать


Все как по примеру а все ровно, вместо 1436 вагонов Более 6000
4. user645801_yyyuuu123q 16.04.20 08:03 Сейчас в теме
Максимум как то не так отрабатывает. Даже если просто максимум выбрать он Мне не покажет предпоследнюю запись.
5. ab_initio 95 16.04.20 08:44 Сейчас в теме
Структуру регистра приведите, пжл, что является измерением, что ресурсом, что реквизитом. Иначе не понятно совсем как запрос о вагонах поправить.
6. user645801_yyyuuu123q 16.04.20 08:47 Сейчас в теме
(5)Измеренем является только вагон
Все остальное ресурсы
7. ab_initio 95 16.04.20 09:00 Сейчас в теме
Попробуйте так:


ВЫБРАТЬ
    НаливПродуктаНовСрезПоследних.Период,
    НаливПродуктаНовСрезПоследних.Вагон,
    НаливПродуктаНовСрезПоследних.Грязь,
    НаливПродуктаНовСрезПоследних.Грузополучатель
ПОМЕСТИТЬ втПоследняя
ИЗ
    РегистрСведений.НаливПродуктаНов.СрезПоследних(, Вагон=&ОдинКонкретныйВагон) КАК НаливПродуктаНовСрезПоследних
;

////////////////////////////////////////////////////////////­­////////////////////
ВЫБРАТЬ
    МАКСИМУМ(НаливПродуктаНов.Период) КАК Период,
    НаливПродуктаНов.Вагон
ПОМЕСТИТЬ втПредпоследняя
ИЗ
    РегистрСведений.НаливПродуктаНов КАК НаливПродуктаНов
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ втПоследняя КАК втПоследняя
        ПО НаливПродуктаНов.Вагон = втПоследняя.Вагон
            И НаливПродуктаНов.Период < втПоследняя.Период

СГРУППИРОВАТЬ ПО
    НаливПродуктаНов.Вагон
;

////////////////////////////////////////////////////////////­­////////////////////
ВЫБРАТЬ
    НаливПродуктаНов.Период,
    НаливПродуктаНов.Грузополучатель,
    НаливПродуктаНов.Грязь,
    НаливПродуктаНов.Вагон
ИЗ
    втПредпоследняя КАК втПредпоследняя
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаливПродуктаНов КАК НаливПродуктаНов
        ПО втПредпоследняя.Период = НаливПродуктаНов.Период
            И втПредпоследняя.Вагон = НаливПродуктаНов.Вагон

Показать



По одному конкретному вагону в целях отладки надо попробовать.
Если не получается, то надо смотреть что второй запрос из пакета возвращает.
user645801_yyyuuu123q; +1 Ответить
8. user645801_yyyuuu123q 16.04.20 09:07 Сейчас в теме
ПО
(7)
ВЫБРАТЬ
НаливПродуктаНовСрезПоследних.Период,
НаливПродуктаНовСрезПоследних.Вагон,
НаливПродуктаНовСрезПоследних.Грязь,
НаливПродуктаНовСрезПоследних.Грузополучатель
ПОМЕСТИТЬ втПоследняя
ИЗ
РегистрСведений.НаливПродуктаНов.СрезПоследних(, Вагон=&ОдинКонкретныйВагон) КАК НаливПродуктаНовСрезПоследних
;

////////////////////////////////////////////////////////////­­­////////////////////
ВЫБРАТЬ
МАКСИМУМ(НаливПродуктаНов.Период) КАК Период,
НаливПродуктаНов.Вагон
ПОМЕСТИТЬ втПредпоследняя
ИЗ
РегистрСведений.НаливПродуктаНов КАК НаливПродуктаНов
ВНУТРЕННЕЕ СОЕДИНЕНИЕ втПоследняя КАК втПоследняя
ПО НаливПродуктаНов.Вагон = втПоследняя.Вагон
И НаливПродуктаНов.Период < втПоследняя.Период

СГРУППИРОВАТЬ ПО
НаливПродуктаНов.Вагон
;

////////////////////////////////////////////////////////////­­­////////////////////
ВЫБРАТЬ
НаливПродуктаНов.Период,
НаливПродуктаНов.Грузополучатель,
НаливПродуктаНов.Грязь,
НаливПродуктаНов.Вагон
ИЗ
втПредпоследняя КАК втПредпоследняя
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НаливПродуктаНов КАК НаливПродуктаНов
ПО втПредпоследняя.Период = НаливПродуктаНов.Период
И втПредпоследняя.Вагон = НаливПродуктаНов.Вагон
Показать

По одному вагону сработало очень даже хорошо, все как и должно быть
9. user645801_yyyuuu123q 16.04.20 09:21 Сейчас в теме
Вроде бы все заработало, а что собственно у Меня было не так?
11. ab_initio 95 16.04.20 10:08 Сейчас в теме
(9)
а что собственно у Меня было не так?

Скорее всего это условие:
Вагон.СобственникОКПО = 58300903
.
Это значит, что несколько вагонов.
user645801_yyyuuu123q; +1 Ответить
12. user645801_yyyuuu123q 17.04.20 01:40 Сейчас в теме
(11) Это условие Я понимию что делает. Но Мне и надо несколько вагонов
10. user645801_yyyuuu123q 16.04.20 09:39 Сейчас в теме
Еще по тестирую, и завтра уже напишу окончательный ответ о правильности работы. Спасибо что помогли
Оставьте свое сообщение

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