Имя: Пароль:
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 Остатки на каждый день". Уже приличное количество различных решений. Если это нужно для СКД то вообще делается через дополнение.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший