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

15.04.19

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Строковый калькулятор
.epf 6,44Kb
56
56 Скачать (7 SM) Купить за 3 650 руб.

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

См. также

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

В платформе 8.3.27 появилась возможность использовать WebSocket-клиент. Давайте посмотрим, как это все устроено и чем оно нам полезно.

14.01.2025    5462    dsdred    40    

91

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

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    9854    bayselonarrend    21    

160

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

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    7126    dsdred    18    

81

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

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

24.01.2024    22892    YA_418728146    26    

73

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

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

06.10.2023    25255    SeiOkami    48    

136
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. anig99 2853 27.01.11 21:52 Сейчас в теме
Вот прочитали бы желтые книжки или хотя бы синтаксис-помощник и не было бы таких вопросов...
2. Ish_2 1114 27.01.11 22:01 Сейчас в теме
(1) Автор находится на стадии освоения 1с. Вторая скромная публикация.
Решил поделиться своим строковым калькулятором. И что такого ?
Чего ты со своим минусом лезешь ?
ilyap; BigB; Spartan; +3 Ответить
3. anig99 2853 27.01.11 22:05 Сейчас в теме
(2) для простой публикации нет "фишки" или объема...
А так - это маленький кусок из текста аля "Просты примеры разработки".
4. shatt 38 27.01.11 22:22 Сейчас в теме
Я признаюсь, редко лезу в эти полезные желтые книжки...
Хотя их надо бы почитать от корки до корки.
Но где у 1сников на это время :)
Сразу полез в поисковики, но в ответ ничего не получил :(
Вот и решил тут выложить этот пост.
Кто-нибудь поищет, и найдет :)
5. yku 377 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 4804 28.01.11 12:32 Сейчас в теме
(7) Только, извините, не
Выполнить(Сообщить("Hello, World!"));
а, наверное,
Выполнить("Сообщить(""Hello, World!"")");
;)
15. cool.vlad4 2 28.01.11 12:50 Сейчас в теме
(14) опечатки у всех бывают, не думал что этот код кому-то понадобится...
16. Ish_2 1114 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 366 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 366 28.01.11 12:28 Сейчас в теме
(10) Не знаю, как бы банально это ни звучало, я выкладываю не ради оценки... Просто делюсь наработками и опытом. Оценка сообщества, конечно, дело приятное, но не приоритетное.
И просто такое ощущение, что все стали сразу крутыми 1с-никами... одномоментно... Короче, хуже от этой публикации мне точно не стало, и раздражения во мне она не вызвала, в отличие от некоторых других. Поставил плюс только ради того, чтоб компенсировать минусы, а так бы прошел мимо.
Ish_2; shatt; +2 Ответить
13. shatt 38 28.01.11 12:32 Сейчас в теме
(12) теперь "строковый калькулятор 1с" в поисковике выводит нужный ответ
18. Yashazz 4804 28.01.11 18:01 Сейчас в теме
19. dimon_upi 02.02.11 20:24 Сейчас в теме
Рекомендую поискать в поиске - обратная польская запись и все что с этим связано - тогда можно будет сделать могучий калькулятор, а ежели еще прилепить сюда С++ или Delphi, то будет совсем гуд.
За разработку (+), за идею реализации (-).
20. WKBAPKA 215 05.02.11 11:42 Сейчас в теме
эта статья больше похожа на "О! Эврика". Вот если бы написали свой разбор строки и его вычисление, хотя бы с помощью той же польской записи, это было бы интереснее :)
21. Арчибальд 2709 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 2331 28.05.12 08:54 Сейчас в теме
Следующая публикация будет:
Выполнение произвольного кода в режиме предприятия

Ну и

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

:D

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