|
Получить запросом остатки на каждый месяц. Помогите подправить запрос | ☑ | ||
---|---|---|---|---|
0
Sharmon
12.02.14
✎
14:20
|
Нужно получить остатки за каждый месяц периода.
Выводятся остатки только за те месяцы, по которым было движение в данном месяце. Посоветовали создать таблицу с месяцами и соединить с основным запросом. Но почему-то все равно не работает (т.е. не выводит месяцы, по которым не было оборотов). Как соединять таблицу месяцев с основным запросом? Текст запроса: ВЫБРАТЬ ОстаткиСубАренда.Организация КАК Организация, ВЫРАЗИТЬ(ОстаткиСубАренда.Субконто1 КАК Справочник.Контрагенты) КАК Субарендатор, ВЫРАЗИТЬ(ОстаткиСубАренда.Субконто1.ТорговыйАгент КАК Справочник.ТорговыеАгенты) КАК ТорговыйАгент, &МинимальнаяСуммаЗакупкиЗаАрендуОдногоХолодильника КАК МинимальнаяСуммаЗакупкиЗаАрендуОдногоХолодильника, НАЧАЛОПЕРИОДА(ОстаткиСубАренда.Период, МЕСЯЦ) КАК МесяцОстатки, ОстаткиСубАренда.КоличествоКонечныйОстаток КАК СданоВСубаренду, ОстаткиСубАренда.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток, Месяцы.Месяц ИЗ Месяцы КАК Месяцы ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты( &ДатаНачала, &ДатаКонца, Месяц, , Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ОсновныеСредстваСданныеВАренду), , Субконто3 В (ВЫБРАТЬ Оборудование.ОсновноеСредство ИЗ Справочник.Оборудование КАК Оборудование ГДЕ Оборудование.ВидОборудования = &ВидОборудования)) КАК ОстаткиСубАренда ПО Месяцы.Месяц = ОстаткиСубАренда.Период |
|||
1
Wobland
12.02.14
✎
14:22
|
ПО Месяцы.Месяц = началопериода(ОстаткиСубАренда.Период, месяц)
всё не читал |
|||
2
vicof
12.02.14
✎
14:22
|
(0) А дополнение по периоду не? в СКД
|
|||
3
Sharmon
12.02.14
✎
14:26
|
Это было бы классно, но у меня полученная таблица соединяется с другими. И соединение как раз по ненулевым остаткам
|
|||
4
Sharmon
12.02.14
✎
14:39
|
Прошу прощения. Текст не того запроса скинул.
Вот правильный: ВЫБРАТЬ РАЗЛИЧНЫЕ НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, МЕСЯЦ) КАК Месяц ПОМЕСТИТЬ Месяцы ИЗ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь ГДЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &ДатаНачала И &ДатаКонца ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ОстаткиСубАренда.Организация КАК Организация, ВЫРАЗИТЬ(ОстаткиСубАренда.Субконто1 КАК Справочник.Контрагенты) КАК Субарендатор, ВЫРАЗИТЬ(ОстаткиСубАренда.Субконто1.ТорговыйАгент КАК Справочник.ТорговыеАгенты) КАК ТорговыйАгент, &МинимальнаяСуммаЗакупкиЗаАрендуОдногоХолодильника КАК МинимальнаяСуммаЗакупкиЗаАрендуОдногоХолодильника, НАЧАЛОПЕРИОДА(ОстаткиСубАренда.Период, МЕСЯЦ) КАК МесяцОстатки, ОстаткиСубАренда.КоличествоКонечныйОстаток КАК СданоВСубаренду, ОстаткиСубАренда.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток, Месяцы.Месяц ИЗ Месяцы КАК Месяцы, РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты( &ДатаНачала, &ДатаКонца, Месяц, , Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ОсновныеСредстваСданныеВАренду), , Субконто3 В (ВЫБРАТЬ Оборудование.ОсновноеСредство ИЗ Справочник.Оборудование КАК Оборудование ГДЕ Оборудование.ВидОборудования = &ВидОборудования)) КАК ОстаткиСубАренда |
|||
5
Sharmon
12.02.14
✎
14:40
|
Т.е. я получаю временную таблицу месяцев в периоде.
Мне нужно подставить в основной запрос каждый месяц и временной таблицы, что бы получить остатки в разрезе каждого месяца. Но что-то зашел в тупик. |
|||
6
Sharmon
12.02.14
✎
15:50
|
Пытался еще так сделать:
ВЫБРАТЬ ОстаткиСубАренда.Организация КАК Организация, ВЫРАЗИТЬ(ОстаткиСубАренда.Субконто1 КАК Справочник.Контрагенты) КАК Субарендатор, ВЫРАЗИТЬ(ОстаткиСубАренда.Субконто1.ТорговыйАгент КАК Справочник.ТорговыеАгенты) КАК ТорговыйАгент, &МинимальнаяСуммаЗакупкиЗаАрендуОдногоХолодильника КАК МинимальнаяСуммаЗакупкиЗаАрендуОдногоХолодильника, НАЧАЛОПЕРИОДА(ОстаткиСубАренда.Период, МЕСЯЦ) КАК МесяцОстатки, ОстаткиСубАренда.КоличествоКонечныйОстаток КАК СданоВСубаренду, ОстаткиСубАренда.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток ИЗ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты( , , Месяц, , Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ОсновныеСредстваСданныеВАренду), , Субконто3 В (ВЫБРАТЬ Оборудование.ОсновноеСредство ИЗ Справочник.Оборудование КАК Оборудование ГДЕ Оборудование.ВидОборудования = &ВидОборудования)) КАК ОстаткиСубАренда ГДЕ ОстаткиСубАренда.Период В (ВЫБРАТЬ РАЗЛИЧНЫЕ НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, МЕСЯЦ) КАК Месяц ИЗ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь ГДЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &ДатаНачала И &ДатаКонца) Но тоже возвращает только остатки по тем месяцам, по которым были движения |
|||
7
Sharmon
12.02.14
✎
15:50
|
Неужели никто ничего подобного никогда не пробовал получать?
|
|||
8
WildSery
12.02.14
✎
15:53
|
ЛЕВОЕ СОЕДИНЕНИЕ обязательно.
|
|||
9
Sharmon
12.02.14
✎
15:58
|
Тоже не помогло. У меня в таблице остатков только остатки по тем месяцам, по которым было движение. Т.е. соединение с таблицей месяцев не решает проблему. Мне нужно как-то получить остатки не за период с &ДатаНачала по &ДатаКонца, а за каждый месяц из таблицы месяцев
|
|||
10
WildSery
12.02.14
✎
16:34
|
Почему-то примеры бреда вы публикуете, а в каком именно запросе "не помогло" - нет.
|
|||
11
Sharmon
12.02.14
✎
16:38
|
Запрос:
ВЫБРАТЬ РАЗЛИЧНЫЕ НАЧАЛОПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, МЕСЯЦ) КАК Месяц ПОМЕСТИТЬ Месяцы ИЗ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь ГДЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &ДатаНачала И &ДатаКонца ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ОстаткиСубАренда.Организация КАК Организация, ВЫРАЗИТЬ(ОстаткиСубАренда.Субконто1 КАК Справочник.Контрагенты) КАК Субарендатор, ВЫРАЗИТЬ(ОстаткиСубАренда.Субконто1.ТорговыйАгент КАК Справочник.ТорговыеАгенты) КАК ТорговыйАгент, &МинимальнаяСуммаЗакупкиЗаАрендуОдногоХолодильника КАК МинимальнаяСуммаЗакупкиЗаАрендуОдногоХолодильника, НАЧАЛОПЕРИОДА(ОстаткиСубАренда.Период, МЕСЯЦ) КАК МесяцОстатки, ОстаткиСубАренда.КоличествоКонечныйОстаток КАК СданоВСубаренду, ОстаткиСубАренда.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток, Месяцы.Месяц ИЗ Месяцы КАК Месяцы ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты( &ДатаНачала, &ДатаКонца, Месяц, , Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ОсновныеСредстваСданныеВАренду), , Субконто3 В (ВЫБРАТЬ Оборудование.ОсновноеСредство ИЗ Справочник.Оборудование КАК Оборудование ГДЕ Оборудование.ВидОборудования = &ВидОборудования)) КАК ОстаткиСубАренда ПО Месяцы.Месяц = ОстаткиСубАренда.Период |
|||
12
WildSery
12.02.14
✎
16:47
|
(11) На первый взгляд, всё верно.
Хотя ЕСТЬNULL() сделало бы картинку красивее, но тут на любителя. И что, месяцы выводятся не все? Или чего не выходит? |
|||
13
Sharmon
12.02.14
✎
16:50
|
Выходят только те месяцы, по которым есть движения.
Сам запрос, формирующий врем таблицу по месяцам верный, проверял |
|||
14
WildSery
12.02.14
✎
16:54
|
(13) Вы пишете неправду.
Либо это не тот запрос (неполный), либо месяцы выводятся все. Обычно делают ошибку, забивая доп.условия в раздел ГДЕ |
|||
15
Sharmon
12.02.14
✎
17:00
|
Вобщем так и не смог допилить этот запрос. Сделал по другому, примеру из интернета. Может кому пригодится:
ВЫБРАТЬ НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&ДатаНачала, МЕСЯЦ, aa.a * 10 + bb.b), МЕСЯЦ) КАК ПериодМесяц ПОМЕСТИТЬ ВТОсьВремени ИЗ (ВЫБРАТЬ 0 КАК a ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК aa ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК b ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК bb ПО (ИСТИНА) ГДЕ ДОБАВИТЬКДАТЕ(&ДатаНачала, МЕСЯЦ, aa.a * 10 + bb.b) < &ДатаКонца ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ОстаткиСубаренда.Период КАК Период, ОстаткиСубаренда.Организация, ОстаткиСубаренда.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток, ОстаткиСубаренда.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток, ВЫРАЗИТЬ(ОстаткиСубаренда.Субконто1 КАК Справочник.Контрагенты) КАК Субарендатор, ВЫРАЗИТЬ(ОстаткиСубаренда.Субконто1.ТорговыйАгент КАК Справочник.ТорговыеАгенты) КАК ТорговыйАгент ПОМЕСТИТЬ ВТРег ИЗ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты( &ДатаНачала, &ДатаКонца, Месяц, , Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ОсновныеСредстваСданныеВАренду), , Субконто3 В (ВЫБРАТЬ Оборудование.ОсновноеСредство ИЗ Справочник.Оборудование КАК Оборудование ГДЕ Оборудование.ВидОборудования = &ВидОборудования)) КАК ОстаткиСубаренда ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ МИНИМУМ(ЕСТЬNULL(ДОБАВИТЬКДАТЕ(ВТРег1.Период, МЕСЯЦ, -1), ВТРег.Период)) КАК ПериодПо, ВТРег.Организация, ВТРег.КоличествоНачальныйОстаток, ВТРег.КоличествоКонечныйОстаток, ВТРег.Субарендатор, ВТРег.ТорговыйАгент ПОМЕСТИТЬ ВТПериодыРег ИЗ ВТРег КАК ВТРег ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТРег КАК ВТРег1 ПО ВТРег.Организация = ВТРег1.Организация И ВТРег.ТорговыйАгент = ВТРег1.ТорговыйАгент И ВТРег.Субарендатор = ВТРег1.Субарендатор И ВТРег.Период = ВТРег1.Период СГРУППИРОВАТЬ ПО ВТРег.Субарендатор, ВТРег.ТорговыйАгент, ВТРег.Организация, ВТРег.КоличествоНачальныйОстаток, ВТРег.КоличествоКонечныйОстаток ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТОсьВремени.ПериодМесяц КАК ПериодМесяц, ВТПериодыРег.Организация КАК Организация, ВТПериодыРег.Субарендатор КАК Субарендатор, ВТПериодыРег.ТорговыйАгент КАК ТорговыйАгент, ВТПериодыРег.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток, &МинимальнаяСуммаЗакупкиЗаАрендуОдногоХолодильника КАК МинимальнаяСуммаЗакупкиЗаАрендуОдногоХолодильника {ВЫБРАТЬ ПериодМесяц, Организация.*, Субарендатор.*, ТорговыйАгент.*, КоличествоКонечныйОстаток, МинимальнаяСуммаЗакупкиЗаАрендуОдногоХолодильника} ИЗ ВТПериодыРег КАК ВТПериодыРег, ВТОсьВремени КАК ВТОсьВремени |
|||
16
rphosts
12.02.14
✎
17:24
|
а нафига остатки и обороты если ты берёшь только остатки?
|
|||
17
WildSery
12.02.14
✎
17:29
|
(15) И чо, типа он работает?! 0_0
Не верю. |
|||
18
rphosts
12.02.14
✎
17:32
|
(17) видимо задачка для тех кому не лень допилить до работоспособного состояния... вот только проще и быстрее переписать
|
|||
19
Sharmon
12.02.14
✎
17:39
|
Ну я пример упростил для отладки. На самом деле это часть другого большого запроса. Нужны остатки и обороты.
в (15) нашел ошибку. Вот 100% рабочий запрос: ВЫБРАТЬ НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&НачалоПериода, МЕСЯЦ, aa.a * 10 + bb.b), МЕСЯЦ) КАК ПериодМесяц ПОМЕСТИТЬ ВТОсьВремени ИЗ (ВЫБРАТЬ 0 КАК a ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК aa ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК b ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК bb ПО (ИСТИНА) ГДЕ ДОБАВИТЬКДАТЕ(&НачалоПериода, МЕСЯЦ, aa.a * 10 + bb.b) < &КонецПериода ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ОстаткиСубаренда.Период КАК Период, ОстаткиСубаренда.Организация, ОстаткиСубаренда.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток, ОстаткиСубаренда.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток, ВЫРАЗИТЬ(ОстаткиСубаренда.Субконто1 КАК Справочник.Контрагенты) КАК Субарендатор, ВЫРАЗИТЬ(ОстаткиСубаренда.Субконто1.ТорговыйАгент КАК Справочник.ТорговыеАгенты) КАК ТорговыйАгент ПОМЕСТИТЬ ВТРег ИЗ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты( &НачалоПериода, &КонецПериода, Месяц, , Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ОсновныеСредстваСданныеВАренду), , Субконто3 В (ВЫБРАТЬ Оборудование.ОсновноеСредство ИЗ Справочник.Оборудование КАК Оборудование ГДЕ Оборудование.ВидОборудования = &ВидОборудования)) КАК ОстаткиСубаренда ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ МИНИМУМ(ЕСТЬNULL(ДОБАВИТЬКДАТЕ(ВТРег1.Период, МЕСЯЦ, -1), ВТРег.Период)) КАК ПериодПо, ВТРег.Организация, ВТРег.КоличествоНачальныйОстаток, ВТРег.КоличествоКонечныйОстаток, ВТРег.Субарендатор, ВТРег.ТорговыйАгент, ВТРег.Период КАК ПериодС ПОМЕСТИТЬ ВТПериодыРег ИЗ ВТРег КАК ВТРег ЛЕВОЕ СОЕДИНЕНИЕ ВТРег КАК ВТРег1 ПО ВТРег.Организация = ВТРег1.Организация И ВТРег.ТорговыйАгент = ВТРег1.ТорговыйАгент И ВТРег.Субарендатор = ВТРег1.Субарендатор И ВТРег.Период < ВТРег1.Период СГРУППИРОВАТЬ ПО ВТРег.Субарендатор, ВТРег.ТорговыйАгент, ВТРег.Организация, ВТРег.КоличествоНачальныйОстаток, ВТРег.КоличествоКонечныйОстаток, ВТРег.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТОсьВремени.ПериодМесяц КАК ПериодМесяц, ВТПериодыРег.Организация КАК Организация, ВТПериодыРег.Субарендатор КАК Субарендатор, ВТПериодыРег.ТорговыйАгент КАК ТорговыйАгент, ВТПериодыРег.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток, &МинимальнаяСуммаЗакупкиЗаАрендуОдногоХолодильника КАК МинимальнаяСуммаЗакупкиЗаАрендуОдногоХолодильника, ВЫБОР КОГДА ВТОсьВремени.ПериодМесяц = ВТПериодыРег.ПериодС ТОГДА ВТПериодыРег.КоличествоНачальныйОстаток ИНАЧЕ ВТПериодыРег.КоличествоКонечныйОстаток КОНЕЦ КАК КоличествоНачальныйОстаток {ВЫБРАТЬ ПериодМесяц, Организация.*, Субарендатор.*, ТорговыйАгент.*, КоличествоКонечныйОстаток, МинимальнаяСуммаЗакупкиЗаАрендуОдногоХолодильника} ИЗ ВТПериодыРег КАК ВТПериодыРег ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТОсьВремени КАК ВТОсьВремени ПО (ВТОсьВремени.ПериодМесяц МЕЖДУ ВТПериодыРег.ПериодС И ВТПериодыРег.ПериодПо) |
|||
20
Sharmon
12.02.14
✎
17:40
|
Запрос в (11) не работает. Я не смог найти ошибку.
Если кто все же подскажет, то буду благодарен. |
|||
21
rphosts
12.02.14
✎
17:41
|
(19) нафига тебе и остатки и обороты, если ты берёшь только остатки, а обороты не помещаешь в ВТ?
|
|||
22
Sharmon
12.02.14
✎
17:57
|
(21) я упростил задачу. Потом обороты все равно добавлю в запрос после отладки
|
|||
23
WildSery
13.02.14
✎
10:27
|
(19) тоже не рабочий. Он выдаст правильно только при определённых условиях.
Пока не будет ЛЕВОГО СОЕДИНЕНИЯ, временная ось бесполезна. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |