Как правильно сделать запрос

1. user876792 11.12.17 17:05 Сейчас в теме
Нужно из РегистрСведений.СобытияОС получить две даты, Где СобытияОС.ИнвНомер = &СобИнвНомер и СобытияОС.Событие = &Событие
Событие 1 - принято к учету
Событие 2 - снято с учета

Инвентарный номер один, а вот события разные. Не пойму как сделать чтобы в Принятокучету было условие (СобытияОС.ИнвНомер = &СобИнвНомер И СобытияОС.Событие = &Событие1), а в Снятосучета (СобытияОС.ИнвНомер = &СобИнвНомер И СобытияОС.Событие = &Событие2)


	Запрос.Текст = 
	"ВЫБРАТЬ
	|	СобытияОС.ДатаСобытия КАК Принятокучету,
	|	СобытияОС.ДатаСобытия КАК Снятосучета
	|ИЗ
	|	РегистрСведений.СобытияОС КАК СобытияОС
	|ГДЕ
	|	СобытияОС.ИнвНомер = &СобИнвНомер
	|	И СобытияОС.Событие = &Событие
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. kuzev 47 11.12.17 17:14 Сейчас в теме
(1) ОБЪЕДИНИТЬ в запросе поможет
6. user876792 11.12.17 17:46 Сейчас в теме
(2) Это тоже самое что и пакет запросов или есть какая то разница?
3. Fe9_min 50 11.12.17 17:16 Сейчас в теме
|ГДЕ
|    (СобытияОС.ИнвНомер = &СобИнвНомер
|    И СобытияОС.Событие = &Событие1
|        ИЛИ СобытияОС.ИнвНомер = &СобИнвНомер
|    И СобытияОС.Событие = &Событие2)


Вот так тебе надо?
Две строки в итоге получишь.
7. user876792 11.12.17 17:47 Сейчас в теме
(3) Не работает. Перед и после ИЛИ скобки нужны )( ?
8. Fe9_min 50 11.12.17 17:52 Сейчас в теме
(7) да, точно, от руки писал
4. user774630 11.12.17 17:18 Сейчас в теме
Ну или дважды вытащить таблицу и соединить полным соединением по ОС, с проверкой даты на Null, тогда у вас в одной строке будет оба события.

или ГДЕ СобытияОС.ИнвНомер = &СобИнвНомер И СобытияОС.Событие В (&МассивСобытий), где МассивСобытий - массив или список значений с нужными событиями.
vadim1011985; +1 Ответить
9. user876792 11.12.17 17:54 Сейчас в теме
(4)
тогда у вас в одной строке будет оба события
Что значит в одной строке? Мне нужны две даты чтобы вывести их в двух разных полях ввода
5. Onwardv 64 11.12.17 17:23 Сейчас в теме
Можно и в одном запросе получить одну строку. Внутренним соединением. Если точно знаете, что записей всего 2.
Вот текст запроса для Вашего случая:

ВЫБРАТЬ
       СобытияОСПринятоКУчету.ДатаСобытия КАК Принятокучету,
       СобытияОССнятосУчета.ДатаСобытия КАК Снятосучета
    ИЗ
        РегистрСведений.СобытияОС КАК СобытияОСПринятоКУчету
    Внутреннее соединение РегистрСведений.СобытияОС КАК СобытияОССнятосУчета
		ПО 
        СобытияОСПринятоКУчету.ИнвНомер = &СобИнвНомер
        И СобытияОСПринятоКУчету.Событие = &Событие1
		И СобытияОССнятосУчета.ИнвНомер = &СобИнвНомер
		И СобытияОССнятосУчета.Событие = &Событие2
Показать
10. Velesstroy_OOO 11.12.17 18:05 Сейчас в теме
| ВЫБРАТЬ
| ВЫБОР 
|  КОГДА  СобытияОС.Событие = &Событие1 
|  ТОГДА СобытияОС.ДатаСобытия 
|  ИНАЧЕ &ПустаяДата 
| КОНЕЦ КАК Принятокучету,
| ВЫБОР 
|  КОГДА  СобытияОС.Событие = &Событие2
|  ТОГДА СобытияОС.ДатаСобытия 
|  ИНАЧЕ &ПустаяДата 
| КОНЕЦ КАК Снятосучета
| ИЗ 
| РегистрСведений.СобытияОС КАК СобытияОС
| ГДЕ
|    СобытияОС.ИнвНомер = &СобИнвНомер
Показать


Как-то так. Если нужно одной строкой, использовать агрегатную функцию "МАКСИМУМ" для дат.
11. user876792 11.12.17 18:20 Сейчас в теме
(10) Что такое &ПустаяДата ?
12. bad_wag 48 11.12.17 18:27 Сейчас в теме
(11) Параметр передаваемый в запрос.
13. user876792 11.12.17 18:33 Сейчас в теме
(12) А если пустых дат там нет, что тогда передавать в запрос?
14. bad_wag 48 11.12.17 18:36 Сейчас в теме
(13) Туда передавать пустую дату в любом случае, она будет для события 1 в случае события 2 и наоборот.

зы вам бы литературу по запросам почитать, т.к. нет понимания элементарных вещей
user774630; +1 Ответить
16. user876792 11.12.17 19:12 Сейчас в теме
(14) Ну это обязательно в случае неожиданного появления свободного времени. Что-нибудь конкретное посоветуете?
15. user774630 11.12.17 18:37 Сейчас в теме
(13) Вариант, что вам предложили - чтобы вместо ненужной даты (если это неподходящее событие с ОС) была какая-то пустая дата, заглушка. Это не отбор, это использование внешнего параметра. С тем же успехом можно использовать ДатаВремя(1,1,1) вместо &ПустаяДата.
Хотя не уверен что стало понятней.
18. user876792 12.12.17 12:49 Сейчас в теме
(10) Заполняется полученными данными только выбор с событием 2 - Снятосучета, Принятокучету - обязательно должно заполняться, Снятосучета - может не быть
19. Velesstroy_OOO 12.12.17 12:58 Сейчас в теме
(18) Не вижу здесь противоречий исходному условию задачи, если не будет события снято с учета, то будет пустое поле.
В моем примере заполняется пустой датой.
20. user876792 12.12.17 13:04 Сейчас в теме
Но если есть оба события, то заполняется только второе, а нужно чтобы в таком случае было две даты
17. гаврюша 2 12.12.17 09:13 Сейчас в теме
Напишите конфигурацию и версию.

текст запроса:

ВЫБРАТЬ
	СобытияОССрезПервых.ОсновноеСредство,
	СобытияОССрезПервых.Период
ПОМЕСТИТЬ ПринятиеКУчету
ИЗ
	РегистрСведений.СобытияОС.СрезПервых КАК СобытияОССрезПервых
ГДЕ
	СобытияОССрезПервых.ОсновноеСредство.Код = &ИнвНомер
	И СобытияОССрезПервых.Событие = &Событие1
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	СобытияОССрезПоследних.ОсновноеСредство,
	СобытияОССрезПоследних.Период
ПОМЕСТИТЬ СнятиеСУчета
ИЗ
	РегистрСведений.СобытияОС.СрезПоследних КАК СобытияОССрезПоследних
ГДЕ
	СобытияОССрезПоследних.ОсновноеСредство.Код = &ИнвНомер
	И СобытияОССрезПоследних.Событие = &Событие2
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПринятиеКУчету.Период КАК ДатаПоступления,
	ЕСТЬNULL(СнятиеСУчета.Период, &Пустаядата) КАК ДатаВыбытия
ИЗ
	ПринятиеКУчету КАК ПринятиеКУчету
		ЛЕВОЕ СОЕДИНЕНИЕ СнятиеСУчета КАК СнятиеСУчета
		ПО ПринятиеКУчету.ОсновноеСредство = СнятиеСУчета.ОсновноеСредство


Запрос.УстановитьПараметр("ПустаяДата", Дата(1,1,1));
или Запрос.УстановитьПараметр("ПустаяДата", '00010101');
Показать


Пустая дата вводится для того, чтобы если нет списания ОС, строка с поступлением вывелась в отчет, а даты выбытия не было. Для этого конструкция в запросе "ЕстьNULL"

В регистре сведений обычно "Период" , если у Вас "ДатаСобытия" подставьте вместо "Период" "ДатаСобытия". У основного средства есть поле код, что аналогично инв.номеру. Если у Вас ИнвНомер, то вместо "Код" поставьте "ИнвНомер".
user876792; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот