Donnerstag, 7. Juli 2022

Adobe Forms auf CAB


Problem:

Beim Druck von Adobe Forms Labeln auf CAB-Druckern mit dem Standard-Devicetype LB_CAB gelingt die Positionierung auf dem Label nicht bzw. verschiebt sich mit jedem Druck.


 


Voraussetzung: 

Es werden Labels auf einer Rolle eingesetzt, die bereits getrennt sind (kein Endlospapier).


 


Lösung: 

Der Standard-Devicetype druckt auf Endlospapier. Das kann wie folgt überprüft werden:


Transaktion SP01 -> Anzeige Druckauftrag -> Menü „Auftrag -> Partliste anzeigen“ -> Brillensymbol -> *.prn-Datei herunterladen


Die Datei beginnt mit


m m

J

S e;[…]


Um dieses Verhalten zu ändern, muss wie folgt vorgegangen werden:


  • Kopie der verwendeten XDC-Datei ändern
    • Report rspo0022 ausführen
    • XDC Admin wählen
    • XDC-Datei herunterladen (z.B. cab300.xdc)
    • Folgenden Wert suchen:
       <seq id="startPage">J&#xd;S e;
    • "S e"; ändern auf "S l1"; (kleines „L“ und Nr. 1
    • Speichern und in Report rspo0022 hochladen, z.B. als ZLB_CAB


  •  Neuen Device Type anlegen in SPAD (kopieren)


  • Neue XDC-Datei dem Report rspo0022 zuweisen 

Donnerstag, 5. Mai 2022

Off Topic: Mehrfachanmeldungen nachvollziehen

 Es gibt die Möglichkeit, Mehrfachanmeldungen im System zuzulassen.

Diese kann man sich bei der Systemvermessung anzeigen lassen oder man geht direkt über die Tabelle USR41_MLD

Montag, 1. November 2021

Transaktion als neuen Task aufrufen

Kürzlich stand ich vor der Aufgabe, eine Transaktion aus einer Transaktion heraus aufzurufen.
Dabei sollte die aktuelle Transaktion nicht verlassen werden und einige Parameter sollten vorgegeben werden.

Eine mögliche Lösung findet ihr hier anhand der VL06F.



DATA lt_using_tab TYPE TABLE OF bdcdata.
DATA 
lv_task_id(8).
     lv_task_id 
'tid001'.


"Parameter vorbelegen
      lt_using_tab 

     VALUE #dynbegin 'T' fnam 'VL06F' )
              
  program 'WS_MONITOR_OUTB_DEL_FREE' 
                  dynpro 1000 dynbegin 'X' )
              fnam 'BDC_CURSOR'    fval 'IF_VSTEL-LOW')
              (
 fnam 'BDC_OKCODE'    fval '=ONLI'       )
              
fnam 'IF_VSTEL-LOW'  fval '=1234'       )
              
fnam 'IF_LGPOS'      fval 'X'           )
              
fnam 'IT_LFART-LOW'  fval 'LF'           )
           
).
      
      "Transaktion aufrufen
      
CALL FUNCTION 'ABAP4_CALL_TRANSACTION' 

        STARTING NEW TASK lv_task_id
        
EXPORTING
          tcode                 
'VL06F'
          mode_val              
'E'
        
TABLES
          using_tab             
lt_using_tab
        
EXCEPTIONS
          communication_failure 
1
          system_failure        
2.

      
IF sy-subrc > 0.
        
MESSAGE 'RFC error' TYPE 'I' DISPLAY LIKE 'E'.
      ENDIF. 

Freitag, 26. Juni 2020

Chargenfindung im WM

Hat nichts mit ABAP zu tun, außer dass ich Stunden im Debugging verbracht habe.

Problem: Customizing für Chargenfindung im WM abgeschlossen, trotzdem werden keine Chargen gefunden.

Lösung in diesem Fall:
Neben dem „normalen“ Customizing für Chargen („Definieren des Chargensuchschemas „ -> „Suchschema Lagerverwaltung definieren“, „Suchschema Lagerverwaltung zuordnen“ etc.) müssen auch Konditionssätze gepflegt werden.



Transaktion: LS51, LS52, LS53

Besonderheit hier: Es müssen Selektionskriterien mitgegeben werden (Button anklicken), ansonsten ist der Haken „Selektion definiert“ inaktiv




Tabellen, über die ich im Debugging gestolpert bin, z.B. in den FuBas VB_BATCH_DETERMINATION, SD_COND_ACCESS,... : 

KOTH011(Konditionssätze)
KOTH10 (Konditionssätze)
KONDH (Feld CUOBJ_CH ist leer, wenn keine Selektionskriterien definiert sind, siehe oben)
 

Dienstag, 27. August 2019

Zertifikatsabfrage beim Aufruf einer ITS-Website deaktivieren

Eher was aus dem Bereich SAP-Basis, aber wichtig…

Folgendes Problem: Man ruft einen SAP-Service (z.B. OData) über den Browser auf und wird aufgefordert, ein Client-Zertifikat mitzugeben. Die Verbindung ist über SSL verschlüsselt.

Dieses Zertifikat ist für die Anmeldung am System gedacht. Beim Service wurde die Zertifikatsanmeldung selbst jedoch gar nicht vorgesehen, daher ist die Anfrage nach einem Zertifikat unsinnig.

Mit dem Profilparameter icm/HTTPS/verify_client könnte man steuern, ob ein Zertifikat grundsätzlich durch den Server angefragt werden soll oder nicht. Dieser Parameter steht jedoch bereits auf 0.

Im ICM-Log steht trotzdem noch folgender Eintrag:
in: args = "role=2 (SERVER), auth_type=1 (ASK_CLIENT_CERT)"


Die Lösung findet sich hier: Beim HTTPS-Service selbst wurde ein Parameter "VCLIENT" gesetzt. Über die SMICM muss der Parameter geändert/deaktiviert werden.

“Using the optional parameter VCLIENT you can specify whether the client should have an X.509 certificate when you use SSL. There are three certification levels (0-2):
  • 0 : No certification is required and the server does not ask for one.
  • 1 : The server asks the client to transfer a certificate. If the client does not send a certificate, authentication is carried out by another method, for example, basic authentication (default setting).
  • 2 : The client must transfer a valid certificate to the server, otherwise access is denied.
This server-specific value overrides the value that is set with parameter icm/HTTPS/verify_client .”


Samstag, 4. März 2017

Doppelte Einträge filtern mit value #( For Groups...

Das Beispiel in Kürze:


DATA lt_tknum TYPE TABLE OF tknum.
SELECT *
   
FROM vttp
  
UP TO 1000 ROWS
    
INTO TABLE @DATA(lt_vttp).

lt_tknum 
VALUE #FOR GROUPS grp OF <fs> IN lt_vttp GROUP BY <fs>-tknum WITHOUT MEMBERS grp ) ).


Das Ganze wäre vom Ergebnis her vergleichbar mit einem "select distinct tknum".
Nur zugegebenermaßen ein wenig komplizierter, zumindest für diesen Anwendungszweck....

Donnerstag, 25. Februar 2016

Select @data - Inline-Deklarationen für Open-SQL Statements

Ein weiteres schönes Beispiel, das Inline-Deklarationen nutzt, ist die Verwendung direkt in einem Select statement:

select single *
  from lagp
  into @data(ls_lagp)
  where lgnum = @iv_lgnum.

Wird das "@" in der where-Bedingung weggelassen kommt es übrigens zur unschönen Meldung:

Wenn neue OpenSQL Syntax verwendet wird, muss diese auch durchgängig verwendet werden. Dazu gehört das Escaping der Hostvariablen mittels @.