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

15.04.19

Разработка - Механизмы платформы 1С

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    4534    dsdred    53    

72

Как готовить и есть массивы

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

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

24.01.2024    5295    YA_418728146    25    

63

Планы обмена VS История данных

Обмен между базами 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6410    dsdred    36    

112

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    18475    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12088    human_new    27    

74

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

28.08.2023    8824    YA_418728146    6    

141

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6279    sebekerga    54    

94

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    15986    SeiOkami    31    

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

потихоньку пишем что-то более серьезное, а в это время продолжается первые 3 этапа...
Народу становится больше, а времени меньше... и книжки покрываются пылью :)
7. cool.vlad4 2 27.01.11 23:55 Сейчас в теме
Умные книжки читают не для того, чтобы все знать, это невозможно, а как говорил наш препод по квантовой механике вы можете ничего не знать, но обязаны знать где это можно найти. Книжки читают еще и для того, чтобы впоследствии научится чему-нибудь - например программировать с помощью языка, а не на языке. Почему на вашу публикацию так набросились - потому что в ней ничего нет, кроме одной типовой функции, которую быстрее всего найти в справочнике. Согласитесь, что этого как-то маловато. Если нет, тогда предлагаю вам скопом сделать обработки Выполнить(Сообщить("Hello, World!")); и прочие
ЗЫ А книжку сама по себе не представляет ничего, но она бесценна в том случае если сумела помочь человеку понять что-то для него новое. Книги я читаю как правило как справочнки, открываю то что меня интересует и пытаюсь понять. В данном случае понять надо то, что всех функций не знать и не запомнить, и поэтому надо научится искать.
14. Yashazz 4709 28.01.11 12:32 Сейчас в теме
(7) Только, извините, не
Выполнить(Сообщить("Hello, World!"));
а, наверное,
Выполнить("Сообщить(""Hello, World!"")");
;)
15. cool.vlad4 2 28.01.11 12:50 Сейчас в теме
(14) опечатки у всех бывают, не думал что этот код кому-то понадобится...
16. Ish_2 1104 28.01.11 15:05 Сейчас в теме
(15) В (14) тебя поймали - а ты не зевай !
17. cool.vlad4 2 28.01.11 16:18 Сейчас в теме
(16) ну да,...чай стыдится нечего - я ж не одинесник...помнится раньше да и сейчас, в некоторых блогах специально ошибки делали, чтоб не копипастили просто так некоторые понимаешь ли...
8. Angeros 28.01.11 05:03 Сейчас в теме
Нда... как низко пал уровень предложений и разработок. :(
9. Spartan 365 28.01.11 11:25 Сейчас в теме
Злые вы... :D Ну проигнорировали бы, чего минусы-то лепить? Есть и похуже публикации. А тут человек попытался поделиться тем, что для него самого оказалось новым и интересным - хотя бы это похвально.
10. cool.vlad4 2 28.01.11 12:04 Сейчас в теме
Почему же злые, ...все в порядке вещей - если бы человек не жаждал оценки сообщества, то не делал бы публикацию, а так, пускай получает то что хотел, гораздо хуже если бы никто ничего не сказал и оценки бы не поставил.
11. shatt 38 28.01.11 12:21 Сейчас в теме
(10) Ну в принципе, любой отзыв это хорошо.
Единственно, цель заметки - восполнить пробел в информации про данную возможность.
В книжку тут не сразу полезешь.
Сначала поищешь в поисковиках.
Кто-то начнет искать, и найдет эту заметку.
...и порадуется, что так легко можно решить эту задачку :)
12. Spartan 365 28.01.11 12:28 Сейчас в теме
(10) Не знаю, как бы банально это ни звучало, я выкладываю не ради оценки... Просто делюсь наработками и опытом. Оценка сообщества, конечно, дело приятное, но не приоритетное.
И просто такое ощущение, что все стали сразу крутыми 1с-никами... одномоментно... Короче, хуже от этой публикации мне точно не стало, и раздражения во мне она не вызвала, в отличие от некоторых других. Поставил плюс только ради того, чтоб компенсировать минусы, а так бы прошел мимо.
Ish_2; shatt; +2 Ответить
13. shatt 38 28.01.11 12:32 Сейчас в теме
(12) теперь "строковый калькулятор 1с" в поисковике выводит нужный ответ
18. Yashazz 4709 28.01.11 18:01 Сейчас в теме
19. dimon_upi 02.02.11 20:24 Сейчас в теме
Рекомендую поискать в поиске - обратная польская запись и все что с этим связано - тогда можно будет сделать могучий калькулятор, а ежели еще прилепить сюда С++ или Delphi, то будет совсем гуд.
За разработку (+), за идею реализации (-).
20. WKBAPKA 214 05.02.11 11:42 Сейчас в теме
эта статья больше похожа на "О! Эврика". Вот если бы написали свой разбор строки и его вычисление, хотя бы с помощью той же польской записи, это было бы интереснее :)
21. Арчибальд 2706 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 2306 28.05.12 08:54 Сейчас в теме
Следующая публикация будет:
Выполнение произвольного кода в режиме предприятия

Ну и

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

:D

Автору удачи в освоении встроенного языка.
24. petrov_al 10 28.05.12 09:21 Сейчас в теме
Ну вы уж совсем ...там весь код в одну строчку помещается, автор не стыдно такое публиковать?
25. vec435 15 30.05.12 20:36 Сейчас в теме
очень часто нужно складывать столбец. А вообще где здесь уже был калькулятор в табличном документе
26. sergiobargio1 118 31.05.12 12:57 Сейчас в теме
спасибо Вам. я тоже, к своему стыду, не знал.
безусловно, достойны уважения профессиональные кодеры, и к максимализму при оценках Вы великодушно снисходительны.
27. DitriX 2091 18.09.12 16:15 Сейчас в теме
А мне вот помогло. Язык программирования как обычный язык - запоминаешь только те схемы, которые часто используешь. А те которые не использовал долгое время, но помнишь что они были, вот тут такая помощь хороша. Кстати нашел через гуглю.
28. v3rter 28.03.17 13:22 Сейчас в теме
Интересно, ЗавершитьРаботуСистемы(Ложь) он тоже правильно вычислит? )
Оставьте свое сообщение