Имя: Пароль:
1C
1С v8
Не соображу как запрос построить
0 alexmobile
 
31.01.14
09:59
Получаю запросом след. данные:
ПериодНачало  ПериодКонец  Сумма   Месяцев
01.01.11      01.03.11     500      3
01.01.11      01.06.11     100      6

нужно получить таблицу

Месяц      сумма
01.01.11   500/3+100/6
01.02.11   500/3+100/6
01.03.11   500/3+100/6
01.04.11   100/6
01.05.11   100/6
01.06.11   100/6

Как это реализовать запросом?
1 alexmobile
 
31.01.14
10:00
не туда положил. перенесите в v8
2 Ненавижу 1С
 
гуру
31.01.14
10:06
нужен календарь, например РС "регламентированный производственный календарь" в типовых, тогда легко
3 alexmobile
 
31.01.14
10:23
(2) да, все просто.
4 wPa
 
31.01.14
10:31
(0) берешь таблицу дат - (2) , к ней таблицу с суммами по дате по <= (если нет остатков - нет движений - то берется последнее)
5 bolobol
 
31.01.14
10:41
(2) Непонятно, причём здесь календарь...
(0)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Месяцы.Месяц,
    СУММА(Исх.Сумма / Исх.Месяцев) КАК Поле1
ИЗ
    Месяцы КАК Месяцы
        ЛЕВОЕ СОЕДИНЕНИЕ Исх КАК Исх
        ПО Месяцы.Месяц >= Исх.ПериодНачало
            И Месяцы.Месяц <= Исх.ПериодКонец

СГРУППИРОВАТЬ ПО
    Месяцы.Месяц
6 Ненавижу 1С
 
гуру
31.01.14
10:44
(5) а что такое месяцы?
7 WildSery
 
31.01.14
10:48
(6) Это календарь. Но он не при чём.
8 WildSery
 
31.01.14
10:49
(5) Условие лучше записывать вот так, это легче читается:
ПО Месяцы.Месяц МЕЖДУ Исх.ПериодНачало И Исх.ПериодКонец
9 bolobol
 
31.01.14
11:14
(6) Временная таблица с датами из (0), я её так обозвал по смыслу увиденного в (0).

(7) У нас, видимо, разные понятия о календаре, см. ответ на (6), а вот (8) - это да.

Я, кстати, до сих пор не понимаю, в чём вопрос в (0) был...
10 WildSery
 
31.01.14
11:45
(9) А по-моему, всё понятно. 1-я табличка - исходные данные. 2-я табличка - что нужно получить.

Я вижу решение как
ВЫБРАТЬ    ДАТАВРЕМЯ(2013, 1, 1) КАК ПериодНачало, ДАТАВРЕМЯ(2013, 3, 1) КАК ПериодКонец, 500 КАК Сумма, 3 КАК Месяцев
ПОМЕСТИТЬ Таблица1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ ДАТАВРЕМЯ(2013, 1, 1), ДАТАВРЕМЯ(2013, 6, 1), 100, 6;

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

ВЫБРАТЬ
    Календарь.Месяц,
    СУММА(Т1.Сумма / Т1.Месяцев) КАК Сумма
ИЗ
    Таблица1 КАК Т1
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Календарь КАК Календарь
        ПО (Календарь.Месяц МЕЖДУ Т1.ПериодНачало И Т1.ПериодКонец)

СГРУППИРОВАТЬ ПО
    Календарь.Месяц
11 Ненавижу 1С
 
гуру
31.01.14
11:55
(9) ну все таки календарь таки есть ))
12 bolobol
 
31.01.14
12:12
(11) Это если он есть, да и нужно ли так нагружать базу из-за шести известных заранее дат?
13 Ненавижу 1С
 
гуру
31.01.14
12:15
(12) база безусловно нагрузится
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.