Одинаковые значения по должности объединить в одну строку
Здравствуйте, подскажите, как в этом коде можно реализовать функцию, что при одинаковом значении в должности, сотрудники объединяются в одну строку.
//Список Сотрудников
КЛ = СотрудникиФормы.КлючиСтруктурыТекущихКадровыхДанныхСотрудника();
КадровыеДанные = КадровыйУчет.КадровыеДанныеСотрудников(Истина, МассивСотрудниковТЗ, КЛ, Объект.Дата,,Ложь);
МассивСотрудников = Новый Массив;
ДанныеОбъекта.Вставить("МассивСотрудников", МассивСотрудников);
Если Тип(Объект.Сотрудники) = Тип("ДокументТабличнаяЧасть.ДоговорМОЛ_Коллективный.Сотрудники") Тогда
ТЗДат = Объект.Сотрудники.Выгрузить(,"Сотрудник");
Иначе
Возврат Ложь;
КонецЕсли;
СтрокаМассива = "";
СтрокаМассива1 = "";
//СтрокаМассива2 = "";
Первый = Истина;
Для каждого СтрокаСотр Из КадровыеДанные Цикл
//собираем представление сотрудника
Если НЕ Первый Тогда
СтрокаМассива = СтрокаМассива + ",";
КонецЕсли;
СЭ_ТабНомер = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(СтрокаСотр.Сотрудник.Код, Истина, Истина);
Если ПустаяСтрока(СЭ_ТабНомер) Тогда
СЭ_ТабНомер = СокрЛП(СтрокаСотр.Сотрудник.Код);
СЭ_ТабНомер = СЭ_УправлениеПечатьюСервер.УбратьНечисловые(СЭ_ТабНомер);
КонецЕсли;
СтрДолжность = НРег(СокрЛП(СтрокаСотр.ТекущаяДолжность));
ПредставлениеПодразделения = СЭ_УправлениеПечатьюСервер.СЭ_ПолучитьСклонение(СтрокаСотр.ТекущееПодразделение, "ПД=Родительный");
ПредставлениеДолжности = СтрокаСотр.ТекущаяДолжность;
ПредставлениеИмени = СтрокаСотр.Сотрудник;
ФизЛицо = СтрокаСотр.ФизическоеЛицо;
ПредоставлениеИмениИн = СЭ_УправлениеПечатьюСервер.СЭ_ФамилияИнициалы(СтрокаСотр.Сотрудник);
СотИнА = ФизическиеЛицаКлиентСервер.ФамилияИнициалы (СтрокаСотр.Сотрудник.Наименование);
Если СтрНайти(ПредставлениеДолжности, ПредставлениеПодразделения) <> 0 Тогда
ПредставлениеПодразделения = "";
КонецЕслИ;
СотрудникКатегория = ПолучитьРазрядКатегориюСотрудника(СтрокаСотр.Сотрудник, Объект.Дата);
СотрудникКатегория = Сред(СотрудникКатегория, 1, СтрДлина(СотрудникКатегория) - 1);
Если ПредставлениеПодразделения = "" Тогда
СтрокаМассива =СтрокаМассива +" "+ ПредставлениеИмени;
СтрокаМассива1 = Символы.Таб+СтрокаМассива1+Символы.Таб +"-"+ПредставлениеДолжности + ":" + ПредоставлениеИмениИн+Символы.ПС;
Иначе
СтрокаМассива = СтрокаМассива +" "+ПредставлениеИмени;
СтрокаМассива1 = СтрокаМассива1+Символы.Таб +"-"+ ПредставлениеДолжности + ":" + ПредоставлениеИмениИн +Символы.ПС;
КонецЕслИ;
Отбор = Новый Структура;
Отбор.Вставить("Сотрудник" , СтрокаСотр.Сотрудник);
НайденныеСтроки = ТЗДат.НайтиСтроки(Отбор);
Первый = Ложь;
КонецЦикла;
ДанныеОбъекта.МассивСотрудников.Добавить(" " + СтрокаМассива);
ДанныеОбъекта.МассивСотрудников.Добавить(" " + СтрокаМассива1);
ДанныеОбъекта.Вставить("СтрокаСотрудников", СтрокаМассива);
ДанныеОбъекта.Вставить("СотИнФИО", СтрокаМассива1);
ПоказатьПо теме из базы знаний
Найденные решения
(1)необходимо обработать КадровыеДанные так, чтобы по должности получить список сотрудников, а дальше делайте что душе угодно.
.....
СписокДолжностей = КадровыеДанные.Скопировать(, "Должность");
СписокДолжностей.Свернуть("Должность");
СписокДолжностей = СписокДолжностей.ВыгрузитьКолонку("Должность");
Для Каждого Должность Из СписокДолжностей Цикл
Отбор = Новый Структура("Должность", Должность);
МассивСотрудников = КадровыеДанные.НайтиСтроки(Отбор);
Для Каждого СтрокаСотр Из МассивСотрудников Цикл
//формируете строку из сотрудников
КонецЦикла;
//Выводите строку из сотрудников
КонецЦикла;
............
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)необходимо обработать КадровыеДанные так, чтобы по должности получить список сотрудников, а дальше делайте что душе угодно.
.....
СписокДолжностей = КадровыеДанные.Скопировать(, "Должность");
СписокДолжностей.Свернуть("Должность");
СписокДолжностей = СписокДолжностей.ВыгрузитьКолонку("Должность");
Для Каждого Должность Из СписокДолжностей Цикл
Отбор = Новый Структура("Должность", Должность);
МассивСотрудников = КадровыеДанные.НайтиСтроки(Отбор);
Для Каждого СтрокаСотр Из МассивСотрудников Цикл
//формируете строку из сотрудников
КонецЦикла;
//Выводите строку из сотрудников
КонецЦикла;
............
Показать
(8) Если нужно именно так
То:
-Продавец: Павелов П.П, Антонов А.А
-Администратор: Админ.А.А"
-Администратор: Админ.А.А"
То:
.....
СписокДолжностей = КадровыеДанные.Скопировать(, "Должность");
СписокДолжностей.Свернуть("Должность");
СписокДолжностей = СписокДолжностей.ВыгрузитьКолонку("Должность");
Для Каждого Должность Из СписокДолжностей Цикл
СтрокаДляВывода = "";
Отбор = Новый Структура("Должность", Должность);
МассивСотрудников = КадровыеДанные.НайтиСтроки(Отбор);
СотрудникиСтрока = "";
Сч = 1;
Для Каждого СтрокаСотр Из МассивСотрудников Цикл
//Неизвестно какие есть поля в ТЗ КадровыеДанные
СотрудникиСтрока = СотрудникиСтрока + СтрокаСотр.ФамилияИОСотрудника + ?(Сч = МассивСотрудников.Количество(), "", ", "));
Сч = Сч + 1;
КонецЦикла;
СтрокаДляВывода = Строка(Должность) + ": " + СотрудникиСтрока;
//дальше используйте СтрокаДляВывода где угодно.
КонецЦикла;
............
Показать
(14) В первом приближении:
Можно поступить так же как с СотрудникиСтрока:
СтрокаДляВывода = Строка(Должность) + ": " + СотрудникиСтрока + Символы.ПС + Символы.ВК;
Можно поступить так же как с СотрудникиСтрока:
СтрокаДляВывода = СтрокаДляВывода + Строка(Должность) + ": " + СотрудникиСтрока + ?(СчетчикДолжностей = СписокДолжностей.Количество(), "", Символы.ПС);
(15)
я правильно сделал?
СтрокаДляВывода = Строка(Должность) + ": " + СотрудникиСтрока + Символы.ПС + Символы.ВК;
СписокДолжностей = КадровыеДанные.Скопировать(, "ТекущаяДолжность";);
СписокДолжностей.Свернуть("ТекущаяДолжность";);
СписокДолжностей = СписокДолжностей.ВыгрузитьКолонку("ТекущаяДолжность";);
Для Каждого Должность Из СписокДолжностей Цикл
СтрокаДляВывода = "";
Отбор = Новый Структура("ТекущаяДолжность", Должность);
МассивСотрудников = КадровыеДанные.НайтиСтроки(Отбор);
СотрудникиСтрока = "";
Сч = 1;
СчетчикДолжностей = 1;
Для Каждого СтрокаСотр Из МассивСотрудников Цикл
СЭ_ТабНомер = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(СтрокаСотр.Сотрудник.Код, Истина, Истина);
Если ПустаяСтрока(СЭ_ТабНомер) Тогда
СЭ_ТабНомер = СокрЛП(СтрокаСотр.Сотрудник.Код);
СЭ_ТабНомер = СЭ_УправлениеПечатьюСервер.УбратьНечисловые(СЭ_ТабНомер);
КонецЕсли;
СтрДолжность = НРег(СокрЛП(СтрокаСотр.ТекущаяДолжность));
ПредставлениеПодразделения = СЭ_УправлениеПечатьюСервер.СЭ_ПолучитьСклонение(СтрокаСотр.ТекущееПодразделение, "ПД=Родительный";);
ПредставлениеДолжности = СтрокаСотр.ТекущаяДолжность;
//ПредставлениеИмени = СЭ_УправлениеПечатьюСервер.СЭ_ПолучитьСклонение(СтрокаСотр.Сотрудник,"ПД=Дательный";);
ПредставлениеИмени = СтрокаСотр.Сотрудник;
ФизЛицо = СтрокаСотр.ФизическоеЛицо;
ПредоставлениеИмениИн = СЭ_УправлениеПечатьюСервер.СЭ_ФамилияИнициалы(СтрокаСотр.Сотрудник);
СотИнА = ФизическиеЛицаКлиентСервер.ФамилияИнициалы (СтрокаСотр.Сотрудник.Наименование);
Если СтрНайти(ПредставлениеДолжности, ПредставлениеПодразделения) <> 0 Тогда
ПредставлениеПодразделения = "";
КонецЕслИ;
СотрудникКатегория = ПолучитьРазрядКатегориюСотрудника(СтрокаСотр.Сотрудник, Объект.Дата);
СотрудникКатегория = Сред(СотрудникКатегория, 1, СтрДлина(СотрудникКатегория) - 1);
СотрудникиСтрока = СотрудникиСтрока + ПредоставлениеИмениИн + ?(Сч = МассивСотрудников.Количество(), "", ", ";);
Сч = Сч + 1;
КонецЦикла;
СтрокаДляВывода = СтрокаДляВывода + Строка(Должность) + ": " + СотрудникиСтрока + ?(СчетчикДолжностей = СписокДолжностей.Количество(), "", Символы.ПС);
СчетчикДолжностей = СчетчикДолжностей + 1;
КонецЦикла;
Показатья правильно сделал?
(7)написал вот так
КЛ = СотрудникиФормы.КлючиСтруктурыТекущихКадровыхДанныхСотрудника();
КадровыеДанные = КадровыйУчет.КадровыеДанныеСотрудников(Истина, МассивСотрудниковТЗ, КЛ, Объект.Дата,,Ложь);
МассивСотрудников = Новый Массив;
ДанныеОбъекта.Вставить("МассивСотрудников", МассивСотрудников);
Если Тип(Объект.Сотрудники) = Тип("ДокументТабличнаяЧасть.ДоговорМОЛ_Коллективный.Сотрудники") Тогда
ТЗДат = Объект.Сотрудники.Выгрузить(,"Сотрудник");
Иначе
Возврат Ложь;
КонецЕсли;
СтрокаМассива = "";
СтрокаМассива1 = "";
СписокДолжностей = КадровыеДанные.Скопировать(, "ТекущаяДолжность");
СписокДолжностей.Свернуть("ТекущаяДолжность");
СписокДолжностей = СписокДолжностей.ВыгрузитьКолонку("ТекущаяДолжность");
Для Каждого Должность Из СписокДолжностей Цикл
Отбор = Новый Структура("ТекущаяДолжность", Должность);
МассивСотрудников = КадровыеДанные.НайтиСтроки(Отбор);
Первый = Истина;
Для Каждого СтрокаСотр Из МассивСотрудников Цикл
//формируете строку из сотрудников
//собираем представление сотрудника
Если НЕ Первый Тогда
СтрокаМассива = СтрокаМассива + ",";
КонецЕсли;
СЭ_ТабНомер = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(СтрокаСотр.Сотрудник.Код, Истина, Истина);
Если ПустаяСтрока(СЭ_ТабНомер) Тогда
СЭ_ТабНомер = СокрЛП(СтрокаСотр.Сотрудник.Код);
СЭ_ТабНомер = СЭ_УправлениеПечатьюСервер.УбратьНечисловые(СЭ_ТабНомер);
КонецЕсли;
СтрДолжность = НРег(СокрЛП(СтрокаСотр.ТекущаяДолжность));
ПредставлениеПодразделения = СЭ_УправлениеПечатьюСервер.СЭ_ПолучитьСклонение(СтрокаСотр.ТекущееПодразделение, "ПД=Родительный");
ПредставлениеДолжности = СтрокаСотр.ТекущаяДолжность;
//ПредставлениеИмени = СЭ_УправлениеПечатьюСервер.СЭ_ПолучитьСклонение(СтрокаСотр.Сотрудник,"ПД=Дательный");
ПредставлениеИмени = СтрокаСотр.Сотрудник;
ФизЛицо = СтрокаСотр.ФизическоеЛицо;
ПредоставлениеИмениИн = СЭ_УправлениеПечатьюСервер.СЭ_ФамилияИнициалы(СтрокаСотр.Сотрудник);
СотИнА = ФизическиеЛицаКлиентСервер.ФамилияИнициалы (СтрокаСотр.Сотрудник.Наименование);
Если СтрНайти(ПредставлениеДолжности, ПредставлениеПодразделения) <> 0 Тогда
ПредставлениеПодразделения = "";
КонецЕслИ;
СотрудникКатегория = ПолучитьРазрядКатегориюСотрудника(СтрокаСотр.Сотрудник, Объект.Дата);
СотрудникКатегория = Сред(СотрудникКатегория, 1, СтрДлина(СотрудникКатегория) - 1);
Если ПредставлениеПодразделения = "" Тогда
СтрокаМассива =СтрокаМассива +" "+ ПредставлениеИмени;
СтрокаМассива1 = Символы.Таб+СтрокаМассива1+Символы.Таб +"-"+ПредставлениеДолжности + ":" + ПредоставлениеИмениИн+Символы.ПС;
//СтрокаМассива2 = СтрокаМассива2 + ПредоставлениеИмениИн;
Иначе
СтрокаМассива = СтрокаМассива +" "+ПредставлениеИмени;
КонецЕсли;
КонецЦикла;
СтрокаМассива1 = СтрокаМассива1+Символы.Таб +"-"+ ПредставлениеДолжности + ":" + ПредоставлениеИмениИн +Символы.ПС;
Отбор = Новый Структура;
Отбор.Вставить("Сотрудник" , СтрокаСотр.Сотрудник);
НайденныеСтроки = ТЗДат.НайтиСтроки(Отбор);
Первый = Ложь;
КонецЦикла;
Показать
(10)я добавил
СписокДолжностей = КадровыеДанные.Скопировать(, "Должность");
СписокДолжностей.Свернуть("Должность");
СписокДолжностей = СписокДолжностей.ВыгрузитьКолонку("Должность");
Для Каждого Должность Из СписокДолжностей Цикл
Отбор = Новый Структура("Должность", Должность);
МассивСотрудников = КадровыеДанные.НайтиСтроки(Отбор);
Для Каждого СтрокаСотр Из МассивСотрудников Цикл
//формируете строку из сотрудников
КонецЦикла;
//Выводите строку из сотрудников
КонецЦикла;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот