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

Использование временных таблиц в запросе

Автор HelloImNew, 17 окт 2023, 22:58

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

Максим75

HelloImNew, смотрите, такой алгоритм предлагается.
вначале делаете вложенный запрос, в нем отбираете минимум по дате (как и делали), берете только товар и дату документа.
потом выбираете из этого вложенного запроса товар, дату и левым соединением соединяете с табличной частью документа ПоступлениеТоваров, связь делаете по Товару и Дате (у табличной части есть Ссылка, в ней есть дата) и вытягиваете ссылку.
таким образом должно получиться, что надо, при одном условии, что в одну дату один приход по товару.
если несколько - то тогда уже полученную выборку дальше "насилять".
хотя действительно странно: банальная задача получить первый приходный документ по каждому товару.

HelloImNew

Максим75  итого получилось все равно две временные таблицы? Куда здесь вложенный впихивать?

ВЫБРАТЬ
ТоварыНаСкладе.Номенклатура КАК Номенклатура,
МИНИМУМ(ТоварыНаСкладе.Регистратор.Дата) КАК РегистраторДата
ПОМЕСТИТЬ ВТ_Минимум
ИЗ
РегистрНакопления.ТоварыНаСкладе КАК ТоварыНаСкладе
ГДЕ
ТИПЗНАЧЕНИЯ(ТоварыНаСкладе.Регистратор) = ТИП(Документ.ПоступлениеТоваров)

СГРУППИРОВАТЬ ПО
ТоварыНаСкладе.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ.Номенклатура КАК Номенклатура,
ВТ.РегистраторДата КАК РегистраторДата,
ПоступлениеТоваровТабПоступлениеТоваров.Ссылка КАК Ссылка,
ПоступлениеТоваровТабПоступлениеТоваров.Номенклатура КАК Номенклатура1,
ПоступлениеТоваровТабПоступлениеТоваров.Ссылка.Дата КАК Дата
ПОМЕСТИТЬ ВТ_СоСсылкой
ИЗ
ВТ_Минимум КАК ВТ
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваров.ТабПоступлениеТоваров КАК ПоступлениеТоваровТабПоступлениеТоваров
ПО ВТ.РегистраторДата = ПоступлениеТоваровТабПоступлениеТоваров.Ссылка.Дата
И ВТ.Номенклатура = ПоступлениеТоваровТабПоступлениеТоваров.Номенклатура
;

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

Максим75

HelloImNew, ну так верно сделали. вложенный запрос - это аналог временной таблицы. ну чтобы кучу временных не создавать, делают вложенным запросом.
только уберите лишнее во второй временной таблице, Вам не надо товар из табличной части, да и дату документа можно убрать, ведь есть ссылка, а в ссылке есть доступ ко всем реквизитам документа.

осталось только вот сюда
РегистрНакопления.ТоварыНаСкладе.ОстаткиИОбороты прикрутить начальную и конечную дату, чтобы виртуальная таблица за период отобралась и все.

HelloImNew


Теги:

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

Рейтинг@Mail.ru

Поиск