Имя: Пароль:
1C
1С v8
Запрос: действующие ДГПХ на дату
,
0 dft2014
 
06.06.18
12:31
ЗУП3
Как запросом получить действующих договорников ГПХ на конкретную дату?

Например, на 01.12.2017:

Действующие, у них 01.12.2017 входит в периоды договоров:
01.11.2017 - 02.12.2017 или 01.12.2017 - 31.03.2018


Недействующие, у них 01.12.2017 не входит в периоды договоров:
01.11.2017 - 30.11.2017 или 02.12.2017 - 31.03.2018


Ниже запрос, но он дает неверный результат:
"ВЫБРАТЬ
|    ПараметрыПериодовСтажаПФР.Сотрудник КАК Сотрудник
|ИЗ
|    РегистрСведений.ПараметрыПериодовСтажаПФР КАК ПараметрыПериодовСтажаПФР
|ГДЕ
|    ПараметрыПериодовСтажаПФР.Начало >= &НаДату
|    И ПараметрыПериодовСтажаПФР.Окончание <= &НаДату";
|
|СГРУППИРОВАТЬ ПО
|    ПараметрыПериодовСтажаПФР.Сотрудник";
1 Михаил Козлов
 
06.06.18
12:35
Наверное условие нужно поменять
ГДЕ
|    ПараметрыПериодовСтажаПФР.Начало >= &НаДату
|    И ПараметрыПериодовСтажаПФР.Окончание <= &НаДату";
на
ГДЕ
|    ПараметрыПериодовСтажаПФР.Начало <= &НаДату
|    И ПараметрыПериодовСтажаПФР.Окончание >= &НаДату";
2 MUXACb
 
06.06.18
12:36
(0) А чем типовой отчет не устраивает?
3 RomaH
 
naïve
06.06.18
12:39
4 dft2014
 
06.06.18
12:42
(1) Исправила и добавила отбор по регистратору. Теперь вообще перестал что-либо возвращать!

ВЫБРАТЬ
    ПараметрыПериодовСтажаПФР.Сотрудник КАК Сотрудник
ИЗ
    РегистрСведений.ПараметрыПериодовСтажаПФР КАК ПараметрыПериодовСтажаПФР
ГДЕ
    ТИПЗНАЧЕНИЯ(Регистратор) = ТИП(Документ.ДоговорРаботыУслуги)
    И ПараметрыПериодовСтажаПФР.Начало <= &Дата1
    И ПараметрыПериодовСтажаПФР.Окончание >= &Дата1
5 Михаил Козлов
 
06.06.18
12:46
Попробуйте вместо  ТИПЗНАЧЕНИЯ(Регистратор) = ТИП(Документ.ДоговорРаботыУслуги)
ГДЕ ПараметрыПериодовСтажаПФР.Регистратор ССЫЛКА Документ.ДоговорРаботыУслуги
6 dft2014
 
06.06.18
12:50
(5) так тоже пробовала, результат также становится - пустой.
7 SleepyHead
 
гуру
06.06.18
13:07
Вот текст работающего запроса, выдает физлиц, у которых действует ГПХ в указанном периоде, с даты по дату). Если вам не нужен отбор по физлицам, оключите, мне он был нужен.

    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПериодыГПХ.Регистратор КАК Регистратор,
        |    ПериодыГПХ.Сотрудник КАК Сотрудник,
        |    ПериодыГПХ.ФизическоеЛицо КАК ФизическоеЛицо,
        |    ПериодыГПХ.Регистратор.Номер КАК РегистраторНомер,
        |    ПериодыГПХ.Регистратор.Дата КАК РегистраторДата,
        |    ПериодыГПХ.ДатаНачала КАК Начало,
        |    ПериодыГПХ.ДатаОкончания КАК Конец,
        |    ПериодыГПХ.Сотрудник.Код КАК ТабельныйНомер
        |ИЗ
        |    РегистрСведений.ПериодыДействияДоговоровГражданскоПравовогоХарактера КАК ПериодыГПХ
        |ГДЕ
        |    ПериодыГПХ.Организация = &Организация
        |    И ПериодыГПХ.Сотрудник В(&МассивСотрудников)
        |    И ВЫБОР
        |            КОГДА НАЧАЛОПЕРИОДА(ПериодыГПХ.ДатаНачала, ДЕНЬ) > НАЧАЛОПЕРИОДА(&Дата1, ДЕНЬ)
        |                ТОГДА НАЧАЛОПЕРИОДА(ПериодыГПХ.ДатаНачала, ДЕНЬ)
        |            ИНАЧЕ НАЧАЛОПЕРИОДА(&Дата1, ДЕНЬ)
        |        КОНЕЦ <= ВЫБОР
        |            КОГДА КОНЕЦПЕРИОДА(ПериодыГПХ.ДатаОкончания, ДЕНЬ) < КОНЕЦПЕРИОДА(&Дата2, ДЕНЬ)
        |                ТОГДА КОНЕЦПЕРИОДА(ПериодыГПХ.ДатаОкончания, ДЕНЬ)
        |            ИНАЧЕ КОНЕЦПЕРИОДА(&Дата2, ДЕНЬ)
        |        КОНЕЦ";
    Запрос.УстановитьПараметр("Дата1", НачалоПериода);
    Запрос.УстановитьПараметр("Дата2", КонецПериода);
    Запрос.УстановитьПараметр("МассивСотрудников", МассивСотрудников);
    Запрос.УстановитьПараметр("Организация", ПараметрыМодели.Организация);
8 dft2014
 
06.06.18
13:11
(7) спасибо, но мне надо получить договора не за период, а на дату! В этом-то и весь вопрос...
9 SleepyHead
 
гуру
06.06.18
13:14
(8) Ну исправьте условие. Или вы только готовые решения рассматриваете?

У вас два варианта - передать в параметрах две одинаковые даты, тоже будет работать. Или переписать запрос под ваши требования.
10 dft2014
 
06.06.18
13:28
(9) Спасибо! Разобралась!