Придумать простой алгоритм #646621


#0 by Legj
Коллеги, помогите придумать красивый алгоритм. Задача простая: нужно, чтобы пользователь вводил данные в диалог вввода строки до тех пор, пока не введет что-нибудь либо пока не откажется от ввода. Не могу придумать как обойтись без дублирования кода: получается либо ВвестиСтроку нужно два раза написать, либо два раза проверить на пустую строку. Например, вот такая какашка:
#1 by Legj
либо определять первое вхождение в цикл – то же уродство
#2 by Мимо Проходил
А сначала сделать пустой? И предупреждение после проверки?
#3 by Мимо Проходил
+ Бесконечный цикл. Прервать по условию, иначе предупреждение
#4 by Fragster
Пока Не ВвестиСтроку(НомерЗаказа, "Номер накладной") ИЛИ ПустаяСтрока(НомерЗаказа) Цикл; КонецЦикла;
#5 by Fragster
Пока Не ВвестиСтроку(НомерЗаказа, "Номер накладной") ИЛИ ПустаяСтрока(НомерЗаказа) Цикл; КонецЦикла; Если ПустаяСтрока(НомерЗаказа) Тогда Возврат КонецЕсли;
#6 by Fragster
вообще фиговая задача
#7 by Fragster
Пока Не ВвестиСтроку(НомерЗаказа, "Номер накладной") И ПустаяСтрока(НомерЗаказа) Цикл; КонецЦикла; Если ПустаяСтрока(НомерЗаказа) Тогда Возврат КонецЕсли;
#8 by acsent
галка номерзаказа и строка
#9 by pessok
++
#10 by acsent
а где отказ?
#11 by Tymoha
#12 by КонецЦикла
У чувака некислый стаж
#13 by Fragster
какой отказ?
#14 by Tymoha
+ точнее, учитывая что пользователь может отказаться
#15 by Tymoha
хотя, задача дурная - да ... что значит пока не введет или пока не откажется?
#16 by Reset
Пока ПустаяСтрока(НомерЗаказа) И ВвестиСтроку(НомерЗаказа) Цикл КонецЦикла;
#17 by Reset
хотя лучше в плане - можно добавить флаг отказал ся или таки что-то ввел
#18 by Нуф-Нуф
копрокодеры детектед
#19 by Reset
Дай покопрокодить в первый рабочий день
#20 by Tymoha
))))
#21 by Нуф-Нуф
вы еще динамическим обновлением воспользуйтесь
#22 by Legj
(2, 3) Строка и так сначала пустая. Предупреждение после проверки в моем примере кода ничего не меняет. Бесконечный цикл – да, это идея. Уже лучше получится, но всё-таки не то.
#23 by Legj
тонко, очень, оценил.
#24 by Legj
+ нет, не то, я подумал это ответ на never mind
#25 by Мимо Проходил
Кроме первого прохода ничего не меняет.
#26 by Legj
Пока вот такой вариант. Существенно элегантней, но не то. Слишком заумный, логически сложный алгоритм получился для такой простой задачи. Без подробного комментария читателю кода будет очень сложно въехать, что имел в виду писатель: НомерЗаказа = "";
#27 by Reset
В смысле "не то"? НомерЗаказа=""; Пока ВвестиСтроку(НомерЗаказа) И ПустаяСтрока(НомерЗаказа) Цикл КонецЦикла;
#28 by Legj
А как выглядит решение целиком ? Если начать его додумывать, и пробовать, то окажется, что не так всё просто. Иначе бы я тему не создал.
#29 by Reset
Оно там целиком. Про необходимость вывода предупреждения в не было
#30 by Фокусник
рекурсию уже предлагали? :)
#31 by Legj
Предупреждение не обязательно. Но и без того ваше решение не рабочее. Что будет, если пользователь нажмет "Отмену"? Исполнение кода продолжится дальше, а нужно, чтобы прервалось (Возврат).
#32 by acsent
зачем делать через ввести строку? А если ошибется и нужно поправить?
#33 by Reset
Про это в ни слова! тех задание в :
#34 by Волесвет
кхм... в снежке вроде проверка на заполненность поля или нет?))
#35 by Reset
Так что не бросайся "решение не рабочее".
#36 by Reset
Вот еще вброс: ~ВводимНомер:
#37 by Reset
не читать, прогнал :( вот что значит нет опыта в таком стиле
#38 by Reset
Тогда в Замени "прервать" на "возврат"
#39 by Legj
Красиво, да. Но очень академично. В 1с как-то принято рекурсию использовать только тогда, когда это действительно единственное решение (деревья с условно бесконечным уровнем вложенности). Т.к. язык беден, нет вложенных функций. А вынос подобных алгоритмов в полновесную функцию сильно утяжеляет код.
#40 by Мимо Проходил
Вам шашечки? Или ехать?
#41 by Fragster
если ввести пустую строку ~1500 раз - 1ска молча упадет
#42 by Legj
, Да, предупреждение таки подразумевается, что нужно.
#43 by Мимо Проходил
Если шашечки - то, что надо. Красиво. Но не функционально. :))
#44 by Legj
Так вот почему вас больше часа не было в теме.
#45 by Fragster
нет, я работал
#46 by Reset
Имхо: По моему, нужно быть сильным идиотом, если видеть перед собой окно с предложением ввода, которое не исчезает, если ничего не вводить и не понимать что от тебя требуют
#47 by Legj
Юзабилити такого решения – это другой вопрос. Но если хочется сделать именно с предупреждением, существует ли простой алгоритм, без рекурсии, без бесконечного цикла? Я вот не смог придумать, как голову не ломал, вот и полез на мисту. Возможно, таки не решаемая задача.
#48 by Fragster
бесконечный процесс не может быть без бесконечного цикла
#49 by Reset
доработал : Пока Истина Цикл
#50 by Fragster
почему не "Для" а "пока истина"?
#51 by Reset
Не сообразил. см
#52 by Legj
И не кипятитесь вы так. Я резковато оценил ваш код не намерено.
#53 by Reset
я не кипятюсь. Я пытаюсь, как могу, развлекаться.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С