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

15.04.19

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

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

Файлы

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

Наименование Скачано Купить файл
Строковый калькулятор
.epf 6,44Kb
56 5 000 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

Вступайте в нашу телеграмм-группу Инфостарт

См. также

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

Разберем 15 мифов о работе платформы «1С:Предприятие 8» – как распространенных, так и малоизвестных. Начнем с классики: «Код, написанный в одну строку, работает быстрее, чем многострочный». Так ли это на самом деле?

16.07.2025    31463    TitanLuchs    107    

149

Механизмы платформы 1С Работа с интерфейсом Программист Стажер 1С:Предприятие 8 Бесплатно (free)

Про ООП в 1С и о том, как сделать свой код более кратким и выразительным при помощи использования текучего интерфейса (fluent interface).

03.02.2025    17221    bayselonarrend    127    

68

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

В этой статье подробно рассматривается работа с JSON в XDTO в 1С:Предприятие. Вы узнаете, как сериализовать и десериализовать объекты XDTO в JSON, интегрировать 1С с веб-сервисами и API, а также корректно обрабатывать данные при обмене. Разбираются особенности работы с коллекциями, использование функций восстановления и частые ошибки при работе с JSON и XDTO.

30.01.2025    20982    user2122906    9    

66

Механизмы платформы 1С Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 Бесплатно (free)

Этот материал познакомит вас с механизмом XDTO (XML Data Transfer Objects) в 1С и научит эффективно использовать его возможности. Мы разберёмся, как работать с XML-схемами, создавать модели данных, манипулировать объектами XDTO, а также сериализовать и десериализовать их в XML. Вы узнаете, как использовать XDTO для интеграции с внешними системами, избегать типичных ошибок и оптимизировать код. К концу вы будете уверенно применять XDTO для решения сложных задач обмена данными и автоматизации процессов.

17.01.2025    36612    user2122906    12    

62

Механизмы платформы 1С WEB-интеграция Программист 1С:Предприятие 8 Бесплатно (free)

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

14.01.2025    32099    dsdred    106    

148

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

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

23.06.2024    28160    bayselonarrend    22    

177

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

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

13.03.2024    15291    dsdred    22    

86
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. anig99 2864 27.01.11 21:52 Сейчас в теме
Вот прочитали бы желтые книжки или хотя бы синтаксис-помощник и не было бы таких вопросов...
2. Ish_2 1117 27.01.11 22:01 Сейчас в теме
(1) Автор находится на стадии освоения 1с. Вторая скромная публикация.
Решил поделиться своим строковым калькулятором. И что такого ?
Чего ты со своим минусом лезешь ?
ilyap; BigB; Spartan; +3 Ответить
3. anig99 2864 27.01.11 22:05 Сейчас в теме
(2) для простой публикации нет "фишки" или объема...
А так - это маленький кусок из текста аля "Просты примеры разработки".
4. shatt 38 27.01.11 22:22 Сейчас в теме
Я признаюсь, редко лезу в эти полезные желтые книжки...
Хотя их надо бы почитать от корки до корки.
Но где у 1сников на это время :)
Сразу полез в поисковики, но в ответ ничего не получил :(
Вот и решил тут выложить этот пост.
Кто-нибудь поищет, и найдет :)
5. yku 380 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 4914 28.01.11 12:32 Сейчас в теме
(7) Только, извините, не
Выполнить(Сообщить("Hello, World!"));
а, наверное,
Выполнить("Сообщить(""Hello, World!"")");
;)
15. cool.vlad4 2 28.01.11 12:50 Сейчас в теме
(14) опечатки у всех бывают, не думал что этот код кому-то понадобится...
16. Ish_2 1117 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 4914 28.01.11 18:01 Сейчас в теме
Да это я шутю, шутю!
19. dimon_upi 02.02.11 20:24 Сейчас в теме
Рекомендую поискать в поиске - обратная польская запись и все что с этим связано - тогда можно будет сделать могучий калькулятор, а ежели еще прилепить сюда С++ или Delphi, то будет совсем гуд.
За разработку (+), за идею реализации (-).
20. WKBAPKA 216 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 2339 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 2115 18.09.12 16:15 Сейчас в теме
А мне вот помогло. Язык программирования как обычный язык - запоминаешь только те схемы, которые часто используешь. А те которые не использовал долгое время, но помнишь что они были, вот тут такая помощь хороша. Кстати нашел через гуглю.
28. v3rter 28.03.17 13:22 Сейчас в теме
Интересно, ЗавершитьРаботуСистемы(Ложь) он тоже правильно вычислит? )
Для отправки сообщения требуется регистрация/авторизация