|
Помогите с запросом | ☑ | ||
---|---|---|---|---|
0
newbas
22.07.13
✎
12:47
|
Есть таблица значений, с колонками "Номенклатура", "Характеристика", "Склад", "Количество", которую формирует обработка и содержит данные типа:
Товар1, Красный, Основной, -3 Товар1, Красный, Оптовый, 1 Товар1, Красный, Отгрузка, 2 Товар2, Зеленый, Основной, 2 Товар2, Зеленый, Отгрузка, -1 Товар2, Зеленый, Оптовый, -1 Необходимо из движений в ТЗ создать документы "ПеремещениеТоваров". Как построить запрос, который создаст выборку типа: Номенклатура, Характеристика, СкладОтправитель, СкладПолучатель, Количество. Попробовал |ВЫБРАТЬ | ТЗ.Номенклатура, | ТЗ.Характеристика КАК Размер, | ТЗ.Склад, | ТЗ.Количество |ПОМЕСТИТЬ иТЗ |ИЗ &ТЗ КАК ТЗ |; | |ВЫБРАТЬ | Приходы.Номенклатура, | Приходы.Размер, | Приходы.Склад КАК СкладПолучатель, | Расходы.Склад КАК СкладОтправитель, | Приходы.Количество | |ИЗ | (ВЫБРАТЬ | иТЗ.Номенклатура, | иТЗ.Размер, | иТЗ.Склад, | иТЗ.Количество КАК Количество | ИЗ иТЗ | ГДЕ иТЗ.Количество>0 | ) КАК Приходы | |ЛЕВОЕ СОЕДИНЕНИЕ | (ВЫБРАТЬ | иТЗ.Номенклатура, | иТЗ.Размер, | иТЗ.Склад, | -иТЗ.Количество КАК Количество | ИЗ иТЗ | ГДЕ иТЗ.Количество<0 | ) КАК Расходы |ПО Приходы.Номенклатура=Расходы.Номенклатура И Приходы.Размер = Расходы.Размер Но когда движения имеют одинаковое количество (по модулю) - то все как надо, а если расход с двух - то удваивает - условие соединение не полное |
|||
1
Ненавижу 1С
гуру
22.07.13
✎
12:49
|
как быть с такой таблицей?
Товар1, Красный, Верхний, -1 Товар1, Красный, Нижний, -1 Товар1, Красный, Левый, 1 Товар1, Красный, Правый, 1 |
|||
2
cw014
22.07.13
✎
12:51
|
Замени:
| Приходы.Количество на | ВЫБОР КОГДА Приходы.Количество > Расходы.Количество ТОГДА Расходы.Количество ИНАЧЕ Приходы.Количество КОНЕЦ КАК Количество |
|||
3
cw014
22.07.13
✎
12:51
|
+(1) Да, вот хороший вопрос
|
|||
4
newbas
22.07.13
✎
12:57
|
(1)
Должно быть 2 перемещения: Верхний Левый 1 Нижний Правый 1 (2) Зачем? |
|||
5
cw014
22.07.13
✎
13:02
|
(4) 1.А почему не так?
Нижний Левый 1 Верхний Правый 1 2. Потому что у тебя дублируются строки и в одной из колонок "количество" у прихода и у расхода дублируются количество. Если брать минимальное значение, то тогда ты будешь перемещать либо то, что есть на приходе, либо то, чего не хватает на втором Например: Товар1, Красный, Основной, -3 Товар1, Красный, Оптовый, 1 Товар1, Красный, Отгрузка, 2 При этом у тебя таблицы "Приход" Товар1, Красный, Оптовый, 1 Товар1, Красный, Отгрузка, 2 Расход Товар1, Красный, Основной, 3 при соединении создадут Товар1, Красный, Оптовый, Основной, 1, 3 Товар1, Красный, Отгрузка, Основной, 2, 3 При таком повороте у тебя в таблице останутся: Товар1, Красный, Оптовый, Основной, 1 Товар1, Красный, Отгрузка, Основной, 2 |
|||
6
newbas
22.07.13
✎
13:05
|
(5) согласен, однако (1) это не решает
|
|||
7
Ненавижу 1С
гуру
22.07.13
✎
13:05
|
(4) почему:
Верхний Левый 1 Нижний Правый 1 а не: Нижний Левый 1 Верхний Правый 1 |
|||
8
newbas
22.07.13
✎
13:06
|
(7) а все равно либо 1 вариант, либо второй - разницы нет.
|
|||
9
Ненавижу 1С
гуру
22.07.13
✎
13:12
|
(8) это тебе разницы нет, а тут системе выбор делать
|
|||
10
newbas
22.07.13
✎
22:02
|
Быстрого и красивого решения видимо нет - придется делать перебором ТЗ
|
|||
11
RomanYS
22.07.13
✎
22:12
|
можно подготовить 2 ВТ нарастающим итогом положительную и отрицательную, а потом соединять их по пересечению. Ищи "ФИФО запросом", смысл такой же.
|
|||
12
RomanYS
22.07.13
✎
22:38
|
+(11) как-то так:
ВЫБРАТЬ ТЗ.Товар, ТЗ.Склад, ТЗ.Количество ПОМЕСТИТЬ ВТ ИЗ &ТЗ КАК ТЗ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ.Товар, ВТ.Склад, -ВТ.Количество КАК Количество, СУММА(-ВТ1.Количество) КАК КоличествоНИ ПОМЕСТИТЬ Минусы ИЗ ВТ КАК ВТ ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ КАК ВТ1 ПО ВТ.Товар = ВТ1.Товар И ВТ.Склад <= ВТ1.Склад ГДЕ ВТ.Количество < 0 И ВТ1.Количество < 0 СГРУППИРОВАТЬ ПО ВТ.Склад, ВТ.Товар, -ВТ.Количество ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ.Товар, ВТ.Склад, ВТ.Количество, СУММА(ВТ1.Количество) КАК КоличествоНИ ПОМЕСТИТЬ Плюсы ИЗ ВТ КАК ВТ ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ КАК ВТ1 ПО ВТ.Товар = ВТ1.Товар И ВТ.Склад <= ВТ1.Склад ГДЕ ВТ.Количество > 0 И ВТ1.Количество > 0 СГРУППИРОВАТЬ ПО ВТ.Склад, ВТ.Товар, ВТ.Количество ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Минусы.Товар, Минусы.Склад КАК СкладПолучатель, Плюсы.Склад КАК СкладОтправитель, ВЫБОР КОГДА Плюсы.КоличествоНИ < Минусы.КоличествоНИ ТОГДА Плюсы.КоличествоНИ ИНАЧЕ Минусы.КоличествоНИ КОНЕЦ - ВЫБОР КОГДА Плюсы.КоличествоНИ - Плюсы.Количество < Минусы.КоличествоНИ - Минусы.Количество ТОГДА Минусы.КоличествоНИ - Минусы.Количество ИНАЧЕ Плюсы.КоличествоНИ - Плюсы.Количество КОНЕЦ КАК Количество ИЗ Минусы КАК Минусы ВНУТРЕННЕЕ СОЕДИНЕНИЕ Плюсы КАК Плюсы ПО Минусы.Товар = Плюсы.Товар ГДЕ ВЫБОР КОГДА Плюсы.КоличествоНИ < Минусы.КоличествоНИ ТОГДА Плюсы.КоличествоНИ ИНАЧЕ Минусы.КоличествоНИ КОНЕЦ - ВЫБОР КОГДА Плюсы.КоличествоНИ - Плюсы.Количество < Минусы.КоличествоНИ - Минусы.Количество ТОГДА Минусы.КоличествоНИ - Минусы.Количество ИНАЧЕ Плюсы.КоличествоНИ - Плюсы.Количество КОНЕЦ > 0 |
|||
13
RomanYS
22.07.13
✎
22:46
|
(10) если складов не слишком много, (12) будет быстрее перебора, только индексы надо ещё в ВТ добавить на товар (и характеристику)
|
|||
14
newbas
23.07.13
✎
21:08
|
(13) Спасибо - все отлично работает.
|
|||
15
newbas
23.07.13
✎
21:16
|
Спасибо (13) полный текст запроса
|ВЫБРАТЬ | ТЗ.Номенклатура КАК ТОвар, | ТЗ.Размер КАК Размер, | ТЗ.Склад, | ТЗ.Количество |ПОМЕСТИТЬ ВТ |ИЗ &ТЗ КАК ТЗ |ИНДЕКСИРОВАТЬ ПО ТЗ.Номенклатура, ТЗ.Размер, ТЗ.Склад |; | |////////////////////////////////// |ВЫБРАТЬ | ВТ.Товар, | ВТ.Склад, | ВТ.Размер, | -ВТ.Количество КАК Количество, | СУММА(-ВТ1.Количество) КАК КоличествоНИ |ПОМЕСТИТЬ Минусы |ИЗ ВТ КАК ВТ |ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ КАК ВТ1 | ПО ВТ.Товар = ВТ1.Товар И ВТ.Размер = ВТ1.Размер И ВТ.Склад <= ВТ1.Склад |ГДЕ ВТ.Количество < 0 И ВТ1.Количество < 0 | |СГРУППИРОВАТЬ ПО ВТ.Склад, ВТ.Товар, ВТ.Размер, -ВТ.Количество |ИНДЕКСИРОВАТЬ ПО | ВТ.Товар, | ВТ.Склад, | ВТ.Размер |; | |//////////////////////////////////////////////////////////////////////////////// | |ВЫБРАТЬ | ВТ.Товар, | ВТ.Склад, | ВТ.Размер, | ВТ.Количество, | СУММА(ВТ1.Количество) КАК КоличествоНИ |ПОМЕСТИТЬ Плюсы |ИЗ ВТ КАК ВТ |ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ КАК ВТ1 | ПО ВТ.Товар = ВТ1.Товар И ВТ.Размер = ВТ1.Размер И ВТ.Склад <= ВТ1.Склад |ГДЕ ВТ.Количество > 0 И ВТ1.Количество > 0 |СГРУППИРОВАТЬ ПО ВТ.Склад, ВТ.Товар, ВТ.Размер, ВТ.Количество |ИНДЕКСИРОВАТЬ ПО | ВТ.Товар, | ВТ.Склад, | ВТ.Размер |; | |//////////////////////////////////////////////////////////////////////////////// | |ВЫБРАТЬ | Минусы.Товар, | Минусы.Размер, | Минусы.Склад КАК СкладПолучатель, | Плюсы.Склад КАК СкладОтправитель, | ВЫБОР | КОГДА Плюсы.КоличествоНИ < Минусы.КоличествоНИ | ТОГДА Плюсы.КоличествоНИ | ИНАЧЕ Минусы.КоличествоНИ | КОНЕЦ - ВЫБОР | КОГДА Плюсы.КоличествоНИ - Плюсы.Количество < Минусы.КоличествоНИ - Минусы.Количество | ТОГДА Минусы.КоличествоНИ - Минусы.Количество | ИНАЧЕ Плюсы.КоличествоНИ - Плюсы.Количество | КОНЕЦ КАК Количество |ИЗ Минусы КАК Минусы |ВНУТРЕННЕЕ СОЕДИНЕНИЕ Плюсы КАК Плюсы | ПО Минусы.Товар = Плюсы.Товар И Минусы.Размер = Плюсы.Размер |ГДЕ | ВЫБОР | КОГДА Плюсы.КоличествоНИ < Минусы.КоличествоНИ | ТОГДА Плюсы.КоличествоНИ | ИНАЧЕ Минусы.КоличествоНИ | КОНЕЦ - ВЫБОР | КОГДА Плюсы.КоличествоНИ - Плюсы.Количество < Минусы.КоличествоНИ - Минусы.Количество | ТОГДА Минусы.КоличествоНИ - Минусы.Количество | ИНАЧЕ Плюсы.КоличествоНИ - Плюсы.Количество | КОНЕЦ > 0 |
|||
16
RomanYS
23.07.13
✎
21:18
|
(14) пожалуйста
есть одно условие: входящая таблица должна быть свёрнута, т.е. все строки должны быть уникальны по набору измерений |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |