|
Счёт-Фактура
|
|||
---|---|---|---|
#18+
Всем добрый день. Вот такая задача: есть один счёт (Invoice). По нему есть Приход и есть Расход. ааа - пришло 10(2,1,2,3,2), ушло - 10(6,4) bbb - пришло 10(1,3,2,4), ушло - 10(7,3) ccc - пришло 10(4,1,5), ушло - 10(2,8) Нужно получить Расход (Счёт-Фактуру, как результат Var1 или Var2) с атрибутами прихода (ГТД & Кол-во), так, чтобы ORDER BY в Приходе и Расходе был по дате, а кол-во выбиралось из Расхода сверху вниз. Т.е. если нужно отдать товар ааа -12.01.21=4шт., то имеем ввиду то, что aaa - уже отдавалось ранее 6 шт. и берем (т.е. начинаем брать) с Прихода STU=3-1=2 и далее вниз по таблице Прихода пока кол-во не будет равно Расходу. У меня эта задача решена процедурой + функцией с 2-мя курсорами, что сильно грузит БД. Данная задача каким-то способом решается в 1С, но к сожалению у меня клиентская часть не 1С. М.б. кто-то уже решал такую задачу или м.б. видит простой способ с хитрыми JOIN, так, чтобы это выглядело оптимально? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2021, 14:39 |
|
Счёт-Фактура
|
|||
---|---|---|---|
#18+
LightN, картинок не видно ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2021, 16:08 |
|
Счёт-Фактура
|
|||
---|---|---|---|
#18+
Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2021, 16:12 |
|
Счёт-Фактура
|
|||
---|---|---|---|
#18+
https://disk.yandex.ru/i/FsE-yzI4rRNPwA Пробовал по разному, картинки не проходят #img=# , ни через [выберите файл] ... jpg, png, gif не лезут. Gif пролез!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2021, 16:26 |
|
Счёт-Фактура
|
|||
---|---|---|---|
#18+
LightN, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.
Я предварительно все строки "разбил" на число строк равное указанному кол-ву. Например строка с кол-вом 6 заменяется 6-ю строками с кол-вом 1. Чтобы был корректный перенос по датам. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2021, 17:50 |
|
Счёт-Фактура
|
|||
---|---|---|---|
#18+
Oleg_SQL LightN, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.
Я предварительно все строки "разбил" на число строк равное указанному кол-ву. Например строка с кол-вом 6 заменяется 6-ю строками с кол-вом 1. Чтобы был корректный перенос по датам. Спасибо! Проверю на скорость... Я тоже использую STRING_SPLIT. От него видно никуда не деться ... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2021, 18:55 |
|
Счёт-Фактура
|
|||
---|---|---|---|
#18+
LightN, Поправил немного, если данных больше, то _From нужно считать тоже накопительно: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Ну собственно, по мере использования могут возникать доработки, но направление есть ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2021, 19:54 |
|
Счёт-Фактура
|
|||
---|---|---|---|
#18+
LightN Я тоже использую STRING_SPLIT. От него видно никуда не деться ... Много раз писали уже - создайте таблицу с нужным кол-вом строк (миллион, льярд или тп) и используйте ее всегда - серверу будет приятно ))) Я в примере привел nums за неимением ссылки на таковую ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2021, 21:24 |
|
Счёт-Фактура
|
|||
---|---|---|---|
#18+
Oleg_SQL, Спасибо, Спасибо. Ваше решение немного отличается от моего. Как я уже писал я тоже использовал split. Мне казалось, что м.б. найдется какое-то иное решение без него. Какой-нибудь SQL-Перельман ткнет носом - ну вот же решение. Ведь существует огромная потребность на join с такой структурой. И только 1С не напрягается этой проблемой. Сотни тысяч компаний что-то перепродают, и конечно там есть qty прихода и qty расхода. И я вижу насколько востребовано JOIN на это решение. Видно как некоторые компании выпускают расходные документы, где таблицы идут по 1 штуке. Либо не додумались до split, либо там его нет, либо он стопорит систему своей работой, либо просто некуда деться. И там где можно обойтись 1 листом бумаги, приходит 10 страниц. Подождём MS, м.б. когда-то сделают ... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2021, 11:21 |
|
Счёт-Фактура
|
|||
---|---|---|---|
#18+
LightN Как я уже писал я тоже использовал split. Мне казалось, что м.б. найдется какое-то иное решение без него. Какой-нибудь SQL-Перельман ткнет носом - ну вот же решение. Oleg_SQL Много раз писали уже - создайте таблицу с нужным кол-вом строк (миллион, льярд или тп) и используйте ее всегда - серверу будет приятно ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2021, 21:15 |
|
Счёт-Фактура
|
|||
---|---|---|---|
#18+
alexeyvg , Вы меня неправильно поняли. Таблицу с "льярд" конечно же создал, а вот печалька совсем в другом была. Приход -Join(New)-Расход, и всё. И нет никаких ROW_NUMBER(), LAG() и OVER(PARTITION BY). Ведь так работает любая складская или какая-нибудь другая распределительная система и запрос на такой именно системный join думаю очень был бы востребован ... Oleg_SQL , ещё раз СПАСИБО. Внедрил, работает, быстрее ... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2021, 14:15 |
|
|
start [/forum/topic.php?fid=46&msg=40098090&tid=1684290]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
123ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 298ms |
total: | 509ms |
0 / 0 |