Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Распределение скидки по документам
|
|||
|---|---|---|---|
|
#18+
Есть таблица документов реализации: "Документ", "Клиент", "сумма документа" (С уникальным "документом") Есть таблица: "Клиент", "сумма скидки". (С уникальным "клиентом") причем "сумма скидки" по клиенту всегда меньше чем SUM("сумма документа") по конкретному клиенту Но "сумма скидки" по клиенту может превышать сумму по конкретному документу клиента. Задача: Сделать таблицу: "Документ", "Клиент", "сумма документа", "сумма скидки" (Т.Е. добавить столбец, или даже заполнить существующий там столбец т.е. не важно Update или Great) в которой "сумма документа" в конкретном документе всегда больше чем "сумма скидки" Т.Е. распределить скидку по имеющимся документам не важно как, важно чтоб сумма скидки по документу не превышала бы сумму документа. Пока на ум приходит только последовательный перебор. Иду последовательно по таблице скидок, ищу документ этого клиента. Если скидка <= суммы документа, то ставлю её в документ и перехожу к следующему клиенту (строке скидок) Если нет, то ставлю в документ скидку равную сумме документа и ищу следующий документ/ы для разнесения остатка скидки. должен быть способ/алгоритм легче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2017, 08:10 |
|
||
|
Распределение скидки по документам
|
|||
|---|---|---|---|
|
#18+
982183Т.Е. распределить скидку по имеющимся документам не важно как, важно чтоб сумма скидки по документу не превышала бы сумму документа. Пишешь скидку в первый попавшийся документ, если "не влезла", то остаток в следующий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2017, 08:17 |
|
||
|
Распределение скидки по документам
|
|||
|---|---|---|---|
|
#18+
Я так и делаю. Но это перебор через Scan/Replace. Встал чисто теоритический вопрос решить эту задачу SQLem ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2017, 08:30 |
|
||
|
Распределение скидки по документам
|
|||
|---|---|---|---|
|
#18+
Тогда меняй структуру: добавь таблицу "скидка", туда пропиши Клиента и сумму, а в документах, которые к этой скидке относятся добавь ID скидки. В таком случае одним update проставишь ID скидки на весь пакет документов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2017, 08:38 |
|
||
|
Распределение скидки по документам
|
|||
|---|---|---|---|
|
#18+
Dima TТогда меняй структуру: добавь таблицу "скидка", туда пропиши Клиента и сумму, а в документах, которые к этой скидке относятся добавь ID скидки. В таком случае одним update проставишь ID скидки на весь пакет документов. Таблица "скидка" есть. В ней "Клиент", "сумма скидки". Клиент в ней выполняет роль ID. И связь с документами осуществляется по "клиент". А как через update не "проставить", а "распределить" - не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2017, 08:46 |
|
||
|
Распределение скидки по документам
|
|||
|---|---|---|---|
|
#18+
В SQL нет инструментов чтобы распределить сумму по строкам, т.е. средствами SQL твоя задача не решается. Если скидка привязана к клиенту, то там она и должна оставаться, незачем ее размазывать по документам. В документе написать что-то типа "Ваша скидка на сегодня ... руб." У тебя в целом решение так себе. Ты дезинформируешь клиента: возьмет он один из 3-х документов, там скидка 50% и он решит что ему дали скидку 50%. Если уж раскидывать, то пропорционально сумме документа, но тут все-равно на копейки может разойтись из-за округлений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2017, 09:09 |
|
||
|
Распределение скидки по документам
|
|||
|---|---|---|---|
|
#18+
Мне не надо дезинформировать клиента, мне надо сформировать набор данных для хранилища в целях последующего анализа через сводные таблицы. Это сильно упрощенная часть общей задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2017, 09:11 |
|
||
|
Распределение скидки по документам
|
|||
|---|---|---|---|
|
#18+
Модель: Таблица "Документы": ClientID, Payment Таблица "Скидка": ClientID, Discount Запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2017, 09:14 |
|
||
|
Распределение скидки по документам
|
|||
|---|---|---|---|
|
#18+
PS. Запрос построен в MS Access. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2017, 09:16 |
|
||
|
Распределение скидки по документам
|
|||
|---|---|---|---|
|
#18+
982183Мне не надо дезинформировать клиента, мне надо сформировать набор данных для хранилища в целях последующего анализа через сводные таблицы. Это сильно упрощенная часть общей задачи. Ну и оставь "документ скидки" и не калечь документы реализации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2017, 09:31 |
|
||
|
Распределение скидки по документам
|
|||
|---|---|---|---|
|
#18+
AkinaPS. Запрос построен в MS Access. Спасибо. изучаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2017, 09:59 |
|
||
|
Распределение скидки по документам
|
|||
|---|---|---|---|
|
#18+
Я понял. Смысл - изменить алгоритм "распределения". С "ФИФО" на "пропорциональное по всем документам". Действительно. Тогда можно применить SQL процедуры. Осталось только проверить ошибки округления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2017, 10:14 |
|
||
|
Распределение скидки по документам
|
|||
|---|---|---|---|
|
#18+
Dima TЕсли уж раскидывать, то пропорционально сумме документа, но тут все-равно на копейки может разойтись из-за округлений. Ну да. Так и есть. Так и получилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2017, 10:18 |
|
||
|
Распределение скидки по документам
|
|||
|---|---|---|---|
|
#18+
Не, не работает "пропорциональное распределение" Получается в каждом документе некая сумма, по которой в последствии генерят проводки. А документов слишком много. Видимо надо будет реализовать правило "распределять с наименьшим количеством " Т.Е. перебор делать по индексу "клиент" + "сумма документа по убыванию". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2017, 10:18 |
|
||
|
Распределение скидки по документам
|
|||
|---|---|---|---|
|
#18+
982183Видимо надо будет реализовать правило "распределять с наименьшим количеством " Т.Е. перебор делать по индексу "клиент" + "сумма документа по убыванию".Если это нужно на уровне SQL-сервера, то процедура с курсором легко решит поставленную задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2017, 12:02 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39529315&tid=1340274]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
189ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 297ms |
| total: | 584ms |

| 0 / 0 |
