Имя: Пароль:
1C
1С v8
помогите Разложить "Формулу"
,
0 Apacher
 
21.05.16
20:11
Всем доброго дня/вечера/ночи/утра!

Требуется ваша помощь,
имеется формула, тип - Строка, выглядит "[П_01] + ([П_02] - [П_03])"
[] - открывающий и закрывающий тег показателя, в теге сам показатель, сумма показателей находится в таблице значений, собственно в чем суть, как рассчитать формулу имея все данные....я предполагаю разложить строку, отсеять все лишнее и оставить показатели в массиве, найти в таблице по ним суммы, сцепить, как потом согласно формуле все это рассчитать?
Чет головешка не варит, надеюсь на Вашу помощь....спасибо!
1 GreyK
 
21.05.16
20:17
(0) А почему не [Ширина + ШиринаНаправляющих - 2]!?
2 Apacher
 
21.05.16
20:30
GreyK, не понял вопроса честно говоря?, если про показатели, то имена показателей могут быть произвольными...
3 АнализДанных
 
21.05.16
21:07
Результат = Вычислить(ТвояФормула)
4 Vaflya
 
21.05.16
21:14
(0) не понятен ваш вопрос, это "типовая" схема реализации экселя в 1с. Есть формула - ее аргумменты это колонки таблицы. Пишем [сумма] = [цена] * [количество], перебираем строки таблицы, находим значения по именам колонок и перемножаем, в чем проблема?
5 breezee
 
21.05.16
22:18
(0)
нстрока = СТРЗАМЕНИТЬ(твояформула,"[",Символы.ПС);
нстрока = СТРЗАМЕНИТЬ(твояформула,"]",Символы.ПС);
нстрока = СТРЗАМЕНИТЬ(твояформула,"+",Символы.ПС);
нстрока = СТРЗАМЕНИТЬ(твояформула,"-",Символы.ПС);
(может кто подскажет - можно это все одной функцией штатной как-то сделать?)

//тут цикл по количеству строк - получаешь текущую строку, е помню как делать, гугли "раззложить строку в массив подстрок"
Дальще смотри функцию "НайтиСтроки()" в СП

Не забудь изменять знаки, в зависимости от скобок
6 Матиус III
 
21.05.16
22:27
(0) 1. В цикле заменяешь показатели значениями
2. Попытка Результат = Вычислить(ТвояФормула) КонецПоптки
7 Apacher
 
21.05.16
22:27
не совсем то....вообщем в строке содержатся имена показателей....мне нужно вместо имен подставить значения, уже из готовой таблицы, в которой есть имя и сумма....как вместо имени подставить сумму??? мне нужно что то типа...находим первый открывающийся тег, находим первй закрывающийся тег, [], берем содержимое в тегах, ищем в таблице и заменяем, далее, находи второй открывающийся тег....и так далее
8 Матиус III
 
21.05.16
22:29
(7) Это проверка на дебильность? Как написал так и делай.
9 Apacher
 
21.05.16
22:33
Матиус, я написал с вами одновременно и вашего сообщения не видел, во вторых как это реализовать???

[01] + [02] -[03] /[4]


разложитьвмассив...ну хорошо обойду я несколько раз эти строки, отсею лишнее, соберу их в массив, найду и заменб на показатели....как потом их обратно разложить??? в соответствии с той формулой как было???

или как по тегам обойти первый, второй, третий???
10 hhhh
 
21.05.16
22:39
(7)написали же

Выполнить("П_01 + (П_02 - П_03)")

чего вы чудите?
11 Apacher
 
21.05.16
22:42
(10) П_01 и т.д это строка....заместо п_01 нужно подставить число...
12 hhhh
 
21.05.16
22:47
(11) этим и занимается функция Выполнить. Или Вычислить. Подставляет число.
13 Apacher
 
21.05.16
22:50
(12) оно вычисляет переданное выражение....если бы я их заменил бы....то да....я не знаю как их заменить


[П_01] + [П_02]....

а должно выглядить так

[100] + [100]...

теги заменяем и вычисляем.....как показатели заменить на число????

сохраняя формулу....
14 hhhh
 
21.05.16
23:00
П_01 = 100;
П_02 = 100;
Х = 0;
Выполнить("Х = П_01 + П_02");
15 Apacher
 
21.05.16
23:02
(14) не подходит
16 hhhh
 
21.05.16
23:06
(15) ну не хочешь, как хочешь. Хозяин - барин. Ну делай тогда как хотел сначала, выделяй квадратные скобки и так далее.
17 АнализДанных
 
21.05.16
23:09
(15) Что именно не подходит в примере?
18 АнализДанных
 
21.05.16
23:15
(15)
ФормулаСТегами = "[П_01] + [П_02]";
СтрокаСЧислами = СтрЗаменить(ФормулаСТегами, "[П_01]", ЗначениеЧисла_01);
СтрокаСЧислами = СтрЗаменить(ФормулаСТегами, "[П_02]", ЗначениеЧисла _02);

Результат = Вычислить(СтрокаСЧислами);
19 Матиус III
 
21.05.16
23:33
1.
Для Тэг из СписокТэгов Цикл
СтрЗаменить(СтрокаСФурмулой, "["+Тэг.Ключ+"]", Тэг.Значение);
КонецЦикла;
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший