Нужно из РегистрСведений.СобытияОС получить две даты, Где СобытияОС.ИнвНомер = &СобИнвНомер и СобытияОС.Событие = &Событие
Событие 1 - принято к учету
Событие 2 - снято с учета
Инвентарный номер один, а вот события разные. Не пойму как сделать чтобы в Принятокучету было условие (СобытияОС.ИнвНомер = &СобИнвНомер И СобытияОС.Событие = &Событие1), а в Снятосучета (СобытияОС.ИнвНомер = &СобИнвНомер И СобытияОС.Событие = &Событие2)
Событие 1 - принято к учету
Событие 2 - снято с учета
Инвентарный номер один, а вот события разные. Не пойму как сделать чтобы в Принятокучету было условие (СобытияОС.ИнвНомер = &СобИнвНомер И СобытияОС.Событие = &Событие1), а в Снятосучета (СобытияОС.ИнвНомер = &СобИнвНомер И СобытияОС.Событие = &Событие2)
Запрос.Текст =
"ВЫБРАТЬ
| СобытияОС.ДатаСобытия КАК Принятокучету,
| СобытияОС.ДатаСобытия КАК Снятосучета
|ИЗ
| РегистрСведений.СобытияОС КАК СобытияОС
|ГДЕ
| СобытияОС.ИнвНомер = &СобИнвНомер
| И СобытияОС.Событие = &Событие
ПоказатьПо теме из базы знаний
- Оптимизация запросов 1С:Предприятие – от теории к практике
- Создание web-площадки на технологиях 1С, или как Водоканал сделал "Личный кабинет потребителя"
- Как из 1С отдать миллионы строк в BI и успеть это сделать быстро
- Как работать настоящим программистом и стоит ли стремиться уйти из 1С
- Запрос данных о среднем заработке по СЭДО в конфигурации 1С: Зарплата и управление персоналом (ред. 3)
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Ну или дважды вытащить таблицу и соединить полным соединением по ОС, с проверкой даты на Null, тогда у вас в одной строке будет оба события.
или ГДЕ СобытияОС.ИнвНомер = &СобИнвНомер И СобытияОС.Событие В (&МассивСобытий), где МассивСобытий - массив или список значений с нужными событиями.
или ГДЕ СобытияОС.ИнвНомер = &СобИнвНомер И СобытияОС.Событие В (&МассивСобытий), где МассивСобытий - массив или список значений с нужными событиями.
Можно и в одном запросе получить одну строку. Внутренним соединением. Если точно знаете, что записей всего 2.
Вот текст запроса для Вашего случая:
Вот текст запроса для Вашего случая:
ВЫБРАТЬ
СобытияОСПринятоКУчету.ДатаСобытия КАК Принятокучету,
СобытияОССнятосУчета.ДатаСобытия КАК Снятосучета
ИЗ
РегистрСведений.СобытияОС КАК СобытияОСПринятоКУчету
Внутреннее соединение РегистрСведений.СобытияОС КАК СобытияОССнятосУчета
ПО
СобытияОСПринятоКУчету.ИнвНомер = &СобИнвНомер
И СобытияОСПринятоКУчету.Событие = &Событие1
И СобытияОССнятосУчета.ИнвНомер = &СобИнвНомер
И СобытияОССнятосУчета.Событие = &Событие2
Показать
| ВЫБРАТЬ
| ВЫБОР
| КОГДА СобытияОС.Событие = &Событие1
| ТОГДА СобытияОС.ДатаСобытия
| ИНАЧЕ &ПустаяДата
| КОНЕЦ КАК Принятокучету,
| ВЫБОР
| КОГДА СобытияОС.Событие = &Событие2
| ТОГДА СобытияОС.ДатаСобытия
| ИНАЧЕ &ПустаяДата
| КОНЕЦ КАК Снятосучета
| ИЗ
| РегистрСведений.СобытияОС КАК СобытияОС
| ГДЕ
| СобытияОС.ИнвНомер = &СобИнвНомер
ПоказатьКак-то так. Если нужно одной строкой, использовать агрегатную функцию "МАКСИМУМ" для дат.
(13) Вариант, что вам предложили - чтобы вместо ненужной даты (если это неподходящее событие с ОС) была какая-то пустая дата, заглушка. Это не отбор, это использование внешнего параметра. С тем же успехом можно использовать ДатаВремя(1,1,1) вместо &ПустаяДата.
Хотя не уверен что стало понятней.
Хотя не уверен что стало понятней.
Напишите конфигурацию и версию.
текст запроса:
Пустая дата вводится для того, чтобы если нет списания ОС, строка с поступлением вывелась в отчет, а даты выбытия не было. Для этого конструкция в запросе "ЕстьNULL"
В регистре сведений обычно "Период" , если у Вас "ДатаСобытия" подставьте вместо "Период" "ДатаСобытия". У основного средства есть поле код, что аналогично инв.номеру. Если у Вас ИнвНомер, то вместо "Код" поставьте "ИнвНомер".
текст запроса:
ВЫБРАТЬ
СобытияОССрезПервых.ОсновноеСредство,
СобытияОССрезПервых.Период
ПОМЕСТИТЬ ПринятиеКУчету
ИЗ
РегистрСведений.СобытияОС.СрезПервых КАК СобытияОССрезПервых
ГДЕ
СобытияОССрезПервых.ОсновноеСредство.Код = &ИнвНомер
И СобытияОССрезПервых.Событие = &Событие1
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
СобытияОССрезПоследних.ОсновноеСредство,
СобытияОССрезПоследних.Период
ПОМЕСТИТЬ СнятиеСУчета
ИЗ
РегистрСведений.СобытияОС.СрезПоследних КАК СобытияОССрезПоследних
ГДЕ
СобытияОССрезПоследних.ОсновноеСредство.Код = &ИнвНомер
И СобытияОССрезПоследних.Событие = &Событие2
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ПринятиеКУчету.Период КАК ДатаПоступления,
ЕСТЬNULL(СнятиеСУчета.Период, &Пустаядата) КАК ДатаВыбытия
ИЗ
ПринятиеКУчету КАК ПринятиеКУчету
ЛЕВОЕ СОЕДИНЕНИЕ СнятиеСУчета КАК СнятиеСУчета
ПО ПринятиеКУчету.ОсновноеСредство = СнятиеСУчета.ОсновноеСредство
Запрос.УстановитьПараметр("ПустаяДата", Дата(1,1,1));
или Запрос.УстановитьПараметр("ПустаяДата", '00010101');
ПоказатьПустая дата вводится для того, чтобы если нет списания ОС, строка с поступлением вывелась в отчет, а даты выбытия не было. Для этого конструкция в запросе "ЕстьNULL"
В регистре сведений обычно "Период" , если у Вас "ДатаСобытия" подставьте вместо "Период" "ДатаСобытия". У основного средства есть поле код, что аналогично инв.номеру. Если у Вас ИнвНомер, то вместо "Код" поставьте "ИнвНомер".
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот