Имя: Пароль:
1C
1С v8
Не могу реализовать в запросе
0 abbas
 
24.06.14
15:28
Доброе время суток, У меня есть запрос и выводит такое,
  ДАТА  |   ВидРасчета       |   Результат   |
01.07.14| Квартальная премия |   15000       |
01.04.14| Квартальная премия |   10000       |
01.01.14| Квартальная премия |   5000        |

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

  ДАТА  |   ВидРасчета       |   Результат   |
01.07.14| Квартальная премия |   15000       |
01.06.14| Квартальная премия |   10000       |
01.05.14| Квартальная премия |   10000       |
01.04.14| Квартальная премия |   10000       |
01.03.14| Квартальная премия |   5000        |
01.02.14| Квартальная премия |   5000        |
01.01.14| Квартальная премия |   5000        |

Чтоб пустые, то есть месяца в которых не было поступления, были заполнены, помогите реализовать, начального запроса нет, подкиньте идею как реализовать
1 Nenaviwu1c20
 
24.06.14
15:29
"ВЫБРАТЬ
        |    0 КАК Цифра
        |ПОМЕСТИТЬ ТабЦифр
        |
        |ОБЪЕДИНИТЬ
        |
        |ВЫБРАТЬ
        |    1
        |
        |ОБЪЕДИНИТЬ
        |
        |ВЫБРАТЬ
        |    2
        |
        |ОБЪЕДИНИТЬ
        |
        |ВЫБРАТЬ
        |    3
        |
        |ОБЪЕДИНИТЬ
        |
        |ВЫБРАТЬ
        |    4
        |
        |ОБЪЕДИНИТЬ
        |
        |ВЫБРАТЬ
        |    5
        |
        |ОБЪЕДИНИТЬ
        |
        |ВЫБРАТЬ
        |    6
        |
        |ОБЪЕДИНИТЬ
        |
        |ВЫБРАТЬ
        |    7
        |
        |ОБЪЕДИНИТЬ
        |
        |ВЫБРАТЬ
        |    8
        |
        |ОБЪЕДИНИТЬ
        |
        |ВЫБРАТЬ
        |    9
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ДОБАВИТЬКДАТЕ(&ДатаНач, ДЕНЬ, ТабЦифр1.Цифра + 10 * ТабЦифр2.Цифра + 100 * ТабЦифр3.Цифра + 1000 * ТабЦифр4.Цифра) КАК День
        |ПОМЕСТИТЬ ТабДней
        |ИЗ
        |    ТабЦифр КАК ТабЦифр1,
        |    ТабЦифр КАК ТабЦифр2,
        |    ТабЦифр КАК ТабЦифр3,
        |    ТабЦифр КАК ТабЦифр4
        |ГДЕ
        |    ДОБАВИТЬКДАТЕ(&ДатаНач, ДЕНЬ, ТабЦифр1.Цифра + 10 * ТабЦифр2.Цифра + 100 * ТабЦифр3.Цифра + 1000 * ТабЦифр4.Цифра) <= &ДатаКон
        |
        |ИНДЕКСИРОВАТЬ ПО
        |    День
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    КОНЕЦПЕРИОДА(ТабДней.День, ДЕНЬ) КАК День
        |ИЗ
        |    ТабДней КАК ТабДней";
2 Nenaviwu1c20
 
24.06.14
15:30
а к этой таблице по левому соединению лепи свои данные
3 Nenaviwu1c20
 
24.06.14
15:30
соединя по периодам
4 abbas
 
24.06.14
15:33
я получу тогда
  ДАТА  |   ВидРасчета       |   Результат   |
01.07.14| Квартальная премия |   15000       |
01.06.14| Квартальная премия |               |
01.05.14| Квартальная премия |               |
01.04.14| Квартальная премия |   10000       |
01.03.14| Квартальная премия |               |
01.02.14| Квартальная премия |               |
01.01.14| Квартальная премия |   5000        |
5 abbas
 
24.06.14
15:33
Как заполнить Результат значение которого будет NULL
6 Nenaviwu1c20
 
24.06.14
15:35
Сотря чем заполнить МОжно в запросе указать                ЕСТЬNULL(Рультат, 0)
7 1sik
 
24.06.14
15:35
естьnull(Значение,0)
8 Nenaviwu1c20
 
24.06.14
15:36
Я просто логику заполнения не вполне понимаю.Попробуй описать что тебе надо.
9 Nenaviwu1c20
 
24.06.14
15:37
кстати запрос который я опубликовал в днях выводит.Его в месяцы нужно будет переписать.Либо из Производственного календаря выбрать
10 abbas
 
24.06.14
15:39
Все правильно, просто мне нужен такой результат
  ДАТА  |   ВидРасчета       |   Результат   |
01.07.14| Квартальная премия |   15000       |
01.06.14| Квартальная премия |   10000       |
01.05.14| Квартальная премия |   10000       |
01.04.14| Квартальная премия |   10000       |
01.03.14| Квартальная премия |   5000        |
01.02.14| Квартальная премия |   5000        |
01.01.14| Квартальная премия |   5000        |
11 abbas
 
24.06.14
15:39
А ВЫХОДИТ
12 abbas
 
24.06.14
15:39
ДАТА  |   ВидРасчета       |   Результат   |
01.07.14| Квартальная премия |   15000       |
01.06.14| Квартальная премия |               |
01.05.14| Квартальная премия |               |
01.04.14| Квартальная премия |   10000       |
01.03.14| Квартальная премия |               |
01.02.14| Квартальная премия |               |
01.01.14| Квартальная премия |   5000        |
13 abbas
 
24.06.14
15:41
Как мне заполнить пустые значения, которые пустые на цифры которые были в это квартале, то есть
как мне забить в эти строки
01.03.14| Квартальная премия |       0        |
01.02.14| Квартальная премия |       0        |  
тем что было в первом месяце (то есть цифрой 5000)
01.01.14| Квартальная премия |   5000        |
Надеюсь что поняли меня...
14 Nenaviwu1c20
 
24.06.14
15:42
Аббас гардаш Что вы хотите увидеть в тех месяцах в которых не было записей в вашей таблице?)
15 Nenaviwu1c20
 
24.06.14
15:43
аааа ясненько
16 Nenaviwu1c20
 
24.06.14
15:43
щас подумаю
17 dj_serega
 
24.06.14
15:43
(14) Видимо старые данные (за прошлые периоды).
Ему походу нужно повторять запись пока она не изменится.
18 abbas
 
24.06.14
15:44
месяца в которых не было начисления, были заполнены предыдущим результатом
19 Nenaviwu1c20
 
24.06.14
15:52
Соединяй таблицу саму с сабой во вложенном запросе при условии что выбирается максимальная дата Меньше даты запроса где сумма больше нуля и потом обратно соединяй  в основном запросе на выбор когда естьнулл = 0.Как то так...
20 Nenaviwu1c20
 
24.06.14
15:52
запрос дай я подкорректирую
21 vicof
 
24.06.14
16:52
(18) Нафига? Отчет неинформативным будет.
22 Drac0
 
24.06.14
17:24
(18) 0_o А может надо поделить начисления на 3 месяца?
23 Bolik1979
 
24.06.14
18:17
По аналогии со срезом последних на каждую дату

ВЫБРАТЬ
    ТЗ.дата КАК Дата,
    ТЗ.ВидРасчета,
    ТЗ.Результат
ПОМЕСТИТЬ ВТТЗ
ИЗ
    &ТЗ КАК ТЗ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    МИНИМУМ(ВТТЗ.Дата) КАК ДатаНач,
    МАКСИМУМ(ВТТЗ.Дата) КАК ДатаКон
ПОМЕСТИТЬ ВТДатыНачКон
ИЗ
    ВТТЗ КАК ВТТЗ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    0 КАК Цифра
ПОМЕСТИТЬ ТабЦифр

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    2

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    3

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    4

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    5

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    6

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    7

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    8

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    9
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(ВТДатыНачКон.ДатаНач, ДЕНЬ, ТабЦифр1.Цифра + 10 * ТабЦифр2.Цифра + 100 * ТабЦифр3.Цифра + 1000 * ТабЦифр4.Цифра) КАК День
ПОМЕСТИТЬ ТабДней
ИЗ
    ТабЦифр КАК ТабЦифр1,
    ТабЦифр КАК ТабЦифр2,
    ТабЦифр КАК ТабЦифр3,
    ТабЦифр КАК ТабЦифр4,
    ВТДатыНачКон КАК ВТДатыНачКон
ГДЕ
    ДОБАВИТЬКДАТЕ(ВТДатыНачКон.ДатаНач, ДЕНЬ, ТабЦифр1.Цифра + 10 * ТабЦифр2.Цифра + 100 * ТабЦифр3.Цифра + 1000 * ТабЦифр4.Цифра) <= ВТДатыНачКон.ДатаКон

ИНДЕКСИРОВАТЬ ПО
    День
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    НАЧАЛОПЕРИОДА(ТабДней.День, МЕСЯЦ) КАК Месяц
ПОМЕСТИТЬ ВТДаты
ИЗ
    ТабДней КАК ТабДней
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВложенныйЗапрос.Месяц,
    ВложенныйЗапрос.ВидРасчета,
    ВТТЗ.Результат
ИЗ
    (ВЫБРАТЬ
        ВТДаты.Месяц КАК Месяц,
        МАКСИМУМ(ВТТЗ.Дата) КАК Дата,
        ВТТЗ.ВидРасчета КАК ВидРасчета
    ИЗ
        ВТДаты КАК ВТДаты
            ЛЕВОЕ СОЕДИНЕНИЕ ВТТЗ КАК ВТТЗ
            ПО ВТДаты.Месяц >= ВТТЗ.Дата
    
    СГРУППИРОВАТЬ ПО
        ВТДаты.Месяц,
        ВТТЗ.ВидРасчета) КАК ВложенныйЗапрос
        ЛЕВОЕ СОЕДИНЕНИЕ ВТТЗ КАК ВТТЗ
        ПО ВложенныйЗапрос.Дата = ВТТЗ.Дата
            И ВложенныйЗапрос.ВидРасчета = ВТТЗ.ВидРасчета
24 abbas
 
27.06.14
13:46
ВЫБРАТЬ
    ВложенныйЗапрос.ДатаНачала,
    ВзаиморасчетыПоЗПДанныеГрафика.Результат / 3 КАК Поле1
ИЗ
    (ВЫБРАТЬ
        НАЧАЛОПЕРИОДА(_Отпускные_ЗП.ДатаНачала, МЕСЯЦ) КАК ДатаНачала
    ИЗ
        Документ._Отпускные_ЗП КАК _Отпускные_ЗП
    ГДЕ
        _Отпускные_ЗП.Ссылка = &Ссылка
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(_Отпускные_ЗП.ДатаНачала, МЕСЯЦ), МЕСЯЦ, -1)
    ИЗ
        Документ._Отпускные_ЗП КАК _Отпускные_ЗП
    ГДЕ
        _Отпускные_ЗП.Ссылка = &Ссылка
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(_Отпускные_ЗП.ДатаНачала, МЕСЯЦ), МЕСЯЦ, -2)
    ИЗ
        Документ._Отпускные_ЗП КАК _Отпускные_ЗП
    ГДЕ
        _Отпускные_ЗП.Ссылка = &Ссылка
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(_Отпускные_ЗП.ДатаНачала, МЕСЯЦ), МЕСЯЦ, -3)
    ИЗ
        Документ._Отпускные_ЗП КАК _Отпускные_ЗП
    ГДЕ
        _Отпускные_ЗП.Ссылка = &Ссылка
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(_Отпускные_ЗП.ДатаНачала, МЕСЯЦ), МЕСЯЦ, -4)
    ИЗ
        Документ._Отпускные_ЗП КАК _Отпускные_ЗП
    ГДЕ
        _Отпускные_ЗП.Ссылка = &Ссылка
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(_Отпускные_ЗП.ДатаНачала, МЕСЯЦ), МЕСЯЦ, -6)
    ИЗ
        Документ._Отпускные_ЗП КАК _Отпускные_ЗП
    ГДЕ
        _Отпускные_ЗП.Ссылка = &Ссылка
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(_Отпускные_ЗП.ДатаНачала, МЕСЯЦ), МЕСЯЦ, -7)
    ИЗ
        Документ._Отпускные_ЗП КАК _Отпускные_ЗП
    ГДЕ
        _Отпускные_ЗП.Ссылка = &Ссылка) КАК ВложенныйЗапрос
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ВзаиморасчетыПоЗП.ДанныеГрафика(
                ВидРасчета = &ВидРасчета
                    И ФизЛицо = &ФизЛицо) КАК ВзаиморасчетыПоЗПДанныеГрафика
        ПО ВложенныйЗапрос.ДатаНачала = ВзаиморасчетыПоЗПДанныеГрафика.ПериодРегистрации
25 abbas
 
27.06.14
13:46
Вот сам запрос
26 abbas
 
27.06.14
13:53
27 abbas
 
27.06.14
14:46
....................................................
28 Ymryn
 
27.06.14
15:15
(0) В гугл или яндекс "8.2 Остатки на каждый день". Уже приличное количество различных решений. Если это нужно для СКД то вообще делается через дополнение.