СрезПервых настройка периода

1. Гость 07.04.21 12:09
Добрый день, помогите пожалуйста у меня в приказе изменение сведений в печатной форме выводятся сотрудники изменивших фамилию. Как мне сделать так, чтобы если сотрудник менял несколько раз фамилию, выводилось именно последнее изменение фамилии ?

Функция ПечатьИзменениеСведений(МассивОбъектов) Экспорт 


		ТабДок = Новый ТабличныйДокумент;
	Макет = ПолучитьМакет("ИзменениеСведений");
	ОбластьМакет = Макет.ПолучитьОбласть("Шапка");
	
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	ПроизвольныйПриказТЧ.Сотрудник.Представление КАК СотрудникПредставление,
	|	ПроизвольныйПриказ.Дата КАК Дата,
	|	ПроизвольныйПриказТЧ.Сотрудник КАК Сотрудник,
	|	ПроизвольныйПриказ.Номер КАК Номер,
	|	ПроизвольныйПриказТЧ.Сотрудник.Код КАК Код,
	|	ПроизвольныйПриказ.Организация КАК Организация,
	|	ПроизвольныйПриказ.Основание КАК Основание,
	|	ПроизвольныйПриказ.Руководитель.Фамилия КАК РуководительФамилия,
	|	ПроизвольныйПриказ.Руководитель.Инициалы КАК РуководительИнициалы,
	|	ПроизвольныйПриказ.ДолжностьРуководителя КАК ДолжностьРуководителя,
	|	ПроизвольныйПриказ.Ссылка КАК Ссылка,
	|	ПроизвольныйПриказ.Дата КАК ПериодДействияНачало
	|ПОМЕСТИТЬ ВР1
	|ИЗ
	|	Документ.ПроизвольныйПриказ.ТЧ КАК ПроизвольныйПриказТЧ
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПроизвольныйПриказ КАК ПроизвольныйПриказ
	|		ПО ПроизвольныйПриказТЧ.Ссылка = ПроизвольныйПриказ.Ссылка
	|ГДЕ
	|	ПроизвольныйПриказ.Ссылка В(&Ссылка)
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	ТекущиеКадровыеДанныеСотрудников.ТекущееПодразделение КАК Подразделение,
	|	ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность КАК Должность,
	|	ТекущиеКадровыеДанныеСотрудников.Сотрудник КАК Сотрудник,
	|	ТекущиеКадровыеДанныеСотрудников.ТекущаяОрганизация КАК ТекущаяОрганизация
	|ПОМЕСТИТЬ ВР2
	|ИЗ
	|	РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	ФИОФизическихЛицСрезПервых.Период КАК Период,
	|	ФИОФизическихЛицСрезПервых.ФизическоеЛицо КАК ФизическоеЛицо,
	|	ФИОФизическихЛицСрезПервых.Фамилия КАК Фамилия,
	|	ФИОФизическихЛицСрезПервых.Имя КАК Имя,
	|	ФИОФизическихЛицСрезПервых.Отчество КАК Отчество,
	|	ФИОФизическихЛицСрезПервых.Инициалы КАК Инициалы,
	|	ФИОФизическихЛицСрезПервых.УдалитьИнициалыИмени КАК УдалитьИнициалыИмени,
	|	ФИОФизическихЛицСрезПервых.ФИОСлужебные КАК ФИОСлужебные
	|ПОМЕСТИТЬ ВР3
	|ИЗ
	|	РегистрСведений.ФИОФизическихЛиц.СрезПервых КАК ФИОФизическихЛицСрезПервых
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	ВР1.СотрудникПредставление КАК СотрудникПредставление,
	|	ВР1.Дата КАК Дата,
	|	ВР1.Сотрудник КАК Сотрудник,
	|	ВР1.Номер КАК Номер,
	|	ВР1.Код КАК Код,
	|	ВР1.РуководительФамилия КАК РуководительФамилия,
	|	ВР1.Основание КАК Основание,
	|	ВР1.РуководительИнициалы КАК РуководительИнициалы,
	|	ВР1.ДолжностьРуководителя КАК ДолжностьРуководителя,
	|	ВР2.Подразделение КАК Подразделение,
	|	ВР2.Должность КАК Должность,
	|	ВР3.Фамилия КАК Фамилия,
	|	ВР3.Имя КАК Имя,
	|	ВР3.Отчество КАК Отчество,
	|	ВР1.ПериодДействияНачало КАК ПериодДействияНачало,
	|	ВР3.Период КАК Период
	|ИЗ
	|	ВР1 КАК ВР1
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВР2 КАК ВР2
	|		ПО ВР1.Организация = ВР2.ТекущаяОрганизация
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВР3 КАК ВР3
	|		ПО ВР1.Сотрудник.ФизическоеЛицо = ВР3.ФизическоеЛицо";

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


	
	ОбластьМакет1 = Макет.ПолучитьОбласть("Строка");
	ОбластьМакет1.Параметры.Заполнить(Выборка);
	ОбластьМакет1.Параметры.Фамилия = Выборка.Фамилия;
	ОбластьМакет1.Параметры.Имя = Выборка.Имя;
	ОбластьМакет1.Параметры.Отчество = Выборка.Отчество;
	ОбластьМакет1.Параметры.Подразделение = Выборка.Подразделение;
	ОбластьМакет1.Параметры.Должность = Выборка.Должность;
	ОбластьМакет1.Параметры.Код = Выборка.Код;
	ОбластьМакет1.Параметры.Основание = Выборка.Основание;
	
	
	ОбластьМакет2 = Макет.ПолучитьОбласть("Подвал");
	ОбластьМакет2.Параметры.Заполнить(Выборка);
	ОбластьМакет2.Параметры.РуководительФамилия = Выборка.РуководительФамилия;
	ОбластьМакет2.Параметры.ДолжностьРуководителя = Выборка.ДолжностьРуководителя;
	ОбластьМакет2.Параметры.РуководительИнициалы= Выборка.РуководительИнициалы;
	
	
	ТабДок.Вывести(ОбластьМакет);
	ТабДок.Вывести(ОбластьМакет1);
	ТабДок.Вывести(ОбластьМакет2);
	ТабДок.АвтоМасштаб = Истина;

	Возврат ТабДок;

	
КонецФункции
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 07.04.21 12:16 Сейчас в теме
(1)Вместо СрезПервых используйте СрезПоследних и указывайте дату среза.
3. Гость 07.04.21 12:21
(2)ну каждый раз не получится же указывать дату. Или я не правильно понимаю?
4. FatPanzer 07.04.21 12:39 Сейчас в теме
(3) ну не указывайте тогда...
5. Гость 07.04.21 12:53
(4)Если просто использовать СрезПоследних то выводится действующая фамилия
8. FatPanzer 07.04.21 13:08 Сейчас в теме
(5) Ну так это и есть последнее изменение...
10. nomad_irk 76 07.04.21 13:09 Сейчас в теме
(5)Логично, вам нужно как? Видеть текущее состояние на дату кадрового изменения?
В таком случае нужно использовать реальную таблицу истории изменения ФИО вместо виртуальной и соединять ее левым соединение с кадровой историей, находить максимум даты изменения ФИО и еще одним левым соединеним получать значения ФИО.
FatPanzer; +1 Ответить
6. nomad_irk 76 07.04.21 13:03 Сейчас в теме
(3)Каждый раз - это как?
7. Гость 07.04.21 13:05
(6)ну как я поняла к примеру указать сегодняшнюю дату и выводить, но после же сотрудники будут менять фамилию
9. FatPanzer 07.04.21 13:09 Сейчас в теме
(7) Ну так указывайте каждый раз текущую...
11. an_gl 07.04.21 16:28 Сейчас в теме
Изменила код, но так нечего и не выходит

Функция ПечатьИзменениеСведений(МассивОбъектов) Экспорт 


		ТабДок = Новый ТабличныйДокумент;
	Макет = ПолучитьМакет("ИзменениеСведений");

	ОбластьМакет = Макет.ПолучитьОбласть("Шапка");
	
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	ПроизвольныйПриказТЧ.Сотрудник.Представление КАК СотрудникПредставление,
	|	ПроизвольныйПриказ.Дата КАК Дата,
	|	ПроизвольныйПриказТЧ.Сотрудник КАК Сотрудник,
	|	ПроизвольныйПриказ.Номер КАК Номер,
	|	ПроизвольныйПриказТЧ.Сотрудник.Код КАК Код,
	|	ПроизвольныйПриказ.Организация КАК Организация,
	|	ПроизвольныйПриказ.Основание КАК Основание,
	|	ПроизвольныйПриказ.Руководитель.Фамилия КАК РуководительФамилия,
	|	ПроизвольныйПриказ.Руководитель.Инициалы КАК РуководительИнициалы,
	|	ПроизвольныйПриказ.ДолжностьРуководителя КАК ДолжностьРуководителя,
	|	ПроизвольныйПриказ.Ссылка КАК Ссылка,
	|	ПроизвольныйПриказ.Дата КАК ПериодДействияНачало
	|ПОМЕСТИТЬ ВР1
	|ИЗ
	|	Документ.ПроизвольныйПриказ.ТЧ КАК ПроизвольныйПриказТЧ
	|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.бит_ПроизвольныйПриказ КАК бит_ПроизвольныйПриказ
	|		ПО ПроизвольныйПриказТЧ.Ссылка = ПроизвольныйПриказ.Ссылка
	|ГДЕ
	|	ПроизвольныйПриказ.Ссылка В(&Ссылка)
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	КадроваяИсторияСотрудниковИнтервальный.Сотрудник КАК Сотрудник,
	|	КадроваяИсторияСотрудниковИнтервальный.Подразделение КАК Подразделение,
	|	КадроваяИсторияСотрудниковИнтервальный.Должность КАК Должность,
	|	КадроваяИсторияСотрудниковИнтервальный.ДатаОкончания КАК ДатаОкончания,
	|	КадроваяИсторияСотрудниковИнтервальный.ДатаНачала КАК ДатаНачала
	|ПОМЕСТИТЬ ВР2
	|ИЗ
	|	РегистрСведений.КадроваяИсторияСотрудниковИнтервальный КАК КадроваяИсторияСотрудниковИнтервальный
	|ГДЕ
	|	КадроваяИсторияСотрудниковИнтервальный.ДатаНачала <= НАЧАЛОПЕРИОДА(&Период, ДЕНЬ)
	|	И КадроваяИсторияСотрудниковИнтервальный.ДатаОкончания >= КОНЕЦПЕРИОДА(&Период, ДЕНЬ)
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	ФИОФизическихЛиц.Период КАК Период,
	|	ФИОФизическихЛиц.ФизическоеЛицо КАК ФизическоеЛицо,
	|	ФИОФизическихЛиц.Фамилия КАК Фамилия,
	|	ФИОФизическихЛиц.Имя КАК Имя,
	|	ФИОФизическихЛиц.Отчество КАК Отчество,
	|	ФИОФизическихЛиц.Инициалы КАК Инициалы,
	|	ФИОФизическихЛиц.УдалитьИнициалыИмени КАК УдалитьИнициалыИмени,
	|	ФИОФизическихЛиц.ФИОСлужебные КАК ФИОСлужебные
	|ПОМЕСТИТЬ ВР3
	|ИЗ
	|	РегистрСведений.ФИОФизическихЛиц КАК ФИОФизическихЛиц
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	ВР1.СотрудникПредставление КАК СотрудникПредставление,
	|	ВР1.Дата КАК Дата,
	|	ВР1.Сотрудник КАК Сотрудник,
	|	ВР1.Номер КАК Номер,
	|	ВР1.Код КАК Код,
	|	ВР2.Подразделение КАК Подразделение,
	|	ВР2.Должность КАК Должность,
	|	ВР1.Организация КАК Организация,
	|	ВР1.Основание КАК Основание,
	|	ВР1.РуководительФамилия КАК РуководительФамилия,
	|	ВР1.РуководительИнициалы КАК РуководительИнициалы,
	|	ВР1.ДолжностьРуководителя КАК ДолжностьРуководителя,
	|	ВР1.Ссылка КАК Ссылка,
	|	ВР1.ПериодДействияНачало КАК ПериодДействияНачало,
	|	ДАТАВРЕМЯ(1, 1, 1) КАК Период,
	|	ВР3.Период КАК Период1,
	|	ВР3.ФизическоеЛицо КАК ФизическоеЛицо,
	|	ВР3.Фамилия КАК Фамилия,
	|	ВР3.Имя КАК Имя,
	|	ВР3.Отчество КАК Отчество,
	|	ВР3.Инициалы КАК Инициалы,
	|	ВР3.УдалитьИнициалыИмени КАК УдалитьИнициалыИмени,
	|	ВР3.ФИОСлужебные КАК ФИОСлужебные
	|ИЗ
	|	ВР1 КАК ВР1
	|		ЛЕВОЕ СОЕДИНЕНИЕ ВР2 КАК ВР2
	|		ПО ВР1.Сотрудник = ВР2.Сотрудник
	|		ЛЕВОЕ СОЕДИНЕНИЕ ВР3 КАК ВР3
	|		ПО ВР1.Сотрудник.ФизическоеЛицо = ВР3.ФизическоеЛицо
	|			И (ВР3.Период < &Период)";

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


	
	ОбластьМакет1 = Макет.ПолучитьОбласть("Строка");
	ОбластьМакет1.Параметры.Заполнить(Выборка);
	ОбластьМакет1.Параметры.Фамилия = Выборка.Фамилия;
	ОбластьМакет1.Параметры.Имя = Выборка.Имя;
	ОбластьМакет1.Параметры.Отчество = Выборка.Отчество;
	ОбластьМакет1.Параметры.Подразделение = Выборка.Подразделение;
	ОбластьМакет1.Параметры.Должность = Выборка.Должность;
	ОбластьМакет1.Параметры.Код = Выборка.Код;
	ОбластьМакет1.Параметры.Основание = Выборка.Основание;
	
	
	ОбластьМакет2 = Макет.ПолучитьОбласть("Подвал");
	ОбластьМакет2.Параметры.Заполнить(Выборка);
	ОбластьМакет2.Параметры.РуководительФамилия = Выборка.РуководительФамилия;
	ОбластьМакет2.Параметры.ДолжностьРуководителя = Выборка.ДолжностьРуководителя;
	ОбластьМакет2.Параметры.РуководительИнициалы= Выборка.РуководительИнициалы;
	
	
	ТабДок.Вывести(ОбластьМакет);
	ТабДок.Вывести(ОбластьМакет1);
	ТабДок.Вывести(ОбластьМакет2);
	ТабДок.АвтоМасштаб = Истина;

	Возврат ТабДок;

	
КонецФункции
Показать

(9)
(9)
(9)
14. nomad_irk 76 08.04.21 05:53 Сейчас в теме
(11)Где 2 левых соединения таблиц кадровой истории и истории изменения ФИО? где агрегация Максимум для даты изменения ФИО?
12. Nefilimus 75 07.04.21 20:44 Сейчас в теме
Я так понял, вам нужно, получать предпоследнюю фамилию.

Сначала берете без среза все фамилии по данному пользователю, временная таблица и делаете сортировку (в запросе по дате по убыванию), ставите галочку выбрать первые 2. временная таблица, делаете сортировки по возрастанию и выбрать первые 1. И вуаля. Не изящно, но решит Вашу проблему)
13. nomad_irk 76 08.04.21 05:51 Сейчас в теме
15. Nefilimus 75 08.04.21 12:17 Сейчас в теме
(13) почему вы так думаете? Из регистра брать предпоследнюю запись так удобнее
16. nomad_irk 76 08.04.21 12:18 Сейчас в теме
(15)Потому что сотрудников в приказе может быть > 1.
Nefilimus; +1 Ответить
17. Nefilimus 75 08.04.21 12:21 Сейчас в теме
(16) Хммм, возможно и правы...
Внимание! Не забывайте отмечать решение на ваш вопрос, если оно найдено. Это повысит ваш рейтинг на форуме.
Оставьте свое сообщение

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