Решение для объединения, чтобы получить все данные, которых нет в основном запросе, на основе поля из основного запроса - PullRequest
1 голос
/ 18 марта 2020

Таким образом, у меня есть приведенный ниже случай в отчетах Crystal.

Основной отчет, в котором есть запрос, в котором отображаются сведения о партиях в подотчете счета-фактуры, который показывает детали партий, включенных в основной отчет, но не включены в этот документ. Так, например,

  • Счет-фактура A имеет 10 элементов, все с одной и той же партией (это будет показано в основном отчете)
  • Счет-фактура B, C, D имеет еще 3 элемента в той же партии (таким образом, всего 13 позиций для этой партии в 4 разных документах) и 3 позиции, которых нет в документе А., - это то, что появляется в подотчете.

Теперь легко достичь это в Crystal Reports, потому что вы можете связать подотчеты с полями для прямой фильтрации, не связывая запросы, однако, поскольку CR не является ядром базы данных, фильтрация выполняется очень медленно, и для решения этой проблемы мне нужно решение в запросе SQL:

Я попытался преобразовать его в UNION ALL, чтобы он был

Main Report
Union ALL
Sub Report

Проблема в том, что я не могу скопировать случай подотчета, поскольку группировка должна быть по документу, затем по пакету и по 3 элементам. из подотчета не в том же документе, поэтому они не сгруппированы по одному измерению сейчас, и это разрушает отчет.

Я знаю, что это не логично, но после попытки Все решения, которые пришли мне в голову, я подумал, что, может быть, у кого-то более опытного будет другое мнение, в основном для каждого счета в основном отчете мне нужно показать все позиции, которые не входят в этот конкретный счет c, поэтому сейчас у меня нет ссылки, потому что Элемент не тот же, документ не тот, и только пакет одинаков, но это ссылка многие ко многим.

РЕДАКТИРОВАТЬ: для простоты, скажем, это основной запрос

SELECT 

T0.DocumentNumber,
T2.ItemCode,
T2.ItemName,
T3.BatchNumber,
T3.Quantity 

FROM DocHeader T0 

JOIN DocRows T1 ON T0.DocumentEntry = T1.DocumentEntry
JOIN ItemMaster T2 ON T1.ItemCode = T2.ItemCode
JOIN BatchTransaction T3 ON T1.Document Entry = T3.DocumentEntry and
T3.DocumentType = T1.DocumentType and T3.DocumentLine = T1.DocumentLine 

Отчет сгруппирован по номеру документа, поэтому мне нужен тот же запрос, но для каждого другого номера документа, который не входит в основной запрос, присоединенный к основному запросу. 2 проблемы: 1. Они могут оставить параметр номера документа пустым и выбрать все документы в таблице, поэтому этот процесс должен выполняться отдельно для каждого документа. 2. номер документа в подзапросе никогда не будет прежним, поэтому проблема заключается в группировке, поскольку отчет должен быть сгруппирован по номеру документа основного запроса.

1 Ответ

0 голосов
/ 18 марта 2020

Было бы полезно, если бы вы записали свой основной запрос и некоторые второстепенные запросы, которые вы пробовали, но, если я правильно понимаю вашу проблему, вы сможете просто создать дополнительное JOIN в таблице пакетов. Это приведет к тому, что ваш список запросов SQL будет отключен от ВСЕХ строк элементов для Пакета, затем вы можете попытаться использовать условное форматирование и / или группировку в Crystal для отображения / скрытия строк по мере необходимости.

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

РЕДАКТИРОВАТЬ: Основываясь на ваших комментариях и обновлениях, я думаю, что правильный подход здесь заключается в создании хранимой процедуры. Выполнение одного запроса, вероятно, не сработает, я взломал его, и это не стоит хлопот.

Используя хранимую процедуру, вы можете создать переменную таблицы в памяти, добавить основные записи счета-фактуры в таблицу, а затем добавить записи для вторичных счетов-фактур, связанных номером партии. Используйте какой-либо столбец / флаг в своей таблице, который указывает, является ли это записью «Основной счет-фактура» или нет, и используйте этот флаг для управления логикой дисплея Crystal c, показывающей, как вы хотите показать основные или дополнительные счета-фактуры.

Это выполнимо!

...