Как я могу скрыть дубликаты записей (в отчете Crystal), которые уже были сторнированы? - PullRequest
2 голосов
/ 24 ноября 2008

Этот вопрос является продолжением вопроса, который я задал на днях («Необходимо найти повторяющиеся записи, но исключить обратные транзакции») .

У меня есть Crystal Report, в котором отображаются транзакции клиентов с топливом. Бывают случаи, когда дублирующаяся транзакция будет ошибочно импортирована. Если / когда эта ошибка обнаружена, администратор отменит транзакцию, оставив два исходных дубликата и «отрицательную» транзакцию для сторнирования. Пример:

Date;     Qty;     Value;     Reversal

1/14/08     5       20         N
1/14/08     5       20         N
1/14/08    -5      -20         Y
1/20/08     8       56         N
1/22/08     9       62         N
1/22/08     9       62         N

В идеале, клиент будет видеть только ОДНО транзакции (или дублирующую транзакцию, которая еще не была сторнирована). Если транзакция была отменена, мы только хотим, чтобы они увидели оригинальную уникальную запись. Пример (на основе данных выше):

Date;     Qty;     Value;

1/14/08     5       20
1/20/08     8       56
1/22/08     9       62
1/22/08     9       62

У меня уже есть запрос , который вернет данные так, как я только что описал, но мне нужно интегрировать их с отчетом Crystal, который требует объединения с другими таблицами. Производительность ужасна, если я использую sql, который у меня уже есть, поэтому я пытаюсь выяснить, можно ли скрыть дублированные (обращенные) транзакции в формулах Crystal вместо использования команды SQL в качестве таблицы, объединенной с другими таблицами. 1015 *

Пожалуйста, дайте мне знать, если я неясен. Я заранее ценю вашу мудрость!

Ответы [ 2 ]

2 голосов
/ 25 ноября 2008

Всегда ли развороты сортируются ко дну? Если это так, вы можете использовать формулу для проверки следующей записи и условно скрыть раздел сведений.

Поэтому в разделе сведений добавьте формулу для условного подавления раздела, если это запись сторнирования или текущая запись соответствует последующей записи сторнирования:

( {Reversal} = "Y" ) OR 
( {Date} = Next({Date}) AND {QTY} = Next({QTY}}) * -1 AND 
  {Value} = Next({Value}) * -1 AND Next({Reversal}) = "Y" )

Если обращения всегда совпадают, вы можете упростить его до:

( {Reversal} = "Y" ) OR 
( Next({Reversal}) = "Y" )
0 голосов
/ 25 ноября 2008

Не слишком ли поздно слегка изменить модель данных, чтобы переворачивать и переворачивать записи и каким-либо образом помечать? Однажды я работал над такой системой, в которой записи были вставлены с флагом «C» (текущий), а в случае обращения были обновлены до «O» (исходный), а запись реверсирования была помечена как «R». Все запросы, которые хотят видеть только текущие данные, можно просто добавить в предложение WHERE:

AND rec_type = 'C'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...