Vorbelegung im Selektionsbildschirm berechnen

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
18 Beiträge • Seite 1 von 2 (current) Nächste
18 Beiträge Seite 1 von 2 (current) Nächste

Vorbelegung im Selektionsbildschirm berechnen

Beitrag von Kaiser ( / / 0 / 3 ) »
Hallo, ich fange gerade an mit ABAP und habe da eine kleine frage:

Ich muss in einem von bis Feld standartmäsik vom Vormonat bis zum aktuellen selektieren. Den aktuellen bekomme ich ganz einfach mit default sy-datum. Aber wie berechne ich die Vorbelegung für das 'von' Feld?

Code: Alles auswählen.

selection-screen begin of block a with frame title t1.


  DATA: vormonat TYPE d.

  vormonat = sy-datum.
  vormonat+6(2) = '01'.
  vormonat = vormonat - 1.

  select-options: dlifnr for lfa1-lifnr.
  select-options: dekorg for lfm1-ekorg obligatory
                                        no intervals
                                        memory id eko.
  select-options: dbukrs for lfb1-bukrs obligatory
                                        no intervals
                                        memory id buk.
  select-options: dktokk for lfa1-ktokk no intervals.
  select-options: dspmon for s012-spmon default vormonat to sy-datum.

*ende selektionsbildschirm
selection-screen end of block a.
Danke Schonmal

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von eldenio ( / / 0 / 3 ) »
na im prinzip hast du doch schon alles...


vormonat = sy-datum.
vormonat+6(2) = '01'.

vormonat = vormonat - 100.

if vormonat+4(2) = '00'.
vormonat+4(2) = '12'.
vormonat = vormonat - 10000.
endif.


müßte so eigentlich passen, oder?

Re: Vorbelegung im Selektionsbildschirm berechnen

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Kaiser hat geschrieben:Hallo, ich fange gerade an mit ABAP und habe da eine kleine frage:

Ich muss in einem von bis Feld standartmäsik vom Vormonat bis zum aktuellen selektieren. Den aktuellen bekomme ich ganz einfach mit default sy-datum. Aber wie berechne ich die Vorbelegung für das 'von' Feld?

Code: Alles auswählen.

selection-screen begin of block a with frame title t1.


  DATA: vormonat TYPE d.

  vormonat = sy-datum.
  vormonat+6(2) = '01'.
  vormonat = vormonat - 1.

  select-options: dlifnr for lfa1-lifnr.
  select-options: dekorg for lfm1-ekorg obligatory
                                        no intervals
                                        memory id eko.
  select-options: dbukrs for lfb1-bukrs obligatory
                                        no intervals
                                        memory id buk.
  select-options: dktokk for lfa1-ktokk no intervals.
  select-options: dspmon for s012-spmon default vormonat to sy-datum.

*ende selektionsbildschirm
selection-screen end of block a.
Danke Schonmal
Hallo (Herr) Kaiser,

Dein Codebeispiel geht schon in die richtige Richtung:

Code: Alles auswählen.

TABLES:
  lfa1,
  lfb1,
  lfm1,
  s012.
SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE t1.

SELECT-OPTIONS: dlifnr FOR lfa1-lifnr.
SELECT-OPTIONS: dekorg FOR lfm1-ekorg OBLIGATORY
                                      NO INTERVALS
                                      MEMORY ID eko.
SELECT-OPTIONS: dbukrs FOR lfb1-bukrs OBLIGATORY
                                      NO INTERVALS
                                      MEMORY ID buk.
SELECT-OPTIONS: dktokk FOR lfa1-ktokk NO INTERVALS.
SELECT-OPTIONS: dspmon FOR s012-spmon NO INTERVALS.

*ende selektionsbildschirm
SELECTION-SCREEN END OF BLOCK a.

INITIALIZATION.
  dspmon-sign   = 'I'.
  dspmon-option =  'BT'.

  dspmon-low      = sy-datum.
  dspmon-low+6(2) = '01'.
  dspmon-low      = dspmon-low - 1.

  dspmon-high     = sy-datum.

  APPEND dspmon TO dspmon.
Bitte auch an den APPEND denken, damit die Workarea in den Tabellenkörper übertragen wird!

Für solche Vorbelegungen steht das Ereignis INITILIZATION zur Verfügung.
Damit ist es dann auch möglich mehr als nur eine Wertezeile vorzubelegen.
Das Ereignis wird auch pro Programmauflauf nur einmalig hinter dem Ereignis LOAD-OF-PROGRAM prozessiert.
(siehe dazu auch die SAP-Hilfe)

Re: Vorbelegung im Selektionsbildschirm berechnen

Beitrag von PISA-Gast ( / / 0 / 3 ) »
:shock:
Kaiser hat geschrieben:... standartmäsik ...
:shock:

Re: Vorbelegung im Selektionsbildschirm berechnen

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
PISA-Gast hat geschrieben::shock:
Kaiser hat geschrieben:... standartmäsik ...
:shock:
wenn das Dein einziges Problem ist... :?

Beitrag von Gast ( / / 0 / 3 ) »
eldenio hat geschrieben:müßte so eigentlich passen, oder?
Nein.
Warum soll man da 100 oder mehr Tage abziehen?

Beitrag von Gast ( / / 0 / 3 ) »

Code: Alles auswählen.

SELECT-OPTIONS: dspmon FOR s012-spmon.
...
INITIALIZATION.
  dspmon-sign = 'I'.
  dspmon-option = 'BT'.
  dspmon-high = sy-datum - sy-datum+6(2).
  dspmon-low  = dspmon-high - dspmon-high+6(2) + 1.
  APPEND dspmon.

Beitrag von Kaiser ( / / 0 / 3 ) »
Danke. Habe es jetzt hin bekommen.

Code: Alles auswählen.

initialization.
*Titel in variable t1 schreiben
t1 = 'Selektion Lieferant'.

*Berechnung der Vorbelegung in spmon
dspmon-low = sy-datum.
dspmon-low+4(2) = dspmon-low+4(2) - 1.
if dspmon-low+4(2) = '00'.
  dspmon-low+4(2) = '12'.
  dspmon-low(4) = dspmon-low(4) - 1.
endif.

dspmon-high = sy-datum.

append dspmon to dspmon.
bis zum nächstem Problem dann. :wink:

Beitrag von eldenio ( / / 0 / 3 ) »
Anonymous hat geschrieben:
eldenio hat geschrieben:müßte so eigentlich passen, oder?
Nein.
Warum soll man da 100 oder mehr Tage abziehen?
sagen wir fast ;)
wenn der datentyp statt "d" ein char8 ist klappt es mit dem coding auch...
natürlich ist das nicht besonders elegant, aber es klappt.

der eleganteste weg ist übrigens folgender:

CALL FUNCTION 'SUBTRACT_TIME_FROM_DATE'
EXPORTING ...

mit den entsprechenden parametern kann man dann sogar direkt auf/abrunden...

Beitrag von Gast ( / / 0 / 3 ) »
Kaiser hat geschrieben:Danke. Habe es jetzt hin bekommen.

Code: Alles auswählen.

initialization.
*Titel in variable t1 schreiben
t1 = 'Selektion Lieferant'.

*Berechnung der Vorbelegung in spmon
dspmon-low = sy-datum.
dspmon-low+4(2) = dspmon-low+4(2) - 1.
if dspmon-low+4(2) = '00'.
  dspmon-low+4(2) = '12'.
  dspmon-low(4) = dspmon-low(4) - 1.
endif.

dspmon-high = sy-datum.

append dspmon to dspmon.
bis zum nächstem Problem dann. :wink:
Das nächste Problem hast Du schon.
(Subtraktionen und Additionen auf Teilfelder (Offset und Länge) arten immer in Bastelorgien aus.
z.B. hat nicht jeder Monat 31 Tage.)

Beitrag von Thomas R. (Expert / 755 / 78 / 34 ) »
Hallo Kaiser,

Dein Originalcode muß nur minimal abgeändert werden (ergibt sich auch aus den obigen Lösungen) um eine sichere Berechnung des Vormonatsersten zu erreichen.


selection-screen begin of block a with frame title t1.


DATA: vormonat TYPE d.

vormonat = sy-datum - sy-datum+6(2).
vormonat+6(2) = '01'.
* vormonat = vormonat - 1.

select-options: dlifnr for lfa1-lifnr.


MfG
Thomas R.

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Kaiser hat geschrieben:Hallo, ich fange gerade an mit ABAP und habe da eine kleine frage:
...

Code: Alles auswählen.

...
  select-options: dspmon for s012-spmon default vormonat to sy-datum.
...
Danke Schonmal
Hallo Kaiser,

wie mir gerade aufgefallen ist, handelt es sich bei dem Feld S012-SPMON keineswegs um ein Datumfeld.

Vielmehr handelt es sich hier um ein NUMC6-Feld mit der Bedeutung 'Analysezeitraum - Monat'.
Daher bin ich jetzt etwas verwirrt, weil Du ja eine Lösung benutzt, die funktionieren soll.
Kaiser hat geschrieben:Danke. Habe es jetzt hin bekommen.

Code: Alles auswählen.

initialization.
*Titel in variable t1 schreiben
t1 = 'Selektion Lieferant'.

*Berechnung der Vorbelegung in spmon
dspmon-low = sy-datum.
dspmon-low+4(2) = dspmon-low+4(2) - 1.
if dspmon-low+4(2) = '00'.
  dspmon-low+4(2) = '12'.
  dspmon-low(4) = dspmon-low(4) - 1.
endif.

dspmon-high = sy-datum.

append dspmon to dspmon.
bis zum nächstem Problem dann. :wink:

Beitrag von Kaiser ( / / 0 / 3 ) »
Hallo,
Bis jetzt funktioniert alles so wie es soll. Zumindest habe ich noch keine Fehler in den Ergebnissen gefunden.

Das das Feld kein Datumsformat ist hab ich erst gerade gesehen, sorry. Aber es läuft.

Wenn das allerdings schöner geht bin ich für Lösungen dankbar.

MfG

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Kaiser hat geschrieben:Hallo,
Bis jetzt funktioniert alles so wie es soll. Zumindest habe ich noch keine Fehler in den Ergebnissen gefunden.

Das das Feld kein Datumsformat ist hab ich erst gerade gesehen, sorry. Aber es läuft.

Wenn das allerdings schöner geht bin ich für Lösungen dankbar.

MfG
dann muss ich mal vermuten, dass in der Tabelle S012 Monatszuordnungen in der Form YYYYMM stehen und Du 'versehentlich' den richtigen Selektionswert berechnet hast... :shock:
À propos, die Zuweisung

Code: Alles auswählen.

dspmon-low = sy-datum.
dürfte wegen des Char-Characters eines NUMC-Feldes den linken Teil des Datum übernehmen.
Schau Dir doch mal die Selektionstabelle im Debugger an. Ich vermute, es sieht in etwa so aus:
dspmon => 'IBT200502200503'.

Beitrag von Kaiser ( / / 0 / 3 ) »
Das Feld hat in der Tabelle das Format YYYYMM und im debugger steht im dspmon exakt IBT200502200503.

Vergleichbare Themen

0
Antw.
876
Views
ALV Grid Vorbelegung
von donossi » 07.11.2012 11:19 • Verfasst in ABAP® für Anfänger
2
Antw.
6528
Views
Vorbelegung Suchhilfe
von sap_newby » 30.10.2007 16:23 • Verfasst in ABAP® Core
2
Antw.
1840
Views
Vorbelegung Steuerkennzeichen
von Gast » 14.09.2005 10:04 • Verfasst in Financials
3
Antw.
10882
Views
Vorbelegung in Drop-Down-Liste
von torben » 22.11.2007 16:14 • Verfasst in Dialogprogrammierung
0
Antw.
1124
Views

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Regex in where
Gestern von tar 8 / 393
Daten an Tabelle binden
vor 2 Tagen von Bright4.5 3 / 1658
Programm anlegen mit Vorlage
vor 3 Tagen von DeathAndPain 2 / 312
IT0024 Qualifikationen CP-ID
vor 3 Tagen von DeathAndPain 2 / 555

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Regex in where
Gestern von tar 8 / 393
Daten an Tabelle binden
vor 2 Tagen von Bright4.5 3 / 1658
Programm anlegen mit Vorlage
vor 3 Tagen von DeathAndPain 2 / 312
IT0024 Qualifikationen CP-ID
vor 3 Tagen von DeathAndPain 2 / 555

Unbeantwortete Forenbeiträge

BUSOBJEKT zu CMIS PHIO ermitteln
vor 3 Tagen von snooga87 1 / 246
aRFC im OO-Kontext
letzen Monat von ralf.wenzel 1 / 3429
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9978