Имя: Пароль:
1C
1С v8
вопрос знатокам sql
,
0 Gorr
 
08.05.14
15:49
есть 2 таблички:
поля первой таблички: товар, количество
например товарА 10
поля второй талички: товар, количество, склад
пример
товарА 7 Склад1
товарА 2 Склад2
в результате нужно получить таблицу:
товарА 7 Склад1
товарА 2 Склад2
товарА 1 ПустаяСсылка
Благодарю!
1 Ненавижу 1С
 
гуру
08.05.14
15:52
это баян
накопление сортировкой по складам (таблица 2 сама с собой)
потом вычитание, было уже
2 Gorr
 
08.05.14
15:56
(1) примерчик пожалуйтста. очень нужно!
Уточнение во второй таблице может быть не весь товар который есть в первой. поэтому без первой не получится.
3 Gorr
 
08.05.14
15:59
+2 таким образом еще раз:
таблица1
товарА 10
товарБ 3
таблица2
товарА 7 Склад1
товарА 2 Склад2
результат:
товарА 7 Склад1
товарА 2 Склад2
товарА 1 ПустаяСсылка
товарБ 3 ПустаяССылка
4 Дык ё
 
08.05.14
16:01
5 Gorr
 
09.05.14
19:42
Накопление второй таблицы соединением дает:
товарА Склад1 7 7
товарА Склад2 2 9
соединением с первой по товару и вычислением можно получить
товарА Склад1 7
товарА Склад2 9
но как из этого получить даже в самом простом варианте
товарА Склад1 7
товарА Склад2 9
товарА Null   1
совершенно непонятно. нужен хелп!
6 Gorr
 
09.05.14
19:44
поправка
товарА Склад1 7
товарА Склад2 2
товарА NULL   1
7 GANR
 
09.05.14
20:38
(3) И чего тут сложного?

ВЫБРАТЬ
    Товар КАК Товар,
    Значение(Справочник.Склады.ПустаяСсылка) КАК Склад,
    Количество КАК Количество
ИЗ
    Таблица1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    Товар,
    Склад,
    Количество
ИЗ
    Таблица2

Оно?
8 Gorr
 
09.05.14
21:28
вот в конкретном примере да, но если количество первой будет равно количеству во второй или даже меньше, тогда строка с пустым складом будет лишней. задачу нужно решить в общем виде.
9 Gorr
 
09.05.14
21:35
(7) и в чистом виде таблицу2 использовать нельзя - (1) правильно заметил, что нужен накопительный итог распределения по складам из 2й таблицы
10 Gorr
 
09.05.14
21:57
возможно поможет вводндополнительная вводная: суть таблицы 1 это заказанный тровар весь, а суть 2й - та часть товара который заказан из наличия из конкретного склада причем один и тот же товар может быть заказан с разных складов. необходимо получить информацию по количеству по всем товарам в разрезе складов
11 Fragster
 
гуру
09.05.14
22:34
чувак хочет фифо запросом
12 Fragster
 
гуру
09.05.14
22:34
намного эффективнее постобработкой. Ну, или там через итоги, например
13 GANR
 
09.05.14
22:42
(11) ФИФО запросом - да это вообще последнее дело. Запросом это во-первых алгоритмически сложнее, чем кодом, а во-вторых медленнее и ресурсы отъедает.
14 program1Cer
 
10.05.14
07:53
ВЫБРАТЬ "ТоварА" , 10 ПОМЕСТИТЬ Таб1
;
ВЫБРАТЬ "ТоварА" , 7, "Склад1"
ПОМЕСТИТЬ Таб2

ОБЪЕДИНИТЬ
ВЫБРАТЬ "ТоварА" , 2, "Склад2"


;

ВЫБРАТЬ Поле1, Поле2, Поле3
ИЗ Таб2

ОБЪЕДИНИТЬ

ВЫБРАТЬ Таб1.Поле1, Таб1.Поле2 - ВложенныйЗапрос.Поле2, "ПустаяСсылка" КАК Поле3
ИЗ Таб1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (
    ВЫБРАТЬ Поле1, Сумма(Поле2) Как Поле2
    ИЗ Таб2

    СГРУППИРОВАТЬ ПО Поле1
    ) КАК ВложенныйЗапрос
    ПО Таб1.Поле1 = ВложенныйЗапрос.Поле1
15 program1Cer
 
10.05.14
07:57
Это и соответствует твоей вводной, во вложенном запросе считает сколько у нас всего заказано по складам, потом вычитаем из общего числа заказов товара (Таб1), это и будет то количество, которое без склада.

Зачем здесь накопительный итог по складам?
16 program1Cer
 
10.05.14
08:17
И на ЛЕВОЕ СОЕДИНЕНИЕ надо переделать)
17 ice777
 
10.05.14
10:55
(0) конструктор для кого придуман?
18 Gorr
 
10.05.14
20:58
(11), (13) фифо запросом нет не надо мне, не знаю такого)))
Все намного проще: если взглянуть на таблицу заказов и резервов, первое что бросается в глаза это то, что таблица 2 или таблица резервов содержит практически готовый результат. если это увидеть, то результат будет равен тому чего нет в резерве объединенное с резервом. т.е. результат = резерв + (заказ - резерв). для получения части которой нет в резерве можно предварительно резерв свернуть по товару в пакетном запросе. таким образом (15) да, не нужно никакого накопительного итога. НО это все валидно только при условии, что таблица резервов не больше таблицы заказов заказ >= резерв. К сожалению, в моем случае количество из таблицы резервов не факт что не больше таблицы заказов(((
Таким образом, видимо, без накопительного итога по складам не обойтись, и , поскольку накопительный итог считается по всем строкам таблицы в независимости от того какой товар в текущей строке:
товарА склад1 7 7
товарА склад2 2 9
товарБ склад1 3 12, а не
товарА склад1 7 7
товарА склад2 2 9
товарБ склад1 3 3
, то вычисление распределение товара по складам придется вычислять запросом по каждому товару отдельно в цикле, а результат накапливать выгружая, например, в таблицу значений.
(17) может для тебя?)
19 Gorr
 
10.05.14
21:49
(15)
выбрать * из таб2
объединить
выбрать товар, сумма(заказ) - сумма(резерв),"ПустойСклад" из (
выбрать з.товар,з.к заказ, 0 резерв из таб1 з
объединить
выбрать р.товар,0,р.к резерв из таб2 р) вз
сгруппировать по товар
имеющие сумма(заказ) - сумма(резерв)>0
20 program1Cer
 
11.05.14
07:06
(18) > К сожалению, в моем случае количество из таблицы резервов не факт что не больше таблицы заказов(((

(10) > суть таблицы 1 это заказанный тровар весь

Давай ты определишься с условиями задачи. Я исходил естественно из 10 сообщения и для него мой ответ верный.
21 Fragster
 
гуру
11.05.14
12:59
(18) что же тебе надо, как не фифо по складам?
22 Gorr
 
11.05.14
14:47
(21) а что такое в вашем понимании фифо по складам?
в моем фифо это понятие из учетной политики для оценки себестоимости товара при списании
(20) если бы это было так просто. задача нуждается в дальшейшем изучении..
23 Fragster
 
гуру
11.05.14
14:54
(22).1 остатки на 100 складах по одной штуке, а в заказе - 50. С каких складов надо забрать?

фифо, конечно неправильное название, в данном случае я его понимаю как "выбор по некой сортировке" и его проще делать именно что постобработкой.
24 program1Cer
 
11.05.14
15:08
А то что у него в таблице есть значения вообще без склада, ты как-то пропустил. Нет тут "выбора по некой сортировке", задача о другом.
25 Fragster
 
гуру
11.05.14
15:32
(24) вообще без склада - это потому что на всех складах кончилось, и это простейший случай - так как со всех складов забираем все и "остается" строка с разницей суммы остатков и количества заказа
26 program1Cer
 
11.05.14
15:42
(25) В целом я так же понял, только где тут выбор? Что мы выбираем? Банальное определение того, что товар заказали, но на складах его не хватает. Но у автора, видимо, образовалась ситуация, когда количество заказов меньше, чем заказов в разрезе складов. Нормальная это ситуация или нет, он выясняет =) а пока решил закрыть на это дела глаза условием

имеющие сумма(заказ) - сумма(резерв)>0

пусть это будет на его совести)
27 Fragster
 
гуру
11.05.14
15:44
(26) потому что "выбор по сортировке" будет универсальным. А если немного модифицировать, то можно собирать N заказов с M складов за один проход результата, если он правильно отсортирован
28 Fragster
 
гуру
11.05.14
15:46
(27)+ но да, когда мы дойдем до необходимости оптимизировать сборку одного заказа и при этом доля заказов больше, чем все остатки будет велика - то да, предварительная проверка может быть уместна.
29 Fragster
 
гуру
11.05.14
15:46
(28) вопрос в том, когда мы до такой ситуации дойдем и сколько такая "оптимизация" даст профиту
30 program1Cer
 
11.05.14
16:01
(27) А автору надо собрать N заказов для M складов? Ты его цели знаешь (документ, отчет, обработка) ? А уже говоришь о универсальном решении.
31 Fragster
 
гуру
11.05.14
17:30
(30) просто я телепат