Подскажите, пожалуйста, куском программы как сделать следующее: Нужно чтобы при заполнении табличной части документа программа сравнивала все строки табличной части "КраткоеНаименованиеДолжности" и для одинаковых выводила максимальное значение оклада из выборки.
Помогите, очень надо вот пример кода как я делал:
Для каждого Строка Из Должности Цикл
Если Строка.ДолжностьКраткое=ВыборкаПоСотрудникам.ДолжностьКраткое Тогда
НоваяСтрока.МаксСтавка=Макс(ВыборкаПоСотрудникам.Оклад)
КонецЕсли;
КонецЦикла;
Но в этом случае в МаксСтавка записывается оклад каждого сотрудника, а нужно чтобы у всех сотрудников у которых ДолжностьКраткое одинаковое была одинаковая МаксСтавка, которая в свою очередь есть наибольший оклад по этой должности.
Помогите, очень надо вот пример кода как я делал:
Для каждого Строка Из Должности Цикл
Если Строка.ДолжностьКраткое=ВыборкаПоСотрудникам.ДолжностьКраткое Тогда
НоваяСтрока.МаксСтавка=Макс(ВыборкаПоСотрудникам.Оклад)
КонецЕсли;
КонецЦикла;
Но в этом случае в МаксСтавка записывается оклад каждого сотрудника, а нужно чтобы у всех сотрудников у которых ДолжностьКраткое одинаковое была одинаковая МаксСтавка, которая в свою очередь есть наибольший оклад по этой должности.
По теме из базы знаний
- Помощь по релизу 605 в HTML формате и стандартном Win Help
- Help-Desk на 1С 8.2
- Чтение Google Spreadsheet из 1C на примере простой службы Help Desk
- Fast help. Универсальные функции для регистрации внешних отчетов/обработок в 1С 8 на управляемых формах. Использование Синонима отчета/обработки при выполнении кода &НаКлиенте
- Help Desk внутри организации: наш опыт внедрения 1С-Коннект
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Мне часто нужно делать подобное в табличномПоле с большим количеством строк... может подойдёт...
//процедура - Сортирует ТабПоля по нашейКолонке, опрашивает строки Табполя,
//находит строки с одинаковыми значениями в нашейКолонке и вставляет любыеДанные
//в соответствующие строки с одинаковыми значениями по нашейКолонке ТабПоля
НомерКолонкиСДанными = 1; //Нпример 1
имяКолонки = ТабличноеПолеОбщая.Колонки.Получить(НомерКолонкиСДанными).Имя;//запомним имя нашей колонки
ТабличноеПолеОбщая.Сортировать(имяКолонки); //Отсортируем по нашей колонке
ПоследняяСтрокТабПоля = ТабличноеПолеОбщая.Количество(); //Запомним количество строк в ТабПоле
//
Для Каждого строкаТабЧасти Из ТабличноеПолеОбщая Цикл //перебираем каждую строку Табполя
//
Если ТабличноеПолеОбщая.Индекс(строкаТабЧасти) = 0 Тогда //Это самая первая строка - запоминаем начальные данные и снова цикл
ИндексСтрокиНачало = строкаТабЧасти;//Ссылка на строку ТабПоля по кото всё сравниваемрой
ЗначениеНомерКолонкиСДаннымиВыше = строкаТабЧасти.Получить(НомерКолонкиСДанными); //первое значение для сравнений
Продолжить;//Цикл заново
КонецЕсли;
//
ЗначениеНомерКолонкиСДаннымиНиже = строкаТабЧасти.Получить(НомерКолонкиСДанными); //Запомним значение текущей строки ТабПоля
//
Если ЗначениеНомерКолонкиСДаннымиНиже = ЗначениеНомерКолонкиСДаннымиВыше Тогда //Одинаковые что-нибудь делаем: выводила максимальное значение оклада из выборки
строкаТабЧасти.Установить(НомерКолонки, "максимальное значение");
//строкаТабЧасти.Установить(4, 1111); //для примера
Иначе //Новое значение для сравнения
ИндексСтрокиНачало.Установить(НомерКолонки, "максимальное значение");
//ИндексСтрокиНачало.Установить(4, 2222); //для примера
ЗначениеНомерКолонкиСДаннымиВыше = строкаТабЧасти.Получить(НомерКолонкиСДанными); //новое значение для сравнений
ИндексСтрокиНачало = строкаТабЧасти;//Ссылка на строку ТабПоля по кото всё сравниваемрой
КонецЕсли;
//
КонецЦикла;
//
Если отказаться от сортировки, при небольших количествах строк, можно оббежать таблицу несколько раз - впринципе та же сортировка только без двигания строк... или выгрузить колонкуДокумента в массив и там обработать... вариантов много...
Удачи!
//процедура - Сортирует ТабПоля по нашейКолонке, опрашивает строки Табполя,
//находит строки с одинаковыми значениями в нашейКолонке и вставляет любыеДанные
//в соответствующие строки с одинаковыми значениями по нашейКолонке ТабПоля
НомерКолонкиСДанными = 1; //Нпример 1
имяКолонки = ТабличноеПолеОбщая.Колонки.Получить(НомерКолонкиСДанными).Имя;//запомним имя нашей колонки
ТабличноеПолеОбщая.Сортировать(имяКолонки); //Отсортируем по нашей колонке
ПоследняяСтрокТабПоля = ТабличноеПолеОбщая.Количество(); //Запомним количество строк в ТабПоле
//
Для Каждого строкаТабЧасти Из ТабличноеПолеОбщая Цикл //перебираем каждую строку Табполя
//
Если ТабличноеПолеОбщая.Индекс(строкаТабЧасти) = 0 Тогда //Это самая первая строка - запоминаем начальные данные и снова цикл
ИндексСтрокиНачало = строкаТабЧасти;//Ссылка на строку ТабПоля по кото всё сравниваемрой
ЗначениеНомерКолонкиСДаннымиВыше = строкаТабЧасти.Получить(НомерКолонкиСДанными); //первое значение для сравнений
Продолжить;//Цикл заново
КонецЕсли;
//
ЗначениеНомерКолонкиСДаннымиНиже = строкаТабЧасти.Получить(НомерКолонкиСДанными); //Запомним значение текущей строки ТабПоля
//
Если ЗначениеНомерКолонкиСДаннымиНиже = ЗначениеНомерКолонкиСДаннымиВыше Тогда //Одинаковые что-нибудь делаем: выводила максимальное значение оклада из выборки
строкаТабЧасти.Установить(НомерКолонки, "максимальное значение");
//строкаТабЧасти.Установить(4, 1111); //для примера
Иначе //Новое значение для сравнения
ИндексСтрокиНачало.Установить(НомерКолонки, "максимальное значение");
//ИндексСтрокиНачало.Установить(4, 2222); //для примера
ЗначениеНомерКолонкиСДаннымиВыше = строкаТабЧасти.Получить(НомерКолонкиСДанными); //новое значение для сравнений
ИндексСтрокиНачало = строкаТабЧасти;//Ссылка на строку ТабПоля по кото всё сравниваемрой
КонецЕсли;
//
КонецЦикла;
//
Если отказаться от сортировки, при небольших количествах строк, можно оббежать таблицу несколько раз - впринципе та же сортировка только без двигания строк... или выгрузить колонкуДокумента в массив и там обработать... вариантов много...
Удачи!
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот