![]() |
|
Ввод чисел пользователем | ☑ | ||
---|---|---|---|---|
0
Murphy
22.09.15
✎
20:53
|
Недавно начал изучать 1С, столкнулся с такой задачей:
Необходимо несколько раз открыть пользователю форму для ввода числа, а после посчитать сумму этих чисел и вывести на экран. Ввод двух чисел реализовать получилось, но как сделать для 3-х и более, тут у меня никак не получается сообразить. Подскажите, пожалуйста, правильный подход для решения такой задачи. Собственно сам код для ввода двух чисел: Процедура ВводЧисла() Экспорт Оповещение = Новый ОписаниеОповещения("ВводЧисла2", ЭтотОбъект); ПоказатьВводЧисла(Оповещение, 0, "Введите число", 15, 0); КонецПроцедуры Процедура ВводЧисла2(Число1, Параметры) Экспорт Оповещение = Новый ОписаниеОповещения("ВводЧислаЗавершение", ЭтотОбъект, Число1); ПоказатьВводЧисла(Оповещение, 0, "Введите число", 15, 0); КонецПроцедуры Процедура ВводЧислаЗавершение(Число1, Число2) Экспорт Если Число1 = Неопределено Тогда Число1 = 0; ИначеЕсли Число2 = Неопределено Тогда Число2 = 0; КонецЕсли; Если НЕ Число1 = Неопределено И НЕ Число2 = Неопределено Тогда Результат = Число1 + Число2; Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Вы ввели количество " + Результат; Сообщение.Сообщить(); КонецЕсли; КонецПроцедуры |
|||
1
Волшебник
модератор
22.09.15
✎
20:56
|
Издевательство какое...
|
|||
2
Ненавижу 1С
гуру
22.09.15
✎
20:57
|
Если Число1 = Неопределено Тогда
ИначеЕсли Число2 = Неопределено Тогда Если НЕ Число1 = Неопределено И НЕ Число2 = Неопределено Тогда если все же, как говорится |
|||
3
VitShvets
22.09.15
✎
21:00
|
Можно забахать таблицу значений с одной колонкой типа число и таким количеством строк, сколько надо ввести чисел. Потом в цикле обходим, спрашиваем Число + СокрЛП(НомерСтроки). Ну и в конце ТаблицаЗначений.Итог("Колонка")
|
|||
4
фобка
22.09.15
✎
21:08
|
Здесь ошибка, должно быть ВводЧислаЗавершение(Число2, Число1)
|
|||
5
фобка
22.09.15
✎
21:17
|
Конструкция примерно такая
Процедура ВводЧисла(сумма1=0) Опоп= Новый Описаниеоповещения(...,,сумма1); Показатьвводчисла(опоп, );... Конецпроцедуры Процедура ВводЧислаЗавершение(число1, число2) Если число1 = неопределено тогда Сообщить(число2); Возврат; Конецесли; Вводчисла(число1+число2); Конецпроцедуры |
|||
6
Murphy
22.09.15
✎
21:35
|
(3) Интересный вариант, только с таблицами значений я пока не сталкивался, надо будет почитать.
(4) Ну мы их все равно суммируем, поэтому с порядком я не заморачивался. (5) А что такое "сумма1" и откуда оно взялось? К сожалению не очень понял смысл кода. |
|||
7
фобка
22.09.15
✎
21:42
|
(6) это твой результат. Сумма всех введенных значений. Ты получаешь его после того как прекратишь ввод чисел
|
|||
8
фобка
22.09.15
✎
21:44
|
Этих двух процедур достаточно для ввода любого количества значений и получения результата их суммирования. Вот и весь смысл кода
|
|||
9
Murphy
22.09.15
✎
22:47
|
(7) Ваш пример навел на мысль и получилось такое:
Процедура ВводЧисла() Экспорт Сумма1 = 0; Оповещение = Новый ОписаниеОповещения("ВводЧисла2", ЭтотОбъект, Сумма1); ПоказатьВводЧисла(Оповещение, 0, "Введите число 1", 15, 0); КонецПроцедуры Процедура ВводЧисла2(Число1, Сумма1) Экспорт Если НЕ Число1 = Неопределено Тогда Сумма1 = Сумма1 + Число1; КонецЕсли; Оповещение = Новый ОписаниеОповещения("ВводЧисла3", ЭтотОбъект, Сумма1); ПоказатьВводЧисла(Оповещение, 0, "Введите число 2", 15, 0); КонецПроцедуры и т.д. В принципе цель достигнута, таким образом можно сколько угодно окон наплодить, но теперь интересно другое. (8) В моем нынешнем варианте для каждого окна используется своя уникальная процедура. А реально ли обойтись только 2-мя процедурами или это будет слишком сложно? |
|||
10
фобка
22.09.15
✎
22:49
|
(9) реально, это и описано в (5). Две процедуры на любое количество значений
|
|||
11
Murphy
22.09.15
✎
22:53
|
(10) Можете описать подробнее? Не понимаю как в этом случае первая процедура должна работать.
|
|||
12
фобка
22.09.15
✎
23:03
|
(11) с телефона пишу, неудобно мне. Но повторюсь
&наклиенте Процедура ВводЧисла(сумма1=0) Оповещение = Новый ОписаниеОповещения("ВводЧислазавершение", ЭтотОбъект, сумма1); ПоказатьВводЧисла(Оповещение, 0, "Введите число", 15, 0); КонецПроцедуры &наклиенте Процедура ВводЧислаЗавершение(Число1, Число2) Экспорт Если Число1 = Неопределено Тогда Сообщить("результат = "+число2); Возврат; КонецЕсли; Вводчисла(число1+число2); КонецЕсли; |
|||
13
фобка
22.09.15
✎
23:04
|
Если первая процедура не подхватывается командой -изза параметра, тогда просто вынести в аналогичную и вызвать
|
|||
14
Murphy
22.09.15
✎
23:18
|
(13) Блин, вот я тапок, невнимательно смотрел на 2-ю процедуру. Теперь все ясно, спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |