Batch Input zum Ändern eines Wertes

Getting started ... Alles für einen gelungenen Start.
14 Beiträge • Seite 1 von 1
14 Beiträge Seite 1 von 1

Batch Input zum Ändern eines Wertes

Beitrag von tabea* (ForumUser / 52 / 0 / 0 ) »
Hallo,

ist es möglich mittels Batch Input einen bestimmten Wert eines Infotyps unter bestimmten Bedingungen zu ändern?

Also wenn die Dienstart = xy, oder = ab, ... ist, dann soll der Abrechnungskreis = tt gesetzt werden.

Geht das mittels batch input?

Und wenn, kann mir dann vielleicht jemand auch sagen wie?

Ich habe noch nie mit batch input gearbeitet, und weiß ehrlich gesagt auch gar nicht wie ich das dann anstellen könnte.

Da ich aber diese Änderungen nicht hart auf der Datenbank programmieren möchte, würde ich es gerne so versuchen.

Kann mir da jemand helfen?
Das wäre traumhaft!

Viele Grüße
tabea

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


Beitrag von ewx (Top Expert / 4916 / 332 / 653 ) »
Hi Tabea*

nein, kannst du nicht. Du musst vorher den Infotypen lesen und dann den BI entsprechend aufbauen. Der BI ist sozusagen ein Makro, was stupide abläuft.

lg,

Batch Input zum Ändern eines Wertes

Beitrag von wreichelt (Top Expert / 1085 / 32 / 197 ) »
Hallo Tabea,

Du zeichnest Dir mit (glaube SM35) einfach den Batch-Input auf.
Das ABAP-Gerüst kann dann als Report übernommen werden.
Du ergänzt dann deine Abfrage wenn Dienstart = xx dann yy.

Eigentlich ne normale Vorgehensweise.
Gruß Wolfgang

Beitrag von tabea* (ForumUser / 52 / 0 / 0 ) »
Hallo,
ewx hat geschrieben:musst vorher den Infotypen lesen und dann den BI entsprechend aufbauen. Der BI ist sozusagen ein Makro, was stupide abläuft.
hmm... :roll: was heißt den BI entsprechend aufbauen? Sorry ich bin wirklich Anfänger was das angeht. :oops:
wreichelt hat geschrieben: Du zeichnest Dir mit (glaube SM35) einfach den Batch-Input auf.
Das ABAP-Gerüst kann dann als Report übernommen werden.
Du ergänzt dann deine Abfrage wenn Dienstart = xx dann yy.

Eigentlich ne normale Vorgehensweise.
Gruß Wolfgang
hä??????????????

Ich verstehe einfach nicht wie ich es machen kann, dass ich nur die Daten ändere und alle Daten zur Verfügung habe, d.h. wenn 10000 leute da sind, will ich für diese 10000 leute prüfen ob diese bestimmte Bedingung gegeben ist, und wenn dem so ist, diese eben mittels Batch-Input ändern, aber dafür muss ich erst mal eine "Mappe"??? erzeugen die alle Daten hat, und wie bekomme ich diese? Ja sicher kann ich alle Daten in eine interne Tabelle einlesen, dann verarbeiten und dann das Ergebnis mittels Batch-Input einspielen, aber ... geht das nicht einfacher, was z.B. ist wenn ich nur dieses eine Feld ändere, und alle anderen nicht, muss ich dann dennoch alle anderen mit auslesen, oder kann ich nur drei Daten pro Person auslesen, die Personalnummer, die Dienstart, den Abrechnungskreis, was passiert, dann, also wird der Datensatz dann abgegrenzt, oder der Wert "einfach" geändert?

Sorry, wenn meine Fragen gerade etwas weit gehen! Ich bin froh um jede Antwort!!!!


Ich habe heute ein bisschen gelesen und folgendes gefunden:

Mit dem Funktionsbaustein BDC_INSERT können Sie einer Batch-Input-Mappe eine Transaktion hinzufügen. Die Transaktion, die gestartet werden soll, geben Sie beim Aufruf von BDC_INSERT an. Die BDCDATA-Struktur muß alle Daten enthalten, die für die vollständige Verarbeitung der Transaktion erforderlich sind.

Nur sind meine Kenntnisse leider so gering, dass ich es noch nicht einmal richtig verstehe. Kann man mit diesen BDC_* ggf. auch BI-Mappen direkt erzeugen?

Viele Grüße
Tabea

Batch Input zum Ändern eines Wertes

Beitrag von wreichelt (Top Expert / 1085 / 32 / 197 ) »
Hallo Tabea,
viele Fragen, ich kann bestimmt nicht alles beantworten.
1. Die BTCI-Mappe wird für ein Beispiel ausgezeichnet und das
Programmgerüst abgespeichert.
2. Es werden nur die Daten gefüllt die geändert oder neu gespeichert
werden.

Ein Beispiel aus dem HR-Bereich: Eine neue Lohnart wird für den Infotyp 0015 erstellt:
a:) - Mitarbeiter/innen ermitteln
i
INITIALIZATION.
RP-SEL-EIN-AUS-INIT.

*____________________________________________________________*
START-OF-SELECTION.

CMAPPE = 'EINMALZahlung'. "Mappenname
CTCODE = 'PA30'. "und Transaktion

GET PERNR.
CLEAR: KZ, BETR, BETR10, BETR14.
*____________________________________________________________*
* Anrede/Org.Zuordnung
PROVIDE
* FROM P0002
BETWEEN PN-BEGDA AND PN-ENDDA.

MOVE-CORRESPONDING P0002 TO NAME.
CONDENSE NAME.
ENDPROVIDE.
*
PROVIDE
* FROM P0001
BETWEEN PN-BEGDA AND PN-ENDDA.

ENDPROVIDE.
CHECK P0001-PERSG = '1'
OR P0001-PERSG = '4'.
*
b:) BTCI-Routine aufrufen
PERFORM BDC_DATEN_GENERIEREN.

c:) Beispiel für den BTCI-Teil Infotyp 0015

*---------------------------------------------------------------------*
* FORM BDC_DATEN_GENERIEREN *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM BDC_DATEN_GENERIEREN.
REFRESH TBDC.
* Einstieg
PERFORM BDC_FILL_PROG USING 'SAPMP50A' '1000' 'X'.
PERFORM BDC_FILL_FELD USING 'RP50G-PERNR' PERNR-PERNR.
PERFORM BDC_FILL_FELD USING 'RP50G-CHOIC' '0015'.
PERFORM BDC_FILL_FELD USING 'RP50G-SUBTY' '7270'.

PERFORM BDC_FILL_FELD USING 'RP50G-TIMR6' 'X'.
PERFORM BDC_FILL_FELD USING 'RP50G-BEGDA' '01052002'.
* perform bdc_fill_feld using 'RP50G-ENDDA' '31129999'.
PERFORM BDC_FILL_FELD USING 'BDC_OKCODE' 'INS'.
* MP2000 Infotyp 15
PERFORM BDC_FILL_PROG USING 'MP001500' '2000' 'X'.
* perform bdc_fill_feld using 'p0015-anzhl' '1'.
WRITE GBETR TO XFELDB.
PERFORM BDC_FILL_FELD USING 'Q0015-betrg' '120,00'.
PERFORM BDC_FILL_FELD USING 'BDC_OKCODE' 'UPD'.
PERFORM MAPPE_FÜLLEN.
ENDFORM. " BDC_DATEN_GENERIEREN


Hoffe konnte ein bischen zur Verwirrung beitragen.
Gruß Wolfgang

Beitrag von ewx (Top Expert / 4916 / 332 / 653 ) »
Hi Tabea,

zeichne einfach mal eine Änderung mit der SM35 auf. Dann kannst du das sichern und ein Programm davon erzeugen.
dann kommt vielleicht die Erkenntnis, wie's geht...!

Re: Batch Input zum Ändern eines Wertes

Beitrag von tabea* (ForumUser / 52 / 0 / 0 ) »
Hallo Wolfgang,

wowe, :D

danke für die Antwort und Mühe! Du hast nicht zu meiner Verwirrung beigetragen, sondern im Gegenteil, morgen werde ich dann anhand dieses Beispiels ewx Rat befolgen, und einfach mal ausprobieren was passiert, wenn ich eine Änderung mit der SM35 aufzeichne.

Vielen vielen tausend Dank! :D

Ich wünsche noch einen ganz wundervollen Tag,
viele Grüße
Tabea

Re: Batch Input zum Ändern eines Wertes

Beitrag von tabea* (ForumUser / 52 / 0 / 0 ) »
Hallo,

ich habe nun mal ein Programm erzeugt, nur leider funktioniert es so wohl nicht. Kann mir jemand sagen warum?
Das Problem tritt auf, wenn ich die Batch-Input Mappe einspielen möchte, für ein oder 2 Datensätze klappt es, und dann kommen die unterschiedlichsten Meldungen, z.B. Gültigkeit muss gleich 31.12.1999 sein. Ich möchte aber alle Datensätze ändern.

Code: Alles auswählen.


REPORT z_hcm_dart_abkrs NO STANDARD PAGE HEADING LINE-SIZE 255. 

TABLES: pernr. 

INFOTYPES: 0001, 0231. 

INCLUDE bdcrecx1. 

START-OF-SELECTION. 

PERFORM open_group. 

GET pernr . 

PROVIDE pernr begda endda abkrs FROM p0001 dart udart FROM p0231 BETWEEN pn-begda AND pn-endda . 
IF ( p0231-dart = '22' AND p0001-abkrs <> '99' ). 
   WRITE: / pernr-pernr, p0001-begda, p0001-endda, p0001-abkrs, 
   p0231-dart. 
   p0001-abkrs = '99'. 

   PERFORM bdc_dynpro USING 'SAPMP50A' '1000'. 
   PERFORM bdc_field USING 'BDC_OKCODE' '=MOD'. 
   PERFORM bdc_field USING 'RP50G-PERNR' pernr-pernr. 
   PERFORM bdc_field USING 'BDC_CURSOR' 'T582S-ITEXT(02)'. 
*   PERFORM bdc_field using 'RP50G-SELEC(02)'  p0001-SELEC. 
*   PERFORM bdc_field using 'RP50G-TIMR6' * p0001-TIMR6. 
   PERFORM bdc_dynpro USING 'MP000100' '2000'. 
   PERFORM bdc_field USING 'BDC_CURSOR' 
   'P0001-ABKRS'. 
   PERFORM bdc_field USING 'BDC_OKCODE' '/00'. 
   PERFORM bdc_field USING 'P0001-BEGDA'  p0001-begda. 
   PERFORM bdc_field USING 'P0001-ENDDA'  p0001-endda. 
   PERFORM bdc_field USING 'P0001-BTRTL'  p0001-btrtl. 
   PERFORM bdc_field USING 'P0001-KOSTL'  p0001-kostl. 
   PERFORM bdc_field USING 'P0001-ABKRS'  p0001-abkrs. 
   PERFORM bdc_field USING 'P0001-SACHP' p0001-sachp. 
   PERFORM bdc_field USING 'P0231-DART'  p0231-dart. 
   PERFORM bdc_field USING 'P0231-UDART'  p0231-udart. 
   PERFORM bdc_field USING 'P0001-ZZVAR'  p0001-zzvar. 
   PERFORM bdc_dynpro USING 'MP000100' '2000'. 
   PERFORM bdc_field USING 'BDC_CURSOR'  'P0001-BEGDA'. 
   PERFORM bdc_field USING 'BDC_OKCODE'  '=UPD'. 
   PERFORM bdc_transaction USING 'PA30'. 
   WRITE: / pernr-pernr, p0001-begda, p0001-endda, p0001-abkrs, p0231-dart. 
   SKIP. 
   ULINE. 
   SKIP. 
   ENDIF. 
 ENDPROVIDE. 
END-OF-SELECTION.
PERFORM close_group.
Vielleicht sieht ja jemand von euch direkt was ich da falsch mache :roll:

Viele Grüße
Tabea

Beitrag von MrBojangles (Specialist / 367 / 3 / 30 ) »
Hallo Tabea,
bau mal zwischen den Befehlen

p0001-abkrs = '99'.
und
PERFORM bdc_dynpro USING 'SAPMP50A' '1000'.
einen Refresh bdcdata (ich glaub so heisst die int. Tabelle) ein. Sonst werden immer die vorangegangenen Transaktionen zur aktuellen mitgegeben.
Weiterhin viel Freude mit SAP...
Cheers
MrB.

Beitrag von tabea* (ForumUser / 52 / 0 / 0 ) »
Hallo MrB,
MrBojangles hat geschrieben: bau mal zwischen den Befehlen

p0001-abkrs = '99'.
und
PERFORM bdc_dynpro USING 'SAPMP50A' '1000'.
einen Refresh bdcdata (ich glaub so heisst die int. Tabelle) ein. Sonst werden immer die vorangegangenen Transaktionen zur aktuellen mitgegeben.
leider hat es nicht geklappt, ich bekomme weiterhin die Fehlermeldung
Gültigkeitsende muss gleich 31.12.9999 sein! :(
Kann es sein, dass ich die Datensätze zu einer Person, in der Mappe vertauschen muss? Es gibt ja pro Person mehrere Datensätze, da Abgrenzungen statt gefunden haben. In der Mappe sind sie vom kleinsten bis zum größten Datum sortiert. Wenn man die Transaktion aufruft, ist es aber so, dass zunächst der aktuelle Datensatz angezeigt wird, d.h. der mit dem größten Datum, ist es also möglich, dass ich die Datensätze umgekehrt sortieren muss?

Logisch finde ich das nicht, da ich denke, er muss doch einfach nur den passenden Datensatz herausfinden, hat doch alle Daten und Infos, wie ist es z.B. wenn nur einer der Datensätze die gespeichert sind geändert wird, geht das dann überhaupt? :roll:
MrBojangles hat geschrieben: Weiterhin viel Freude mit SAP...
Danke :D das habe ich auf jeden Fall!

Viele Grüße
Tabea

Beitrag von MrBojangles (Specialist / 367 / 3 / 30 ) »
Hallo Tabea,

ich bin leider kein 'HR-ler' und kenne mich mit der PA30 nicht aus. Den 'Refresh' (vgl. meine Antwort von gestern) musst Du in jedem Fall einbauen. Ich denke, Du findest den Fehler am leichtesten, wenn Du die erzeugte Mappe 'hell' abspielst. Dann siehst Du jeden einzelnen Dialogschritt und kannst eruieren, wo es hakt.
Nochmal: Ein Batch-Input ist im Prinzip nichts anderes als ein Tastaturmakro, d.h. es wird die PA30 quasi wie im Dialog ausgeführt, nur dass Du eben nicht händisch die Eingaben machst, sondern die Mappe.

Weiterhin viel Freude mit SAP...
Cheers
MrB.

Beitrag von tabea* (ForumUser / 52 / 0 / 0 ) »
Hallo,
MrBojangles hat geschrieben: ich bin leider kein 'HR-ler' und kenne mich mit der PA30 nicht aus. Den 'Refresh' (vgl. meine Antwort von gestern) musst Du in jedem Fall einbauen. Ich denke, Du findest den Fehler am leichtesten, wenn Du die erzeugte Mappe 'hell' abspielst. Dann siehst Du jeden einzelnen Dialogschritt und kannst eruieren, wo es hakt.
Nochmal: Ein Batch-Input ist im Prinzip nichts anderes als ein Tastaturmakro, d.h. es wird die PA30 quasi wie im Dialog ausgeführt, nur dass Du eben nicht händisch die Eingaben machst, sondern die Mappe.
ich habe den refresh auch eingebaut, wenn ich die Daten per hand ändere, gibt es keine Fehlermeldung, nur eine Warnung. Wenn ich dann die BI-Mappe hell abspiele passieren die Fehlermeldungen. Es knackt wegen des Datums. Ich habe nun die Daten umgekehrt sortiert, dann funktioniert zu jeder Person der erste Satz, dann beim zweiten Satz gibt es diese Fehlermeldung. Gültigkeitsende muss gleich 31.12.9999 sein. :(

Hat nicht jemand noch einen Tipp woran es liegen könnte?

Das wäre so schön, ich weiß nämlich definitiv nicht mehr weiter.

Viele Grüße und danke für all die Beiträge.
Tabea

Beitrag von olli-x (Specialist / 166 / 0 / 1 ) »
Hallo tabea,

probier mal folgendes:

Wenn ich das richtig interpretiere sind deine Datumswerte sind im internen Format.
Leg mal eine lokale Variable vom Typ C an, 10 Stellen lang und konvertiere mal:

z.B.
DATA: lv_sttag_char(10) TYPE c.

Dann konvertierst du:
WRITE p0001-begda to lv_sttag_char dd/mm/yyyy.

Dann übergibst du die Character Variable an die Form-Routine.
PERFORM ... USING ... lv_sttag_char

Vielleicht lieg ich jetzt auch total daneben :lol: - aber wir haben es schließlich warm heute...

Gruß,
Oliver

Beitrag von tabea* (ForumUser / 52 / 0 / 0 ) »
Hallo Oliver,
olli-x hat geschrieben: probier mal folgendes:
ja gerne, alles :-) ich bin froh über jeden Tipp!
olli-x hat geschrieben: Wenn ich das richtig interpretiere sind deine Datumswerte sind im internen Format.
Leg mal eine lokale Variable vom Typ C an, 10 Stellen lang und konvertiere mal:

z.B.
DATA: lv_sttag_char(10) TYPE c.

Dann konvertierst du:
WRITE p0001-begda to lv_sttag_char dd/mm/yyyy.

Dann übergibst du die Character Variable an die Form-Routine.
PERFORM ... USING ... lv_sttag_char

Vielleicht lieg ich jetzt auch total daneben :lol: - aber wir haben es schließlich warm heute...
ja sehr warm ist es ...
ja auf die Idee bin ich auch schon gekommen, mir wurde da am Anfang ein falsches Datumsformat beim Abspielen der Mappe angezeigt, ich habe es dann im System geändert, aber ich werde deinen Tipp dennoch mal probieren, vielleicht .... vielleicht liegt es ja daran, aber ich denke eher das es daran liegt, dass irgendwie nicht klar ist, also beim Abspielen der Mappe, das ich mich auf einen ganz bestimmten Datensatz beziehe, aber noch ein weitere existiert, und in dem Moment die Prüfung von SAP einen Fehler anzeigt, da ein Datensatz ein Datum >= sy-datum haben muss.

Aber ich werde jeden Tipp den ich hier bekomme ausprobieren, das muss doch hinzubekommen sein :D vielen Dank!!!
Nur leider - oder auch nicht leider - habe ich nun erst mal eine Woche frei :D d.h. ein positives, oder negatives feedback wird da etwas dauern.

Viele Grüße
Tabea

Seite 1 von 1

Vergleichbare Themen

2
Antw.
4899
Views
Batch input
von BMWi801 » 24.03.2018 11:16 • Verfasst in ABAP® für Anfänger
1
Antw.
4365
Views
Batch-Input
von dkast » 15.12.2020 14:43 • Verfasst in ABAP® für Anfänger
0
Antw.
4331
Views
Batch Input
von SwordMaster » 03.12.2007 07:39 • Verfasst in ABAP® Core
6
Antw.
3787
Views
SWIA und Batch Input
von knopfler32 » 05.05.2008 16:49 • Verfasst in ABAP® Core
2
Antw.
2020
Views
VD01 via Batch-Input
von fbo » 27.05.2008 16:27 • Verfasst in ABAP® Core

Aktuelle Forenbeiträge

BAPI zur ABSO?
vor einer Woche von DeathAndPain 2 / 1091
Materialstammerweiterung: Neuer Reiter
vor 3 Wochen von DeathAndPain gelöst 4 / 1801
Ermittlung der Arbeitstage (Mosid)
vor 3 Wochen von Radinator 11 / 47462
LSMW-Problem
vor 4 Wochen von DeathAndPain gelöst 6 / 5358

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

BAPI zur ABSO?
vor einer Woche von DeathAndPain 2 / 1091
Materialstammerweiterung: Neuer Reiter
vor 3 Wochen von DeathAndPain gelöst 4 / 1801
Ermittlung der Arbeitstage (Mosid)
vor 3 Wochen von Radinator 11 / 47462
LSMW-Problem
vor 4 Wochen von DeathAndPain gelöst 6 / 5358