Добрый день.
Помогите, пожалуйста, извернуться в расчете значения.

СКД.
Есть 3 колонки. а| б| в

Нужно посчитать колонку "в" по следующему алгоритму:
Если это первая запись в группировке, берем значение константы, если это не первая запись - вычисляем по формуле: предыдущее значение - колонка б.

В вычисляемых полях, как и в пользовательских, ссылаться на рассчитываемое поле нельзя, т.е. ВычислитьВыражение("в", , , "Предыдущая", "Предыдущая") вызывает ошибку (поле в не найдено).

Есть такой полувыход: поле "в" добавляем как вычислимое, с выражением 0;
Через выражение в макете поля можно все прописать, но как получить значение именно выражения, а не самого поля ( т.е. всегда получает значение 0)

1. Вопрос. Можно ли как-то достучаться до предыдущего значения поля "в" при расчете этого поля?
2. Тут еще второй вопрос есть чуть посложней: значение в колонке "а" нужно вычислять с учетом рассчитанного значения из колонки "в".
3. Вообще реально ли это все сделать на СКД?

Спасибо
---
Вы привязались к увеличению самого вычисляемого поля от самого этого поля.
Я привел пример как выполнить туже задачу в рамках нормального решения на СКД.
Читаем условие задачи:
"Если это первая запись в группировке, берем значение константы, если это не первая запись - вычисляем по формуле: предыдущее значение - колонка б."
Смотрим решение в (4):
"Если это первая запись в группировке, берем значение константы" выполняется?
"если это не первая запись - вычисляем по формуле: предыдущее значение - колонка б.". Другими словами: "если это не первая запись - вычисляем по формуле: значение константы минус сумма колонки б начиная со второй записи"
Проверьте.

Для наглядности вычислений см вложение.
---
тогда что-то в этом роде:

```1c
    Выбор когда НомерПоПорядкуВГруппировке()=1 Тогда ЗначениеКонстанты Иначе ЗначениеКонстанты-ВычислитьВыражение("Сумма(Б)",,"Группировка","Первая(2)","Текущая") Конец
```
---
over partition оно не умеет ни в каком виде. обломайтесь. Единственный выход, если нужно СКД, это подсунуть СКД уже готовую таблицу.
---
вычисляемое поле:

```1c
    Выбор когда НомерПоПорядкуВГруппировке()=1 Тогда 1 Иначе 2 Конец
```

Вместо 1 и 2 подставить свои данные.
---
Выбор Когда ВычислитьВыражение("в",,, "Предыдущая", "Предыдущая") ЕСТЬ NULL Тогда... То же самое.
Вопрос в другом:
Поле "в" - вычисляемое.
При его расчете мне нужно использовать его же предыдущее значение.

Если рассмотреть, например, массив:

Поле в =
выбор когда индекс = 0
      тогда ЗначениеКонстанты
иначе
   в[индекс - 1] - значение поля б
конец
---
тогда что-то в этом роде:

```1c
    Выбор когда НомерПоПорядкуВГруппировке()=1 Тогда ЗначениеКонстанты Иначе ЗначениеКонстанты-ВычислитьВыражение("Сумма(Б)",,"Группировка","Первая(2)","Текущая") Конец
```
---
Вы не правильно поняли суть задачи.

Даже пример с массивом:

Поле в =
выбор когда индекс = 0
тогда ЗначениеКонстанты
иначе
в[индекс - 1] - значение поля б
конец
---
Вы привязались к увеличению самого вычисляемого поля от самого этого поля.
Я привел пример как выполнить туже задачу в рамках нормального решения на СКД.
Читаем условие задачи:
"Если это первая запись в группировке, берем значение константы, если это не первая запись - вычисляем по формуле: предыдущее значение - колонка б."
Смотрим решение в (4):
"Если это первая запись в группировке, берем значение константы" выполняется?
"если это не первая запись - вычисляем по формуле: предыдущее значение - колонка б.". Другими словами: "если это не первая запись - вычисляем по формуле: значение константы минус сумма колонки б начиная со второй записи"
Проверьте.

Для наглядности вычислений см вложение.
---
Да, спасибо. Все верно. Но, правильно поставленное ТЗ..
В общем, я не все описал в задаче, но сам виноват

Константа1 = 43 950
Константа2 = 1000
Константа 3 = 21600

       Поле 1 | А | Б | В
Не обрывной | 22 559 | 209,0 | 43 950
Обрывной | 6 289 | 5539,0 | 38 411
Обрывной | 19 018 | 18268,0 | 20 143
Обрывной | 40 411 | 18061,0 | 23 682
Обрывной | 12 500 | 11750,0 | 33 532
Обрывной | 32 000 | 9 650,0 | 23 882
Не обрывной | 23 882 | 1 532,0 | 43 950

В свою очередь, поле 1 так же вычисляется.
Итого имеем.
Поле 1: Если поле Б меньше константы 2, тогда "Не обрывной" иначе если А = значению В из предыдущей строки, тогда "Не обрывной" иначе "Обрывной"
Поле В: Если поле 1 = "Не обрывной" тогда Константа1 иначе если (Поле В из предыдущей строки - поле А из текущей) / Константа3 < 1 Тогда (Поле В из предыдущей строки - поле А из текущей) + Константа3 иначе (Поле В из предыдущей строки - поле А из текущей)

И тут наступает звездец, потому что это оба вычислимых поля и они оба на основании друг друга вычисляются. И именно поэтому я завязывался на поле В в описании, дабы максимально упростить задачу. Но я не учел что ее можно решить Вашим способм.

Так что спасибо за потраченное время. Решение действительно либо внешний источник, либо функция в ом
---
over partition оно не умеет ни в каком виде. обломайтесь. Единственный выход, если нужно СКД, это подсунуть СКД уже готовую таблицу.
---
Выход - функция в общем модуле. Это решает проблему конкретно в моей ситуации, но работает долго.
Вы же знаете какая это повсеместная проблема: сделать крутой отчет, а потом его постоянно переделывать, потому что "а вот тут мы вот передумали вот так считать, надо так".
Если бы окончательный вариант был известен перед тем как отчет начинал разрабатываться, естественно внешний источник данных, но когда уже полтора десятка ресурсов расписаны и т.д..