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

Вывод максимума из столбца таблицы

Автор b1ackjke, 03 дек 2012, 15:12

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

b1ackjke

есть таблица в которой есть значения состоящая из столбцов M1,M2,M3,M4 и J. Столбец J - это сумма элементов M1-m4*1/4. Вопрос в том как вывести максимальный элемент из столбца J в поле "ответ"?  В 1С написании модулей практически ничего не понимаю, помогите пожалуйста  :( Хотя бы общие наводки, как это сделать...

MuI_I_Ika

Можно отсортировать таблицу по этой колонке по убыванию. Первая строка - будет ответ.
Можно перебором строк со сравнением значений функцией МАКС()
Можно сделать запрос и в нем вычислить максимальное значение.

Dethmontt

Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

b1ackjke


Процедура Поиск_Максимального_Значение_В_Колонках_Заполняемая_ТаблицаНажатие(Элемент)
    Для Колоноки=0 По Заполняемая_Таблица.Колонки.Количество()-1 Цикл
        Сообщить("В колонке "+Заполняемая_Таблица.Колонки[Колоноки].Заголовок+" максимальное значение = "+Максимольное_Значение_Колонки_Вернуть(Колоноки,Заполняемая_Таблица));
    КонецЦикла;
       
КонецПроцедуры


расскажите пожалуйста немного про синтаксис? В данном случае название процедуры может быть любым? И откуда берется значение "Заполняемая_Таблица"? Это название Табличной части?
Добавлено: 03 дек 2012, 21:17



Функция ВернутьМаксимольноеЗначениеКолонки(Знач ИмяКолонки="",таблица)

    Если ПустаяСтрока(ИмяКолонки) Тогда
        Возврат 0;
    КонецЕсли;
   
    Список = Новый СписокЗначений;
   
    Список.ЗагрузитьЗначения(таблица.ВыгрузитьКолонку(ИмяКолонки));
   
    Если Список.Количество() = 0 Тогда
        Возврат 0;
    КонецЕсли;
   
    Список.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
   
    Возврат Список[0].Значение;

КонецФункции // ВернутьМаксимольноеЗначениеКолонки()


Нашел функцию нахождения максимума (она описана выше). Что передавать в качестве параметров(В качестве ИмяКолонки видимо "J")?  и как передать параметр таблица, из формы документа.

Dethmontt

Процедура КнопкаВыполнитьНажатие(Кнопка)

        //Переменная ТП - реквизит формы с типом Табличное поле (таблица значений)
    //Пример1
    Для Сч=0 ПО ТП.Колонки.Количество()-1 Цикл
        Сообщить("В колонке <"+ТП.Колонки[Сч].Заголовок+"> максимальное значение = "+ВернутьМаксимольноеЗначениеКолонки(Сч,ТП));
    КонецЦикла;
    //Пример2
    Сообщить("В колонке <МояКолонка> максимальное значение = "+ВернутьМаксимольноеЗначениеКолонки("МояКолонка",ТП));
    //Пример3
    Сообщить("В первой колонке максимальное значение = "+ВернутьМаксимольноеЗначениеКолонки(0,ТП));
       
КонецПроцедуры

//Описание
//Применимо только для числовых значений
//------------------------------
//Параметры
//Индекс - тип:Число,строка - Индекс колонки, Имя колонки
//таблица - тип: ТаблицаЗначений - Таблица значений или табличное поле с типом таблица значений
Функция ВернутьМаксимольноеЗначениеКолонки(Знач Индекс="",таблица)

    Если ПустаяСтрока(Индекс) Тогда
        Возврат "Не задан индекс";
    КонецЕсли;
   
    Список = Новый СписокЗначений;
   
    Список.ЗагрузитьЗначения(таблица.ВыгрузитьКолонку(Индекс));
   
    Если Список.Количество() = 0 Тогда
        Возврат "В колонке отсутствуют значения";
    КонецЕсли;
   
    Список.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
   
    Возврат Список[0].Значение;

КонецФункции // ВернутьМаксимольноеЗначениеКолонки()
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

b1ackjke

У меня есть документ, в нем присутствует Табличная Часть Материалы, она же является реквизитом формы.  Как передать её в качестве параметра? пробовал вот так, но что то не вышло(

ТП = Элементы.Материалы;


За счет того, что не занимался раньше 1C туплю ужасно ( Может не так табличную часть создаю?

Dethmontt

Вот так
ТП = Материалы.Выгрузить();
Сообщить("В колонке количество максимальное значение = "+ВернутьМаксимольноеЗначениеКолонки("Количество",ТП));

Если управляемое приложение то
ТП = Объект.Материалы.Выгрузить();
Сообщить("В колонке количество максимальное значение = "+ВернутьМаксимольноеЗначениеКолонки("Количество",ТП));
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

b1ackjke

Попробовал, вот что пишет:
{Документ.МетодЛапласа.Форма.ФормаДокумента.Форма(60)}: Ошибка при вызове метода контекста (Выгрузить)
   ТП = Объект.Материалы.Выгрузить();
по причине:
Метод недоступен на клиенте

А если выполнять &НаСервере, то как вывести сообщение о максимуме?

cska-fanat-kz

Цитата: b1ackjke от 05 дек 2012, 13:20
Попробовал, вот что пишет:
{Документ.МетодЛапласа.Форма.ФормаДокумента.Форма(60)}: Ошибка при вызове метода контекста (Выгрузить)
   ТП = Объект.Материалы.Выгрузить();
по причине:
Метод недоступен на клиенте

А если выполнять &НаСервере, то как вывести сообщение о максимуме?


в серверной функции получаете ваше максимальное значение
на клиенте ее вызываете и сообщаете результат функции.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

b1ackjke

Наконец то разобрался! Спасибо всем огромное!

Теги:

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

Рейтинг@Mail.ru

Поиск