|
Перебор строк в таблице
|
|||
---|---|---|---|
#18+
Dima TularsoftЗаставляют :( Электричество пропадет, скажут лезь в трансформаторную будку, почини. Тоже полезешь? Владимир правильно написал что ты даже не понимаешь что от тебя просят. Мы тут не телепаты. Я у тебя прошу то что мне необходимо увидеть чтобы понять логику работы твоего кода. Я уже самый простейший вариант предложил, от руки набить табличку и показать данные из полей которые используются в коде. И чего ты набил? Я вижу в коде поле pl_lc, а в таблице не вижу. Если планируешь и дальше продолжать писать только "помогите", то это в форум работа, с указанием суммы вознаграждения. Помогут. Гарантирую. Может тебе трудно понять? Я же нарисовал 2 табл. Если ты не понял из Tempvo t1_lc ищет в proclcdt по pl_lc. Если находить суммирует. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 14:26 |
|
Перебор строк в таблице
|
|||
---|---|---|---|
#18+
ularsoftDima Tпропущено... Электричество пропадет, скажут лезь в трансформаторную будку, почини. Тоже полезешь? Владимир правильно написал что ты даже не понимаешь что от тебя просят. Мы тут не телепаты. Я у тебя прошу то что мне необходимо увидеть чтобы понять логику работы твоего кода. Я уже самый простейший вариант предложил, от руки набить табличку и показать данные из полей которые используются в коде. И чего ты набил? Я вижу в коде поле pl_lc, а в таблице не вижу. Если планируешь и дальше продолжать писать только "помогите", то это в форум работа, с указанием суммы вознаграждения. Помогут. Гарантирую. Может тебе трудно понять? Я же нарисовал 2 табл. Если ты не понял из Tempvo t1_lc ищет в proclcdt по pl_lc. Если находить суммирует. Курсор Tempvo: t1_lct1_n6Х5000 Курсор PROCLCDT: PL_LCPL_DATE1PL_DATE2Х19.11.201418.03.2015Х25.01.201621.06.2016Х24.06.201622.07.2016 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 14:30 |
|
Перебор строк в таблице
|
|||
---|---|---|---|
#18+
Вру, вижу PL_LC. Попозже код тебе сделаю а ты покажешь что в нем не так. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 14:32 |
|
Перебор строк в таблице
|
|||
---|---|---|---|
#18+
Dima TВру, вижу PL_LC. Попозже код тебе сделаю а ты покажешь что в нем не так. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 14:34 |
|
Перебор строк в таблице
|
|||
---|---|---|---|
#18+
ularsoft"тупой" вариант увеличивает сумму в 3 раза. Судя по приведенной Вами картинке с содержимым таблиц, у Вас один и тот же счет может иметь несколько периодов. В данном случае, на один счет приходится 3 периода. Правильно? Но разве у Вас в этом случае не происходит увеличение сумм, если в период отчета попадают 2 периода? Ну, например, если период расчета, скажем, с 20.06.2016 по 27.06.2016. В этом случае будет выбрано 2 записи и сумма остатка будет учтена дважды. Правильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 14:41 |
|
Перебор строк в таблице
|
|||
---|---|---|---|
#18+
ularsoftКурсор PROCLCDT: PL_LCPL_DATE1PL_DATE2Х19.11.201418.03.2015Х25.01.201621.06.2016Х24.06.201622.07.2016 Я правильно понимаю что например 22.06 договор был недействителен, но остаток по счету X был и его надо учесть? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 14:48 |
|
Перебор строк в таблице
|
|||
---|---|---|---|
#18+
Еще мне непонятна такая конструкция Код: sql 1.
при чем тут неделя до окончания договора? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 14:54 |
|
Перебор строк в таблице
|
|||
---|---|---|---|
#18+
ВладимирМularsoft"тупой" вариант увеличивает сумму в 3 раза. Судя по приведенной Вами картинке с содержимым таблиц, у Вас один и тот же счет может иметь несколько периодов. В данном случае, на один счет приходится 3 периода. Правильно? Но разве у Вас в этом случае не происходит увеличение сумм, если в период отчета попадают 2 периода? Ну, например, если период расчета, скажем, с 20.06.2016 по 27.06.2016. В этом случае будет выбрано 2 записи и сумма остатка будет учтена дважды. Правильно? Да, 3 периода, но 1 из них попадает в расчет. Например, если период расчета, с 20.06.2016 по 27.06.2016, pl_date2 = 22.07.2016, то Код: sql 1.
будет PL_DATE2-6m_date1PL_DATE216.07.201620.07.201622.07.201616.07.201621.07.201622.07.201616.07.201622.07.201622.07.201616.07.201623.07.201622.07.201616.07.201624.07.201622.07.201616.07.201625.07.201622.07.201616.07.201626.07.201622.07.201616.07.201627.07.201622.07.2016 Как раз здесь видно у меня включает в расчет только до 22.07.2016, а за 23, 24, 25, 26, 27 в расчет не включает. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 14:54 |
|
Перебор строк в таблице
|
|||
---|---|---|---|
#18+
Владимир, клиент не закрыл договор до 27.07.2016, в этом случае остаток не 0, поэтому я должен вкл в расчет. У меня не получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 14:57 |
|
Перебор строк в таблице
|
|||
---|---|---|---|
#18+
Кажется я понял, если остаток есть, а действующего договора нет, то надо показать последний договор который закончился? Так? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 14:57 |
|
Перебор строк в таблице
|
|||
---|---|---|---|
#18+
Dima TКажется я понял, если остаток есть, а действующего договора нет, то надо показать последний договор который закончился? Так? Теперь ребята вы поняли. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 14:58 |
|
Перебор строк в таблице
|
|||
---|---|---|---|
#18+
ularsoftDima TКажется я понял, если остаток есть, а действующего договора нет, то надо показать последний договор который закончился? Так? Теперь ребята вы поняли. про неделю до окончания договора в условии объясни, по моему это ерунда какая-то 19482321 там проверка: взять записи, у которых m_date1 попадает в последнюю неделю договора. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 15:02 |
|
Перебор строк в таблице
|
|||
---|---|---|---|
#18+
Если остаток есть, а действующего договора нет, то надо показать остаток по этому счету. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 15:02 |
|
Перебор строк в таблице
|
|||
---|---|---|---|
#18+
ularsoftЕсли остаток есть, а действующего договора нет, то надо показать остаток по этому счету. Например, если период расчета, с 20.06.2016 по 27.06.2016, pl_date2 = 22.07.2016 - дата окончания договора, то из курсора Tempvo: t1_lct1_n6Х5000 будет PL_DATE2-6m_date1PL_DATE2Значение в EXCEL16.07.201620.07.201622.07.2016 500016.07.201621.07.201622.07.2016 500016.07.201622.07.201622.07.2016 500016.07.201623.07.201622.07.2016 500016.07.201624.07.201622.07.2016 500016.07.201625.07.201622.07.2016 500016.07.201626.07.201622.07.2016 500016.07.201627.07.201622.07.2016 5000 Как раз здесь видно у меня включает в расчет только до 22.07.2016, а за 23, 24, 25, 26, 27 в расчет не включает.[/quot] ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 15:08 |
|
Перебор строк в таблице
|
|||
---|---|---|---|
#18+
Вот код примера который я ожидал от тебя увидеть. Я только добавил исходные данные и заменил вывод в эксель на вывод на экран. Запусти и напиши он так же работает как и у тебя. Т.е. также неправильно, но выводит как нужно. Если все так, то дальше будем его дорабатывать. Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 17:24 |
|
Перебор строк в таблице
|
|||
---|---|---|---|
#18+
ularsoftDima TКажется я понял, если остаток есть, а действующего договора нет, то надо показать последний договор который закончился? Так? Теперь ребята вы поняли. Получается пофиг есть или нет договор на конкретную дату, если нет, то главное чтобы был закончившийся более ранний договор. Если так, то можно просто свести твои данные в одну таблицу t1_lct1_n6PL_DATE0Х500019.11.2014 где PL_DATE0 это дата открытия первого договора по данному счету. И дальше всегда выдавать 5000 на любую m_date1 c 19.11.2014. Правильно? Если правильно то это бред какой-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 18:16 |
|
Перебор строк в таблице
|
|||
---|---|---|---|
#18+
Да нормально все. Не будут они делать отчет "задним числом" и "авансовых" договоров с не погашенным остатком у них нет. Ну, и отчет они делают, скорее всего, на текущую неделю. Т.е. все возможные "не стандартные" ситуации пропускаем, как "не существующие" в данной постановке задачи и делаем предельно просто и прямолинейно Код: 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. 35. 36. 37. 38. 39. 40.
С точки зрения программиста, код довольно "корявый". Есть возможность его существенно улучшить (ускорить выполнение). Но для этого надо много чего знать. Причем как Вам, чтобы понять, о чем вообще речь, так и нам, чтобы понять, как именно сделать это улучшение. Не думаю, что в этом есть необходимость... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 20:45 |
|
Перебор строк в таблице
|
|||
---|---|---|---|
#18+
ВладимирМДа нормально все. Не будут они делать отчет "задним числом" и "авансовых" договоров с не погашенным остатком у них нет. Ну, и отчет они делают, скорее всего, на текущую неделю. Т.е. все возможные "не стандартные" ситуации пропускаем, как "не существующие" в данной постановке задачи и делаем предельно просто и прямолинейно Если понятно - объясни поподробнее. Боюсь ТС не сможет. Непонятно зачем размазывать по дням какой-то конкретный остаток на счете? Он же меняться может. Сегодня пополнили, завтра потратили, на то он и счет. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 20:53 |
|
Перебор строк в таблице
|
|||
---|---|---|---|
#18+
Dima TВладимирМДа нормально все. Не будут они делать отчет "задним числом" и "авансовых" договоров с не погашенным остатком у них нет. Ну, и отчет они делают, скорее всего, на текущую неделю. Т.е. все возможные "не стандартные" ситуации пропускаем, как "не существующие" в данной постановке задачи и делаем предельно просто и прямолинейно Если понятно - объясни поподробнее. Боюсь ТС не сможет. Непонятно зачем размазывать по дням какой-то конкретный остаток на счете? Он же меняться может. Сегодня пополнили, завтра потратили, на то он и счет. Он так коряво описал задачу отображения остатка по договору, срок действия которого закончился на текущей неделе :) Просто способ решения выбран, хм..., специфический Кстати, если я угадал с постановкой задачи, то можно решить ее чуть попроще в том же стиле Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Цель замены: не подогнать дату окончания счета под нужную дату, а найти диапазон, внутри которого должна оказаться дата окончания Поясню. У Вас есть дата окончания 22.07.2016. И неделя с 20.07.2016 по 27.07.2016. Что делали Вы? Вы пытались найти пересечение диапазонов. Т.е. на основании даты окончания формировали период с 16.07.2016 по 22.07.2016 и отбирали только те договора, сформированный период по которому пересекался с периодом текущей недели Что делаю я? Просто смотрю, попадает ли дата окончания в текущую неделю? Без дополнительных вычислений периодов. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2016, 20:41 |
|
Перебор строк в таблице
|
|||
---|---|---|---|
#18+
Уважаемый Владимир, Вот так Код: sql 1.
делать вообще нельзя, потому что это "срочные депозиты юр. лиц со сроком погашения до 6 дней ", т.е. вот так Код: sql 1.
Это значит, что текущая дата должна находиться в диапазон, н-р, с 18.07.16 до 24.07.16, но сроки продлеваются. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 06:20 |
|
Перебор строк в таблице
|
|||
---|---|---|---|
#18+
Представьте себе, что есть "массив счетов", в т.ч. срочные депозиты, не важно, что клиент физ. лицо или юр. лицо. LCOSTATOKX50000Y1000Z230000 У каждого счета X, Y, Z разные сроки. Наша задача вытащить информацию "со сроком погашения до 6 дней". Т.е. из массива берем счет, какой-то срочный депозит "Х", смотрим сроки из таблицы PROCLCDT, у него были сроки: PL_LCPL_DATE1PL_DATE2X19/11/201418/03/2015X25/01/201621/06/2016X24/06/201622/07/2016 Я формирую отчет с 18/07/2016 по 24/07/2016, т.е. за неделю, это m_date1 и m_date2. Будем двигаться по m_date1. Код: sql 1.
Т.е. данный SCAN проверяет даты с 18/07/2016 по 24/07/2016 в промежутке 16/07/2016<m_date1<22/07/2016. Выглядит так:pl_date2-6<=m_date1<=pl_date2В РАСЧЕТ16/07/2016<=18/07/2016<=22/07/2016включает16/07/2016<=19/07/2016<=22/07/2016включает16/07/2016<=20/07/2016<=22/07/2016включает16/07/2016<=21/07/2016<=22/07/2016включает16/07/2016<=22/07/2016<=22/07/2016включает16/07/2016<=23/07/2016<=22/07/2016не включает16/07/2016<=24/07/2016<=22/07/2016не включает 28/07/2016 клиент закрыл счет "Х" - это срочный депозит, но клиент может продлить сроки. Программа должна включить в расчет, если клиент не забрал деньги или не закрыл счет во время. В нашем случае за последние 2 дня в расчет не включает. Об этом и прошу помощи или идеи. Если я формирую отчет с 25/07/2016 по 31/07/2016, тогда реально будет след образом: pl_date2-6<=m_date1<=pl_date2В РАСЧЕТ16/07/2016<=25/07/2016<=22/07/2016включает16/07/2016<=26/07/2016<=22/07/2016включает16/07/2016<=27/07/2016<=22/07/2016включает16/07/2016<=28/07/2016<=22/07/2016включает16/07/2016<=29/07/2016<=22/07/2016не включает16/07/2016<=30/07/2016<=22/07/2016не включает16/07/2016<=31/07/2016<=22/07/2016не включает ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 07:08 |
|
Перебор строк в таблице
|
|||
---|---|---|---|
#18+
ularsoftпотому что это "срочные депозиты юр. лиц со сроком погашения до 6 дней ", т.е. вот так Код: sql 1.
" до 6 дней " и "ровно 6 дней" это разные вещи. Зачем вообще такое писать если у тебя есть дата открытия депозита? т.е. почему так нельзя? Код: sql 1.
И на это ответь 19483521 , если так решается, то вообще никаких сканов не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 07:17 |
|
Перебор строк в таблице
|
|||
---|---|---|---|
#18+
ularsoftНаша задача вытащить информацию "со сроком погашения до 6 дней". Так бы сразу и сказал. Попробуй Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 07:38 |
|
Перебор строк в таблице
|
|||
---|---|---|---|
#18+
Суть в том что ты не с той стороны задачу решал. Надо перебирать не договоры, а счета, затем проверять когда он закончится или уже закончился, и исходя из этого решать надо его учитывать или нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 07:48 |
|
Перебор строк в таблице
|
|||
---|---|---|---|
#18+
Dima TСуть в том что ты не с той стороны задачу решал. Надо перебирать не договоры, а счета, затем проверять когда он закончится или уже закончился, и исходя из этого решать надо его учитывать или нет. Короче, делаю так Код: 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. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46.
Дима, тут с моим кодом нельзя ничего подправить? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2016, 08:31 |
|
|
start [/forum/topic.php?fid=41&msg=39283982&tid=1582077]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
64ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
others: | 284ms |
total: | 455ms |
0 / 0 |