1с Рекурсия

1. novobranec 17.09.20 06:44 Сейчас в теме
Добрый день, написал код, который должен выводить все числа от 20 до 40, но вывод хочу сделать непосредственно с клиента, не совсем понимаю, как мне передать этот расчет в [ Сообщить(Число); ] именно на клиента, при вызове сообщить на клиенте, выводит только последние число (40)
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
12. DmitriyPopow 33 17.09.20 07:21 Сейчас в теме
(11)
оизвести расчет в серверном вызове, а вывод информации должен быть осуществлён на клиенте, но теперь я в тупике и не могу понять, как это вообще б

&НаКлиенте
Процедура Вход()
Вывод(20, 40);
конецпроцедуры

&НаКлиенте
Процедура Вывод(Число1, число2)
Если Число1 < число2 Тогда
Расчет(Число1);
Сообщить(Число1);
Вывод(Число1, число2)
КонецЕсли; 
конецпроцедуры

&НаСервере
Процедура Расчет(Число1)
число1=число1+1;
конецпроцедуры
Показать

Не отлаживал но вижу так. попробуйте
novobranec; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
14. spacecraft 17.09.20 07:55 Сейчас в теме
(1) похоже на тестовое задание.
Все расчеты нужно делать на сервере и выводить на клиента по мере выполнения расчетов.
Тупо каждый раз вызывать сервер для расчета в рекурсии это завалить тест.
Используйте вызов фонового задания (где и делать рекурсию с выполнением расчетов) с передачей сообщения пользователю.
2. DmitriyPopow 33 17.09.20 06:55 Сейчас в теме
у вас сейчас рекурсия сначала все считает. возвращает 40 и ее выводите в сообщения.
если хотите Сообщить на клиенте. а вычисление на сервере тут рекурсия не подойдет.
3. novobranec 17.09.20 06:59 Сейчас в теме
(2)То-есть функция не может передавать данные расчета на клиент?
5. PerlAmutor 129 17.09.20 07:01 Сейчас в теме
(3) Серверные процедуры и функции не могут вызывать клиентские.
6. DmitriyPopow 33 17.09.20 07:02 Сейчас в теме
(3)
функция не может передавать данные расчета на клиент?

Может. но т.к. она вычисляет в рекурсии она возвращает 1 раз когда делаете Возврат
novobranec; +1 Ответить
4. PerlAmutor 129 17.09.20 07:00 Сейчас в теме
Метод Сообщить может сообщать и с сервера. По факту у Вас рекурсия работает только в функции ПолучаемЧислоОтИДоНаСервере. Клиентская функция ПолучаемЧислоОтИДо() вызывается лишь 1 раз при входе. Это 2 разные функции. Если даже перенести весь расчет на клиент, то у вас упадет платформа, т.к. рекурсия бесконечная. Ну а серверные бесконечные рекурсии обрушивают rphost'ы на которых могут работать другие пользователи, что гораздо страшнее.
Прикрепленные файлы:
Рекурсия.epf
novobranec; +1 Ответить
7. DmitriyPopow 33 17.09.20 07:03 Сейчас в теме
(4)
о у вас упадет платформа, т.к. рекурсия бесконечная.

у него рекурсия не бесконечная. как только Число > число1 (41 > 40) происходит возврат
9. PerlAmutor 129 17.09.20 07:08 Сейчас в теме
(7) Возврат происходит лишь из одного уровня, затем срабатывает условие, что 41-1 опять равно 40 и выполняется вход в рекурсию заново. Проверьте на моей обработке, там код 1 в 1. В итоге получается 40, 41, 40, 41, 40, 41 .... и так до бесконечности.
10. DmitriyPopow 33 17.09.20 07:10 Сейчас в теме
(9)
происходит лишь из одного уровня, затем срабатывает условие, что 41-1 опять равно 40

да похоже на то) мой внутренний компилятор сбой дал)
11. novobranec 17.09.20 07:14 Сейчас в теме
(10)Просто по условиям задачи нужно было сделать вызов процедуры/функции самой себя, не использовать циклы, произвести расчет в серверном вызове, а вывод информации должен быть осуществлён на клиенте, но теперь я в тупике и не могу понять, как это вообще будет осуществленно, то-есть расчет от 20 - 40, должен выводиться на клиенте
12. DmitriyPopow 33 17.09.20 07:21 Сейчас в теме
(11)
оизвести расчет в серверном вызове, а вывод информации должен быть осуществлён на клиенте, но теперь я в тупике и не могу понять, как это вообще б

&НаКлиенте
Процедура Вход()
Вывод(20, 40);
конецпроцедуры

&НаКлиенте
Процедура Вывод(Число1, число2)
Если Число1 < число2 Тогда
Расчет(Число1);
Сообщить(Число1);
Вывод(Число1, число2)
КонецЕсли; 
конецпроцедуры

&НаСервере
Процедура Расчет(Число1)
число1=число1+1;
конецпроцедуры
Показать

Не отлаживал но вижу так. попробуйте
novobranec; +1 Ответить
13. novobranec 17.09.20 07:26 Сейчас в теме
(12)
число1=число1+1;


Работает, Благодарю, сейчас буду дальше разбираться)
15. FatPanzer 17.09.20 09:29 Сейчас в теме
(12) Что за куча серверных вызовов? Надо прост рекурсию на сервере организовать таким образом, чтобы оператор Возврат срабатывал только один раз. Ничего сложного в этом нет.
16. DmitriyPopow 33 17.09.20 10:09 Сейчас в теме
(15)
за куча серверных вызовов? Надо прост рекурсию на сервере организовать таким образом, чтобы оператор Возврат срабатывал только один раз. Ничего сложного в этом нет.

может вы не вчитались в вопрос. надо выводить в сообщения 21,22,23,24 и т.д. а не просто 40
да куча. но так поставлена задача.
17. FatPanzer 17.09.20 10:14 Сейчас в теме
(16) Зафигачте массив, который будет прошивать всю рекурсию, в него кладите необходимые числа, а потом на клиенте в цикле выводите. Это будет верно и с точки зрения клиент-серверной архитектуры, и условиям задачи не противоречит вообще.

Или вообще строку чисел через запятую. Про отдельную итерацию вывода для каждого числа в задаче нет ни слова.
user1464234; +1 Ответить
18. DmitriyPopow 33 17.09.20 10:16 Сейчас в теме
(17)
рошивать всю рекурсию, а потом на клиенте в цикле выводите. Это будет верно и с точки зрения клиент-серверной архитектуры, и условиям задачи не противоречит вообще.

посмотрите 11 сообщение. там сказано. не используя циклы
19. FatPanzer 17.09.20 10:18 Сейчас в теме
(18) Так то про расчет, а не про вывод результата. Опять же я предложил вывод в одну строку (можно даже не через запятую, а с переводом строки, чтобы создать видимость параллельности).
20. DmitriyPopow 33 17.09.20 10:28 Сейчас в теме
(19) там не сказано для чего нельзя использовать цикл конкретно. т.ч. считаем что вовсе нельзя
согласен, в переменную накапливать 21 + символы.ПС + 22 и т.д. и результат будет похож на выходе. как вариант решения. будет оптимальнее. без кучи обращений к серверу.
8. novobranec 17.09.20 07:04 Сейчас в теме
21. пользователь 23.09.20 10:37
Сообщение было скрыто модератором.
...
22. slasher777 28.09.20 13:57 Сейчас в теме
массив, который будет прошивать всю рекурсию, в него кладите необходимые числа, а потом на клиенте в цикле выводите. Это будет верно и с точки зрения клиент-серверной архитектуры, и условиям задачи не противоречит вообще.

Или вообще строку чисел через запятую. Про отдельную итерацию вывода для каждого числа в задаче нет ни слова.
23. FatPanzer 28.09.20 14:45 Сейчас в теме
(22) Вы что-то хотели сказать?
24. пользователь 29.09.20 20:32
Сообщение было скрыто модератором.
...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот