Кадровая история за период ЗУП 3.1

1. CHELLL 53 01.08.18 20:27 Сейчас в теме
Доброго дня суток.

Расширяю функционал Зки, необходимо получить кадровые данные за период. Раньше в 2.5 можно было варьировать Рс РаботникиОрганизаций сейчас в 3ке пробовал получить через РС КадроваяИсторияСотрудниковИнтервальный, но понял что он для это не предназначен. Почитал форму, все склонны к обращению к программному интерфейсу на базе допусти общего модуля КадровыйУчет. Там есть чудесная функция КадровыеДанныеСотрудников, она возращает много интересной информации. Но за период Месяц я не могу получить Таблицу значений состоящую из кадровых данных на начало периода, все перемещения за месяц и кадровые данные на конец периода.

Может кто сталкивался с данной проблемой или задачей, может еще есть какие процедуры функции, используемые типовыми отчетами.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
9. СергейКа 669 02.08.18 16:45 Сейчас в теме
(8) Запрос же просто из справочника берет и выгружает во временную таблицу. А, понял. Замените |
Справочник.ФизическиеЛица КАК ФизическиеЛица
на
| Справочник.Сотрудники КАК ТаблицаФильтр
. Тогда внешнего формирования не надо. Можно добавить отборы.
romulanin; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. СергейКа 669 01.08.18 21:14 Сейчас в теме
Используйте представления.
Пример получения интервальных данных по сотрудникам в обработке по гражданству. Для остальных регистров собственно только названием таблиц отличается и конечным результатом
// название временной таблицы, которая содержит значения измерений и периода,
// для которых надо получить ресурсы

ИмяВременнойТаблицыОтборовФизическихЛиц = "ВТФизическиеЛицаСПериодом";

ТолькоРазрешенные = Истина;

ПоляОтбораПериодическихДанных = Неопределено;

// название временной таблицы, в которую будет помещен результат
ИмяВТСведенияОГражданстве = "ВТСведенияОГражданстве";

// названия полей измерений
ИмяПоляФизическоеЛицо = "ФизическоеЛицо";
	
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;

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

// запрос подготовлен и его можно выполнить
ЗапросВТИмяРегистраСрез.Выполнить();

// в результатирующей таблице сохраняются все поля из таблицы фильтра + ресурсы 
// регистра по указанной комбинации измерений на указанную в таблице данных
Запрос.Текст = 
«ВЫБРАТЬ
	ВТ.ДатаНачала,
	ВТ.ДатаОкончания,
	ВТ.ФизическоеЛицо,
	ВТ.ИНН,
	ВТ.СтраховойНомерПФР,
	ВТ.Страна
ИЗ
» + ИмяВТСведенияОГражданстве + « КАК ВТ»;
Показать


Для отчетов на СКД принцип сохраняется:
Создаем таблицу отборов (физлиц например) и соединяем с пустой типизированной таблицей "Представления_" + ИмяРегистра.
В модуле отчета добавляем:
Процедура ИнициализироватьОтчет() Экспорт
	
	ЗарплатаКадрыОбщиеНаборыДанных.ЗаполнитьОбщиеИсточникиДанныхОтчета(ЭтотОбъект);
	
КонецПроцедуры

В принципе и все.
3. CHELLL 53 01.08.18 22:25 Сейчас в теме
(2)пробую присланный код, Поле не найдено "ДвиженияРегистра.Регистратор" ДвиженияРегистра.<<?>>Регистратор КАК Регистратор при выполнении
	// запрос подготовлен и его можно выполнить
	ЗапросВТИмяРегистраСрез.Выполнить();
4. СергейКа 669 01.08.18 22:28 Сейчас в теме
(3) с какой таблицей пробуете?
5. CHELLL 53 01.08.18 22:35 Сейчас в теме
(4) я хотел полностью выполнить твой код получая сведения по гражданству анализирую что и как работает и наткнулся на такую ошибку
6. СергейКа 669 01.08.18 22:57 Сейчас в теме
(5) Не виноватая я ((
Нафига получает регистратор для независимого регистра - я не знаю. Полгода назад пример работал, на текущем релизе - нет. Может надо сейчас параметры добавить какие.
Другой, работающий код как раз по кадровой истории:
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаФильтр.Сотрудник,
| &ДатаНачала КАК ДатаНачала,
| &ДатаОкончания КАК ДатаОкончания,
|ПОМЕСТИТЬ ВТТаблицаФильтр
|ИЗ
| Справочник.ФизическиеЛица КАК ФизическиеЛица";
Запрос.УстановитьПараметр("ДатаНачала", Объект.ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", Объект.ДатаОкончания);

Запрос.Выполнить();

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

ЗапросИнтервальногоРегистра = ЗарплатаКадрыПериодическиеРегистры.ЗапросВТПериодыИмяРегистра(
Метаданные.РегистрыСведений.КадроваяИсторияСотрудников.Имя,
Ложь,
ОписаниеФильтра);

ЗапросИнтервальногоРегистра.МенеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц;
ЗапросИнтервальногоРегистра.Выполнить();

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

ОбновленныеСотрудник = Новый Соответствие;

Выборка = Запрос.Выполнить().Выбрать();
Показать
8. CHELLL 53 02.08.18 13:45 Сейчас в теме
(6)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаФильтр.Сотрудник,
| &ДатаНачала КАК ДатаНачала,
| &ДатаОкончания КАК ДатаОкончания,
|ПОМЕСТИТЬ ВТТаблицаФильтр
|ИЗ
| Справочник.ФизическиеЛица КАК ФизическиеЛица";
Запрос.УстановитьПараметр("ДатаНачала", Объект.ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", Объект.ДатаОкончания);

Запрос.Выполнить();

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

ЗапросИнтервальногоРегистра = ЗарплатаКадрыПериодическиеРегистры.ЗапросВТПериодыИмяРегистра(
Метаданные.РегистрыСведений.КадроваяИсторияСотрудников.Имя,
Ложь,
ОписаниеФильтра);

ЗапросИнтервальногоРегистра.МенеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц;
ЗапросИнтервальногоРегистра.Выполнить();

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

ОбновленныеСотрудник = Новый Соответствие;

Выборка = Запрос.Выполнить().Выбрать();
Показать

(6) ТаблицаФильтр -есть программный код для её формирования?
9. СергейКа 669 02.08.18 16:45 Сейчас в теме
(8) Запрос же просто из справочника берет и выгружает во временную таблицу. А, понял. Замените |
Справочник.ФизическиеЛица КАК ФизическиеЛица
на
| Справочник.Сотрудники КАК ТаблицаФильтр
. Тогда внешнего формирования не надо. Можно добавить отборы.
romulanin; +1 Ответить
12. romulanin 05.02.20 18:00 Сейчас в теме
а можно подробнее ? как в скд вывести отчет используя данные сформированные в общем модуле ?
13. romulanin 06.02.20 09:26 Сейчас в теме
(2) а можно пример использования в скд этого функционала ?
14. СергейКа 669 06.02.20 09:32 Сейчас в теме
(13) Абсолютно типовой отчет, приложил.
Половина СКД это таблицы представлений.
Приведение к работающему коду происходит через вызов общих процедур перед компоновкой.
Прикрепленные файлы:
КадроваяИсторияСотрудников.erf
romulanin; +1 Ответить
15. romulanin 13.02.20 15:09 Сейчас в теме
(14) пытался понять как это работает, не совсем понятно как работают эти самые таблицы представления, но даже элементарно не получилось стартануть ваш пример
ошибку выводит Метод объекта не обнаружен приКомпоновкеРезультатаВтабличныйДокумент
16. СергейКа 669 13.02.20 15:15 Сейчас в теме
(15) Этот отчет просто взят из типовой конфигурации,без изменений. На какой версии пробовали? От релиза очень сильно зависит.
А по поводу как работает....
1) Создается шаблон запроса с названием таблицы Представление_<Имя таблицы>
2) Перед компоновкой текст запроса передается в общие процедуры, где по шаблону проиходит замена этих таблиц на программно собранный запрос.
17. romulanin 13.02.20 15:17 Сейчас в теме
(14) попробывал в версии 3.1.10 вообще выдает слишком много фактических параметров, в какую сторону двигать то даже не пойму
18. СергейКа 669 13.02.20 15:25 Сейчас в теме
(17) Возьмите отчет из этой версии. Он же типовой. Мне сложно сазать что не работает у вас. Я с зарплатой работаю уже 20 лет, многие вещи интуитивно понятны )) Даже не смотря на смену всех версий это все же 1С...
7. Bene_Valete 188 02.08.18 03:21 Сейчас в теме
Если зайти в карточку сотрудника и щелкнуть на гиперссылку "История переводов", то открываются данные о перемещениям сотрудника с указанием подразделения, должности и др, получаются эти данные из формы справочника следующей процедурой:

ФормаИзмененияИсторииРаботы

 &НаСервере
Процедура СформироватьКадровуюИсторию()
	КадроваяИстория.Очистить();
	Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	
	Измерения = Новый ТаблицаЗначений;
	Измерения.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
	Измерения.Колонки.Добавить("ДатаНачала", Новый ОписаниеТипов("Дата"));
	Измерения.Колонки.Добавить("ДатаОкончания", Новый ОписаниеТипов("Дата"));
	СтрокаИзмерения = Измерения.Добавить();
	СтрокаИзмерения.Сотрудник = СсылкаНаСотрудника;
	СтрокаИзмерения.ДатаОкончания = КонецГода(ТекущаяДатаСеанса());
	
	ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТИмяРегистра(
		"КадроваяИсторияСотрудников",
		Запрос.МенеджерВременныхТаблиц,
		Истина,
		ЗарплатаКадрыОбщиеНаборыДанных.ОписаниеФильтраДляСоздатьВТИмяРегистра(Измерения));
		
	ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТИмяРегистра(
		"ГрафикРаботыСотрудников",
		Запрос.МенеджерВременныхТаблиц,
		Истина,
		ЗарплатаКадрыОбщиеНаборыДанных.ОписаниеФильтраДляСоздатьВТИмяРегистра(Измерения));
	
	Запрос.Текст =
	"ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	КадроваяИсторияСотрудников.Период КАК Период
	|ПОМЕСТИТЬ ВТПериоды
	|ИЗ
	|	ВТКадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
	|
	|ОБЪЕДИНИТЬ
	|
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	ГрафикРаботыСотрудников.Период
	|ИЗ
	|	ВТГрафикРаботыСотрудников КАК ГрафикРаботыСотрудников
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
	|	Периоды.Период,
	|	МАКСИМУМ(ГрафикРаботыСотрудников.Период) КАК ПериодГрафикиРаботы,
	|	МАКСИМУМ(КадроваяИсторияСотрудников.Период) КАК ПериодКадроваяИстория
	|ПОМЕСТИТЬ ВТПериодыИстории
	|ИЗ
	|	ВТПериоды КАК Периоды
	|		ЛЕВОЕ СОЕДИНЕНИЕ ВТКадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
	|		ПО Периоды.Период >= КадроваяИсторияСотрудников.Период
	|		ЛЕВОЕ СОЕДИНЕНИЕ ВТГрафикРаботыСотрудников КАК ГрафикРаботыСотрудников
	|		ПО Периоды.Период >= ГрафикРаботыСотрудников.Период
	|
	|СГРУППИРОВАТЬ ПО
	|	Периоды.Период
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	ПериодыИстории.Период,
	|	КадроваяИсторияСотрудников.Организация КАК Организация,
	|	КадроваяИсторияСотрудников.Подразделение КАК Подразделение,
	|	КадроваяИсторияСотрудников.Должность КАК Должность,
	|	КадроваяИсторияСотрудников.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
	|	КадроваяИсторияСотрудников.КоличествоСтавок КАК КоличествоСтавок,
	|	КадроваяИсторияСотрудников.ВидСобытия КАК ВидСобытия,
	|	ГрафикРаботыСотрудников.ГрафикРаботы КАК ГрафикРаботы,
	|	ВЫБОР
	|		КОГДА ПериодыИстории.Период = ГрафикРаботыСотрудников.Период
	|			ТОГДА ГрафикРаботыСотрудников.Регистратор
	|		ИНАЧЕ НЕОПРЕДЕЛЕНО
	|	КОНЕЦ КАК РегистраторГрафикРаботы,
	|	ВЫБОР
	|		КОГДА ПериодыИстории.Период = КадроваяИсторияСотрудников.Период
	|			ТОГДА КадроваяИсторияСотрудников.Регистратор
	|		ИНАЧЕ НЕОПРЕДЕЛЕНО
	|	КОНЕЦ КАК РегистраторКадроваяИстория
	|ПОМЕСТИТЬ ВТИстория
	|ИЗ
	|	ВТПериодыИстории КАК ПериодыИстории
	|		ЛЕВОЕ СОЕДИНЕНИЕ ВТКадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
	|		ПО ПериодыИстории.ПериодКадроваяИстория = КадроваяИсторияСотрудников.Период
	|		ЛЕВОЕ СОЕДИНЕНИЕ ВТГрафикРаботыСотрудников КАК ГрафикРаботыСотрудников
	|		ПО ПериодыИстории.ПериодГрафикиРаботы = ГрафикРаботыСотрудников.Период
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	История.Период КАК Период,
	|	История.Организация,
	|	ВЫБОР
	|		КОГДА История.Организация = ИсторияПредыдущие.Организация
	|			ТОГДА ЛОЖЬ
	|		ИНАЧЕ ИСТИНА
	|	КОНЕЦ КАК ОрганизацияИзменена,
	|	История.Подразделение,
	|	ВЫБОР
	|		КОГДА История.Подразделение = ИсторияПредыдущие.Подразделение
	|			ТОГДА ЛОЖЬ
	|		ИНАЧЕ ИСТИНА
	|	КОНЕЦ КАК ПодразделениеИзменено,
	|	История.Должность,
	|	ВЫБОР
	|		КОГДА История.Должность = ИсторияПредыдущие.Должность
	|			ТОГДА ЛОЖЬ
	|		ИНАЧЕ ИСТИНА
	|	КОНЕЦ КАК ДолжностьИзменена,
	|	История.ДолжностьПоШтатномуРасписанию,
	|	ВЫБОР
	|		КОГДА История.ДолжностьПоШтатномуРасписанию = ИсторияПредыдущие.ДолжностьПоШтатномуРасписанию
	|			ТОГДА ЛОЖЬ
	|		ИНАЧЕ ИСТИНА
	|	КОНЕЦ КАК ДолжностьПоШтатномуРасписаниюИзменена,
	|	История.КоличествоСтавок,
	|	ВЫБОР
	|		КОГДА История.КоличествоСтавок = ИсторияПредыдущие.КоличествоСтавок
	|			ТОГДА ЛОЖЬ
	|		ИНАЧЕ ИСТИНА
	|	КОНЕЦ КАК КоличествоСтавокИзменено,
	|	История.ВидСобытия,
	|	История.ГрафикРаботы,
	|	ВЫБОР
	|		КОГДА История.ГрафикРаботы = ИсторияПредыдущие.ГрафикРаботы
	|			ТОГДА ЛОЖЬ
	|		ИНАЧЕ ИСТИНА
	|	КОНЕЦ КАК ГрафикРаботыИзменен,
	|	История.РегистраторГрафикРаботы,
	|	История.РегистраторКадроваяИстория
	|ИЗ
	|	ВТИстория КАК История
	|		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
	|			История.Период КАК Период,
	|			МАКСИМУМ(ИсторияПредыдущая.Период) КАК ПериодПредыдущий
	|		ИЗ
	|			ВТИстория КАК История
	|				ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТИстория КАК ИсторияПредыдущая
	|				ПО История.Период > ИсторияПредыдущая.Период
	|		
	|		СГРУППИРОВАТЬ ПО
	|			История.Период) КАК ПредыдущиеПериоды
	|			ЛЕВОЕ СОЕДИНЕНИЕ ВТИстория КАК ИсторияПредыдущие
	|			ПО ПредыдущиеПериоды.ПериодПредыдущий = ИсторияПредыдущие.Период
	|		ПО История.Период = ПредыдущиеПериоды.Период
	|
	|УПОРЯДОЧИТЬ ПО
	|	Период";
	
	КадроваяИстория.Загрузить(Запрос.Выполнить().Выгрузить());
	
	Для Каждого СтрокаКадроваяИстория Из КадроваяИстория Цикл
		Если ЗначениеЗаполнено(СтрокаКадроваяИстория.РегистраторКадроваяИстория) Тогда
			СтрокаКадроваяИстория.Основания.Добавить(СтрокаКадроваяИстория.РегистраторКадроваяИстория);
		КонецЕсли; 
		Если ЗначениеЗаполнено(СтрокаКадроваяИстория.РегистраторГрафикРаботы) 
			И СтрокаКадроваяИстория.РегистраторГрафикРаботы <> СтрокаКадроваяИстория.РегистраторКадроваяИстория Тогда
			СтрокаКадроваяИстория.Основания.Добавить(СтрокаКадроваяИстория.РегистраторГрафикРаботы);
		КонецЕсли; 
		СтрокаКадроваяИстория.КоличествоСтавокПредставление = КадровыйУчетРасширенныйКлиентСервер.ПредставлениеКоличестваСтавок(СтрокаКадроваяИстория.КоличествоСтавок);
	КонецЦикла;
	
КонецПроцедуры
 
Показать
10. CHELLL 53 03.08.18 00:37 Сейчас в теме
(7)
(9) оба варианта рабочие, спасибо, но пример СергейКа подошел больше. Спасибо.
11. KirinaAS 101 20.11.19 23:39 Сейчас в теме
(7) Очень помогло! Спасибо!
Bene_Valete; +1 Ответить
19. Darkalini 22.06.22 12:29 Сейчас в теме
Спасибо, очень помогли!
Bene_Valete; +1 Ответить
Оставьте свое сообщение

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