Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 дек 2024, 16:36

Помогите, пожалуйста, высчитать средний балл

Автор Willy Moon, 29 мая 2015, 18:08

0 Пользователей и 1 гость просматривают эту тему.

Willy Moon

Добрый день, Дамы и Господа.
Есть документ "Текущая успеваемость", в который выставляются оценки студентов. Т.е как журнал. Можно ли сделать так, чтобы он высчитывал среднюю оценку в строке? Нужно сделать так, чтобы брал оценки только из заполненных полей, иначе средний бал получается неверным.

Rasty

1. Получить реквизиты табличной части
2. берем строку проверяем на заполненное значение
3. если значение заполнено плюсуем его в переменную прибавляем к счетчику + 1
Добавлено: 29 мая 2015, 18:48


Ну или вот вам прям готовый код

Счетчик = 0;
Оценка = 0;
n=31;
Для Кажодго Стр Из ВашаТабличнаяЧасть Цикл
    Попытка
        Для i=1 по n Цикл
            Если ЗначениеЗаполнено(Стр[i]) Тогда
                Оценка = Оценка + Стр[i];
                Счетчик = Счетчик + 1;
            КонецЕсли;
        КонецЦикла;
    Исключение
        Стр.СреднийБалл = Оценка/Счетчик;
    КонецПопытки;
КонецЦикла;


Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

Willy Moon

Цитата: Rasty от 29 мая 2015, 18:24
1. Получить реквизиты табличной части
2. берем строку проверяем на заполненное значение
3. если значение заполнено плюсуем его в переменную прибавляем к счетчику + 1
Добавлено: 29 мая 2015, 18:48


Ну или вот вам прям готовый код

Счетчик = 0;
Оценка = 0;
n=31;
Для Кажодго Стр Из ВашаТабличнаяЧасть Цикл
    Попытка
        Для i=1 по n Цикл
            Если ЗначениеЗаполнено(Стр[i]) Тогда
                Оценка = Оценка + Стр[i];
                Счетчик = Счетчик + 1;
            КонецЕсли;
        КонецЦикла;
    Исключение
        Стр.СреднийБалл = Оценка/Счетчик;
    КонецПопытки;
КонецЦикла;


Премного благодарен, сейчас попробую :)

cska-fanat-kz

Rasty,

Если ЗначениеЗаполнено(Стр[i]) Тогда

кто так обращается к каждой отдельной ячейке строки?!
и еще.
в каком случае 1Ска попадет в ветку "Исключение..."?
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Willy Moon

Цитата: Rasty от 29 мая 2015, 18:24
Ну или вот вам прям готовый код

Счетчик = 0;
Оценка = 0;
n=31;
Для Кажодго Стр Из ВашаТабличнаяЧасть Цикл
    Попытка
        Для i=1 по n Цикл
            Если ЗначениеЗаполнено(Стр[i]) Тогда
                Оценка = Оценка + Стр[i];
                Счетчик = Счетчик + 1;
            КонецЕсли;
        КонецЦикла;
    Исключение
        Стр.СреднийБалл = Оценка/Счетчик;
    КонецПопытки;
КонецЦикла;



Данный код не работает. Выдается ошибка "Деление на 0", т.е. цикл не работает и счетчик не меняет свое значение :(

Дмитрий@

n должно быть равно 32, потому что столько дней нет в месяце.
Счетчик должен обновляться (=0) в каждом цикле.
И поскольку присутствует деление должна быть проверка на ноль.


Счетчик = 0;
Оценка = 0;
n=32;
Для Кажодго Стр Из ВашаТабличнаяЧасть Цикл
    Попытка
        Счетчик = 0;
        Для i=1 по n Цикл
            Если ЗначениеЗаполнено(Стр[i]) Тогда
                Оценка = Оценка + Стр[i];
                Счетчик = Счетчик + 1;
            КонецЕсли;
        КонецЦикла;
    Исключение
        Если Счетчик <> 0 Тогда
        Стр.СреднийБалл = Оценка/Счетчик;
        Иначе
        Стр.СреднийБал = 0;
        КонецЕсли;
    КонецПопытки;
КонецЦикла;

temrmal

Конечно ошибка. При первом же цикле исключение срабатывает, а счетчик в этом случае равен 0

Willy Moon

Цитата: temrmal от 30 мая 2015, 18:58
Конечно ошибка. При первом же цикле исключение срабатывает, а счетчик в этом случае равен 0
А как реализовать, чтобы это работало?

Дмитрий@

ЦитироватьА как реализовать, чтобы это работало?
Тот код который я кинул в предыдущем сообщении, он что не работает?

Willy Moon

Цитата: Дмитрий@ от 31 мая 2015, 11:38
Тот код который я кинул в предыдущем сообщении, он что не работает?
К сожалению, нет :(

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск