Одинаковые значения по должности объединить в одну строку

1. user1816391 06.10.22 08:44 Сейчас в теме
Здравствуйте, подскажите, как в этом коде можно реализовать функцию, что при одинаковом значении в должности, сотрудники объединяются в одну строку.

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

.....
СписокДолжностей = КадровыеДанные.Скопировать(, "Должность");
СписокДолжностей.Свернуть("Должность");
СписокДолжностей = СписокДолжностей.ВыгрузитьКолонку("Должность");

Для Каждого Должность Из СписокДолжностей Цикл

     Отбор = Новый Структура("Должность", Должность);
     МассивСотрудников = КадровыеДанные.НайтиСтроки(Отбор);
     
     Для Каждого СтрокаСотр Из МассивСотрудников Цикл

     //формируете строку из сотрудников

     КонецЦикла;
    
     //Выводите строку из сотрудников

КонецЦикла;
............
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 06.10.22 09:47 Сейчас в теме +1.65 $m
(1)необходимо обработать КадровыеДанные так, чтобы по должности получить список сотрудников, а дальше делайте что душе угодно.

.....
СписокДолжностей = КадровыеДанные.Скопировать(, "Должность");
СписокДолжностей.Свернуть("Должность");
СписокДолжностей = СписокДолжностей.ВыгрузитьКолонку("Должность");

Для Каждого Должность Из СписокДолжностей Цикл

     Отбор = Новый Структура("Должность", Должность);
     МассивСотрудников = КадровыеДанные.НайтиСтроки(Отбор);
     
     Для Каждого СтрокаСотр Из МассивСотрудников Цикл

     //формируете строку из сотрудников

     КонецЦикла;
    
     //Выводите строку из сотрудников

КонецЦикла;
............
Показать
3. user1816391 06.10.22 12:23 Сейчас в теме
(2)мог бы помочь дальше вывести с моим кодом?
4. user1831019 06.10.22 12:51 Сейчас в теме
(3) "Вы что же, и кушать за меня будете?" (С)
5. user1816391 06.10.22 12:52 Сейчас в теме
(4)у меня сам вывод не получается сделать
6. user1816391 06.10.22 12:55 Сейчас в теме
(4)был бы благодарен, если бы смогли помочь с этим
7. user1831019 06.10.22 13:03 Сейчас в теме
(6) А что непонятного в (2) ???
8. user1816391 06.10.22 13:05 Сейчас в теме
(7)всё понятно, но не получается сделать вывод так, чтобы сотрудники разбивались по профессии, т.е

"-Продавец: Павелов П.П, Антонов А.А
-Администратор: Админ.А.А"
13. nomad_irk 76 06.10.22 14:37 Сейчас в теме
(8) Если нужно именно так

-Продавец: Павелов П.П, Антонов А.А
-Администратор: Админ.А.А"


То:

.....
СписокДолжностей = КадровыеДанные.Скопировать(, "Должность");
СписокДолжностей.Свернуть("Должность");
СписокДолжностей = СписокДолжностей.ВыгрузитьКолонку("Должность");

Для Каждого Должность Из СписокДолжностей Цикл

     СтрокаДляВывода = "";

     Отбор = Новый Структура("Должность", Должность);
     МассивСотрудников = КадровыеДанные.НайтиСтроки(Отбор);

     СотрудникиСтрока = "";
     Сч = 1;
     Для Каждого СтрокаСотр Из МассивСотрудников Цикл
          
          //Неизвестно какие есть поля в ТЗ КадровыеДанные
          СотрудникиСтрока = СотрудникиСтрока + СтрокаСотр.ФамилияИОСотрудника + ?(Сч = МассивСотрудников.Количество(), "", ", "));
          Сч = Сч + 1;
     КонецЦикла;
    
     СтрокаДляВывода = Строка(Должность) + ": " + СотрудникиСтрока;

     //дальше используйте СтрокаДляВывода где угодно.
КонецЦикла;
............
Показать
14. user1816391 06.10.22 15:05 Сейчас в теме
(13)спасибо большое, работает, но как сделать так, чтобы оно каждую профессию переносило на новую строку?
15. nomad_irk 76 06.10.22 16:13 Сейчас в теме
(14) В первом приближении:

СтрокаДляВывода = Строка(Должность) + ": " + СотрудникиСтрока + Символы.ПС + Символы.ВК;


Можно поступить так же как с СотрудникиСтрока:

СтрокаДляВывода = СтрокаДляВывода + Строка(Должность) + ": " + СотрудникиСтрока + ?(СчетчикДолжностей = СписокДолжностей.Количество(), "", Символы.ПС);
16. user1816391 07.10.22 09:36 Сейчас в теме
(15)
СтрокаДляВывода = Строка(Должность) + ": " + СотрудникиСтрока + Символы.ПС + Символы.ВК;


СписокДолжностей = КадровыеДанные.Скопировать(, "ТекущаяДолжность";);
СписокДолжностей.Свернуть("ТекущаяДолжность";);
СписокДолжностей = СписокДолжностей.ВыгрузитьКолонку("ТекущаяДолжность";);
Для Каждого Должность Из СписокДолжностей Цикл
СтрокаДляВывода = "";

Отбор = Новый Структура("ТекущаяДолжность", Должность);
МассивСотрудников = КадровыеДанные.НайтиСтроки(Отбор);

СотрудникиСтрока = "";
Сч = 1;
СчетчикДолжностей = 1;
Для Каждого СтрокаСотр Из МассивСотрудников Цикл

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

КонецЦикла;
СтрокаДляВывода = СтрокаДляВывода + Строка(Должность) + ": " + СотрудникиСтрока + ?(СчетчикДолжностей = СписокДолжностей.Количество(), "", Символы.ПС);
СчетчикДолжностей = СчетчикДолжностей + 1;
КонецЦикла;
Показать


я правильно сделал?
17. Release 07.10.22 09:48 Сейчас в теме
(16) Лучше бы вы сделали пример, чтобы было видно/понятно, какой конкретно результат вам нужен.
20. user1816391 10.10.22 10:04 Сейчас в теме
(17) вот такой пример
"-Продавец: Павелов П.П, Антонов А.А
-Администратор: Админ.А.А"

сейчас СтрокаДляВывода каждый раз перезаписывается
18. nomad_irk 76 07.10.22 10:47 Сейчас в теме
(16)В первом приближении - да.
19. user1816391 07.10.22 13:14 Сейчас в теме
(18)но всё равно не работает
9. user1816391 06.10.22 13:07 Сейчас в теме
(7)написал вот так

КЛ = СотрудникиФормы.КлючиСтруктурыТекущихКадровыхДанныхСотрудника();
	КадровыеДанные = КадровыйУчет.КадровыеДанныеСотрудников(Истина, МассивСотрудниковТЗ, КЛ, Объект.Дата,,Ложь);
	
	МассивСотрудников 	= Новый Массив;
	ДанныеОбъекта.Вставить("МассивСотрудников", МассивСотрудников);
	
	Если Тип(Объект.Сотрудники) = Тип("ДокументТабличнаяЧасть.ДоговорМОЛ_Коллективный.Сотрудники") Тогда
		ТЗДат = Объект.Сотрудники.Выгрузить(,"Сотрудник");
	Иначе
		Возврат Ложь;
	КонецЕсли;

	
	
	СтрокаМассива = "";
СтрокаМассива1 = "";

	
	СписокДолжностей = КадровыеДанные.Скопировать(, "ТекущаяДолжность");
СписокДолжностей.Свернуть("ТекущаяДолжность");
СписокДолжностей = СписокДолжностей.ВыгрузитьКолонку("ТекущаяДолжность");

Для Каждого Должность Из СписокДолжностей Цикл

     Отбор = Новый Структура("ТекущаяДолжность", Должность);
     МассивСотрудников = КадровыеДанные.НайтиСтроки(Отбор);
      Первый = Истина;
     Для Каждого СтрокаСотр Из МассивСотрудников Цикл

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

     Отбор = Новый Структура;
        Отбор.Вставить("Сотрудник" , СтрокаСотр.Сотрудник);
        НайденныеСтроки = ТЗДат.НайтиСтроки(Отбор);
         
        Первый = Ложь;

КонецЦикла;
Показать
10. user1831019 06.10.22 13:09 Сейчас в теме
(9) А тебе зачем помощь, если ты упорно её игнорируешь, и продолжаешь писать свою фигню?
11. user1816391 06.10.22 13:09 Сейчас в теме
(10)я добавил

СписокДолжностей = КадровыеДанные.Скопировать(, "Должность");
СписокДолжностей.Свернуть("Должность");
СписокДолжностей = СписокДолжностей.ВыгрузитьКолонку("Должность");

Для Каждого Должность Из СписокДолжностей Цикл

     Отбор = Новый Структура("Должность", Должность);
     МассивСотрудников = КадровыеДанные.НайтиСтроки(Отбор);
     
     Для Каждого СтрокаСотр Из МассивСотрудников Цикл

     //формируете строку из сотрудников

     КонецЦикла;
    
     //Выводите строку из сотрудников

КонецЦикла;
Показать
12. user1816391 06.10.22 13:14 Сейчас в теме
(10)могли бы объяснить тогда алгоритм формирования и вывода?
Оставьте свое сообщение

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