Найти сумму всех цифр целочисленного массива 1C

1. user1924077 19.03.23 15:38 Сейчас в теме
Люди добрые помогите новичку в программном коде 1С!

Задача.
Найти сумму всех цифр любого целочисленного массива.
Тоесть, создаем в выделенной обработке Форму, в форме создаем любой реквизит, условно Реквизит1, в который будет вводиться наш массив, создаем команду при обработке которой будет считаться сумма всех цифр заданного в реквизите массива и выводить сообщение с суммой. Например вводим массив 23 457 12 8 должно получиться 2+3+4+5+7+1+2+8=32.

Написал код:


&НаКлиенте
Процедура Команда1(Команда)
				
	//Реквизит1 = Новый Массив();
	МассивЧисел = СтрРазделить(Реквизит1," ", Ложь);
	СуммаЧисел = 0; 
	
	Для каждого ЦифраМассва Из МассивЧисел Цикл
		СуммаЧисел  = СуммаЧисел + Число(ЦифраМассва);		
	КонецЦикла;
	Сообщить("Сумма: " + СуммаЧисел); 
	

КонецПроцедуры
Показать


Но получается не сумма всех цифр, а сумма чисел, если массив 23 457 12 8 то получается 23+457+12+8=500, а надо чтобы было 2+3+4+5+7+1+2+8=32.

Подскажите как доработать код?
Найденные решения
3. ZOMI 141 19.03.23 16:47 Сейчас в теме
Как-то так
ДлинаСтр = СтрДлина(Реквизит1);
СуммаЧисел = 0;
Для N = 1 По ДлинаСтр Цикл
Стр = Сред(Реквизит1,N,1);
Если Найти("123456789",Стр) >0 Тогда
  СуммаЧисел =   СуммаЧисел + Число(Стр);
КонецЕсли;
КонецЦикла;
user856012; +1 Ответить
7. user1863362 19.03.23 19:16 Сейчас в теме
(3) Оптимизируем:
ТипЧисло = Новый ОписаниеТипов("Число");
Сумма = 0; 
Для Индекс = 1 По СтрДлина(Реквизит1) Цикл
    Сумма = Сумма + ТипЧисло.ПривестиЗначение(Сред(Реквизит1, Индекс, 1));
КонецЦикла;
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. spacecraft 19.03.23 17:33 Сейчас в теме
(1)
Функция СуммаЦифрЧиселМассива(Массив)
	Сумма = 0;
	СтрокаЦифр = СтрЗаменить(СтрСоединить(Массив,""),Символ(160),"");
	Для К=1 По СтрДлина(СтрокаЦифр) Цикл
		Сумма = Сумма + Число(Сред(СтрокаЦифр, К, 1));
	КонецЦикла;
	Возврат Сумма;
КонецФункции
2. пользователь 19.03.23 16:46
Сообщение было скрыто модератором.
...
3. ZOMI 141 19.03.23 16:47 Сейчас в теме
Как-то так
ДлинаСтр = СтрДлина(Реквизит1);
СуммаЧисел = 0;
Для N = 1 По ДлинаСтр Цикл
Стр = Сред(Реквизит1,N,1);
Если Найти("123456789",Стр) >0 Тогда
  СуммаЧисел =   СуммаЧисел + Число(Стр);
КонецЕсли;
КонецЦикла;
user856012; +1 Ответить
5. пользователь 19.03.23 18:05
Сообщение было скрыто модератором.
...
8. user1863362 19.03.23 19:17 Сейчас в теме
(5)Там массив как строка цифр, разделенных чем-то
16. пользователь 19.03.23 19:31
Сообщение было скрыто модератором.
...
7. user1863362 19.03.23 19:16 Сейчас в теме
(3) Оптимизируем:
ТипЧисло = Новый ОписаниеТипов("Число");
Сумма = 0; 
Для Индекс = 1 По СтрДлина(Реквизит1) Цикл
    Сумма = Сумма + ТипЧисло.ПривестиЗначение(Сред(Реквизит1, Индекс, 1));
КонецЦикла;
6. Dr.HiHi 2 19.03.23 18:43 Сейчас в теме
(1)
Сумма = 0;
Для Каждого Число Из Реквизит1 Цикл
	Пока Число <> 0 Цикл
		Сумма = Сумма + Число % 10;
		Число = Цел(Число / 10);
	КонецЦикла;
КонецЦикла;
9. spacecraft 19.03.23 19:19 Сейчас в теме
(6) для отрицательных чисел не подойдет.
user856012; +1 Ответить
10. user1863362 19.03.23 19:23 Сейчас в теме
(9)
чисел
там в условии вообще "сумма цифр". Так что пофиг на отрицательные. Но вот "массива" в Реквизит1 уже не будет, это да.
11. user856012 14 19.03.23 19:23 Сейчас в теме
(9)
для отрицательных чисел
В задаче говорится о сумме цифр.

Цифры бывают отрицательными???
12. spacecraft 19.03.23 19:24 Сейчас в теме
(10) (11)
попробуйте взять остаток от деления у отрицательного числа. Оно будет отрицательным.
13. user856012 14 19.03.23 19:27 Сейчас в теме
(12) Попробуйте привести пример отрицательной цифры. ;-)
14. spacecraft 19.03.23 19:29 Сейчас в теме
(13) серьезно? В массиве Числа. Нужно посчитать сумма цифр этих Чисел.
19. user856012 14 19.03.23 19:45 Сейчас в теме
(14) Прошу прощения, не обратил внимания на адресата вашего сообщения (9) - показалось, что ваше замечание относится к коду в (3).

Полностью с вами согласен, работать со строкой (которую автор почему-то называет "массивом") как с числами - некорректно.

Вообще самый простой и легкий для понимания код - в (3), все остальное - от лукавого.

P.S. Он еще и кроссплатформенный - будет работать даже на 7.7! :-)
15. Dr.HiHi 2 19.03.23 19:31 Сейчас в теме
(9) ясно что не подойдет %)) нужно добавить перед вложенным циклом
Число = ?(Число < 0, -Число, Число);


(10) я хз что у автора в реквизит 1... он написал массив чисел))) а что это такое хз... судя по его коду, то там вообще строка

p.s. я написал один из алгоритмов подсчета суммы цифр
17. spacecraft 19.03.23 19:32 Сейчас в теме
(15)
судя по его коду, то там вообще строка

в качестве предположения, это его попытка решить задачу.
18. пользователь 19.03.23 19:37
Сообщение было скрыто модератором.
...
20. gybson 19.03.23 21:56 Сейчас в теме
Чтобы перестать быть новичком, самым первым делом надо научиться не просить решения задачи. Когда человек, не умеющий водить автомобиль, спрашивает на форуме водителей автомобиля, как доехать из Москвы в Питер, то наверное он не очень умный и не очень обучаемый и скорее всего не доедет, но рассказать как доехать сможет.

Для получения N-ного символа строки используется функция Сред(Строка, N, 1).
22. user1924077 20.03.23 02:33 Сейчас в теме
(20)
Для получения N-ного символа строки используется функция Сред(Строка, N, 1).


Спасибо, теперь буду знать.
21. user1924077 20.03.23 02:31 Сейчас в теме
Всем спасибо за помощь и объяснения, извините что не отвечал, был занят. Как многие отмечали, Реквизит1 это строка, в которую пользователем вводится целочисленный массив.
Оставьте свое сообщение

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