Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 02:37

Выборка в запросе

Автор retker, 13 мая 2014, 15:34

0 Пользователей и 1 гость просматривают эту тему.

retker

Добрый день, имеется документы в нем указаны люди проживающие в квартире - скрин 1, документ формирует движения - скрин 2.
Мне надо запросом вытаскивать кол-во проживающих на указанную дату в запросе. Вот запрос, но он не корректно выводит, я думал по срезупоследних выводить, но он выводит нето, скрин 3. Т.е. какую я бы дату не выбрал, он выводит, что прописан 1 человек, а к примеру в 2013 году прописано 2ое. Подскажите, как его доделать, спасибо. Я сделал пока чтобы он просто выводил ФИО, чтобы нагляднее было.
Запрос:
ВЫБРАТЬ
   СведенияПроживающих.ЛицевойСчет КАК КоличествоПроживающих,
   Различные(СведенияПроживающих.Проживающий),
   СведенияПроживающих.Значение
ИЗ
   РегистрСведений.ВДГБ_СведенияПроживающих.СрезПоследних(
         &Период,
         ЛицевойСчет = &ЛицевойСчет)   
         КАК СведенияПроживающих

KrivosheevEV

Собственно, не вижу ничего противоречивого. Пробуйте указать в запросе дату "01.01.2013 12:00:08".

retker

Цитата: KrivosheevEV от 13 мая 2014, 15:49
Собственно, не вижу ничего противоречивого. Пробуйте указать в запросе дату "01.01.2013 12:00:08".
если указать эту дату, то он выводит 2 фамилии, тут верно. Но проблема в том, что мне нужно подставлять дату, которой будет формироваться квитанция. Т.е. если я сейчас формирую квитанцию на 30.04.2014, то 1 фамилию - так как проживает 1 человек, но если квитанция формируется, к примеру, 30.04.2013 то на то время было два человека прописано, причем совершенно других. Т.е. вопрос как это правильно выбирать запросом.

KrivosheevEV

Странные какие-то движения. Необходимо, чтобы дата формирования квитанции была между "ДатаНачала" и "ДатаОкончания" (т.е. передаваемый параметр был в этом диапазоне дат). Попробуй задавать не параметрами виртуальной таблицы, а обычным условием.

retker

Цитата: KrivosheevEV от 13 мая 2014, 16:29
Странные какие-то движения. Необходимо, чтобы дата формирования квитанции была между "ДатаНачала" и "ДатаОкончания" (т.е. передаваемый параметр был в этом диапазоне дат). Попробуй задавать не параметрами виртуальной таблицы, а обычным условием.
Написав вот такой запрос и сравнив его со скрином где показаны движения по регистру понял,что дату формирования отчета нужно проверять как вы и пишите между (ДатаИзменения и Значние = да) и (ДатаИзменения и Значние = нет), если да то проживающего считаем. Но что-то не могу сообразить как это программно реализовать...




ВЫБРАТЬ РАЗЛИЧНЫЕ
   ВДГБ_СведенияПроживающих.ЛицевойСчет КАК ЛицевойСчет,
   ВДГБ_СведенияПроживающих.Проживающий КАК Проживающий,
   ВДГБ_СведенияПроживающих.Значение КАК Значение,
   ВДГБ_СведенияПроживающих.ДатаИзменения КАК ДатаИзменения
ИЗ
   РегистрСведений.ВДГБ_СведенияПроживающих КАК ВДГБ_СведенияПроживающих
ГДЕ
   ВДГБ_СведенияПроживающих.ЛицевойСчет = &ЛицевойСчет

Результат запроса, скрин 4.

KrivosheevEV

ВЫБРАТЬ РАЗЛИЧНЫЕ
   ВДГБ_СведенияПроживающих.ЛицевойСчет КАК ЛицевойСчет,
   ВДГБ_СведенияПроживающих.Проживающий КАК Проживающий,
   ВДГБ_СведенияПроживающих.Значение КАК Значение,
   ВДГБ_СведенияПроживающих.ДатаИзменения КАК ДатаИзменения
ИЗ
   РегистрСведений.ВДГБ_СведенияПроживающих КАК ВДГБ_СведенияПроживающих
ГДЕ
   ВДГБ_СведенияПроживающих.ЛицевойСчет = &ЛицевойСчет
    И ВДГБ_СведенияПроживающих.ДатаИзменения <= &ДатаФормированияКвитанции
    И ВДГБ_СведенияПроживающих.Значение


Покажет всех, кто прописан и зарегистрировался ранее указанной даты.

retker

Цитата: KrivosheevEV от 14 мая 2014, 09:40
ВЫБРАТЬ РАЗЛИЧНЫЕ
   ВДГБ_СведенияПроживающих.ЛицевойСчет КАК ЛицевойСчет,
   ВДГБ_СведенияПроживающих.Проживающий КАК Проживающий,
   ВДГБ_СведенияПроживающих.Значение КАК Значение,
   ВДГБ_СведенияПроживающих.ДатаИзменения КАК ДатаИзменения
ИЗ
   РегистрСведений.ВДГБ_СведенияПроживающих КАК ВДГБ_СведенияПроживающих
ГДЕ
   ВДГБ_СведенияПроживающих.ЛицевойСчет = &ЛицевойСчет
    И ВДГБ_СведенияПроживающих.ДатаИзменения <= &ДатаФормированияКвитанции
    И ВДГБ_СведенияПроживающих.Значение


Покажет всех, кто прописан и зарегистрировался ранее указанной даты.

Понимаете в чем проблема, Сухин и Проживающий2 были прописаны до 31.03.2014, потом они выписались Сухина же прописалась с 01.04.2014. Получается до 31.03.2014 - 2 человека,  и запрос отрабатывает этот случай, но вот второй случай с 01.04.2014 - 1 человек, он не отрабатывает и выводит 3их, т.е. когда мы формируем квитанцию 30.04.2014 за апрель.
Добавлено: 15 мая 2014, 14:03


Решил переделать запрос, двумя вложенными запросами формирую сначала таблицу всех людей проживающих, по значению = ДА, потом таблице тех которые не проживают по значению = НЕТ. и потом количественно вычитаю количественный показатель проживающих и не проживающих и получаю, число проживающих на данный момент.
Но если непроживающих НЕТ, то начинаются проблемы так как вторая таблица не формируется, полей то с значемнием Нет нету.

Вопрос как правильно прописать условие что если таблица вложенного запроса пустая то в поле которую онадолжна выводить писалось бы число 0.
Вот запрос, которые при значении = Нет, ничего не будет выводить, как в него прописать, подскажите.
ВЫБРАТЬ РАЗЛИЧНЫЕ
   ВДГБ_СведенияПроживающих.Проживающий КАК Проживающий   
ИЗ
   РегистрСведений.ВДГБ_СведенияПроживающих КАК ВДГБ_СведенияПроживающих
ГДЕ
   ВДГБ_СведенияПроживающих.ЛицевойСчет = &ЛицевойСчет
   И ВДГБ_СведенияПроживающих.Значение = ЛОЖЬ

Добавлено: 15 мая 2014, 14:37


Решил задачу, так сейчас буду проверять.
Сам запрос:
ВЫБРАТЬ
   ЗапросИСТИНА.Проживающий КАК ПроживающийИстина,
   ЗапросЛОЖЬ.Проживающий КАК ПроживавшийЛожь,
   ЗапросИСТИНА.Проживающий - ЗапросЛОЖЬ.Проживающий КАК КоличествоПроживающих
ИЗ
   (ВЫБРАТЬ
      КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВДГБ_СведенияПроживающих.Проживающий) КАК Проживающий
   ИЗ
      РегистрСведений.ВДГБ_СведенияПроживающих КАК ВДГБ_СведенияПроживающих
   ГДЕ
      ВДГБ_СведенияПроживающих.ЛицевойСчет = &ЛицевойСчет
      И ВДГБ_СведенияПроживающих.Значение = ЛОЖЬ) КАК ЗапросЛОЖЬ,
   (ВЫБРАТЬ
      КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВДГБ_СведенияПроживающих.Проживающий) КАК Проживающий
   ИЗ
      РегистрСведений.ВДГБ_СведенияПроживающих КАК ВДГБ_СведенияПроживающих
   ГДЕ
      ВДГБ_СведенияПроживающих.ЛицевойСчет = &ЛицевойСчет
      И ВДГБ_СведенияПроживающих.Значение = ИСТИНА) КАК ЗапросИСТИНА

Похожие темы (5)

Рейтинг@Mail.ru

Поиск