gifts2017

Вычисление арифметических выражений программно (строковый калькулятор)

Опубликовал Ильшат (shatt) в раздел Программирование - Практика программирования

Как в 1с программно можно вычислить арифметическое выражение?
Для новичков ... и тех кто не читает жёлтых книжек :)
Те кто читают книжки, могут даже не тратить  время на чтение этой заметки.
Тут либо знаешь об этом, либо нет.

Надеюсь данная тема не боян :)

Долго искал по поисковикам "Строковый калькулятор 1с". Ничего не нашел.

Значит либо нет про это информации, либо хорошо запрятали :)

 

Цель передо мной стояла благая:

необходимо было в табличной части документа, перед графой количество, вставить графу "Расчет количества", 

где менеджеры могли б записывать выражения типа "3+8,7*2" и.т.д.

нужно чтобы эта информация сохранялась, а выражение считалось.

Строковый анализатор чего-то не слишком хотелось писать, но выхода не было видно.

Ну, и соотвественно взялся за дело... Но то дело хлопотное и неохотное. Ну уж слишком не хотелось этого делать, ... и вот пришло озарение!!! Функция Вычислить();. Спасибо тебе Один Эс:)

Вот что умеет делать Один Эс 8:

выражение = "5+6.2*2";

ответ = Вычислить(выражение);

Ну и для общего счастья, можно еще заменить все введенные запятые на точки, и проверить на корректность ввода:

 попытка
     ответ  = Вычислить(СтрЗаменить(выражение,",","."));
 Исключение
    Предупреждение("Введите выражение, состоящее только из чисел, скобок и операций / * + -");

 КонецПопытки;

Тут конечно не проверяется правильная расстановка скобок и их парность. Но этого в моём случае не требовалось.

 

Надеюсь, заметка для кого-нибудь будет полезной Cool

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Строковый калькулятор
.epf 6,44Kb
28.05.12
52
.epf 6,44Kb 52 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Александр Медведев (anig99) 27.01.11 21:52
Вот прочитали бы желтые книжки или хотя бы синтаксис-помощник и не было бы таких вопросов...
2. Игорь Исхаков (Ish_2) 27.01.11 22:01
(1) Автор находится на стадии освоения 1с. Вторая скромная публикация.
Решил поделиться своим строковым калькулятором. И что такого ?
Чего ты со своим минусом лезешь ?
BigB; Spartan; +2 Ответить 1
3. Александр Медведев (anig99) 27.01.11 22:05
(2) для простой публикации нет "фишки" или объема...
А так - это маленький кусок из текста аля "Просты примеры разработки".
4. Ильшат (shatt) 27.01.11 22:22
Я признаюсь, редко лезу в эти полезные желтые книжки...
Хотя их надо бы почитать от корки до корки.
Но где у 1сников на это время :)
Сразу полез в поисковики, но в ответ ничего не получил :(
Вот и решил тут выложить этот пост.
Кто-нибудь поищет, и найдет :)
5. Александр Гладких (yku) 27.01.11 22:54
(4) Частенько опыт показывает (а мне - довольно часто), что книжки читать надо. Временами перелисываю книжки "для новичков" (даже те, что я уже читал) и удивляюсь тому количеству функционала, о котором я и не подозревал. И это чтение позволяет избежать изобретение велосипеда. Конечно, границу между "читать полностью и всё" и "изучить методом тыка(синтаксис помощника)" каждый выбирает сам, но она как правило со временем смещается в сторону первой.
6. Ильшат (shatt) 27.01.11 23:13
Полностью поддерживаю, но почему то мне кажется, что "академических" одинэсников меньшинство.
Так как большинство идут по наторенной дороге:
- типовые обновления
- нетиповые обновления
-легкий перепил печатных форм, доков, отчетов

потихоньку пишем что-то более серьезное, а в это время продолжается первые 3 этапа...
Народу становится больше, а времени меньше... и книжки покрываются пылью :)
7. Ийон Тихий (cool.vlad4) 27.01.11 23:55
Умные книжки читают не для того, чтобы все знать, это невозможно, а как говорил наш препод по квантовой механике вы можете ничего не знать, но обязаны знать где это можно найти. Книжки читают еще и для того, чтобы впоследствии научится чему-нибудь - например программировать с помощью языка, а не на языке. Почему на вашу публикацию так набросились - потому что в ней ничего нет, кроме одной типовой функции, которую быстрее всего найти в справочнике. Согласитесь, что этого как-то маловато. Если нет, тогда предлагаю вам скопом сделать обработки Выполнить(Сообщить("Hello, World!")); и прочие
ЗЫ А книжку сама по себе не представляет ничего, но она бесценна в том случае если сумела помочь человеку понять что-то для него новое. Книги я читаю как правило как справочнки, открываю то что меня интересует и пытаюсь понять. В данном случае понять надо то, что всех функций не знать и не запомнить, и поэтому надо научится искать.
8. Доржи Балбаров (Angeros) 28.01.11 05:03
Нда... как низко пал уровень предложений и разработок. :(
9. Иван (Spartan) 28.01.11 11:25
Злые вы... :D Ну проигнорировали бы, чего минусы-то лепить? Есть и похуже публикации. А тут человек попытался поделиться тем, что для него самого оказалось новым и интересным - хотя бы это похвально.
10. Ийон Тихий (cool.vlad4) 28.01.11 12:04
Почему же злые, ...все в порядке вещей - если бы человек не жаждал оценки сообщества, то не делал бы публикацию, а так, пускай получает то что хотел, гораздо хуже если бы никто ничего не сказал и оценки бы не поставил.
11. Ильшат (shatt) 28.01.11 12:21
(10) Ну в принципе, любой отзыв это хорошо.
Единственно, цель заметки - восполнить пробел в информации про данную возможность.
В книжку тут не сразу полезешь.
Сначала поищешь в поисковиках.
Кто-то начнет искать, и найдет эту заметку.
...и порадуется, что так легко можно решить эту задачку :)
12. Иван (Spartan) 28.01.11 12:28
(10) Не знаю, как бы банально это ни звучало, я выкладываю не ради оценки... Просто делюсь наработками и опытом. Оценка сообщества, конечно, дело приятное, но не приоритетное.
И просто такое ощущение, что все стали сразу крутыми 1с-никами... одномоментно... Короче, хуже от этой публикации мне точно не стало, и раздражения во мне она не вызвала, в отличие от некоторых других. Поставил плюс только ради того, чтоб компенсировать минусы, а так бы прошел мимо.
Ish_2; shatt; +2 Ответить 1
13. Ильшат (shatt) 28.01.11 12:32
(12) теперь "строковый калькулятор 1с" в поисковике выводит нужный ответ
14. Яков Коган (Yashazz) 28.01.11 12:32
(7) Только, извините, не
Выполнить(Сообщить("Hello, World!"));
а, наверное,
Выполнить("Сообщить(""Hello, World!"")");
;)
15. Ийон Тихий (cool.vlad4) 28.01.11 12:50
(14) опечатки у всех бывают, не думал что этот код кому-то понадобится...
16. Игорь Исхаков (Ish_2) 28.01.11 15:05
(15) В (14) тебя поймали - а ты не зевай !
17. Ийон Тихий (cool.vlad4) 28.01.11 16:18
(16) ну да,...чай стыдится нечего - я ж не одинесник...помнится раньше да и сейчас, в некоторых блогах специально ошибки делали, чтоб не копипастили просто так некоторые понимаешь ли...
18. Яков Коган (Yashazz) 28.01.11 18:01
19. dimon_upi (dimon_upi) 02.02.11 20:24
Рекомендую поискать в поиске - обратная польская запись и все что с этим связано - тогда можно будет сделать могучий калькулятор, а ежели еще прилепить сюда С++ или Delphi, то будет совсем гуд.
За разработку (+), за идею реализации (-).
20. Ярослав Радкевич (WKBAPKA) 05.02.11 11:42
эта статья больше похожа на "О! Эврика". Вот если бы написали свой разбор строки и его вычисление, хотя бы с помощью той же польской записи, это было бы интереснее :)
21. Александр Рытов (Арчибальд) 05.02.11 11:51
Плюс за пробуждение ностальгии по моим первым шагам на ИС http://infostart.ru/public/18898/ :D
22. Ильшат (shatshat) 26.05.12 19:29
Спасибо, тезка

2all: мне помогло. споткнулся на моменте, когда надо складывать (а может и не складывать, а делить или умножать) заранее не известно что. "нутром знал" что 1с - интерпретатор а не компилятор, поэтому такая функция синтаксразбора и вычисления "на лету" просто обязана быть, а вот где искать?
в "желтых книжках"? в каком разделе? ... погуглить быстрее и проще

p.s. синтаксический разбор арифметического выражения я в свое время писал (не для 1с) - смертельного ничего в этом нет, вопрос лишь затрат времени и их обоснованности
23. Виталий Барилко (Diversus) 28.05.12 08:54
Следующая публикация будет:
Выполнение произвольного кода в режиме предприятия

Ну и

Выполнить(ТекстКода)

:D

Автору удачи в освоении встроенного языка.
24. al petrov (petrov_al) 28.05.12 09:21
Ну вы уж совсем ...там весь код в одну строчку помещается, автор не стыдно такое публиковать?
25. Владимир Чаклин (vec435) 30.05.12 20:36
очень часто нужно складывать столбец. А вообще где здесь уже был калькулятор в табличном документе
26. Sergio Bargio (sergiobargio1) 31.05.12 12:57
спасибо Вам. я тоже, к своему стыду, не знал.
безусловно, достойны уважения профессиональные кодеры, и к максимализму при оценках Вы великодушно снисходительны.
27. Дмитрий Шерстобитов (DitriX) 18.09.12 16:15
А мне вот помогло. Язык программирования как обычный язык - запоминаешь только те схемы, которые часто используешь. А те которые не использовал долгое время, но помнишь что они были, вот тут такая помощь хороша. Кстати нашел через гуглю.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа