Имя: Пароль:
1C
1С v8
Сравнение записей регистра сведений в запросе
,
0 Adecvator
 
05.06.15
15:39
Подскажите плз. как организовать цикл в запросе, понимаю что через вложенный запрос, но дальше не знаю (
1 Fragster
 
гуру
05.06.15
15:39
шта?
2 Господин ПЖ
 
05.06.15
15:40
fetch в 1с не завозили
3 butterbean
 
05.06.15
15:42
полное соединение по всем интересующим полям + проверка на null... если я правильно понял задачу
4 Одинесю
 
05.06.15
15:43
Наконец пятничная ветка!
5 Adecvator
 
05.06.15
15:44
Если Запись1 >= Запись2 Тогда
       Итого = Итого + (Запись2 - Запись1);
Иначе
       Итого = Итого + Запись2;
КонецЕсли;
6 mehfk
 
05.06.15
15:46
в (5) какая-то байда, похжая на нарастающий итог, но есть мнение что эту байду можно сделать в СКД
7 ВРедная
 
05.06.15
15:51
(5) Интересно, в чем смысл функции?
Она проходит по списку чего-то, и если первая запись больше или равна второй, то разницу между записями нужно вычесть из итога, иначе нужно добавить в итог вторую (большую) запись

Моя фантазия мне даже не намекает на то, что бы это могло автоматизировать
8 mistеr
 
05.06.15
15:53
(5) Про ВЫБОР почитай.
9 shuhard_серый
 
05.06.15
15:55
(7) чё так слабо
- биллинг
- СКУДЫ
- скидки
10 ВРедная
 
05.06.15
15:57
(9) Ну давай экономический пример включающий вот этот код:

Если Запись1 >= Запись2 Тогда
       Итого = Итого + (Запись2 - Запись1);
Иначе
       Итого = Итого + Запись2;
КонецЕсли;

Для скидок или биллинга.

Если первый платеж не меньше второго, то некий итог надо уменьшить на их разницу. Если меньше - то этому некому итогу надо добавить второй платеж.

Вопрос: что показывает итог?
11 ЧеловекДуши
 
05.06.15
16:05
(5) Дешевле в цикле, перебором :)
Формула какая то не полная, "Огласите весь список, пжалуста" (с)
12 Adecvator
 
05.06.15
16:08
(11) чего не полная в конце месяца оборот по карточке обнуляется, надо вычислить общий оборот.
13 Fragster
 
гуру
05.06.15
16:16
Выбрать
  Регистр.СуммаПриход
Из РегистрНакопления.Регистр КАК Регистр
14 Adecvator
 
05.06.15
16:22
(13) просто просуммировать не подойдет, т.к. в течении месяца был нарастающий итог, а в конце месяца он обнуляется.
15 Fragster
 
гуру
05.06.15
16:24
по этому СуммаПриход
16 Adecvator
 
05.06.15
16:26
(15) дело имеем с регистром сведений (
17 Fragster
 
гуру
05.06.15
16:28
(16) сделайте на РН. а то если в РС хранится "накопленный итог" на каждый день - то это ЖП. проще всего добавить реквизит с изменением, и его просуммировать.
18 shuhard_серый
 
05.06.15
16:31
(10) см.(12)
ну чё - съела ?
биллинг в чистом виде

сделанный конечно через ж.опу
19 Fragster
 
гуру
05.06.15
16:32
либо просуммировать последние записи за каждый период перед обнулением
20 ВРедная
 
05.06.15
17:01
(18) ОК.. давайте с цифрами

в регистре оборот по дням нарастающим итогом, так:
100
110
150
300
0 - обнуление


Запись1 - это первая видимо, Запись2 - вторая
Начало - Итог = 0
1. 110 >= 100 = истина
Итог = 0 + (100 - 110) = -10

2. 150 >= 110 = истина
Итог = -10 + (110 - 150) = -50

3. 300 >= 150 = истина
Итог = -50 + (150 - 300) = -200

4. 0 >= 300 = ложь
Итога = -200 + 300 = 100
...

Что это?
21 shuhard_серый
 
05.06.15
17:05
(20) балдой об стенку побейся
тебе же русским языком ТС всё объяснил
22 ВРедная
 
05.06.15
17:06
(21) Да, страшно представить, как и что он этой формулой считает. а так все норм
23 D_E_S_131
 
05.06.15
17:19
(20) У ТС Запись2-Запись1 в (5), а у тебя наоборот. В итоге "Итог" будет 500 — а ИМХО это есть оборот за период выборки записей.
24 itlikbez
 
05.06.15
17:21
(23) У нее как у ТС. Видимо, ТС слегка перепутал.
25 Fragster
 
гуру
05.06.15
17:25
(23) нет, "оборот" будет 300, так как первая 100 - это тоже накопительный итог. правильно найти все записи перед обнулением, добавить еще последнюю запись и просуммировать их.
26 Fragster
 
гуру
05.06.15
17:26
но проектировщик этого регистра сказочный дятел. регистры нужно проектировать от того, какая информация потом из них будет тягаться (+ делать задел на будущее).
27 ВРедная
 
05.06.15
17:26
(23) У меня как раз так, как у ТС.
Он в условии определяет, что запись 1 >= Запись 2, а потом вычитает из меньшего большее
28 ВРедная
 
05.06.15
17:27
(25) Как я поняла - у него накопительный итог, т.е. складывать все нельзя, надо найти последнюю запись перед нулем - она и будет итогом месяца.
29 Fragster
 
гуру
05.06.15
17:27
например если запихивать не итог, а собственно изменение - то получить "итог" можно суммой за последний период. а еще можно отдельный РС с "итогами" хранить. а вот сумму за несколько периодов - получать намного легче, чем в структуре автора
30 Fragster
 
гуру
05.06.15
17:28
(28) да, я так и пишу. только месяц в твоем примере один, а у автора - много, видимо
31 ВРедная
 
05.06.15
17:31
(30) да тут регистр накопления просится, конечно.
32 ВРедная
 
05.06.15
17:32
(30) точно, это я уже в пятницу читаю через слово :)
33 Ildarovich
 
06.06.15
10:25
Несмотря на странный вид этого реккурентного соотношения, это всего лишь задача нарастающего итога, осложняющегося его сбрасыванием в конце месяца. Никакого сравнения записей здесь не нужно. Нужна помесячная группировка с агрегатной функцией "максимум".

Если нужен общий итог, то запрос будет таким:
//////////////////////
ВЫБРАТЬ
    СУММА(ВложенныйЗапрос.ИтогМесяца) КАК ИтогВсего
ИЗ
    (ВЫБРАТЬ
        МАКСИМУМ(Записи.РастущаяВМесяцеСумма) КАК ИтогМесяца
    ИЗ
        РегистрСведений.Записи КАК Записи
    
    СГРУППИРОВАТЬ ПО
        МЕСЯЦ(Записи.Период)) КАК ВложенныйЗапрос
////////////////////

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