cancel
Showing results for 
Search instead for 
Did you mean: 

Abfragen (~manager, ~generator)

Former Member
0 Kudos

Hallo,

ich versuche, eine Abfrage zu erstellen.

                                            

Eigentlich wollte ich „nur“ eine Adressliste ausgeben, um Weihnachtskarten zu drucken/versenden (Adressaufkleber über Seriendruck in MS Office).

 

Das klappt auch über folgende Abfrage:

    

SELECT T0.[CardCode], T0.[CardName], T0.[Address],T0.[ZipCode], T0.[City], T0.[GroupNum], T0.[ListNum], T0.[CreditLine] FROM OCRD T0

Hier kann man ja scheinbar beliebige Felder aufnehmen, die mit ausgegeben werden sollen. Dann Export zu Excel, dann Word Serienbrief etc.

--> Geht das irgendwie einfacher/besser?

    

Da ich aber viele Codes nicht weiß bzw. in welchen Tabellen diese stehen, nutze ich den Abfragegenerator.

 

Darüber wollte ich eigentlich auch andere Sachen sehen/kontrollieren, z.B. ob bei allen GPs, die Abbuchung vereinbart haben (Haken bei "Eigenschaft 1" ist gesetzt), die Bankverbindung gepflegt ist.

 

Dazu will ich alle bei mir angelegten GPs ausgeben (egal, ob Kunde oder Lieferant oder Interessent) und dazu bei jedem GP quasi „frei“ weitere Felder.

 

Heraus kommt bei mir dann dies:

    

SELECT T0.[CardCode], T0.[CardName], T0.[QryGroup1], T0.[DflAccount], T0.[BankCode] FROM OCRD T0  INNER JOIN OITM T1 ON T0.CardCode = T1.CardCode

 

Wenn ich diese Abfrage ausführe, erhalte ich allerdings nur 16 von ca. 1.400 GPs.

--> Woran liegt das?

--> Gibt es irgendwo leicht verständliches, möglichst kurz gehaltenes zum Thema "Abfragen"?

--> Gibt es irgendwo eine Sammlung fertiger Abfragen, vielleicht sogar nach Themen sortiert?

Danke, Marcus.

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Hallo Marcus,

die Abfrage hat einen kleinen, aber folgenschweren Fehler: Versuch's mal hiermit:

SELECT T0.[CardCode], T0.[CardName], T0.[QryGroup1], T0.[DflAccount], T0.[BankCode] FROM OCRD T0

Hinter dem FROM steht die Tabelle, aus der die Daten gezogen werden sollen, in diesem Fall OCRD, das ist die Tabelle mit allen Stammdaten zu den Geschäftspartnern.

In deiner Abfrage war eine Verknüpfung zu Tabelle OITM angegeben, die alle Stammdaten zu den Artikeln enthält (erkennbar am INNER JOIN....). Die hat den Fehler verursacht.

Wenn du die Eigenschaften der Geschäftspartner mit einbauen möchtest, brauchst du die Felder T0.[QryGroup1] für Eigenschaft1, T0.[QryGroup2] für Eigenschaft2 usw.

Abfragen sind so ziemlich das beste Tool in Business One. Wenn du da den Einstieg schaffst, wirst du einen Riesenschritt weiterkommen.

Wenn du englisch kannst, empfehle ich dir dieses Buch:
http://www.amazon.de/gp/product/1849682364?ie=UTF8&camp=3206&creative=21426&creativeASIN=1849682364&...

Viele Grüße

Carlin

Former Member
0 Kudos

Hallo Carlin,

danke für die schnelle Antwort!

--> Funktioniert! Komisch, ich hab den Fehler schon erahnt, aber die Abfrage wurde ja vom Generator so erstellt...

Noch eine Frage hinterher: kann man in irgendeinem Feld den Umsatz eines Kunden/Lieferanten (wie definiert man den Zeitraum?) mit auslesen?!

Jedenfalls hab ich mir gleich mal Deine Buchempfehlung bestellt...

Danke, Marcus.

Former Member
0 Kudos

Nicht direkt, weil der Umsatz nicht in die Tabelle OCRD geschrieben wird, sondern abhängig ist von Zeiträumen, Rechnungen etc.

Hiermit sollte das aber klappen:

DECLARE @von as DateTime

DECLARE @bis as DateTime

SELECT @von = ISNULL(T0.TaxDate+NULL,'') + CONVERT(datetime,'[%0]',104) FROM [dbo].[OINV] T0 WHERE T0.TaxDate = CONVERT(datetime,'[%0]',104) OR  T0.TaxDate IS not NULL

SELECT @bis = ISNULL(T1.TaxDate+NULL,'') + CONVERT(datetime,'[%1]',104) FROM [dbo].[OINV] T1 WHERE T1.TaxDate = CONVERT(datetime,'[%1]',104) OR  T1.TaxDate IS not NULL

SELECT Q.CardCode, Q.CardName, SUM(Q.[Nettoumsatz]) as [Nettoumsatz]

FROM (

SELECT T1.[CardCode], T1.[CardName], SUM(T0.[DocTotalSy]- T0.[VatSumSy]) as [Nettoumsatz]

FROM OINV T0 INNER JOIN OCRD T1 ON T0.CardCode = T1.CardCode

WHERE T0.DocDate BETWEEN @von AND @bis

GROUP BY T1.[CardCode], T1.[CardName]

UNION ALL

SELECT T1.[CardCode], T1.[CardName], -SUM(T0.[DocTotalSy]- T0.[VatSumSy]) as [Nettoumsatz]

FROM ORIN T0 INNER JOIN OCRD T1 ON T0.CardCode = T1.CardCode

WHERE T0.DocDate BETWEEN @von AND @bis

GROUP BY T1.[CardCode], T1.[CardName]

) Q

GROUP BY Q.[CardCode], Q.[CardName]

ORDER BY Q.CardName

Gruß

Carlin

P. S. Bitte markiere dann diesen Thread als beantwortet. Danke.

Former Member
0 Kudos

GENIAL!!!

Danke...

Wenn man so etwas komplexes jetzt noch in eine Spalte meiner obigen Abfrage reinbekäme...

Dann hätte ich alle Infos, die ich benötige, in einer Tabelle und muss mich nicht mit SVERWEIS usw. in Excel rumschlagen.

Schönes Wochenende,

Marcus.

Former Member
0 Kudos

Hallo Carlin - es gibt anderen Bucher und ein paar Links hier:

http://wiki.sdn.sap.com/wiki/display/B1/SAP+B1+SQL+Links+and+Additional+Information

Im Februar bin ich wieder in Deutschland...

Gruss - Zal

Answers (0)