HELP!!!!

1. ATOM_MAN 23.01.08 11:28 Сейчас в теме
Подскажите, пожалуйста, куском программы как сделать следующее: Нужно чтобы при заполнении табличной части документа программа сравнивала все строки табличной части "КраткоеНаименованиеДолжности" и для одинаковых выводила максимальное значение оклада из выборки.
Помогите, очень надо вот пример кода как я делал:
Для каждого Строка Из Должности Цикл
Если Строка.ДолжностьКраткое=ВыборкаПоСотрудникам.ДолжностьКраткое Тогда
НоваяСтрока.МаксСтавка=Макс(ВыборкаПоСотрудникам.Оклад)
КонецЕсли;
КонецЦикла;
Но в этом случае в МаксСтавка записывается оклад каждого сотрудника, а нужно чтобы у всех сотрудников у которых ДолжностьКраткое одинаковое была одинаковая МаксСтавка, которая в свою очередь есть наибольший оклад по этой должности.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Шёпот теней 1782 23.01.08 15:44 Сейчас в теме
Мне часто нужно делать подобное в табличномПоле с большим количеством строк... может подойдёт...

//процедура - Сортирует ТабПоля по нашейКолонке, опрашивает строки Табполя,
//находит строки с одинаковыми значениями в нашейКолонке и вставляет любыеДанные
//в соответствующие строки с одинаковыми значениями по нашейКолонке ТабПоля

НомерКолонкиСДанными = 1; //Нпример 1
имяКолонки = ТабличноеПолеОбщая.Колонки.Получить(НомерКолонкиСДанными).Имя;//запомним имя нашей колонки
ТабличноеПолеОбщая.Сортировать(имяКолонки); //Отсортируем по нашей колонке
ПоследняяСтрокТабПоля = ТабличноеПолеОбщая.Количество(); //Запомним количество строк в ТабПоле
//
Для Каждого строкаТабЧасти Из ТабличноеПолеОбщая Цикл //перебираем каждую строку Табполя
//
Если ТабличноеПолеОбщая.Индекс(строкаТабЧасти) = 0 Тогда //Это самая первая строка - запоминаем начальные данные и снова цикл
ИндексСтрокиНачало = строкаТабЧасти;//Ссылка на строку ТабПоля по кото всё сравниваемрой
ЗначениеНомерКолонкиСДаннымиВыше = строкаТабЧасти.Получить(НомерКолонкиСДанными); //первое значение для сравнений
Продолжить;//Цикл заново
КонецЕсли;
//
ЗначениеНомерКолонкиСДаннымиНиже = строкаТабЧасти.Получить(НомерКолонкиСДанными); //Запомним значение текущей строки ТабПоля
//
Если ЗначениеНомерКолонкиСДаннымиНиже = ЗначениеНомерКолонкиСДаннымиВыше Тогда //Одинаковые что-нибудь делаем: выводила максимальное значение оклада из выборки
строкаТабЧасти.Установить(НомерКолонки, "максимальное значение");
//строкаТабЧасти.Установить(4, 1111); //для примера
Иначе //Новое значение для сравнения
ИндексСтрокиНачало.Установить(НомерКолонки, "максимальное значение");
//ИндексСтрокиНачало.Установить(4, 2222); //для примера
ЗначениеНомерКолонкиСДаннымиВыше = строкаТабЧасти.Получить(НомерКолонкиСДанными); //новое значение для сравнений
ИндексСтрокиНачало = строкаТабЧасти;//Ссылка на строку ТабПоля по кото всё сравниваемрой
КонецЕсли;
//
КонецЦикла;
//


Если отказаться от сортировки, при небольших количествах строк, можно оббежать таблицу несколько раз - впринципе та же сортировка только без двигания строк... или выгрузить колонкуДокумента в массив и там обработать... вариантов много...

Удачи!
3. ATOM_MAN 23.01.08 17:27 Сейчас в теме
Спасибо большое всё получилось
Оставьте свое сообщение

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