Имя: Пароль:
1C
1С v8
СКД передача данных из одного набора в качестве параметра для другого набора.
0 Vladislava-smile
 
20.07.15
12:37
1-ый набор:


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


2-ой набор:

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

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

Связи: https://dropmefiles.com/rmyVq
Параметры: https://dropmefiles.com/YkPGn

Ошибка:
{Форма.ФормаОтчета.Форма(332)}: Ошибка при вызове метода контекста (Вывести)
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);    
по причине:
Ошибка вывода результата
по причине:
Ошибка при выводе результата
по причине:
Ошибка получения данных
по причине:
Ошибка создания набора данных "НаборДанных3"
по причине:
Ошибка при исполнении запроса набора данных
по причине:
{(8, 2)}: Ошибка обработки представления "РегистрНакопления.Продажи.Обороты:Несоответствие типов (Параметр номер ""1"")"
<<?>>РегистрНакопления.Продажи.Обороты(&НачалоПериодаПродажиСумма, &КонецПериодаПродажиСумма, Месяц, ) КАК ПродажиОбороты

Что не так?
1 eklmn
 
гуру
20.07.15
12:39
зачем еще ветку завела?
2 Vladislava-smile
 
20.07.15
12:45
(1) - ну тут проблема другая нарисовалась, не стоило, да?
Буду иметь в виду
3 eklmn
 
гуру
20.07.15
12:45
(2) да вроде все таже проблема, отчет то один ))
4 Vladislava-smile
 
20.07.15
12:48
(3) ну тоже прав, просто у меня уже крыша едет, хоть убей не могу понять как эта дрянь работает, везде дата стоит, почему тип несоответствует??? Почитала про эту ошибку - название параметров отличается от стандартных, период сделан ограниченным.
5 Vladislava-smile
 
20.07.15
12:57
РегистрНакопления.Продажи.Обороты({(&НачалоПериодаПродажиСумма)}, {(&КонецПериодаПродажиСумма}), Месяц, ) КАК ПродажиОбороты

Не ругается, но процесс заполнения отчета не идет ((( Висьнет.
6 eklmn
 
гуру
20.07.15
13:00
(5) потому что нельзя в скд баловаться датами
7 Vladislava-smile
 
20.07.15
13:05
(6) точно, просто я уже методом тыка делаю. ну не знаю я как сделать чтобы по дате на конец месяца в наборе 2 выполнялся набор 3 по параметрам начало - период, конец - период + 3 месяца. И примеров подобных нигде не могу найти по связям в СКД.
8 DCKiller
 
20.07.15
13:08
М-да...
9 Vladislava-smile
 
20.07.15
13:10
(8) ну что М-да... ? ))) Ну не делала ничего раньше подобного ((
10 MiniMuk
 
20.07.15
13:10
А может тебе просто задать свои параметры дата начала дата конца и от них задать параметры наборов данных?
11 DCKiller
 
20.07.15
13:13
(9) Я, если честно, вообще не понимаю, зачем там 2 набора данных? Если все в одном запросе прекрасно уместить можно.
12 Vladislava-smile
 
20.07.15
13:14
(10) - так они программно должны меняться. Так как они не статичны.
13 MiniMuk
 
20.07.15
13:14
14 Vladislava-smile
 
20.07.15
13:15
(9) можно, но там я застряла на запросе. Так как Оборотов не было на некоторые периоды, то суммирование не идет по некоторым колонкам
15 MiniMuk
 
20.07.15
13:15
(12) задаю параметр период через свой параметр дата конца, ну заодно там его немного шаманю
16 Vladislava-smile
 
20.07.15
13:16
(13) Это что? Файл удален
17 DCKiller
 
20.07.15
13:16
(14) Какое суммирование? По каким колонкам?
18 Vladislava-smile
 
20.07.15
13:20
ну вот был запрос

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

СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Номенклатура,
    ПродажиОбороты.Период,
    ПродажиСумма.Период

Только так придумала, но некорректно работает.
19 MiniMuk
 
20.07.15
13:21
20 DCKiller
 
20.07.15
13:24
(18) А почему соединение именно внутреннее?
21 Vladislava-smile
 
20.07.15
13:26
(19) файл вижу, но не подойдет так как повторюсь, эти параметры не статичны.
22 MiniMuk
 
20.07.15
13:27
(21) ну так конечный параметр "дата конца" задает пользователь". а параметр период исходя из этого параметра высчитывается
23 MiniMuk
 
20.07.15
13:28
(21) а что там с параметрами которые должны программно менятся?
24 Vladislava-smile
 
20.07.15
13:34
(21) Короче смотри У нас есть Продажи за период &НачалоПериодаПродажи и &КонецПериодаПродажи. Также указывается количество месяцев пользователем для расчета суммы продаж.

Надо получить пример:
Продажи на конец апреля, мая, июня, июля, где
на апрель  - сумма продаж за янв, фев, март, апр,
на май - сумма продаж за фев, март, апр, май,
на июнь - март, апр, май, июнь,
на июль - апр, май, июнь, июль
25 Vladislava-smile
 
20.07.15
13:35
(20) а какое ставить?
26 Vladislava-smile
 
20.07.15
13:36
Левое?
27 Vladislava-smile
 
20.07.15
13:38
Все равно не верно (
28 DCKiller
 
20.07.15
13:43
(24) "Продажи на конец" - что под этим подразумевается? Конечный остаток или оборот?
29 Vladislava-smile
 
20.07.15
13:44
(28) Оборот
30 Vladislava-smile
 
20.07.15
13:46
У нас уже 9, выгоняют с работы ((. Но народ, тема не закрыта ни фига, послезавтра сдача, если не сделаю - каюк ...
31 eklmn
 
гуру
20.07.15
13:57
Зимакова, выложи уже отчет куда-нибудь "пощупать", а то как то непонятно всё
32 DCKiller
 
20.07.15
13:58
(29) Слава б-гу :)

В-общем, смотри как сделай:

ВЫБРАТЬ

    ПродажиОбороты.КоличествоОборот,
    ПродажиОбороты.Номенклатура КАК Номенклатура,

    ПродажиОбороты.Период КАК ПериодПродажи
ПОМЕСТИТЬ ВТ_ПродажиОбороты
ИЗ
    РегистрНакопления.Продажи.Обороты(&НачалоПериодаПродажи, &КонецПериодаПродажи, Месяц, ) КАК ПродажиОбороты
;

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

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

ВЫБРАТЬ
ВТ_ПродажиОбороты.*,
ВТ_ПродажиОбороты2.СуммаПродаж
ИЗ
ВТ_ПродажиОбороты КАК ВТ_ПродажиОбороты
ЛЕВОЕ СОЕДИНЕНИЕ
ВТ_ПродажиОбороты2 КАК ВТ_ПродажиОбороты2
ПО ВТ_ПродажиОбороты.Номенклатура = ВТ_ПродажиОбороты2.Номенклатура
И ВТ_ПродажиОбороты.ПериодПродажи <= ВТ_ПродажиОбороты2.ПериодСуммаПродаж
33 Vladislava-smile
 
20.07.15
14:27
(32) слава богу, слава богу ... ))) ну если проблема у меня ))). Спасибо, завтра попробую и отпишуусь )
34 Vladislava-smile
 
20.07.15
14:28
(31) о-па ))) а откуда фамилию знаешь?)) Не кж то учились вместе?) Колись, ты кто?))
35 eklmn
 
гуру
20.07.15
14:30
в скрине засветилась ))
36 Vladislava-smile
 
20.07.15
14:32
Ааа, эх, а я то думала знакомые люди тут торчат ))). Завтра обязательно сктну сам отчет.
37 Vladislava-smile
 
21.07.15
02:06
(32) - не верно считает (, И я не много не поняла параметр &НачалоПериодаПродажиСумма - он же должен меняться ... А не задаваться перед выполнением СКД
38 Vladislava-smile
 
21.07.15
02:07
39 DCKiller
 
21.07.15
06:06
(37) Ничего там не должно меняться.

Последний запрос вот так переделай

ВЫБРАТЬ
ВТ_ПродажиОбороты.*,
ВТ_ПродажиОбороты2.СуммаПродаж
ИЗ
ВТ_ПродажиОбороты КАК ВТ_ПродажиОбороты

ЛЕВОЕ СОЕДИНЕНИЕ
ВТ_ПродажиОбороты2 КАК ВТ_ПродажиОбороты2
ПО ВТ_ПродажиОбороты.Номенклатура = ВТ_ПродажиОбороты2.Номенклатура
И ВТ_ПродажиОбороты.ПериодПродажи МЕЖДУ ДОБАВИТЬКДАТЕ(ВТ_ПродажиОбороты2.ПериодСуммаПродаж, МЕСЯЦ, &КолМесяцев) И ВТ_ПродажиОбороты2.ПериодСуммаПродаж
40 DCKiller
 
21.07.15
06:11
+(39) т.е. -&КолМесяцев
41 Vladislava-smile
 
21.07.15
06:57
(39) и (40) - вопрос - &НачалоПериодаПродажиСумма мы откуда берем? Ведь она должна меняться,
то есть если нам нужна
сумма на конец мая за 3 месяца до, то &НачалоПериодаПродажиСумма должна быть 01.03.2015,
сумма на конец июня за 3 месяца до, то &НачалоПериодаПродажиСумма должна быть 01.04.2015.

И у тебя указана периодичность в конечном запросе - все поля участвующие в продаже, а надо только те, для которых идет расчет "на конец"
42 Vladislava-smile
 
21.07.15
07:15
Мне нужно делать вроде подзапроса в запросе - как народ говорил на других форумах типа коррелирующих. Но Запросы так не умеют в 1с. Такая возможность есть в СКД при разных наборах данных.
Вот так : https://dropmefiles.com/7HJw3
Ошибка:
{Форма.ФормаОтчета.Форма(332)}: Ошибка при вызове метода контекста (Вывести)
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);    
по причине:
Ошибка вывода результата
по причине:
Ошибка при выводе результата
по причине:
Ошибка получения данных
по причине:
Ошибка создания набора данных "НаборДанных3"
по причине:
Ошибка при исполнении запроса набора данных
по причине:
{(7, 2)}: Ошибка обработки представления "РегистрНакопления.Продажи.Обороты:Несоответствие типов (Параметр номер ""1"")"
<<?>>РегистрНакопления.Продажи.Обороты(&НачалоПериодаПродажиСумма, &КонецПериодаПродажиСумма, Период, ) КАК ПродажиОбороты
43 DCKiller
 
21.07.15
07:29
(41) Да блин....
У тебя период, за который нужно извлечь данные для второго случая уже известен - перечитай свой же пост (24), только вдумчивей. Если у тебя на конец апреля должна быть сумма продаж за период с января по апрель, то &НачалоПериодаПродажиСумма у тебя будет равно январю. Поняла? А дальше запрос с разбивкой по периодам (месяц), и делаешь как в (39)-(40)

>> все поля участвующие в продаже, а надо только те, для которых идет расчет "на конец"

Какие поля тебе надо извлечь из запроса, это ты уже сама решай. Я тебе просто привел пример.
44 sapphire
 
21.07.15
08:05
(24) тупейшая задача
45 Vladislava-smile
 
21.07.15
08:06
Блин, да не пашет она

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПродажиОбороты2.Номенклатура КАК Номенклатура,
    ПродажиОбороты2.КоличествоОборот КАК СуммаПродаж,
    ПродажиОбороты2.Период КАК ПериодСуммаПродаж
ПОМЕСТИТЬ ВТ_ПродажиОбороты2
ИЗ
    РегистрНакопления.Продажи.Обороты(&НачалоПериодаОстаток, &КонецПериодаПродажи, Месяц, ) КАК ПродажиОбороты2

СГРУППИРОВАТЬ ПО
    ПродажиОбороты2.Номенклатура,
    ПродажиОбороты2.КоличествоОборот,
    ПродажиОбороты2.Период
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_ПродажиОбороты.КоличествоОборот КАК СуммаПродаж,
    ВТ_ПродажиОбороты.Номенклатура,
    ВТ_ПродажиОбороты2.ПериодСуммаПродаж
ИЗ
    ВТ_ПродажиОбороты КАК ВТ_ПродажиОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПродажиОбороты2 КАК ВТ_ПродажиОбороты2
        ПО ВТ_ПродажиОбороты.Номенклатура = ВТ_ПродажиОбороты2.Номенклатура
            И (ВТ_ПродажиОбороты.ПериодПродажи МЕЖДУ ДОБАВИТЬКДАТЕ(ВТ_ПродажиОбороты2.ПериодСуммаПродаж, МЕСЯЦ, -&Разность + 1) И КОНЕЦПЕРИОДА(ВТ_ПродажиОбороты2.ПериодСуммаПродаж, МЕСЯЦ))

СГРУППИРОВАТЬ ПО
    ВТ_ПродажиОбороты.Номенклатура,
    ВТ_ПродажиОбороты2.ПериодСуммаПродаж,
    ВТ_ПродажиОбороты.КоличествоОборот

рез - https://dropmefiles.com/97E18
46 Vladislava-smile
 
21.07.15
08:07
(44) - Тупейшая ... я точно также могу сказать, а пользователю НАДО (. Лучше бы посоветовал что-нибудь.
47 sapphire
 
21.07.15
08:10
(45) тупит и нервничать не надо.
Не используйте таблицы оборотов.
Используйте физическую таблицу рн продажи
48 sapphire
 
21.07.15
08:14
(46) напиши одним запросом, без виртуальных таблиц, там всё просто
49 Vladislava-smile
 
21.07.15
08:19
(48) Но как там крутиться с периодами? Через выбор когда ... и по условиям? Так что ли?
50 sapphire
 
21.07.15
08:37
(49) нет, как раз начните с периодов.
Вам нужно получить N дат, которые обозначают периоды в отчете.
Даже если в эти периоды не было оборотов.

Как получить периоды ищете в кз на этом форуме.
Далее, получите таблицу вида период минус н месяцев,период
Получите обороты номенклатуры по месяцам за период минус 2н месяцев по период.

Соедините периоды с уникальными номенклатурами.
К результату объединения левым соединением рассчитанные ранее обороты с условием по номенклатуре и период продаж между период объединения минус Нмесяцев и период объединения, итоги сумма количество сумма сумм по период объединения, номенклатура.

Вернее группировка и агрегирующие функции.
Всё
51 Vladislava-smile
 
21.07.15
09:48
Нашла пример - подогнала под себя. Обороты даже если не было движения

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

СГРУППИРОВАТЬ ПО
    НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, МЕСЯЦ)
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    МИНИМУМ(ПродажиОборотНеВсе.ПериодПродажОборот) КАК Период,
    ТаблицаДат.ДатаТаблица КАК Дата
ПОМЕСТИТЬ ВТВложенныйЗапрос
ИЗ
    ТаблицаДат КАК ТаблицаДат
        ЛЕВОЕ СОЕДИНЕНИЕ ПродажиОборотНеВсе КАК ПродажиОборотНеВсе
        ПО ТаблицаДат.ДатаТаблица <= ПродажиОборотНеВсе.ПериодПродажОборот

СГРУППИРОВАТЬ ПО
    ТаблицаДат.ДатаТаблица
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТВложенныйЗапрос.Дата КАК Дата,
    ПродажиОборотНеВсе.Номенклатура,
    ЕСТЬNULL(ПродажиОборотНеВсе.ПродажиОборот, 0) КАК НачальныйОстаток
ПОМЕСТИТЬ ВТОстаткиПоДням
ИЗ
    ВТВложенныйЗапрос КАК ВТВложенныйЗапрос
        ЛЕВОЕ СОЕДИНЕНИЕ ПродажиОборотНеВсе КАК ПродажиОборотНеВсе
        ПО ВТВложенныйЗапрос.Период = ПродажиОборотНеВсе.ПериодПродажОборот
52 Vladislava-smile
 
21.07.15
10:20
Так, обороты получила
ВЫБРАТЬ
    ПродажиОбороты.Период,
    ПродажиОбороты.Номенклатура,
    СУММА(ПродажиОбороты.КоличествоОборот) КАК ПродажиКоличество
ПОМЕСТИТЬ ВТ_Обороты
ИЗ
    РегистрНакопления.Продажи.Обороты(&НачалоПериодаОстаток, &КонецПериодаОстаток, Месяц, ) КАК ПродажиОбороты

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    втПериоды.период КАК Период,
    втПериоды.Номенклатура КАК Номенклатура,
    ЕСТЬNULL(ВТ_Обороты.ПродажиКоличество, 0) КАК ПродажиКоличество
ИЗ
    втПериоды КАК втПериоды
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Обороты КАК ВТ_Обороты
        ПО (ВТ_Обороты.Период = втПериоды.период)
            И (ВТ_Обороты.Номенклатура = втПериоды.Номенклатура)
ГДЕ
    втПериоды.Номенклатура = &Ном

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

УПОРЯДОЧИТЬ ПО
    Номенклатура,
    Период
АВТОУПОРЯДОЧИВАНИЕ
53 sapphire
 
21.07.15
10:36
(51) (52) А если календарь не заполнен?
54 sapphire
 
21.07.15
10:39
(24) Правильно ли я понимаю, что есть 2 параметра дата последнего периода & количество месяцев суммирования продаж N
55 Peltzer
 
21.07.15
10:41
Давно бы уже нарисовала, скормив в скд свою самописную таблицу.
56 Vladislava-smile
 
21.07.15
11:23
(53) - заполнен
57 Vladislava-smile
 
21.07.15
11:24
(55) Это первый такой заморочный отчет в СКД и времени нету (
58 Vladislava-smile
 
21.07.15
11:28
(54) - Параметры:
НачалоПериодаОстаток
КонецПериодаОстаток
В них Определяется на конец каких месяцев должна считаться сумма оборотов из предыдущих
НачалоПериодаПродажи
КонецПериодаПродажи
В них весь период для расчета суммирования оборотов то есть НачалоПериодаОстаток - &кол-во месяцев по  КонецПериодаОстаток

И Разность - кол-во месяцев для сдвига
59 sapphire
 
21.07.15
11:33
(57) Отчет проще некуда
60 sapphire
 
21.07.15
11:45
SELECT
0 Ч
INTO Единицы
UNION ALL
SELECT
1 Ч
UNION ALL  
SELECT
2 Ч
UNION ALL  
SELECT
3 Ч  
UNION ALL  
SELECT
4 Ч  
UNION ALL  
SELECT
5 Ч
UNION ALL  
SELECT
6 Ч    
UNION ALL  
SELECT
7 Ч
UNION ALL  
SELECT
8 Ч  
UNION ALL  
SELECT
9 Ч    
;
SELECT
    1000*ISNULL(Тысячи.Ч,0)+100*ISNULL(Сотни.Ч,0)+10*ISNULL(Десятки.Ч,0)+Единицы.Ч Ч
INTO Итератор    
FROM
    Единицы
LEFT JOIN Единицы Десятки    
ON 10<=&N
LEFT JOIN Единицы Сотни    
ON 100<=&N
LEFT JOIN Единицы Тысячи    
ON 1000<=&N
WHERE
    Единицы.Ч<=&N-1 AND (1000*ISNULL(Тысячи.Ч,0)+100*ISNULL(Сотни.Ч,0)+10*ISNULL(Десятки.Ч,0)+Единицы.Ч)<=&N-1
;    
SELECT
     DATEADD(BeginOfPeriod(&Дата,Month),Month,0-Итератор.Ч) Период    
    ,DATEADD(BeginOfPeriod(&Дата,Month),Month,0-Итератор.Ч-&N+1)          ДатаНачалаИнтервалаПродаж
    ,EndOfPeriod(DATEADD(BeginOfPeriod(&Дата,Month),Month,0-Итератор.Ч),Month) ДатаОкончанияИнтервалаПродаж
INTO Периоды    
FROM
    Итератор
;    

SELECT
    DISTINCT
    РН.Номенклатура
INTO НоменклатураПродаж    
FROM
    РегистрНакопления.Продажи РН
WHERE
    РН.Период BETWEEN DATEADD(BeginOfPeriod(&Дата,Month),Month,0-2*(&N-1))    AND EndOfPeriod(&Дата,Month)
;
SELECT
     Периоды.Период
    ,Периоды.ДатаНачалаИнтервалаПродаж
    ,Периоды.ДатаОкончанияИнтервалаПродаж
    ,НоменклатураПродаж.Номенклатура
INTO
    НоменклатураПродажПериоды    
FROM
    Периоды,НоменклатураПродаж
INDEX BY
    Периоды.ДатаНачалаИнтервалаПродаж
   ,Периоды.ДатаОкончанияИнтервалаПродаж
   ,НоменклатураПродаж.Номенклатура         
;
  
SELECT
    НоменклатураПродажПериоды.Период
   ,НоменклатураПродажПериоды.Номенклатура
   ,SUM(ISNULL(РН.Количество,0)) ПродажиКоличество
FROM
    НоменклатураПродажПериоды
LEFT JOIN РегистрНакопления.Продажи РН
ON         РН.Период BETWEEN НоменклатураПродажПериоды.ДатаНачалаИнтервалаПродаж AND НоменклатураПродажПериоды.ДатаОкончанияИнтервалаПродаж
   AND     РН.Номенклатура=НоменклатураПродажПериоды.Номенклатура
GROUP BY
    НоменклатураПродажПериоды.Период
   ,НоменклатураПродажПериоды.Номенклатура
61 sapphire
 
21.07.15
11:47
(58) Если чо, стучи в скайп
62 Vladislava-smile
 
21.07.15
11:58
(60) - Блин, фантастика какая-то ...
&Дата как я поняла - это &НачалоПериодаОстаток в моем случае, а как к этому параметру прибавлять месяц, пока не дойдем до Концапериодаостаток?
63 Vladislava-smile
 
21.07.15
12:05
Ааа, сейчас вроде все понятно стало... Афигеть ...
64 sapphire
 
21.07.15
12:06
(62) Наоборот, это любая дата из последнего месяца, например, для (24) любое число июля.

Ну посмотри же в табличке Периоды
Там же просто все :(
65 sapphire
 
21.07.15
12:06
для (24) N=4 и дата - любая дата июля
66 sapphire
 
21.07.15
12:07
Всё что до выборки номенклатуры работает в любой конфигурации платформы 8.1 и выше.
67 Vladislava-smile
 
21.07.15
12:20
Блин, спасибо огромное, мне еще расти и расти до этого понимания ... Хотя сейчас поковырялась - немного понятнее стала что ты делаешь
68 sapphire
 
21.07.15
12:21
(67) :)
69 sapphire
 
21.07.15
12:28
(67) Там все очень просто.
Таблица "Единицы" нужна для того, что бы получить нужное количество записей, в данном случае, месяцев.

Таблица Итератор выводит числа от 0 до N-1.
Таблица Периоды выводит Период и диапазон для расчета продаж

Таблица НоменклатурыПродаж нужна только в том случае, если для каждого периода набор номенклатур должен быть одинаков.

Далее умножаем Номенклатуры на Периоды, получаем кучу записей номенклатуры с периодами, индексируем, хотя это и не обязательно, скорее даже в данном конкретном случае вредно.

Ну и вычисляем продажи номенклатуры.
70 Vladislava-smile
 
21.07.15
13:26
(69) -  а тут проблемка небольшая нарисовалась ...
пример по результату приведу: https://dropmefiles.com/3fXvv
71 sapphire
 
21.07.15
13:49
(70) Что это, Бэримор? (с)
Вы и правда думаете, что по снимку экрана я считаю всю логику Вашего отчета и данные? :)
72 sapphire
 
21.07.15
13:53
(70) Хотя я предполагаю, что что-то не так соединено
73 Vladislava-smile
 
21.07.15
14:01
Ммм, ок, перепроверю соединения ), Бэримор??? )))
74 Vladislava-smile
 
21.07.15
14:06
Что интересно если берем вот такие данные - то все идеально ...((( https://dropmefiles.com/pmd6C
75 sapphire
 
21.07.15
14:58
(73) (74) Издеваешься?:)
76 sapphire
 
21.07.15
17:40
(74) Понятно, ты N берешь из последней оборачиваемости, коя потом будет красится красненьким.

Для твоих настроек из (24) N=4, а не 3, как на форме.
Собственно, тогда вполне понятно откуда такой результат.
Для N=3 по маю посчитает май, апрель, март (3 месяца),
и продажа февраля не попадает.
Зато мило светится в продаже апреля, как и должно быть в твоем случае при N=3.
77 Vladislava-smile
 
22.07.15
04:28
Вот так идеально считает при любых случаях:

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

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    втПериоды.период КАК Период,
    втПериоды.Номенклатура КАК Номенклатура,
    ЕСТЬNULL(ВТ_Обороты.ПродажиКоличество, 0) КАК ПродажиКоличество
ПОМЕСТИТЬ ПродажиСиБезОборотовОстаток
ИЗ
    втПериоды КАК втПериоды
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Обороты КАК ВТ_Обороты
        ПО (ВТ_Обороты.Период = втПериоды.период)
            И (ВТ_Обороты.Номенклатура = втПериоды.Номенклатура)

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПродажиСиБезОборотовОстаток.Период,
    ПродажиСиБезОборотовОстаток.Номенклатура,
    ПродажиСиБезОборотовОстаток.ПродажиКоличество
ИЗ
    ПродажиСиБезОборотовОстаток КАК ПродажиСиБезОборотовОстаток
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПродажиСиБезОборотовОстаток.Период КАК ПериодОборот,
    ПродажиВсе.Номенклатура,
    ПродажиВсе.Период КАК ПериодВесь,
    ВЫБОР
        КОГДА ПродажиВсе.Период <= ПродажиСиБезОборотовОстаток.Период
                И ПродажиВсе.Период >= НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ПродажиСиБезОборотовОстаток.Период, МЕСЯЦ, -&Разность + 1), МЕСЯЦ)
            ТОГДА ПродажиВсе.КоличествоОборот
    КОНЕЦ КАК КоличествоПродажи,
    ПродажиВсе.КоличествоОборот,
    НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ПродажиСиБезОборотовОстаток.Период, МЕСЯЦ, -&Разность + 1), МЕСЯЦ) КАК НачалоПериодаДляПродажи
ПОМЕСТИТЬ Готово
ИЗ
    ПродажиСиБезОборотовОстаток КАК ПродажиСиБезОборотовОстаток,
    ПродажиВсе КАК ПродажиВсе

СГРУППИРОВАТЬ ПО
    ПродажиВсе.Номенклатура,
    ПродажиСиБезОборотовОстаток.Период,
    ПродажиВсе.Период,
    ПродажиВсе.КоличествоОборот
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Готово.ПериодОборот КАК ПериодПродажиСумма,
    Готово.Номенклатура,
    Готово.КоличествоПродажи КАК КоличествоПродажиСумма
ИЗ
    Готово КАК Готово

СГРУППИРОВАТЬ ПО
    Готово.ПериодОборот,
    Готово.Номенклатура,
    Готово.КоличествоПродажи

Спасибо всем за ответы )
Программист всегда исправляет последнюю ошибку.