|
Списание по партиям: можно ли в запросе определить чтобы в выборке участвовали.. | ☑ | ||
---|---|---|---|---|
0
PQT
27.08.11
✎
10:14
|
Решился переписать базу с 7.7 на 8.2, ну почему бы не начать с партионного учета, только вот знакомство с запросами несколько меня втупляет)) ну самую малость) хелп плиз..
С 8кой тока познакомился, поэтому вероятно иррационально: Запрос=Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Товары.Товар.Учетный КАК Товар, | СУММА(Товары.Количество) КАК Количество, | СУММА(Товары.Всего) КАК Всего |ПОМЕСТИТЬ ТабДока |ИЗ | Документ.Реализация.Товары КАК Товары |ГДЕ | Товары.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | Товары.Товар.Учетный |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТабДока.Количество КАК Количество, | ТабДока.Всего КАК Всего, | Остатки.Склад КАК Склад, | Остатки.Партия, | ЕСТЬNULL(Остатки.ОстатокОстаток, 0) КАК Остаток, | ЕСТЬNULL(Остатки.СуммаОстаток, 0) КАК Сумма, | ЕСТЬNULL(Остатки.РасходыОстаток, 0) КАК Расходы, | ЕСТЬNULL(Остатки.СуммаРОстаток, 0) КАК СуммаР, | ТабДока.Товар КАК Товар |ИЗ | ТабДока КАК ТабДока | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки( | &Дата, | Номенклатура В | (ВЫБРАТЬ | ТабДока.Товар | ИЗ | ТабДока КАК ТабДока)) КАК Остатки | ПО ТабДока.Товар = Остатки.Номенклатура |ГДЕ | Остатки.Склад = &Склад | |УПОРЯДОЧИТЬ ПО | Остатки.Партия.Дата |ИТОГИ | МАКСИМУМ(Количество), | МАКСИМУМ(Всего), | СУММА(Остаток) |ПО | Товар"; Запрос.УстановитьПараметр("Ссылка", К.Ссылка); Запрос.УстановитьПараметр("Склад", К.Склад); Запрос.УстановитьПараметр("Дата", К.МоментВремени()); Трабл в том, что он пропускает те товары, которых нет в остатках, как мне в запросе принудить обход всех строк документа? точнее чтобы выборка включала все товары из табл.части документа. Вопрос 2: Есть подозрение что в запросе цеплять таблицу документа иррационально. Может мне лучше в параметре кинуть список товаров? а потом перебирать таблицу документа и позиционироваться по выборке. |
|||
1
ДенисЧ
27.08.11
✎
10:15
|
1. левое соединение с таблицей документа
2. подозрение необоснованно |
|||
2
catena
27.08.11
✎
10:20
|
(0)По идее должна включать все товары из табДока.
А типы Документ.Реализация.Товары.Товар.Учетный и РегистрНакопления.ОстаткиТоваров.Номенклатура точно совпадают? |
|||
3
PQT
27.08.11
✎
10:23
|
(1) 1. не затруднит описать понятней?
(2) совпадают |
|||
4
ДенисЧ
27.08.11
✎
10:26
|
(3) что именно опИсать?
|
|||
5
zak555
27.08.11
✎
10:26
|
|ГДЕ
| Остатки.Склад = &Склад | ТабДока.Количество > 0 |
|||
6
PQT
27.08.11
✎
10:27
|
"1. левое соединение с таблицей документа"?
|
|||
7
catena
27.08.11
✎
10:31
|
ААА, итить, условие на Склад в виртуальную таблицу засунь.
|
|||
8
catena
27.08.11
✎
10:31
|
В тех строках, по которым остатка нет, склад у тебя = null
|
|||
9
PQT
27.08.11
✎
10:32
|
(5) попробовал, но он все равно пропускает то чего нет на остатках и эти строки документа не списываются
|
|||
10
catena
27.08.11
✎
10:33
|
Или склад сделай ЕСТЬNULL(Остатки.Склад,ТабДока.Склад)
|
|||
11
ptiz
27.08.11
✎
10:35
|
Условие Остатки.Склад = &Склад убрать из ГДЕ и перенести в параметры регистра: Склад = &Склад
|
|||
12
PQT
27.08.11
✎
10:39
|
да, дело в складе, убрал всё про склад, заработало,
(11) - ща попробую |
|||
13
PQT
27.08.11
✎
11:01
|
теперь в выборку выдает весь склад.
хочу дружить с запросами) |ИЗ | ТабДока КАК ТабДока | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки( | &Дата, | Номенклатура В | (ВЫБРАТЬ | ТабДока.Товар | ИЗ | ТабДока КАК ТабДока) {(Склад = &Склад) КАК Поле2}) КАК Остатки | ПО ТабДока.Товар = Остатки.Номенклатура | |УПОРЯДОЧИТЬ ПО | Остатки.Партия.Дата |
|||
14
PQT
27.08.11
✎
11:35
|
Всем спасибо!
|
|||
15
PQT
27.08.11
✎
11:36
|
вот так работает:
Запрос.Текст = "ВЫБРАТЬ | Товары.Товар.Учетный КАК Товар, | СУММА(Товары.Количество) КАК Количество, | СУММА(Товары.Всего) КАК Всего |ПОМЕСТИТЬ ТабДока |ИЗ | Документ.Реализация.Товары КАК Товары |ГДЕ | Товары.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | Товары.Товар.Учетный |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТабДока.Количество КАК Количество, | ТабДока.Всего КАК Всего, | Остатки.Склад КАК Склад, | Остатки.Партия, | ЕСТЬNULL(Остатки.ОстатокОстаток, 0) КАК Остаток, | ЕСТЬNULL(Остатки.СуммаОстаток, 0) КАК Сумма, | ЕСТЬNULL(Остатки.РасходыОстаток, 0) КАК Расходы, | ЕСТЬNULL(Остатки.СуммаРОстаток, 0) КАК СуммаР, | ТабДока.Товар КАК Товар |ИЗ | ТабДока КАК ТабДока | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки( | &Дата, | Номенклатура В | (ВЫБРАТЬ | ТабДока.Товар | ИЗ | ТабДока КАК ТабДока) {(Склад = &Склад) КАК Поле2}) КАК Остатки | ПО ТабДока.Товар = Остатки.Номенклатура | |УПОРЯДОЧИТЬ ПО | Остатки.Партия.Дата |ИТОГИ | МАКСИМУМ(Количество), | МАКСИМУМ(Всего), | СУММА(Остаток) |ПО | Товар"; |
|||
16
PQT
27.08.11
✎
16:52
|
плохой из меня бетатестер) все было пучком пока я не добавил остатков на прочие склады, в этом коде он просто все склады выводит((
покрутил-повертел, и ларчик оказывается легко открывался: как написал (10): | ЕСТЬNULL(Остатки.ОстатокОстаток, 0) КАК Остаток, и плюс условие: |ГДЕ | ЕСТЬNULL(Остатки.Склад, &Склад) = &Склад только при таком раскладе он мне начал фильтровать по складу, не удаляя позиции документа, которых нет на складе. всем пасиб! |
|||
17
PQT
27.08.11
✎
16:53
|
ой, не ту строку вставил))
| ЕСТЬNULL(Остатки.Склад, &Склад) КАК Склад, |
|||
18
catena
27.08.11
✎
17:02
|
(16)написалА...
А так - молодец :) А выводил остатки по всем складам, потому что в фильтре виртуальной таблице склад зачем-то {} выделен. Енто ж построитель. Надо без скобок и через запятую. Я ж надеюсь, он измерение? |
|||
19
PQT
28.08.11
✎
05:35
|
(18) аха
теперь протестил основательно, сомнения остались в оптимальности запроса... Функция глОстаткиПоДокументу(К) Экспорт Запрос=Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Товары.Товар.Учетный КАК Товар, | СУММА(Товары.Количество) КАК Количество, | СУММА(Товары.Всего) КАК Всего |ПОМЕСТИТЬ ТабДока |ИЗ | Документ."+К.Метаданные().Имя+".Товары КАК Товары |ГДЕ | Товары.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | Товары.Товар.Учетный |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТабДока.Количество КАК Количество, | ТабДока.Всего КАК Всего, | ЕСТЬNULL(Остатки.Склад, &Склад) КАК Склад, | Остатки.Партия, | ЕСТЬNULL(Остатки.ОстатокОстаток, 0) КАК Остаток, | ЕСТЬNULL(Остатки.СуммаОстаток, 0) КАК Сумма, | ЕСТЬNULL(Остатки.РасходыОстаток, 0) КАК Расходы, | ТабДока.Товар КАК Товар |ИЗ | ТабДока КАК ТабДока | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки( | &Дата, | Номенклатура В | (ВЫБРАТЬ | ТабДока.Товар | ИЗ | ТабДока КАК ТабДока)) КАК Остатки | ПО ТабДока.Товар = Остатки.Номенклатура |ГДЕ | ЕСТЬNULL(Остатки.Склад, &Склад) = &Склад | |УПОРЯДОЧИТЬ ПО | Остатки.Партия.Дата | |ИТОГИ | МАКСИМУМ(Количество), | МАКСИМУМ(Всего), | СУММА(Остаток) |ПО | Товар"; Запрос.УстановитьПараметр("Ссылка", К.Ссылка); Запрос.УстановитьПараметр("Склад", К.Склад); Запрос.УстановитьПараметр("Дата", К.МоментВремени()); Возврат Запрос.Выполнить(); КонецФункции |
|||
20
NcSteel
28.08.11
✎
10:00
|
Если речь о 8.2 , то методика ошибочна
|
|||
21
zak555
28.08.11
✎
10:21
|
(20) почему ?
|
|||
22
NcSteel
28.08.11
✎
10:30
|
Сначало записываем , потом смотрим остатки
|
|||
23
PQT
28.08.11
✎
10:42
|
(22) эт как?
|
|||
24
zak555
28.08.11
✎
10:45
|
(23) как в радченко : открой главу кажись 14
|
|||
25
zak555
28.08.11
✎
10:45
|
(22) кстати, почему такая методика должна быть ?
|
|||
26
ДенисЧ
28.08.11
✎
10:47
|
(25) с слишком быстро стала работать и пользователи уже не хотят покупать новые компьютры...
|
|||
27
zak555
28.08.11
✎
10:48
|
подСтолом
|
|||
28
PQT
28.08.11
✎
10:50
|
(24) не знаком, ща поищу
|
|||
29
NcSteel
28.08.11
✎
10:54
|
(25) Блокировок меньше , скорость больше . Незначительно , но все же
|
|||
30
zak555
28.08.11
✎
11:01
|
(29) так он в радченко написано, как этими блокировками "управлять"
она одна назначается после временной таблицы из тч дока и где тут прирост ? почему сразу не написать запрос один с учётом остатков ? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |