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

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

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

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

HelloImNew

Задание во вложенном файле.
Написала запрос с использованием временной таблицы. Временная таблица выдается правильная. А дальше хочу соединить ее с виртуальной таблицей остатки и обороты, и тут почему-то вылезает куча лишних строк, точнее, выглядит так, будто временная таблица соединяется с регистром накопления, а не с его остатками и оборотами. Что я делаю не так?

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

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

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

Максим75

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

кстати, в условии временной таблицы вместо
ГДЕ
    ТИПЗНАЧЕНИЯ(ТоварыНаСкладе.Регистратор) = ТИП(Документ.ПоступлениеТоваров)

можно использовать

ГДЕ
    ТоварыНаСкладе.Регистратор ССЫЛКА Документ.ПоступлениеТоваров

так правильнее и красивее

HelloImNew

Максим75, период у меня уточняется в самом отчете, по крайней мере, там есть начальная дата и конечная. Но, так как запрос неверен, проверить работу не могу.

Так, периодичность до регистратора понятно, но без этого мне не добраться до регистратора. Как тогда до него добираться?

Про тип документа тоже понятно, спасибо.

Максим75

HelloImNew, давайте по порядку:

Первую дату прихода по каждой номенклатуре Вы получаете.
Дальше что необходимо сделать? Где находится эта дата плановой отгрузки? в каком документе ее надо брать? в той же приходной накладной или где?

дальше будем двигаться, когда ответите на вопрос по дате плановой отгрузки.

HelloImNew

Максим75, дата плановой отгрузки в том же документе "Поступление товаров".

То есть я ее вытаскиваю по дате документа, что тоже не очень верно (нужен момент времени вроде).

П. С. У меня сейчас получился рабочий вариант, но глаз дергается от трех временных таблиц и их соединения. Явно слишком сложно.

Максим75

Цитата: HelloImNew от 18 окт 2023, 13:36Максим75,

То есть я ее вытаскиваю по дате документа, что тоже не очень верно (нужен момент времени вроде).

Если в один день несколько приходов, тогда момент нужен.

смотрите, Вы получили во временной таблице выборку Приходных документов по каждому товару, именно первых приходных (за весь период времени).

Теперь в основном запросе делаете выборку по виртуальной таблице остатков и оборотов, обязательно указываете период выборки, т.е. начальную и конечную дату, и в периодичности Регистратор не указываете, Вам же надо получить весь оборот за период, а не по каждому регистратору. И уже эту выборку соединяете ЛЕВЫМ соединением с временной таблицей по Товару, с виртуальной таблицы берете остатки и приход-расход, а из соединенной таблицы берете дату планируемой отгрузки и что-то там с ней считаете.

HelloImNew

Цитироватьсмотрите, Вы получили во временной таблице выборку Приходных документов по каждому товару, именно первых приходных (за весь период времени)
Вот проблема как раз в том, что в виртуальной таблице у меня только дата документа-регистратора, а мне нужна оттуда дата плановой отгрузки. И ссылки на документ у меня нет. Как вытащить дату плановой отгрузки? В основном запросе не выбрать поле регистратор.

Максим75

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

HelloImNew

Максим75, вот изначальный вариант:
ВЫБРАТЬ
ТоварыНаСкладе.Номенклатура КАК Номенклатура,
МИНИМУМ(ТоварыНаСкладе.Регистратор.Дата) КАК РегистраторДата
ПОМЕСТИТЬ ВТ
ИЗ
РегистрНакопления.ТоварыНаСкладе КАК ТоварыНаСкладе
ГДЕ
ТоварыНаСкладе.Регистратор ССЫЛКА Документ.ПоступлениеТоваров

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

Вот я вытаскиваю дату плановой отгрузки (и она попадает сразу же в раздел "сгруппировать по"):
ВЫБРАТЬ
ТоварыНаСкладе.Номенклатура КАК Номенклатура,
МИНИМУМ(ТоварыНаСкладе.Регистратор.Дата) КАК РегистраторДата,
ТоварыНаСкладе.Регистратор.ДатаПлановойОтгрузки КАК РегистраторДатаПлановойОтгрузки
ИЗ
РегистрНакопления.ТоварыНаСкладе КАК ТоварыНаСкладе
ГДЕ
ТоварыНаСкладе.Регистратор ССЫЛКА Документ.ПоступлениеТоваров

СГРУППИРОВАТЬ ПО
ТоварыНаСкладе.Номенклатура,
ТоварыНаСкладе.Регистратор.ДатаПлановойОтгрузки
И вместо одной записи по каждой номенклатуре он выдает кучу еще с разными датами.

LexaK

(Только ради хохмы) Возьмите Минимум от ДатыОтгрузки, так же как по дате берете...
если помогло нажмите: Спасибо!

Теги:

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

Рейтинг@Mail.ru

Поиск