Имя: Пароль:
1C
1С v8
ищу решение как просуммировать реквизиты в запросе
0 aptomilov
 
07.06.23
14:44
Есть некий регистр сведений в нем куча реквизитов
не спрашивайте так надо ))

на входе в запрос есть параметр  номер дня месяца

в зависимости от номера дня месяца надо сложить  нужное количество реквизитов в одну сумму
Например
номер дня 4
мы должны получить сумму реквизитов
       |       РеестрПлатежей.День1,
        |    РеестрПлатежей.День2,
        |    РеестрПлатежей.День3,
        |    РеестрПлатежей.День4,
я придумал что можно сделать это через если  но будет очень уже громоздко
        

может есть какой то более оригинальный способ?

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




ВЫБРАТЬ  
        
        |    РеестрПлатежей.СтатьяБюджета,
        |    РеестрПлатежей.День1,
        |    РеестрПлатежей.День2,
        |    РеестрПлатежей.День3,
        |    РеестрПлатежей.День4,
        |    РеестрПлатежей.День5,
        |    РеестрПлатежей.День6,
        |    РеестрПлатежей.День7,
        |    РеестрПлатежей.День8,
        |    РеестрПлатежей.День9,
        |    РеестрПлатежей.День10,
        |    РеестрПлатежей.День11,
        |    РеестрПлатежей.День12,
        |    РеестрПлатежей.День13,
        |    РеестрПлатежей.День14,
        |    РеестрПлатежей.ДатаНач,
        |    РеестрПлатежей.ДатаКон,
        |    РеестрПлатежей.День15,
        |    РеестрПлатежей.День16,
        |    РеестрПлатежей.День17,
        |    РеестрПлатежей.День18,
        |    РеестрПлатежей.День19,
        |    РеестрПлатежей.День20,
        |    РеестрПлатежей.День21,
        |    РеестрПлатежей.День22,
        |    РеестрПлатежей.День23,
        |    РеестрПлатежей.День24,
        |    РеестрПлатежей.День25,
        |    РеестрПлатежей.День26,
        |    РеестрПлатежей.День27,
        |    РеестрПлатежей.День28,
        |    РеестрПлатежей.День29,
        |    РеестрПлатежей.День30,
        |    РеестрПлатежей.День31
        |ПОМЕСТИТЬ График
        |ИЗ
        |    РегистрСведений.РеестрПлатежей КАК РеестрПлатежей
        |ГДЕ
        |    РеестрПлатежей.НомерРеестра = &Номер";
1 Волшебник
 
07.06.23
14:45
Сделайте оборотный регистр накопления, он сам просуммирует
2 Fedor-1971
 
07.06.23
14:46
(0)  а что на выходе?
Статья бюджета + сумма
3 aptomilov
 
07.06.23
14:47
я так понял там какое то хитрое решение этот регистр это типа табличная часть какого то громоздкого документа  в котором одновременно работает 100 500 человек
4 aptomilov
 
07.06.23
14:47
на выходе нужна сумма реквизитов в зависимости от номера дня  остальное вторично
5 Мультук
 
07.06.23
14:51
(0)
Если лень заморачиваться с формирование запроса, то см ниже
Остальные дни допишите самостоятельно. Это 5 минут работы. Копи-паст и внимательность

        ВЫБРАТЬ
          ВЫБОР КОГДА &НомерДня =1 ТОГДА
                   РеестрПлатежей.День1
                КОГДА &НомерДня =2 ТОГДА
                   РеестрПлатежей.День1  + РеестрПлатежей.День2
                КОГДА &НомерДня =3 ТОГДА
                   РеестрПлатежей.День1  + РеестрПлатежей.День2 + РеестрПлатежей.День3
                ИНАЧЕ 0

          Конец КАК Сумма
      
        ПОМЕСТИТЬ График
        ИЗ
            РегистрСведений.РеестрПлатежей КАК РеестрПлатежей
        ГДЕ
            РеестрПлатежей.НомерРеестра = &Номер";
6 aptomilov
 
07.06.23
14:52
(5) я в самом начале написал что я так придумал но мне так не нравится )))
7 Fedor-1971
 
07.06.23
15:02
(6) Сначала подготовь таблицу
Выбрать
1 как Период,
РеестрПлатежей.СтатьяБюджета,
РеестрПлатежей.День1 как Что
поместить табРасчета
ИЗ
РегистрСведений.РеестрПлатежей КАК РеестрПлатежей

Объединить все
Выбрать
2 как Период,
РеестрПлатежей.СтатьяБюджета,
РеестрПлатежей.День2
ИЗ
РегистрСведений.РеестрПлатежей КАК РеестрПлатежей

....

Объединить все
Выбрать
31 как Период
РеестрПлатежей.СтатьяБюджета,
РеестрПлатежей.День31
ИЗ
РегистрСведений.РеестрПлатежей КАК РеестрПлатежей

;
Выбрать
таб.СтатьяБюджета,
Сумма(таб.Что) как Сумма
Из табРасчета как таб
Где таб.Период < &Номер
Сгруппировать по таб.СтатьяБюджета

Дальше без вопросов не должно быть
8 Fedor-1971
 
07.06.23
15:05
7+ по факту, сначала слепляем все данные в одно поле, потом оное суммируем
Засада будет если тебе вдруг понадобятся дни 2, 4 и 6 для, например, Номера = 108
9 aptomilov
 
07.06.23
15:13
нет всегда будет  по порядку
10 aptomilov
 
07.06.23
15:16
(7)

за запрос чуть поменьше в этом случае вроде будет
11 majkk
 
07.06.23
15:18
(0)
день1*окр(0.5+(&п-1)/100,0)+
день2*окр(0.5+(&п-2)/100,0)+
...
день31*окр(0.5+(&п-31)/100,0)

Написал окр вместо выразить для наглядности.
12 azernot
 
07.06.23
15:20
ВЫБРАТЬ  
    РеестрПлатежей.СтатьяБюджета,
    РеестрПлатежей.День1 как Сумма,
    1 как НомерДня
ПОМЕСТИТЬ ГрафикСуммПоДням
ИЗ
   РегистрСведений.РеестрПлатежей КАК РеестрПлатежей
ГДЕ
    РеестрПлатежей.НомерРеестра = &НомерДг

Объединить ВСЕ

ВЫБРАТЬ  
    РеестрПлатежей.СтатьяБюджета,
    РеестрПлатежей.День2,
    2
ИЗ
   РегистрСведений.РеестрПлатежей КАК РеестрПлатежей
ГДЕ
    РеестрПлатежей.НомерРеестра = &Номер

Объединить ВСЕ

ВЫБРАТЬ  
    РеестрПлатежей.СтатьяБюджета,
    РеестрПлатежей.День3,
    3
ИЗ
   РегистрСведений.РеестрПлатежей КАК РеестрПлатежей
ГДЕ
    РеестрПлатежей.НомерРеестра = &Номер

И т.п.
;

Выбрать
    ГрафикСуммПоДням.СтатьяБюджета,
    Сумма(ГрафикСуммПоДням.Сумма) как Сумма,
ИЗ
   ГрафикСуммПоДням КАК ГрафикСуммПоДням
ГДЕ
    ГрафикСуммПоДням.НомерДня <= &НомерДня
13 Мультук
 
07.06.23
15:22
(10)

Было 2 строчки на 1 день + еще чуть,
а стало 6 строчек за 1 день

Было -- подсчет за 1 проход
Стало -- сначала формируем временную таблицу (1 проход),
а затем читаем из временной таблицы и группируем.

Экономия же!
14 aptomilov
 
07.06.23
15:27
согласен  
что нибудь из этого заюзаю  
) всем благодарность  и премия ))
15 Fedor-1971
 
07.06.23
15:28
(13) не факт, что для SQL условие Выбор когда тогда Конец
легче чем Выборка + Сумма
Он, таки, на выборку данных заточен - всякие условия в запросе на разных платформах могут работать по разному
16 majkk
 
07.06.23
15:30
(13) Самое короткое в (11). Там одна строка на все дни
17 Garykom
 
07.06.23
15:58
(0) В СКД можно вставлять текст запроса
18 Garykom
 
07.06.23
15:58
(17)+ сформированный программно кодом