Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сумма по строке с символами
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
maximus
"Бухгалтерия для Украины", редакция 1.2 (1.2.12.2)

Необходимо просуммировать строку табличной части документа, но в строке имеются и цифры и символы. Подскажите как правильно можно вычислить сумму?
logist
По типу "Число"
maximus
Цитата(logist @ 13.03.13, 14:31) необходимо зарегистрироваться для просмотра ссылки



Забыл уточнить, в строке все значения строкового типа, например - 1 2 3 А Б 4 5 Г

Я перевожу их в Число(), но как быть там где уже буквы?
logist
Я вообще не могу понять суть задачи. Ну выберите со строки только цифры, и просуммируйте их. В чем проблема? Или в чем задача...
maximus
а нужно получить :

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Сумма

3 5 1 5 8 А К Н У = 22
Vofka
Это вопрос уже к вам: как вы собираетесь суммировать буквы? 1 + Ъ сколько равно?
maximus
Цитата(maximus @ 13.03.13, 14:42) необходимо зарегистрироваться для просмотра ссылки
а нужно получить :

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Сумма

3 5 1 5 8 А К Н У = 22



Во всех колонках табличной части данные строкового типа
Vofka
Перебирайте символы строки и пропускайте символы, которые нельзя привести к числу.
maximus
Цитата(Vofka @ 13.03.13, 14:46) необходимо зарегистрироваться для просмотра ссылки
Это вопрос уже к вам: как вы собираетесь суммировать буквы? 1 + Ъ сколько равно?



В этом и вопрос, как мне исключить эти буквы?

Цитата(Vofka @ 13.03.13, 14:47) необходимо зарегистрироваться для просмотра ссылки
пропускайте символы, которые нельзя привести к числу



Не совсем понимаю, как это сделать? Именно как впоймать ошибку при приведении типов?
Vofka
Цитата(maximus @ 13.03.13, 14:50) необходимо зарегистрироваться для просмотра ссылки
Именно как впоймать ошибку при приведении типов?

Попытка
   Цифра = Число(СтроковыйСимвол);
   Сообщить("Цифра");
Исключение
   Сообщить("Буква");
КонецПопытки;
Petre
Числа - это десять символов от "0" до "9". Проверить вхождение и преобразовать.
Vofka
Можно по другому ещё: загоняете в какую-то коллекцию все цифры от 0 до 9 и порверяете вхождение туда каждого символа.

Добавлено: это к моему посту выше.
Petre
Зачем?
Если Найти("0123456789", ТекСимвол) Тогда
    ТекСумма = ТекСумма + Число(ТекСимвол);
КонецЕсли;
zay
Функция Расчет( СтрокаСимволов )
    
    ДлинаСтроки = СтрДлина( СтрокаСимволов );
    
    СуммаЧисловыхСимволов = 0;
    
    Для НомСимвола = 1 по ДлинаСтроки Цикл
        
        Код_Символа = КодСимвола(СтрокаСимволов, НомСимвола);
        
        Если (Код_Символа >= 48) И (Код_Символа <= 57) Тогда
            
            Символ = Сред(СтрокаСимволов, НомСимвола, 1);
            
            СуммаЧисловыхСимволов = СуммаЧисловыхСимволов + Число( Символ );
            
        КонецЕсли;
        
    КонецЦикла;
    
    Возврат СуммаЧисловыхСимволов;
    
КонецФункции
ignsv
ОбщегоНазначения.ПреобразоватьВЧисло(Значение)


з.ы. а все ответ снимается.. только сейчас понял, что вы хотите сделать ))
maximus
Всем спаибо за помощь в данном вопросе, реализовал через:

Попытка
   Цифра = Число(СтроковыйСимвол);
   Сообщить("Цифра");
Исключение
   Сообщить("Буква");
КонецПопытки;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.