Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
06 окт 2024, 10:25

Группировка по нескольким дням СКД

Автор kinflay, 30 сен 2024, 14:52

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

kinflay

В отчете при группировке по периоду (неожиданно) - данные выводятся за каждый день. Пытаюсь понять как сделать так, что бы столбец был сгруппирован по 7 дней (в случае с примером на скриншоте - 14.08.24 - 29.08.24), а если промежуток 28 дней - 4 таких группировки. Если бы недели были календарные, проблем бы не было, но тут неделя - промежуток между началом и концом периода. Понимаю что скорее всего это сопливая проблема, но сижу уже второй день))
Снимок экрана 2024-09-30 144949.png

 

Максим75

kinflay, скорее всего у Вас в параметрах виртуальной таблицы периодичность стоит Авто и выбраны периоды за день. Выберите за неделю, будет выводиться свернутый за неделю.

ну хотя бы приведите текст запроса.

kinflay

Периодичность стоит день. Если поставлю Неделю - группировка будет по календарной неделе, это не корректно. Отчет формируется в среду за 28 дней, и нужна группировка на каждые 7 дней в периоде

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

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

СГРУППИРОВАТЬ ПО
ПартииПоСкладам.Номенклатура,
ПартииПоСкладам.Период,
ПартииПоСкладам.Склад) КАК РегПартии
ПО ТабПродажи.Склад = РегПартии.Склад
И ТабПродажи.Номенклатура = РегПартии.Номенклатура
И (НАЧАЛОПЕРИОДА(ТабПродажи.Период, ДЕНЬ) = РегПартии.ДатаСписания)

СГРУППИРОВАТЬ ПО
ТабПродажи.Покупатель,
ТабПродажи.Номенклатура,
ТабПродажи.Склад,
ТабПродажи.Подразделение,
ТабПродажи.Период,
ТабПродажи.ЗаказПокупателя.Ссылка,
ТабПродажи.НачалоПериода,
ТабПродажи.КонецПериода

Максим75

kinflay, Вам при решении задачи необходимо будет период (т.е. дату) преобразовать в неделю, т.е. с 1 числа по 7 включительно будет неделя 1, с 8 по 14 неделя 2 и т.д.
т.е. Вы заводите еще одно поле и через Выбор присваиваете значение 1, 2, 3, или 5 (ну если кусок пятой недели)

используйте функцию День
Функция День
ДЕНЬ(<Дата>)
Принимает параметр типа ДАТА. Возвращает номер дня в месяце (целочисленное значение от 1 до 31).

и вот проверяйте какой день по счету.
потом уже можете сгруппировать по номеру недели.

kinflay

Не совсем понял идею. Я создам поле Неделя(период), у меня будет номер недели в году.
Далее мне нужно через выбор что конкретно сделать? Головой понимаю что отобрать от меньшего к большему неделю и пронумировать, но не пойму как
И в этом случае есть ли мне смысл проверять какой день по счету?

Максим75

kinflay, где у меня написано за Неделя(период).
я писал за День(период).
вначале Вы всем периодам определяете какой это день по счету (1,3,4,10,22 и т.д.).
потом для каждого дня проверяете в какую "вилку" он попадает с помощью конструкции Выбор
если больше или равно 1 и меньше или равно 7 тогда
1
иначеЕсли .... и все это кино пишете в поле с неделей.

таким образом каждому периоду будет назначена неделя.
а потом уже сгруппируете по этому полю с неделей.

Теги:

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

Рейтинг@Mail.ru

Поиск