Кадровые переводы

1. user712426 13.06.17 08:53 Сейчас в теме
Здравствуйте! Подскажите, как в Зарплата и управление персоналом, редакция 3.1 из тз запроса

фио дата перевода подразделение должность событие
петров 01.01.2013 подр1 должн1 прием
петров 01.01.2014 подр2 должн2 перевод
петров 01.01.2015 подр2 должн2 перевод
петров 01.01.2016 подр3 должн3 перевод
иванов 01.01.2014 подр1 должн8 прием
иванов 01.01.2016 подр3 должн5 перевод

получить след таблицу (нужно отразить все переводы по подразделению)
петров 01.01.2013 подр1,должн1(прием) 01.01.2014подр2,должн2(перевод)
петров 01.01.2014 подр2,должн2 01.01.2015 подр2,должн2
петров 01.01.2015 подр2,должн2 01.01.2016 подр3,должн3
иванов 01.01.2014 подр1,должн8 01.01.2016 подр3,должн5
По теме из базы знаний
Ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Amadeuc404 54 13.06.17 11:34 Сейчас в теме
А для каких целей такой запрос? Если нужно посмотреть кадровую историю сотрудников, тогда можно воспользоваться отчетом "Перемещение сотрудников организации"
3. user712426 13.06.17 11:43 Сейчас в теме
(2)а вот надо сделать. и именно так.
просто может кто подскажет каким методом обрабатывать тз?
или сам запрос менять
я делаю запрос из документа кадровые переводы, можно и из рег сведений кадровая история
4. user712426 13.06.17 13:26 Сейчас в теме
(2)сделала так, получилось.
аа = 0;    ии=0;
	Для каждого стр из тз цикл
		
		всегостр = тз.Количество();
		сообщить(всегостр);
		для ии = 0 по всегостр-1 цикл
			ОбластьСтрока.Параметры.Сотрудник = стр.Сотрудник;
			
			ОбластьСтрока.Параметры.старМРаб    = тз[ии].Подразделение;
			ОбластьСтрока.Параметры.старОплата  = тз[ии].ДатаПеревода;
			
			ОбластьСтрока.Параметры.новМРаб     = тз[ии+1].Подразделение; 
			ОбластьСтрока.Параметры.новОплата   = тз[ии+1].ДатаПеревода;
			
			ТабличныйДокумент.Вывести(ОбластьСтрока);
		конеццикла;
	КонецЦикла;
	
	
Показать

но выдает ошибку:
Индекс находится за границами массива
ОбластьСтрока.Параметры.новМРаб = тз[ии+1].Подразделение;
к примеру всего строк 4.
5. Amadeuc404 54 13.06.17 15:34 Сейчас в теме
Упорядочи по ФИО и дате запрос
После чего двумя циклами обходи
Для каждого стр1 из тз цикл 
     Для каждого стр2 из тз цикл
             Если стр1.фио = стр2.Фио И стр1.дата = стр2.Дата Тогда
                     Продолжить;
             ИначеЕсли стр1.фио = стр2.Фио И стр1.дата <> стр2.Дата Тогда
                      ОбластьСтрока.Параметры.старМРаб    = Стр1.Подразделение;
                      ОбластьСтрока.Параметры.старОплата  = Стр1.ДатаПеревода;
            
                      ОбластьСтрока.Параметры.новМРаб     = Стр2.Подразделение; 
                      ОбластьСтрока.Параметры.новОплата   = Стр2.ДатаПеревода;
            
                      ТабличныйДокумент.Вывести(ОбластьСтрока);
             КонецЕсли;
     КонецЦикла;
КонецЦикла;
Показать

Неоптимизированно но должно работать
user712426; +1 Ответить
6. user712426 13.06.17 15:47 Сейчас в теме
(5)
тогда выводится 4*4 раз при чем одинаковые подразделения
7. Amadeuc404 54 13.06.17 16:09 Сейчас в теме
(6) Тебе нужно придумать оптимальные для тебя условия, чтобы лишнее не выводилось.
И в первом цикле тоже нужно поставить условие, чтобы дубли не появлялись.
(6)
при чем одинаковые подразделения

На сколько я помню кадровое перемещение может быть из одного того же подразделения.
user712426; +1 Ответить
8. user712426 14.06.17 08:20 Сейчас в теме
(7) сделала вот так и так заработало:
ии=0;   номер = 0; 
	всегостр = тз.Количество();
	Для каждого стр1 из тз цикл 
		Для каждого стр2 из тз цикл			
			Если СокрЛП(стр1.сотрудник) = СокрЛП(стр2.сотрудник) И СокрЛП(стр1.Дата1) = СокрЛП(стр2.Дата1) тогда
				Продолжить;
			ИначеЕсли СОкрЛП(стр1.сотрудник) = СокрЛП(стр2.сотрудник) И СокрЛП(стр1.Дата1) <> СокрЛП(стр2.Дата1) И ии<>всегостр-1 Тогда
				
				ОбластьСтрока.Параметры.номерПП    = номер+1;
				ОбластьСтрока.Параметры.Сотрудник  = стр1.Сотрудник;
				
				ОбластьСтрока.Параметры.старМРаб   = тз[ии].ПодразделениеПолное + Символы.ПС + тз[ии].Должность + Символы.ПС + Формат(тз[ии].Дата1,"ДЛФ=Д") + "  " + Формат(тз[ии].Дата2,"ДЛФ=Д");
				ОбластьСтрока.Параметры.старОплата = тз[ии].Оплата + Символы.ПС + тз[ии].Оклад;
				
				ОбластьСтрока.Параметры.новМРаб    = тз[ии+1].ПодразделениеПолное + Символы.ПС + тз[ии+1].Должность + Символы.ПС + Формат(тз[ии+1].Дата1,"ДЛФ=Д") + "  " + Формат(тз[ии+1].Дата2,"ДЛФ=Д"); 
				ОбластьСтрока.Параметры.новОплата  = тз[ии+1].Оплата + Символы.ПС + тз[ии+1].Оклад;
				
				ТабличныйДокумент.Вывести(ОбластьСтрока);
				номер = номер + 1;
				ии = ии+1;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
Показать
9. PhoenixAOD 62 14.06.17 08:31 Сейчас в теме
(8)я бы выгрузил ТЗ в запрос и там бы все обработал
10. user712426 14.06.17 08:47 Сейчас в теме
(9)я может чет не понимаю.. зачем из одного запроса выгружать в тз а далее снова в запрос?
11. PhoenixAOD 62 14.06.17 09:40 Сейчас в теме
(10)а может я не понял чет, тз запроса вот чего меня смутило.
Оставьте свое сообщение

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