Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 июн 2021, 03:11

Период с максимальными остатками из регистра накопления

Автор Andrio48, 01 фев 2017, 15:12

0 Пользователей и 1 гость просматривают эту тему.

Andrio48

Здравствуйте, уважаемые авторы данного форума. Столкнулся с определённой задачей:
Имеется регистр накопления (остатки и обороты): измерение товар и ресурс количество.
Необходимо написать запрос, получающий максимальные остатки по всем товарам и период (ДатаНачала и ДатаКонца), за который были эти остатки.
Пробовал разные вариант, использовал Максимум(), Выбрать ПЕРВЫЕ 1, отсортировав предварительно по количеству, потом делал условие с датами, но требуемого результата так и не достиг.
Предполагаю что нужно максимальные остатки с датами или регистратором поместить в временную таблицу, а потом как то получить дату следующую операции по товару.
Очень надеюсь на Вашу помощь, хотя бы расписать логику действий, а я уже сам додумаю.
На первый взгляд задача показалась элементарной, но вникнув подробнее запутался.

alex0402

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВЗ.НалогНачальныйОстаток,
ВЗ.Сотрудник,
ВТ.Период
ИЗ
(ВЫБРАТЬ
МАКСИМУМ(ВТ.НалогНачальныйОстаток) КАК НалогНачальныйОстаток,
ВТ.Сотрудник КАК Сотрудник
ИЗ
ВТ КАК ВТ

СГРУППИРОВАТЬ ПО
ВТ.Сотрудник) КАК ВЗ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ КАК ВТ
ПО ВЗ.НалогНачальныйОстаток = ВТ.НалогНачальныйОстаток
И ВЗ.Сотрудник = ВТ.Сотрудник
Спасибо за Сказать спасибо

Andrio48

Цитата: alex0402 от 01 фев 2017, 15:20
ВЫБРАТЬ
ВзаиморасчетыПоНДФЛОстаткиИОбороты.НалогНачальныйОстаток,
ВзаиморасчетыПоНДФЛОстаткиИОбороты.Период,
ВзаиморасчетыПоНДФЛОстаткиИОбороты.Сотрудник
ПОМЕСТИТЬ ВТ
ИЗ
РегистрНакопления.ВзаиморасчетыПоНДФЛ.ОстаткиИОбороты(&Нач, &Кон, День, ДвиженияИГраницыПериода, ) КАК ВзаиморасчетыПоНДФЛОстаткиИОбороты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВЗ.НалогНачальныйОстаток,
ВЗ.Сотрудник,
ВТ.Период
ИЗ
(ВЫБРАТЬ
МАКСИМУМ(ВТ.НалогНачальныйОстаток) КАК НалогНачальныйОстаток,
ВТ.Сотрудник КАК Сотрудник
ИЗ
ВТ КАК ВТ

СГРУППИРОВАТЬ ПО
ВТ.Сотрудник) КАК ВЗ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ КАК ВТ
ПО ВЗ.НалогНачальныйОстаток = ВТ.НалогНачальныйОстаток
И ВЗ.Сотрудник = ВТ.Сотрудник


Да, большой спасибо. Ваш код повторил - получил список товаров с максимальным остатком и датой возникновения этого остатки. Дальше с помощью связей с условием больше присоединяю регистр для получения последующих дат, но получаю все даты, а мне нужна только одна первая. Не подскажите как быть?

alex0402

...
МИНИМУМ(Период)
...
сгруппировать по
все остальные поля
Добавлено: 01 фев 2017, 16:27


И СКАЗАТЬ Спасибо можно ткнуть.
Спасибо за Сказать спасибо

Kironten

соединяйте по условию:

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

вроде как то так.

Andrio48

Цитата: Kironten от 01 фев 2017, 16:30
соединяйте по условию:

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

вроде как то так.

уже пробовал так. Тогда получает все последующие даты, а мне нужна только одна!

Kironten

Цитата: Andrio48 от 01 фев 2017, 16:40
Цитата: Kironten от 01 фев 2017, 16:30
соединяйте по условию:

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

вроде как то так.

уже пробовал так. Тогда получает все последующие даты, а мне нужна только одна!
Значит не так пробовали.
Покажите запрос, как вы сделали.

Andrio48

Цитата: Kironten от 01 фев 2017, 16:44
Цитата: Andrio48 от 01 фев 2017, 16:40
Цитата: Kironten от 01 фев 2017, 16:30
соединяйте по условию:

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

вроде как то так.

уже пробовал так. Тогда получает все последующие даты, а мне нужна только одна!
Значит не так пробовали.
Покажите запрос, как вы сделали.
всё верно, я не использовал функцию "МИНИМУМ". Исправил. Спасибо Вам. И, в завершение, последний вопрос к Вам: как из двух результатов с одинаковым остатком выбрать самый продолжительный? я понимаю что нужно использовать "разность дат" с функцией "максимум", но при этом если я так же вывожу даты, он не может сгруппировать по ним. А если убираю, то всё получается, но я теряю даты.
Заранее большое человеческое спасибо.
Добавлено: 02 фев 2017, 12:09


Всё, задача решена. Большое всем спасибо за помощь!

Теги: запросы скд 

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск