добрый день.
конфа зуп 2.5
стояла задача вывести дату вступления в последнюю новую должность у сотрудников от текущей даты, т.е. сотрудник Иванов И.И. 29.08.16 был принят на работу в должность Механик 4 разряда,
далее 30.11.16 его перевели на 3 разряд, после 18.01.17 становится начальником участка к примеру, 03.05.17 перемещение на другой участок с той же должностью. получается отчет показывает 18.01.17.
задачу решил так, сформировал запрос по сотрудникам и второй запрос уже с отбором по каждому рс РаботникиОрганизации, т.е. получился запрос в цикле, что не есть хорошо, как еще можно решить эту задачу?
---
Примерно так:

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

    табдок = новый табличныйдокумент;

    МакетОбработки = ПолучитьМакет("макет");
    ОблС = МакетОбработки.ПолучитьОбласть("строка");

    н=0;
    к=0;
    номер=0;
    элементыформы.Индикатор1.МаксимальноеЗначение = выборка.Количество();
    для каждого стр из выборка цикл
    элементыформы.Индикатор1.Значение = элементыформы.Индикатор1.Значение + 1;

    номер=номер+1;

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

    д = результат.Количество()-1;

    //элементыформы.Индикатор2.МаксимальноеЗначение = результат.Количество();

    пока н < результат.Количество()-1 цикл
    //элементыформы.Индикатор2.Значение = элементыформы.Индикатор2.Значение + 1;
    если результат[н+1].должность.КодПоОКПДТР <> результат[н].должность.КодПоОКПДТР тогда
    ОблС.Параметры.фио = результат[н].сотрудник;
    ОблС.Параметры.Должность = результат[н].должность;
    ОблС.Параметры.дата = результат[н].период;
    ОблС.Параметры.подразделение = результат[н].ПодразделениеОрганизации;
    ОблС.Параметры.год = результат[н].ДатаРождения;
    ОблС.Параметры.класс = результат[н].КлассУсловийТруда;
    ОблС.Параметры.Категория = результат[н].Категория;
    ОблС.Параметры.номер = номер;
    ТабДок.Вывести(ОблС);
    сообщить(н);
    к=к+1;
    Прервать;
    конецесли;
    н=н+1;
    конеццикла;
    если к=0 тогда
    ОблС.Параметры.фио = результат[0].сотрудник;
    ОблС.Параметры.Должность = результат[0].должность;
    ОблС.Параметры.дата = результат[д].период;
    ОблС.Параметры.подразделение = результат[0].ПодразделениеОрганизации;
    ОблС.Параметры.год = результат[0].ДатаРождения;
    ОблС.Параметры.класс = результат[0].КлассУсловийТруда;
    ОблС.Параметры.Категория = результат[0].Категория;
    ОблС.Параметры.номер = номер;
    ТабДок.Вывести(ОблС);
    конецесли;
    н=0;
    к=0;
    конеццикла;

    табдок.Показать();
```
---
объедини два запроса в один, и будет тебе счатье
---
Жесть. Почитайте про соединения, там ничего сложного. Текст для поиска 1С, левое соединение
---
```1c
    д = результат.Количество()-1;
```

Что это? А если "результат.Количество()" будет равно 0 ?? что тогда? все сломается же!
Изучите формирование табличного документа!
---
Примерно так:

```1c
    Выбрать Период, Должность, физлицо
    поместить тзТекДолжность
    из РегистрСведений.РаботникиОрганизаций.СрезПоследних();
    Выбрать тз.Период, тз.Должность, тз.физлицо, Максимум( ЕстьNULL( тз2.Период,ДатаВремя(1,1,1) ) ) как ПериодПредДолжности
    поместить тзПредДолжность из тзТекДолжность как тз
    левое соединение РегистрСведений.РаботникиОрганизаций как тз2 по тз2.Физлицо=тз.Физлицо и тз2.Должность<>тз.Должность
    Сгруппировать по тз.Период, тз.Должность, тз.физлицо;
    Выбрать Минимум(тз.Период) как НачалоТекДолжности, тз.Физлицо, тз2.ПериодПредДолжности из РегистрСведений.РаботникиОрганизаций как тз
    левое соединение тзПредДолжность тз2 по тз.Физлицо=тз2.Физлицо где тз.Период>тз2.ПериодПредДолжности
    Сгруппировать по тз.Физлицо,тз2.ПериодПредДолжности
```
---
все ок, спасибо.
---
Только физлиц на сторудников поменяйте
---
спасибо добрые люди, будем пробывать