Имя: Пароль:
1C
1С v8
Необходимы данные с регистра сведений по заданным датам
0 KIraA
 
12.06.19
07:00
Доброго времени суток. Вот запрос...не взлетает :-((

Необходимо с регистра сведений взять данные на срез последних по определенным датам. Подскажите где что подправить?

"ВЫБРАТЬ РАЗЛИЧНЫЕ
|    НАЧАЛОПЕРИОДА(РегистрСтатусовСрезПоследних.Регистратор.Дата, МЕСЯЦ) КАК РегистраторДата
|ПОМЕСТИТЬ Даты
|ИЗ
|    РегистрСведений.РегистрСтатусов.СрезПоследних КАК РегистрСтатусовСрезПоследних
|ГДЕ
|    РегистрСтатусовСрезПоследних.Регистратор.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| &Даты КАК Даты,
| КОЛИЧЕСТВО(РегистрСтатусовСрезПоследних.ОбъектДом) КАК ОбъектДом
|ИЗ
|    Даты КАК Даты
|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РегистрСтатусов.СрезПоследних(&Даты) КАК РегистрСтатусовСрезПоследних
|        ПО Даты.РегистраторДата = РегистрСтатусовСрезПоследних.Период
|ГДЕ
|    РегистрСтатусовСрезПоследних.СтатусПомещения = ЗНАЧЕНИЕ(перечисление.СБ_СтатусыОбъектов.Активен)"
1 Мимохожий Однако
 
12.06.19
07:02
(0) В формулировке "срез последних по определенным датам" заложено противоречие. Если между, то бери не срезы, а просто записи регистра.
2 KIraA
 
12.06.19
07:13
"ВЫБРАТЬ РАЗЛИЧНЫЕ
|    НАЧАЛОПЕРИОДА(РегистрСтатусов.Регистратор.Дата, МЕСЯЦ) КАК РегистраторДата
|ПОМЕСТИТЬ Даты
|ИЗ
|    РегистрСведений.РегистрСтатусов КАК РегистрСтатусов
|ГДЕ
|    РегистрСтатусов.Регистратор.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| &Даты КАК Даты,
| КОЛИЧЕСТВО(РегистрСтатусов.ОбъектДом) КАК ОбъектДом
|ИЗ
|    Даты КАК Даты
|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РегистрСтатусов(&Даты) КАК РегистрСтатусов
|        ПО Даты.РегистраторДата = РегистрСтатусов.Период
|ГДЕ
|    РегистрСтатусов.СтатусПомещения = ЗНАЧЕНИЕ(перечисление.СБ_СтатусыОбъектов.Активен)"


не сработало
3 catena
 
12.06.19
07:17
(2)Переформулируйте задачу, непонятно, что пытаетесь сделать.
4 Пузан
 
12.06.19
07:21
СрезПоследних не поможет. Если в цикле решать задачу нельзя, то придется писать запрос получающий срез последних по датам (или любому другому набору данных) самостоятельно. Через соединение регистра с самим собой по максимуму дат и выборкой нужных реквизитов для соединения с набором данных. Как то так.
5 Мимохожий Однако
 
12.06.19
07:25
(2) Пока не сформулируешь для себя (и ,возможно, для нас), не взлетит. Возможно, тебе нужны данные по датам по каждому регистратору. Но это называется по - другому. Нажми красную Я, там есть на эту тему.
6 KIraA
 
12.06.19
07:26
Есть запрос который отрабатывает правильно, но с конкретным указанием даты.
|ВЫБРАТЬ
| КОЛИЧЕСТВО(РегистрСтатусовСрезПоследних.ОбъектДом) КАК ОбъектДом
|ИЗ
|    Даты КАК Даты
|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РегистрСтатусов.СрезПоследних(&Дата) КАК РегистрСтатусовСрезПоследних
|        ПО Даты.РегистраторДата = РегистрСтатусовСрезПоследних.Период
|ГДЕ
|    РегистрСтатусовСрезПоследних.СтатусПомещения = ЗНАЧЕНИЕ(перечисление.СБ_СтатусыОбъектов.Активен)"

Теперь нужно получить такие же данные но по нескольким датам. Не прибегая к циклу.
7 Мимохожий Однако
 
12.06.19
07:43
8 Вася Теркин
 
12.06.19
12:09
проще всего динамически текст запроса сформировать через ОБЪЕДИНИТЬ
9 Вася Теркин
 
12.06.19
12:14
ТекстЗапроса = "&&";
Для каждого текДата из массивДат Цикл

ТекстЗапроса = ТекстЗапроса + "ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ
| КОЛИЧЕСТВО(РегистрСтатусовСрезПоследних.ОбъектДом) КАК ОбъектДом
|ИЗ
|    Даты КАК Даты
|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РегистрСтатусов.СрезПоследних("+ ВернутьДатуОтформитированной(текДата ) + ") КАК РегистрСтатусовСрезПоследних
|        ПО Даты.РегистраторДата = РегистрСтатусовСрезПоследних.Период
|ГДЕ
|    РегистрСтатусовСрезПоследних.СтатусПомещения = ЗНАЧЕНИЕ(перечисление.СБ_СтатусыОбъектов.Активен)";
КонецЦикла;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"&&ОБЪЕДИНИТЬ ВСЕ","");
10 Вася Теркин
 
12.06.19
12:16
Как-то так
А зачем тебе Даты КАК Даты? Запрос странный
11 PuhUfa
 
12.06.19
13:12
12 Amfiaray
 
12.06.19
14:27
ВЫБРАТЬ
    ТабдицаДат.Дата
ПОМЕСТИТЬ ВТ_Даты
ИЗ
    &ТабдицаДат КАК ТабдицаДат
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Даты.Дата,
    ДокументыФизическихЛиц.Физлицо,
    МАКСИМУМ(ДокументыФизическихЛиц.Период) КАК Период,
    ДокументыФизическихЛиц.ВидДокумента
ПОМЕСТИТЬ ВТ_МаксимальныеПериоды
ИЗ
    ВТ_Даты КАК ВТ_Даты
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДокументыФизическихЛиц КАК ДокументыФизическихЛиц
        ПО ВТ_Даты.Дата >= ДокументыФизическихЛиц.Период

СГРУППИРОВАТЬ ПО
    ДокументыФизическихЛиц.Физлицо,
    ВТ_Даты.Дата,
    ДокументыФизическихЛиц.ВидДокумента
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_МаксимальныеПериоды.Дата,
    ДокументыФизическихЛиц.Физлицо,
    ДокументыФизическихЛиц.ВидДокумента,
    ДокументыФизическихЛиц.Серия,
    ДокументыФизическихЛиц.Номер,
    ДокументыФизическихЛиц.ДатаВыдачи,
    ДокументыФизическихЛиц.СрокДействия,
    ДокументыФизическихЛиц.КемВыдан,
    ДокументыФизическихЛиц.КодПодразделения,
    ДокументыФизическихЛиц.ЯвляетсяДокументомУдостоверяющимЛичность,
    ДокументыФизическихЛиц.Представление
ИЗ
    ВТ_МаксимальныеПериоды КАК ВТ_МаксимальныеПериоды
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДокументыФизическихЛиц КАК ДокументыФизическихЛиц
        ПО ВТ_МаксимальныеПериоды.Период = ДокументыФизическихЛиц.Период
            И ВТ_МаксимальныеПериоды.Физлицо = ДокументыФизическихЛиц.Физлицо
            И ВТ_МаксимальныеПериоды.ВидДокумента = ДокументыФизическихЛиц.ВидДокумента
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший