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

Как добавить периодичность в запрос?

Автор AlenkaInt, 21 авг 2012, 17:10

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

AlenkaInt

Здравствуйте. Я сейчас обучаюсь в одной фирме франчайзи. Есть запрос в УТ 11, мне поставили задачу - надо выводить данные с периодичностью 1 день используя ТОЛЬКО физические таблицы. Подскажите, это надо как поработать с полем Период?
Вот, собственно, запрос:
ВЫБРАТЬ
КОЛИЧЕСТВО(ТоварыНаСкладах.Период) КАК Период,
ТоварыНаСкладах.Номенклатура КАК Товар,
СУММА(ВЫБОР
КОГДА ТоварыНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
ТОГДА ТоварыНаСкладах.ВНаличии
ИНАЧЕ 0
КОНЕЦ) КАК Приход,
СУММА(ВЫБОР
КОГДА ТоварыНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
ТОГДА ТоварыНаСкладах.ВНаличии
ИНАЧЕ 0
КОНЕЦ) КАК Расход
ПОМЕСТИТЬ Обороты
ИЗ
РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах

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

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

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

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

УПОРЯДОЧИТЬ ПО
Наименование

MuI_I_Ika

Есть такая функция языка запросов НачалоПериода(Период,ДЕНЬ) Она должна помочь.

AlenkaInt

Скажите, а можно эту функцию использовать в конструкторе запросов или это нужно уже в готовом запросе применять? Я нашла поиском много вариантов с кусками кода, но не знаю как и куда это вставить. Как мартышка с очками :-)

MuI_I_Ika

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



Каждое поле запроса в конструкторе можно отредактировать, нажав кнопку в виде зеленого карандаша. Отроется форма редактирования. В правом верхнем углу этой формы находится список возможных функций.

AlenkaInt

Спасибо! К какому полю вы советуете применить данную функцию? Наверное уже в конечном запросе, где собирается конечный результат?

AlenkaInt

Скажите, это можно применить только к Дате? Или к периоду тоже?

MuI_I_Ika

Да, можно в последнем. Функцию можно применить к любому полю с типом Дата.

AlenkaInt

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

СГРУППИРОВАТЬ ПО
ТоварыНаСкладах.Номенклатура,
НАЧАЛОПЕРИОДА(ТоварыНаСкладах.Период, ДЕНЬ)
;

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Номенклатура.Наименование КАК Наименование,
ЕСТЬNULL(НачальныеОстатки.Остаток, 0) КАК НачОстаток,
ЕСТЬNULL(Обороты.Приход, 0) КАК Приход,
ЕСТЬNULL(НачальныеОстатки.Остаток, 0) + ЕСТЬNULL(Обороты.Приход, 0) - ЕСТЬNULL(Обороты.Расход, 0) КАК КонОстаток,
ЕСТЬNULL(Обороты.Расход, 0) КАК Расход,
Обороты.Период КАК Период
ИЗ
Справочник.Номенклатура КАК Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ НачальныеОстатки КАК НачальныеОстатки
ПО Номенклатура.Ссылка = НачальныеОстатки.Товар
ЛЕВОЕ СОЕДИНЕНИЕ Обороты КАК Обороты
ПО Номенклатура.Ссылка = Обороты.Товар
ГДЕ
(НЕ Номенклатура.ЭтоГруппа)
В результате получается вот что.
Период Наименование НачОстаток Приход Расход КонОстаток
02.04.2010 0:00:00 BOSCH 9 3 6
01.04.2010 0:00:00 BOSCH 9 8 1
31.03.2010 0:00:00 BOSCH 9 21 1 29
03.04.2010 0:00:00 Ассорти 374 180 132 422
31.03.2010 0:00:00 Ассорти 374 94 4 464
05.04.2010 0:00:00 Ассорти 374 420 272 522
02.04.2010 0:00:00 Ассорти 374 420 410 384
Т.е. получилось, что отчет выводится по номенклатуре. Сначало по датам на одну номенклатуру, потом на другую номенклатуру. А мне надо, чтобы например 31.03 далее какие движения на это день, далее 01.04 и какие операции были в этот день. Как это сделать?

AlenkaInt

У меня нет поля с датой. Я применила к периоду.

AlenkaInt

Ой, я применила не к конечному запросу, сейчас исправлю.

Теги:

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

Рейтинг@Mail.ru

Поиск