База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как в запросе 1С получить регистратор с максимальным периодом?
- В этой теме 1 ответ, 2 участника, последнее обновление 58 секунд назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
9 сентября 2026 в 15:06 #38624
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КАК Период
ПОМЕСТИТЬ ВТ_ТабДат
ИЗ
(ВЫБРАТЬ
0 КАК aОБЪЕДИНИТЬ
ВЫБРАТЬ
1ОБЪЕДИНИТЬ
ВЫБРАТЬ
2ОБЪЕДИНИТЬ
ВЫБРАТЬ
3ОБЪЕДИНИТЬ
ВЫБРАТЬ
4ОБЪЕДИНИТЬ
ВЫБРАТЬ
5ОБЪЕДИНИТЬ
ВЫБРАТЬ
6ОБЪЕДИНИТЬ
ВЫБРАТЬ
7ОБЪЕДИНИТЬ
ВЫБРАТЬ
8ОБЪЕДИНИТЬ
ВЫБРАТЬ
9) КАК aa
ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
0 КАК bОБЪЕДИНИТЬ
ВЫБРАТЬ
1ОБЪЕДИНИТЬ
ВЫБРАТЬ
2ОБЪЕДИНИТЬ
ВЫБРАТЬ
3ОБЪЕДИНИТЬ
ВЫБРАТЬ
4ОБЪЕДИНИТЬ
ВЫБРАТЬ
5ОБЪЕДИНИТЬ
ВЫБРАТЬ
6ОБЪЕДИНИТЬ
ВЫБРАТЬ
7ОБЪЕДИНИТЬ
ВЫБРАТЬ
8ОБЪЕДИНИТЬ
ВЫБРАТЬ
9) КАК bb
ПО (ИСТИНА)
ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
0 КАК cОБЪЕДИНИТЬ
ВЫБРАТЬ
1ОБЪЕДИНИТЬ
ВЫБРАТЬ
2ОБЪЕДИНИТЬ
ВЫБРАТЬ
3ОБЪЕДИНИТЬ
ВЫБРАТЬ
4ОБЪЕДИНИТЬ
ВЫБРАТЬ
5ОБЪЕДИНИТЬ
ВЫБРАТЬ
6ОБЪЕДИНИТЬ
ВЫБРАТЬ
7ОБЪЕДИНИТЬ
ВЫБРАТЬ
8ОБЪЕДИНИТЬ
ВЫБРАТЬ
9) КАК cc
ПО (ИСТИНА)
ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
0 КАК dОБЪЕДИНИТЬ
ВЫБРАТЬ
1ОБЪЕДИНИТЬ
ВЫБРАТЬ
2ОБЪЕДИНИТЬ
ВЫБРАТЬ
3ОБЪЕДИНИТЬ
ВЫБРАТЬ
4ОБЪЕДИНИТЬ
ВЫБРАТЬ
5ОБЪЕДИНИТЬ
ВЫБРАТЬ
6ОБЪЕДИНИТЬ
ВЫБРАТЬ
7ОБЪЕДИНИТЬ
ВЫБРАТЬ
8ОБЪЕДИНИТЬ
ВЫБРАТЬ
9) КАК dd
ПО (ИСТИНА)
ГДЕ
aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
;////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Номенклатура.Ссылка КАК Номенклатура
ПОМЕСТИТЬ ВТ_ТабТоваров
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
НЕ Номенклатура.ЭтоГруппа
И НЕ Номенклатура.ПометкаУдаления
И Номенклатура.ВидНоменклатуры.Наименование ПОДОБНО «%Товар%»
И Номенклатура.Ссылка В ИЕРАРХИИ(&ПарамОтборТовар)
;////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_ТабДат.Период,
ВТ_ТабТоваров.Номенклатура
ПОМЕСТИТЬ ВТ_ТабДатТоваров
ИЗ
ВТ_ТабДат КАК ВТ_ТабДат,
ВТ_ТабТоваров КАК ВТ_ТабТоваров
;////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_ТабДатТоваров.Номенклатура,
ВТ_ТабДатТоваров.Период,
МАКСИМУМ(ОстаткиТоваровОстаткиИОбороты.Период) КАК ПериодРегистра
ПОМЕСТИТЬ ВТ_ТабМаксимальныхПериодов
ИЗ
ВТ_ТабДатТоваров КАК ВТ_ТабДатТоваров
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , ) КАК ОстаткиТоваровОстаткиИОбороты
ПО ВТ_ТабДатТоваров.Номенклатура = ОстаткиТоваровОстаткиИОбороты.Номенклатура
И ВТ_ТабДатТоваров.Период >= ОстаткиТоваровОстаткиИОбороты.ПериодСГРУППИРОВАТЬ ПО
ВТ_ТабДатТоваров.Номенклатура,
ВТ_ТабДатТоваров.Период
;////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
ВТ_ТабМаксимальныхПериодов.Номенклатура,
ВТ_ТабМаксимальныхПериодов.Период КАК Период,
ОстаткиТоваровОстаткиИОбороты.КоличествоКонечныйОстаток КАК Остатки
ИЗ
ВТ_ТабМаксимальныхПериодов КАК ВТ_ТабМаксимальныхПериодов
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , ) КАК ОстаткиТоваровОстаткиИОбороты
ПО ВТ_ТабМаксимальныхПериодов.ПериодРегистра = ОстаткиТоваровОстаткиИОбороты.Период
И ВТ_ТабМаксимальныхПериодов.Номенклатура = ОстаткиТоваровОстаткиИОбороты.Номенклатура
ГДЕ
НЕ ОстаткиТоваровОстаткиИОбороты.КоличествоКонечныйОстаток ЕСТЬ NULL
И НЕ ОстаткиТоваровОстаткиИОбороты.КоличествоКонечныйОстаток = 0УПОРЯДОЧИТЬ ПО
ПериодКак в этом запросе также получить регистратор?
-
9 сентября 2026 в 15:06 #38625
В вашем запросе регистратор хранится в регистре накопления
ТоварыНаСкладах.ОстаткиИОбороты, но в итоговой выборке вы его не выбираете.Чтобы получить регистратор, нужно:
1. В последнем большом запросе добавить поле
Регистраториз регистра в список выбираемых полей.2. В запросе с группировкой (где вы берёте максимум периода) регистратор не выбирается, так как там агрегирование по Номенклатуре и Периоду. Чтобы получить регистратор, нужно изменить логику — например, выбрать максимальный период и связанный с ним регистратор.
Практическое решение:
— В запросе с группировкой по максимальному периоду (
ВТ_ТабМаксимальныхПериодов) оставьте как есть.— В итоговом запросе добавьте
Регистраториз регистра:|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВТ_ТабМаксимальныхПериодов.Номенклатура,
| ВТ_ТабМаксимальныхПериодов.Период КАК Период,
| ОстаткиТоваровОстаткиИОбороты.КоличествоКонечныйОстаток КАК Остатки,
| ОстаткиТоваровОстаткиИОбороты.Регистратор КАК Регистратор
|ИЗ
| ВТ_ТабМаксимальныхПериодов КАК ВТ_ТабМаксимальныхПериодов
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , ) КАК ОстаткиТоваровОстаткиИОбороты
| ПО ВТ_ТабМаксимальныхПериодов.ПериодРегистра = ОстаткиТоваровОстаткиИОбороты.Период
| И ВТ_ТабМаксимальныхПериодов.Номенклатура = ОстаткиТоваровОстаткиИОбороты.Номенклатура
|ГДЕ
| НЕ ОстаткиТоваровОстаткиИОбороты.КоличествоКонечныйОстаток ЕСТЬ NULL
| И НЕ ОстаткиТоваровОстаткиИОбороты.КоличествоКонечныйОстаток = 0
|УПОРЯДОЧИТЬ ПО
| Период—
Если хотите получить регистратор в запросе с максимальным периодом, то нужно использовать подзапрос или дополнительный прием, например:
— Вместо
МАКСИМУМ(Период)выбрать максимальный период и регистратор, связанный с этим периодом.— В 1С запросах это можно сделать через вложенный запрос с фильтром по максимальному периоду.
Пример для получения регистратора с максимальным периодом:
|ВЫБРАТЬ
| ВТ_ТабДатТоваров.Номенклатура,
| ВТ_ТабДатТоваров.Период,
| ОстаткиТоваровОстаткиИОбороты.Регистратор
|ИЗ
| ВТ_ТабДатТоваров КАК ВТ_ТабДатТоваров
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , ) КАК ОстаткиТоваровОстаткиИОбороты
| ПО ВТ_ТабДатТоваров.Номенклатура = ОстаткиТоваровОстаткиИОбороты.Номенклатура
| И ВТ_ТабДатТоваров.Период = ОстаткиТоваровОстаткиИОбороты.Период
|ГДЕ
| ОстаткиТоваровОстаткиИОбороты.Период = (
| ВЫБРАТЬ МАКСИМУМ(Период)
| ИЗ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты
| ГДЕ Номенклатура = ВТ_ТабДатТоваров.Номенклатура
| И Период <= ВТ_ТабДатТоваров.Период
| )—
Если нужна помощь с конкретным примером — могу помочь написать запрос под ваши данные.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.