Здравствуйте, подскажите пожалуйста, есть таблица значений с показателями(наименование и значение), есть формулы в которых показатели применяются, как организовать обход таблицы значений, чтобы не пришлось строго описывать каждый показатель, как переменную и потом вставлять в формулу, а чтобы автоматом формулы заполнялись значениями показателей(как в excel есть показатели,есть формулы), может через запрос с загрузкой тз как то можно организовать, в итоге нужно получить таблицу формул с итоговыми значениями, например |формула10| п1+п5-п7 | и т.д.
---
Ну задача сводится к тому, что в формулах тебе нужно СтрЗаменить имена показателей на значения. Лучше сделай соответствие вместо таблицы значений, если хочешь сохранить лицо вместе с остатками быстродействия. Хотябы просто пройдись по таблице и перенеси ее в соответствие, оно окупится. Будешь потом соотв.Получить(МояПеременна) фигачить по сотне тысяч раз в секунду.

В итоге получится у тебя из р[10] = п1+п5-п7 такая вот "р[10] = 14 - 56 + 5". Ее отправляешь в Выполнить() и в результате в р[10] будет твоя долгожданная формула. Хотя вот если у тебя в формулах имена переменных не специфичны (то есть мы не можем определить переменные в формуле, не имея таблицы имен под рукой), то тебе придется для каждой формулы полностью проходить таблицу переменных и делать СтрЗаменить имя на значение, но при таком раскладе лицо сохранить уже не получится. Зато не придется рисовать парсер для формул =)
---
Уже как-то сталкивался с именно такой формулировкой, даже посложнее - надо было еще определить какой показатель мешает для полного расчета (т.е. задан неверно), не помню какой вариант решения выбрал тогда.
Сейчас бы сделал так:
Как я понимаю есть таблица Наименование | Значение,
где в Наименовании хранится обозначение показателя, и это обозначение может использоваться в формуле расчета другого показателя.
В Значении - либо число, либо формула.

1. Добавляем колонки Рассчитано, ЗначениеРасчет
2. Выгружаем колонку Наименование в массив, для того чтобы искать в формуле показатели для расчета.
3. Далее бесконечный Цикл (Пока Истина Цикл) с прерыванием в двух случаях
    а) во всех строках Рассчитано = Истина (ВСЕ РАССЧИТАНО)
    б) после выполнения итерации цикла количество строк, где Рассчитано = Истина, не изменилось (ОШИБКАХ В ФОРМУЛАХ)
4. В каждой итерации цикла бежим по строкам таблицы и пытаемся рассчитать те строки, которые еще не рассчитаны.
   а) Рассчитано = Истина - пропуск
   б) в попытке удалось вычислить Число(ТекСтрока.Значение), значит не содержит показателей, записываем значение в ЗначениеРасчет и ставим Рассчитано = Истина. Не удалось, переходим дальше
   в) строка содержит показатели, необходимо заменить их на значения. Бежим по массиву показателей и когда показатель найден, находим строку с показателем - если значение рассчитано - подставляем его, если нет, то значит еще рано - пропуск.

Также пункты 3-4 можно заменить на несколько другой алгоритм:
- сделать рекурсию по расчету показателей, т.е. вызываем функцию РассчитатьЗначение(Формула)
Если в ней есть показатели, то в ней же вызываем снова РассчитатьЗначение(Формула(Показатель))
ну и так далее, опять же либо пока не рассчитается, либо надо следить чтобы рекурсия не зациклилась.
---
Ну задача сводится к тому, что в формулах тебе нужно СтрЗаменить имена показателей на значения. Лучше сделай соответствие вместо таблицы значений, если хочешь сохранить лицо вместе с остатками быстродействия. Хотябы просто пройдись по таблице и перенеси ее в соответствие, оно окупится. Будешь потом соотв.Получить(МояПеременна) фигачить по сотне тысяч раз в секунду.

В итоге получится у тебя из р[10] = п1+п5-п7 такая вот "р[10] = 14 - 56 + 5". Ее отправляешь в Выполнить() и в результате в р[10] будет твоя долгожданная формула. Хотя вот если у тебя в формулах имена переменных не специфичны (то есть мы не можем определить переменные в формуле, не имея таблицы имен под рукой), то тебе придется для каждой формулы полностью проходить таблицу переменных и делать СтрЗаменить имя на значение, но при таком раскладе лицо сохранить уже не получится. Зато не придется рисовать парсер для формул =)
---
Зачем городить этот огород со СтрЗаменить? Вычислить() прекрасно считывает переменные из контекста. Все что нужно - присваивать в цикле переменным п1, п2... пn значения из текущей строки и потом ТекСтрока.Результат = Вычислить(ТекСтрока.Формула)