ЗУП 3.1

Помогите пожл создать запрос с видами стажа сотрудников на сегодняшнюю дату

Сотрудник | Вид стажа | Лет | Месяцев | Дней

В регистре сведений СтажиФизическихЛицСрезПоследних есть только дата от которой считать, количество месяцев на эту дату.
---
СтажиФизическихЛицСрезПоследних

Общий смысл такой, однако это зарплата и user774630 тоже прав, в ЗУПе нельзя просто взять и что-то выбрать =)

```1c
    ВЫБРАТЬ
    СтажиФизическихЛицСрезПоследних.ФизическоеЛицо КАК ФизическоеЛицо,
    СтажиФизическихЛицСрезПоследних.ВидСтажа КАК ВидСтажа,
    СтажиФизическихЛицСрезПоследних.ДатаОтсчета КАК ДатаОтсчета,
    СтажиФизическихЛицСрезПоследних.РазмерМесяцев КАК РазмерМесяцев,
    СтажиФизическихЛицСрезПоследних.РазмерДней КАК РазмерДней,
    СтажиФизическихЛицСрезПоследних.РазмерМесяцев + РАЗНОСТЬДАТ(СтажиФизическихЛицСрезПоследних.ДатаОтсчета, ДОБАВИТЬКДАТЕ(&ТекущаяДата, ДЕНЬ, СтажиФизическихЛицСрезПоследних.РазмерДней), МЕСЯЦ) КАК ИтогоМесяцев,
    СтажиФизическихЛицСрезПоследних.РазмерДней - РАЗНОСТЬДАТ(&ТекущаяДата, ДОБАВИТЬКДАТЕ(СтажиФизическихЛицСрезПоследних.ДатаОтсчета, МЕСЯЦ, РАЗНОСТЬДАТ(СтажиФизическихЛицСрезПоследних.ДатаОтсчета, ДОБАВИТЬКДАТЕ(&ТекущаяДата, ДЕНЬ, СтажиФизическихЛицСрезПоследних.РазмерДней), МЕСЯЦ)), ДЕНЬ) КАК ИтогоДней
    ИЗ
    РегистрСведений.СтажиФизическихЛиц.СрезПоследних(&ТекущаяДата, ) КАК СтажиФизическихЛицСрезПоследних
```
---
А чем не устраивает отчет из программы Сажи сотрудников в программе
---
СтажиФизическихЛиц мб перепутали с другим РС. СтажиФизическихЛицКПересчету ?
В обычных "стажах" есть и дата, и количество месяцев и количество дней
---
СтажиФизическихЛицСрезПоследних

Общий смысл такой, однако это зарплата и user774630 тоже прав, в ЗУПе нельзя просто взять и что-то выбрать =)

```1c
    ВЫБРАТЬ
    СтажиФизическихЛицСрезПоследних.ФизическоеЛицо КАК ФизическоеЛицо,
    СтажиФизическихЛицСрезПоследних.ВидСтажа КАК ВидСтажа,
    СтажиФизическихЛицСрезПоследних.ДатаОтсчета КАК ДатаОтсчета,
    СтажиФизическихЛицСрезПоследних.РазмерМесяцев КАК РазмерМесяцев,
    СтажиФизическихЛицСрезПоследних.РазмерДней КАК РазмерДней,
    СтажиФизическихЛицСрезПоследних.РазмерМесяцев + РАЗНОСТЬДАТ(СтажиФизическихЛицСрезПоследних.ДатаОтсчета, ДОБАВИТЬКДАТЕ(&ТекущаяДата, ДЕНЬ, СтажиФизическихЛицСрезПоследних.РазмерДней), МЕСЯЦ) КАК ИтогоМесяцев,
    СтажиФизическихЛицСрезПоследних.РазмерДней - РАЗНОСТЬДАТ(&ТекущаяДата, ДОБАВИТЬКДАТЕ(СтажиФизическихЛицСрезПоследних.ДатаОтсчета, МЕСЯЦ, РАЗНОСТЬДАТ(СтажиФизическихЛицСрезПоследних.ДатаОтсчета, ДОБАВИТЬКДАТЕ(&ТекущаяДата, ДЕНЬ, СтажиФизическихЛицСрезПоследних.РазмерДней), МЕСЯЦ)), ДЕНЬ) КАК ИтогоДней
    ИЗ
    РегистрСведений.СтажиФизическихЛиц.СрезПоследних(&ТекущаяДата, ) КАК СтажиФизическихЛицСрезПоследних
```
---
Спасибо
---
Подход к получению количества целых лет из месяцев

```1c
    ВЫБОР
    КОГДА (ВЫРАЗИТЬ(Таблица.СтажМесяцев / 12 КАК ЧИСЛО(3, 0))) * 12 > Таблица.СтажМесяцев
    ТОГДА (ВЫРАЗИТЬ(Таблица.СтажМесяцев / 12 КАК ЧИСЛО(3, 0))) - 1
    ИНАЧЕ ВЫРАЗИТЬ(Таблица.СтажМесяцев / 12 КАК ЧИСЛО(3, 0))
    КОНЕЦ КАК Лет,
```
---
спасибо
---
ВЫБРАТЬ
    СтажиФизическихЛицСрезПоследних.ФизическоеЛицо КАК ФизическоеЛицо,
    СтажиФизическихЛицСрезПоследних.ВидСтажа КАК ВидСтажа,
    СтажиФизическихЛицСрезПоследних.ДатаОтсчета КАК ДатаОтсчета,
    СтажиФизическихЛицСрезПоследних.РазмерМесяцев КАК РазмерМесяцев,
    СтажиФизическихЛицСрезПоследних.РазмерДней КАК РазмерДней,
    СтажиФизическихЛицСрезПоследних.РазмерМесяцев + РАЗНОСТЬДАТ(СтажиФизическихЛицСрезПоследних.ДатаОтсчета, ДОБАВИТЬКДАТЕ(&ТекущаяДата, ДЕНЬ, СтажиФизическихЛицСрезПоследних.РазмерДней), МЕСЯЦ) КАК ИтогоМесяцев,
    СтажиФизическихЛицСрезПоследних.РазмерДней - РАЗНОСТЬДАТ(&ТекущаяДата, ДОБАВИТЬКДАТЕ(СтажиФизическихЛицСрезПоследних.ДатаОтсчета, МЕСЯЦ, РАЗНОСТЬДАТ(СтажиФизическихЛицСрезПоследних.ДатаОтсчета, ДОБАВИТЬКДАТЕ(&ТекущаяДата, ДЕНЬ, СтажиФизическихЛицСрезПоследних.РазмерДней), МЕСЯЦ)), ДЕНЬ) КАК ИтогоДней
ИЗ
    РегистрСведений.СтажиФизическихЛиц.СрезПоследних(&ТекущаяДата, ) КАК СтажиФизическихЛицСрезПоследних

Все работает, от себя добавлю из серии "1с для самых маленьких":
обход результата запроса, для получения отдельных значений День/Мес/Год
В переменную "ФизЛицо" записываем физ. лицо стажи которого хотим получить

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

    Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
    Запрос.УстановитьПараметр("ФизическоеЛицо", ФизЛицо);

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

    Пока Выборка.Следующий() Цикл
    ВидСтажа = Выборка.ВидСтажа.Наименование;
    КоличЛет = Цел(Выборка.ИтогоМесяцев / 12);
    КоличМес = (Выборка.ИтогоМесяцев)-(КоличЛет * 12);
    КоличДней = Выборка.ИтогоДней;

    // прописываем параметры
    КонецЦикла;
```
---
Код ниже, его можно немного поправить если нужно.

```1c
    ВЫБРАТЬ
    СтажиФизическихЛицСрезПоследних.ФизическоеЛицо КАК ФизическоеЛицо,
    СтажиФизическихЛицСрезПоследних.ВидСтажа КАК ВидСтажа,
    СтажиФизическихЛицСрезПоследних.ДатаОтсчета КАК ДатаОтсчета,
    СтажиФизическихЛицСрезПоследних.РазмерМесяцев КАК РазмерМесяцев,
    СтажиФизическихЛицСрезПоследних.РазмерДней КАК РазмерДней,
    РАЗНОСТЬДАТ(СтажиФизическихЛицСрезПоследних.ДатаОтсчета, Выразить(&ТекущаяДата КАК Дата), ГОД) КАК СтажГод,
    РАЗНОСТЬДАТ(СтажиФизическихЛицСрезПоследних.ДатаОтсчета, Выразить(&ТекущаяДата КАК Дата), МЕСЯЦ) КАК СтажМЕСЯЦ,
    РАЗНОСТЬДАТ(СтажиФизическихЛицСрезПоследних.ДатаОтсчета, Выразить(&ТекущаяДата КАК Дата), ДЕНЬ) КАК СтажДЕНЬ,
    Выразить(&ТекущаяДата КАК Дата) КАК ТекущаяДата1

    ИЗ
    РегистрСведений.СтажиФизическихЛиц.СрезПоследних КАК СтажиФизическихЛицСрезПоследних
```
---
Так будет правильнее, ниже. Параметр в срез последних поместить.

```1c
    ВЫБРАТЬ
    СтажиФизическихЛицСрезПоследних.ФизическоеЛицо КАК ФизическоеЛицо,
    СтажиФизическихЛицСрезПоследних.ВидСтажа КАК ВидСтажа,
    СтажиФизическихЛицСрезПоследних.ДатаОтсчета КАК ДатаОтсчета,
    СтажиФизическихЛицСрезПоследних.РазмерМесяцев КАК РазмерМесяцев,
    СтажиФизическихЛицСрезПоследних.РазмерДней КАК РазмерДней
    ИЗ
    РегистрСведений.СтажиФизическихЛиц.СрезПоследних(&ТекущаяДата, ) КАК СтажиФизическихЛицСрезПоследних
```
---
Ничего из этого не будет правильным.
В ЗУП 3.1 используется механизм представлений, который позволяет, не понимая логики программы, получать данные правильно.

Отчет СтажиСотрудников модифицируется специальным образом, вот кусок, который формирует стажи. Вместо написания своих кривых запросов стоит изучить возможности конфигурации.

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

    И (ТаблицаОтборовФизическихЛиц.Период МЕЖДУ НакопленныеСтажиФизическихЛиц.ДатаНачала И НакопленныеСтажиФизическихЛиц.ДатаОкончания)
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ПредварительныеДанные2.ДатаРасчетаСтажа КАК ДатаРасчетаСтажа,
    ПредварительныеДанные2.ФизическоеЛицо КАК ФизическоеЛицо,
    ПредварительныеДанные2.ВидСтажа КАК ВидСтажа,
    ПредварительныеДанные2.ДатаОтсчета КАК ДатаОтсчета,
    ПредварительныеДанные2.ДатаОкончания КАК ДатаОкончания,
    ПредварительныеДанные2.РазмерМесяцев КАК РазмерМесяцев,
    ПредварительныеДанные2.РазмерДней КАК РазмерДней,
    ПредварительныеДанные2.Прерван КАК Прерван,
    ВЫБОР
    КОГДА ПредварительныеДанные2.Прерван
    ТОГДА ПредварительныеДанные2.РазмерМесяцев
    КОГДА ПредварительныеДанные2.ДатаРасчетаСтажа = ПредварительныеДанные2.ДатаОтсчета
    ТОГДА ПредварительныеДанные2.РазмерМесяцев
    ИНАЧЕ ВЫБОР
    КОГДА ПредварительныеДанные2.НачалоПервогоМесяца > ПредварительныеДанные2.ДатаРасчетаСтажа
    ТОГДА 0
    ИНАЧЕ ВЫБОР
    КОГДА ДОБАВИТЬКДАТЕ(ПредварительныеДанные2.НачалоПервогоМесяца, МЕСЯЦ, РАЗНОСТЬДАТ(ПредварительныеДанные2.НачалоПервогоМесяца, ПредварительныеДанные2.ДатаРасчетаСтажа, МЕСЯЦ)) > ПредварительныеДанные2.ДатаРасчетаСтажа
    ТОГДА РАЗНОСТЬДАТ(ПредварительныеДанные2.НачалоПервогоМесяца, ПредварительныеДанные2.ДатаРасчетаСтажа, МЕСЯЦ) - 1
    ИНАЧЕ РАЗНОСТЬДАТ(ПредварительныеДанные2.НачалоПервогоМесяца, ПредварительныеДанные2.ДатаРасчетаСтажа, МЕСЯЦ)
    КОНЕЦ + ВЫБОР
    КОГДА ПредварительныеДанные2.ДатаОтсчета = ПредварительныеДанные2.НачалоПервогоМесяца
    ИЛИ ПредварительныеДанные2.РазмерДней = 0
    ТОГДА 0
    ИНАЧЕ 1
    КОНЕЦ
    КОНЕЦ + ПредварительныеДанные2.РазмерМесяцев + ВЫБОР
    КОГДА ПредварительныеДанные2.ДатаРасчетаСтажа = ДОБАВИТЬКДАТЕ(ПредварительныеДанные2.НачалоБудущегоМесяца, ДЕНЬ, -1)
    И ПредварительныеДанные2.ДеньНачалаМесяца = ДЕНЬ(ПредварительныеДанные2.НачалоБудущегоМесяца)
    ТОГДА 1
    ИНАЧЕ 0
    КОНЕЦ
    КОНЕЦ КАК СтажМесяцев,
    ВЫБОР
    КОГДА ПредварительныеДанные2.Прерван
    ТОГДА ПредварительныеДанные2.РазмерДней
    КОГДА ПредварительныеДанные2.ДатаРасчетаСтажа = ПредварительныеДанные2.ДатаОтсчета
    ТОГДА ПредварительныеДанные2.РазмерДней
    КОГДА ПредварительныеДанные2.ДатаРасчетаСтажа = ДОБАВИТЬКДАТЕ(ПредварительныеДанные2.НачалоБудущегоМесяца, ДЕНЬ, -1)
    И ПредварительныеДанные2.ДеньНачалаМесяца = ДЕНЬ(ПредварительныеДанные2.НачалоБудущегоМесяца)
    ТОГДА 0
    ИНАЧЕ ПредварительныеДанные2.ПрошлоДней
    КОНЕЦ КАК СтажДней,
    ПредварительныеДанные2.НачалоБудущегоМесяца КАК НачалоБудущегоМесяца
    ПОМЕСТИТЬ ВТПредварительныеДанныеСтажа
    ИЗ
    (ВЫБРАТЬ
    ПредварительныеДанные1.ДатаРасчетаСтажа КАК ДатаРасчетаСтажа,
    ПредварительныеДанные1.ФизическоеЛицо КАК ФизическоеЛицо,
    ПредварительныеДанные1.ВидСтажа КАК ВидСтажа,
    ПредварительныеДанные1.ДатаОтсчета КАК ДатаОтсчета,
    ПредварительныеДанные1.ДатаОкончания КАК ДатаОкончания,
    ПредварительныеДанные1.РазмерМесяцев КАК РазмерМесяцев,
    ПредварительныеДанные1.РазмерДней КАК РазмерДней,
    ПредварительныеДанные1.Прерван КАК Прерван,
    НАЧАЛОПЕРИОДА(ВЫБОР
    КОГДА ПредварительныеДанные1.ДеньДатыОтсчета = ПредварительныеДанные1.ДеньНачалаМесяца
    ТОГДА ПредварительныеДанные1.ДатаОтсчета
    КОГДА ПредварительныеДанные1.ДеньДатыОтсчета < ПредварительныеДанные1.ДеньНачалаМесяца
    ТОГДА ВЫБОР
    КОГДА ПредварительныеДанные1.КоличествоДнейМесяцаДатыОтсчета <= ПредварительныеДанные1.ДеньНачалаМесяца
    ТОГДА КОНЕЦПЕРИОДА(ПредварительныеДанные1.ДатаОтсчета, МЕСЯЦ)
    ИНАЧЕ ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ПредварительныеДанные1.ДатаОтсчета, МЕСЯЦ), ДЕНЬ, ПредварительныеДанные1.ДеньНачалаМесяца - 1)
    КОНЕЦ
    ИНАЧЕ ВЫБОР
    КОГДА ПредварительныеДанные1.КоличествоДнейМесяцаПослеДатыОтсчета <= ПредварительныеДанные1.ДеньНачалаМесяца
    ТОГДА КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ПредварительныеДанные1.ДатаОтсчета, МЕСЯЦ), ДЕНЬ, 1), МЕСЯЦ)
    ИНАЧЕ ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ПредварительныеДанные1.ДатаОтсчета, МЕСЯЦ), ДЕНЬ, ПредварительныеДанные1.ДеньНачалаМесяца)
    КОНЕЦ
    КОНЕЦ, ДЕНЬ) КАК НачалоПервогоМесяца,
    ПредварительныеДанные1.ДеньНачалаМесяца КАК ДеньНачалаМесяца,
    НАЧАЛОПЕРИОДА(ВЫБОР
    КОГДА ПредварительныеДанные1.ДеньДатыРасчетаСтажа = ПредварительныеДанные1.ДеньНачалаМесяца
    ТОГДА ПредварительныеДанные1.ДатаРасчетаСтажа
    КОГДА ПредварительныеДанные1.ДеньДатыРасчетаСтажа < ПредварительныеДанные1.ДеньНачалаМесяца
    ТОГДА ВЫБОР
    КОГДА ПредварительныеДанные1.КоличествоДнейМесяцаДатыРасчетаСтажа <= ПредварительныеДанные1.ДеньНачалаМесяца
    ТОГДА КОНЕЦПЕРИОДА(ПредварительныеДанные1.ДатаРасчетаСтажа, МЕСЯЦ)
    ИНАЧЕ ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ПредварительныеДанные1.ДатаРасчетаСтажа, МЕСЯЦ), ДЕНЬ, ПредварительныеДанные1.ДеньНачалаМесяца - 1)
    КОНЕЦ
    ИНАЧЕ ВЫБОР
    КОГДА ПредварительныеДанные1.КоличествоДнейМесяцаПослеДатыРасчетаСтажа <= ПредварительныеДанные1.ДеньНачалаМесяца
    ТОГДА КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ПредварительныеДанные1.ДатаРасчетаСтажа, МЕСЯЦ), ДЕНЬ, 1), МЕСЯЦ)
    ИНАЧЕ ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ПредварительныеДанные1.ДатаРасчетаСтажа, МЕСЯЦ), ДЕНЬ, ПредварительныеДанные1.ДеньНачалаМесяца)
    КОНЕЦ
    КОНЕЦ, ДЕНЬ) КАК НачалоБудущегоМесяца,
    ВЫБОР
    КОГДА НАЧАЛОПЕРИОДА(ВЫБОР
    КОГДА ПредварительныеДанные1.ДеньДатыОтсчета = ПредварительныеДанные1.ДеньНачалаМесяца
    ТОГДА ПредварительныеДанные1.ДатаОтсчета
    КОГДА ПредварительныеДанные1.ДеньДатыОтсчета < ПредварительныеДанные1.ДеньНачалаМесяца
    ТОГДА ВЫБОР
    КОГДА ПредварительныеДанные1.КоличествоДнейМесяцаДатыОтсчета <= ПредварительныеДанные1.ДеньНачалаМесяца
    ТОГДА КОНЕЦПЕРИОДА(ПредварительныеДанные1.ДатаОтсчета, МЕСЯЦ)
    ИНАЧЕ ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ПредварительныеДанные1.ДатаОтсчета, МЕСЯЦ), ДЕНЬ, ПредварительныеДанные1.ДеньНачалаМесяца - 1)
    КОНЕЦ
    ИНАЧЕ ВЫБОР
    КОГДА ПредварительныеДанные1.КоличествоДнейМесяцаПослеДатыОтсчета <= ПредварительныеДанные1.ДеньНачалаМесяца
    ТОГДА КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ПредварительныеДанные1.ДатаОтсчета, МЕСЯЦ), ДЕНЬ, 1), МЕСЯЦ)
    ИНАЧЕ ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ПредварительныеДанные1.ДатаОтсчета, МЕСЯЦ), ДЕНЬ, ПредварительныеДанные1.ДеньНачалаМесяца)
    КОНЕЦ
    КОНЕЦ, ДЕНЬ) = НАЧАЛОПЕРИОДА(ВЫБОР
    КОГДА ПредварительныеДанные1.ДеньДатыРасчетаСтажа = ПредварительныеДанные1.ДеньНачалаМесяца
    ТОГДА ПредварительныеДанные1.ДатаРасчетаСтажа
    КОГДА ПредварительныеДанные1.ДеньДатыРасчетаСтажа < ПредварительныеДанные1.ДеньНачалаМесяца
    ТОГДА ВЫБОР
    КОГДА ПредварительныеДанные1.КоличествоДнейМесяцаДатыРасчетаСтажа <= ПредварительныеДанные1.ДеньНачалаМесяца
    ТОГДА КОНЕЦПЕРИОДА(ПредварительныеДанные1.ДатаРасчетаСтажа, МЕСЯЦ)
    ИНАЧЕ ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ПредварительныеДанные1.ДатаРасчетаСтажа, МЕСЯЦ), ДЕНЬ, ПредварительныеДанные1.ДеньНачалаМесяца - 1)
    КОНЕЦ
    ИНАЧЕ ВЫБОР
    КОГДА ПредварительныеДанные1.КоличествоДнейМесяцаПослеДатыРасчетаСтажа <= ПредварительныеДанные1.ДеньНачалаМесяца
    ТОГДА КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ПредварительныеДанные1.ДатаРасчетаСтажа, МЕСЯЦ), ДЕНЬ, 1), МЕСЯЦ)
    ИНАЧЕ ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ПредварительныеДанные1.ДатаРасчетаСтажа, МЕСЯЦ), ДЕНЬ, ПредварительныеДанные1.ДеньНачалаМесяца)
    КОНЕЦ
    КОНЕЦ, ДЕНЬ)
    И ПредварительныеДанные1.ДатаРасчетаСтажа <> НАЧАЛОПЕРИОДА(ВЫБОР
    КОГДА ПредварительныеДанные1.ДеньДатыОтсчета = ПредварительныеДанные1.ДеньНачалаМесяца
    ТОГДА ПредварительныеДанные1.ДатаОтсчета
    КОГДА ПредварительныеДанные1.ДеньДатыОтсчета < ПредварительныеДанные1.ДеньНачалаМесяца
    ТОГДА ВЫБОР
    КОГДА ПредварительныеДанные1.КоличествоДнейМесяцаДатыОтсчета <= ПредварительныеДанные1.ДеньНачалаМесяца
    ТОГДА КОНЕЦПЕРИОДА(ПредварительныеДанные1.ДатаОтсчета, МЕСЯЦ)
    ИНАЧЕ ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ПредварительныеДанные1.ДатаОтсчета, МЕСЯЦ), ДЕНЬ, ПредварительныеДанные1.ДеньНачалаМесяца - 1)
    КОНЕЦ
    ИНАЧЕ ВЫБОР
    КОГДА ПредварительныеДанные1.КоличествоДнейМесяцаПослеДатыОтсчета <= ПредварительныеДанные1.ДеньНачалаМесяца
    ТОГДА КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ПредварительныеДанные1.ДатаОтсчета, МЕСЯЦ), ДЕНЬ, 1), МЕСЯЦ)
    ИНАЧЕ ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ПредварительныеДанные1.ДатаОтсчета, МЕСЯЦ), ДЕНЬ, ПредварительныеДанные1.ДеньНачалаМесяца)
    КОНЕЦ
    КОНЕЦ, ДЕНЬ)
    ТОГДА РАЗНОСТЬДАТ(ПредварительныеДанные1.ДатаОтсчета, ПредварительныеДанные1.ДатаРасчетаСтажа, ДЕНЬ) + ПредварительныеДанные1.РазмерДней
    КОГДА ПредварительныеДанные1.ДеньДатыРасчетаСтажа >= ПредварительныеДанные1.ДеньНачалаМесяца
    ТОГДА ПредварительныеДанные1.ДеньДатыРасчетаСтажа - ПредварительныеДанные1.ДеньНачалаМесяца + 1
    КОГДА ПредварительныеДанные1.КоличествоДнейМесяцаДатыРасчетаСтажа < ПредварительныеДанные1.ДеньНачалаМесяца
    И ПредварительныеДанные1.ДеньДатыРасчетаСтажа = ПредварительныеДанные1.КоличествоДнейМесяцаДатыРасчетаСтажа
    ТОГДА ПредварительныеДанные1.КоличествоДнейПредыдущегоМесяца - ПредварительныеДанные1.ДеньНачалаМесяца + 1
    КОГДА ПредварительныеДанные1.КоличествоДнейПредыдущегоМесяца >= ПредварительныеДанные1.ДеньНачалаМесяца
    ТОГДА ПредварительныеДанные1.ДеньДатыРасчетаСтажа + ПредварительныеДанные1.КоличествоДнейПредыдущегоМесяца - ПредварительныеДанные1.ДеньНачалаМесяца + 1
    КОГДА ПредварительныеДанные1.КоличествоДнейПредыдущегоМесяца < ПредварительныеДанные1.ДеньНачалаМесяца
    ТОГДА ПредварительныеДанные1.ДеньДатыРасчетаСтажа + ПредварительныеДанные1.КоличествоДнейПредПредыдущегоМесяца - ПредварительныеДанные1.ДеньНачалаМесяца + 1
    ИНАЧЕ ПредварительныеДанные1.ДеньДатыРасчетаСтажа
    КОНЕЦ КАК ПрошлоДней
    ИЗ
    (ВЫБРАТЬ
    ИсходныеДанные.Период КАК ДатаРасчетаСтажа,
    ИсходныеДанные.ФизическоеЛицо КАК ФизическоеЛицо,
    ИсходныеДанные.ВидСтажа КАК ВидСтажа,
    ИсходныеДанные.ДатаНачала КАК ДатаОтсчета,
    ИсходныеДанные.ДатаОкончания КАК ДатаОкончания,
    ИсходныеДанные.РазмерДней КАК РазмерДней,
    ИсходныеДанные.РазмерМесяцев КАК РазмерМесяцев,
    ИсходныеДанные.Прерван КАК Прерван,
    ВЫБОР
    КОГДА ИсходныеДанные.РазмерДней = 0
    ТОГДА ДЕНЬ(ДОБАВИТЬКДАТЕ(ИсходныеДанные.ДатаНачала, ДЕНЬ, 1))
    КОГДА ДЕНЬ(ИсходныеДанные.ДатаНачала) >= ИсходныеДанные.РазмерДней
    ТОГДА ДЕНЬ(ИсходныеДанные.ДатаНачала) - ИсходныеДанные.РазмерДней + 1
    ИНАЧЕ ДЕНЬ(ИсходныеДанные.ДатаНачала) - ИсходныеДанные.РазмерДней + 31
    КОНЕЦ КАК ДеньНачалаМесяца,
    ДЕНЬ(ИсходныеДанные.Период) КАК ДеньДатыРасчетаСтажа,
    ДЕНЬ(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ИсходныеДанные.Период, МЕСЯЦ), ДЕНЬ, -1)) КАК КоличествоДнейПредыдущегоМесяца,
    ДЕНЬ(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ИсходныеДанные.Период, МЕСЯЦ), ДЕНЬ, -1), МЕСЯЦ), ДЕНЬ, -1)) КАК КоличествоДнейПредПредыдущегоМесяца,
    ДЕНЬ(КОНЕЦПЕРИОДА(ИсходныеДанные.ДатаНачала, МЕСЯЦ)) КАК КоличествоДнейМесяцаДатыОтсчета,
    ДЕНЬ(КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ИсходныеДанные.ДатаНачала, МЕСЯЦ), ДЕНЬ, 1), МЕСЯЦ)) КАК КоличествоДнейМесяцаПослеДатыОтсчета,
    ДЕНЬ(КОНЕЦПЕРИОДА(ИсходныеДанные.Период, МЕСЯЦ)) КАК КоличествоДнейМесяцаДатыРасчетаСтажа,
    ДЕНЬ(КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ИсходныеДанные.Период, МЕСЯЦ), ДЕНЬ, 1), МЕСЯЦ)) КАК КоличествоДнейМесяцаПослеДатыРасчетаСтажа,
    ДЕНЬ(ИсходныеДанные.ДатаНачала) КАК ДеньДатыОтсчета,
    РАЗНОСТЬДАТ(ИсходныеДанные.ДатаНачала, ИсходныеДанные.Период, МЕСЯЦ) КАК РазностьМесяцев
    ИЗ
    ВТПериодыСтажейФизическихЛиц КАК ИсходныеДанные) КАК ПредварительныеДанные1) КАК ПредварительныеДанные2
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ПредварительныеДанные3.ДатаРасчетаСтажа КАК ПериодРегистрации,
    ПредварительныеДанные3.ДатаРасчетаСтажа КАК Период,
    ПредварительныеДанные3.ДатаРасчетаСтажа КАК ДатаРасчетаСтажа,
    ПредварительныеДанные3.ФизическоеЛицо КАК ФизическоеЛицо,
    ПредварительныеДанные3.ВидСтажа КАК ВидСтажа,
    ПредварительныеДанные3.ДатаОтсчета КАК ДатаОтсчета,
    ПредварительныеДанные3.ДатаОкончания КАК ДатаОкончания,
    ПредварительныеДанные3.РазмерМесяцев КАК РазмерМесяцев,
    ПредварительныеДанные3.РазмерДней КАК РазмерДней,
    ПредварительныеДанные3.Прерван КАК Прерван,
    ПредварительныеДанные3.СтажМесяцев КАК ВсегоМесяцев,
    ВЫБОР
    КОГДА (ВЫРАЗИТЬ(ПредварительныеДанные3.СтажМесяцев / 12 КАК ЧИСЛО(3, 0))) * 12 > ПредварительныеДанные3.СтажМесяцев
    ТОГДА (ВЫРАЗИТЬ(ПредварительныеДанные3.СтажМесяцев / 12 КАК ЧИСЛО(3, 0))) - 1
    ИНАЧЕ ВЫРАЗИТЬ(ПредварительныеДанные3.СтажМесяцев / 12 КАК ЧИСЛО(3, 0))
    КОНЕЦ КАК Лет,
    ПредварительныеДанные3.СтажМесяцев - ВЫБОР
    КОГДА (ВЫРАЗИТЬ(ПредварительныеДанные3.СтажМесяцев / 12 КАК ЧИСЛО(3, 0))) * 12 > ПредварительныеДанные3.СтажМесяцев
    ТОГДА (ВЫРАЗИТЬ(ПредварительныеДанные3.СтажМесяцев / 12 КАК ЧИСЛО(3, 0))) - 1
    ИНАЧЕ ВЫРАЗИТЬ(ПредварительныеДанные3.СтажМесяцев / 12 КАК ЧИСЛО(3, 0))
    КОНЕЦ * 12 КАК Месяцев,
    ПредварительныеДанные3.СтажДней КАК Дней,
    ВЫБОР
    КОГДА ПредварительныеДанные3.Прерван
    ТОГДА ДАТАВРЕМЯ(1, 1, 1)
    КОГДА ПредварительныеДанные3.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1)
    ТОГДА ПредварительныеДанные3.НачалоБудущегоМесяца
    КОГДА ПредварительныеДанные3.НачалоБудущегоМесяца МЕЖДУ ПредварительныеДанные3.ДатаОтсчета И ПредварительныеДанные3.ДатаОкончания
    ТОГДА ПредварительныеДанные3.НачалоБудущегоМесяца
    ИНАЧЕ NULL
    КОНЕЦ КАК НачалоБудущегоМесяца
    ПОМЕСТИТЬ ПредставленияСтажиСотрудников
    ИЗ
    ВТПредварительныеДанныеСтажа КАК ПредварительныеДанные3
    ;
```
---
проще изучить зуп, чем понять этот запрос :D
---
я о том же и говорю :). ЗУП не Бухгалтерия с одним регистром. Черт ногу сломит. Разработчики это поняли и "спрятали" от нас эти механизмы, предоставив удобные в использовании механизмы: для отчетов на СКД это общие запросы и представления, а для программной работы - программный интерфейс общих модулей.
---
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    Сотрудники.Период КАК Период,
    Сотрудники.Сотрудник.ФизическоеЛицо КАК ФизическоеЛицо
//////// КОД ////////
ИЗ
    ВТПредварительныеДанныеСтажа КАК ПредварительныеДанные3

Уважаемый вы если пишите код, пишите его так, чтобы другие могли его воспроизвести. Этот запрос ссылается на ВТ Сотрудники? а что это? и в каком виде эта таблица должна быть догадывайтесь сами да...
---
папе своему советы давай.
---
Необходимо написать запрос со множеством других данных, который в стандартном реализовать нет возможности. Встал вопрос - как же рассчитать стаж? Увидев в стандартном этот запрос, ужаснулась, силясь понять - отчаялась... Поэтому возник вопрос здесь
---
например, каких?
---
например, стаж соединить с наградами
---
получить таблицу стажа в ВтСтажи через механизм представлений и потом соединять хоть с наградами, хоть с казнями.

Причем, ничего ужасного в этом нет, просто достаточно сказать себе: "Я пойму механизм представлений и выброшу костыли на свалку".

Тот кто будет носиться со своим костылем - проиграет в битве с искусственным интеллектом ЗУП 3+
---
стаж работы на предприятии не подходит - организация несколько раз реорганизовывалась и мне нужен определенный вид стажа