クエリやTr:SE16N、その他ALV形式の一覧機能を使用しているとき、こんなメッセージを見たことがあるのではないだろうか。
「一覧オブジェクトは大きすぎてエクスポートできません」(Msg番号 PC020)
ローカルに落としてエクセル上でデータを扱いたいというのに、「スプレッドシート」などのオプションで出力を試みる時、このようにデータが大きすぎて出力できないとなれば、途方に暮れてしまうだろう。
今回は、このようなメッセージが出た時の対処法について説明する。
「一覧オブジェクトは大きすぎてエクスポートできません」の対処法
SAPバージョンが上がるにつれて(というかそのリリース時点でのエクセルの上限値が上がるにつれて?)、エクスポート可能な容量も上がるようなのだが、バージョンが古いと縦方向にも横方向にも結構制限が厳しかったりする。
基本的にはデータ削減などの対処を行うこととなる。
対処① 項目数を減らす
王道の対応ではあるが、出力データの列数を減らす対応を検討する。
・Tr:SE16Nの選択画面で、メニューの「全選択解除(Shift+F6)」を押し、欲しい項目のみ「出力」のフラグを立てる。
何万行もデータがある時は、1項目減らすだけでも相当な削減量になるだろう。
また、会計伝票明細(BSEG)テーブルを始め、SAPの標準テーブルには、顧客要件により使っていない項目が多数あったりする。
そうしたものまで出力するのは無駄なので、予め削減するのが良い。
不要項目は予め項目レイアウトとしてバリアント保存しておけば便利だ。
(一覧で「レイアウト変更」⇒「レイアウト保存」)
レイアウト保存する時は、チームで共有するなどの目的が無い時は「ユーザ固有」フラグをチェックしておこう。
ユーザ固有ではない設定で、間違って「デフォルト」を選択してしまうと、全ユーザに対して適用されるデフォルト設定になってしまう。
対処② 対象データを絞る
これも王道の対応ではあるのだが、目当てのデータの出力行数を絞る。
年度で絞る、転記日で絞る、伝票タイプで絞る、削除フラグがあるものは除外するといった形で不要行を減らす。
これは何回かに分けて取得する際にも有効だ。
これは目当てのテーブルやデータ内容によるので、どのようなデータが存在するか詳しい技術者などに訊く方が良い。
対処③ スプレッドシート以外での保存
対処①・②のいずれも使えないとき、つまり列も行も削れないときはどうすれば良いか?
実はスプレッドシートよりも大量のデータをエクスポートできる方法がある。
Tr:SE16Nの結果一覧などのALV形式の画面にて、【エクスポート >Local file】を選択すると、以下のようなウインドウが出る。
ここで「無変換」を選ぶ。
無変換を選ぶと、ローカルにテキストファイル形式で保存することができる。
テキストファイルを開くと、このようなデータ一覧となっている。
「なんだ、タブ区切りじゃないじゃないか」とガッカリするかもしれないが、大丈夫。
エクセルにインポートすればちゃんとセルごとに項目を分割できる。
以下手順でエクセルにインポートする。
・テキストファイルインポートを選ぶ。
・「カンマやタブなどの区切り文字~」を選ぶ。
・区切り文字指定の「その他」の項目に、区切り文字である縦線を入力する。
・すると区切り文字ごとに項目を区切ってくれる。
・インポートして、不要な行を削ったら完成。
ちなみに、この方法には注意が必要な点がある。
5万行目(エクセル旧バージョンの上限)あたりで再度ヘッダ行が現れるので、それも消しておく必要がある。(一度ソートするのも手段)
知らずにフィルタをかけたりすると、うまく機能しないことがある。
人によっては他にも手段を持っていたり、ダウンロードツールを導入しているプロジェクトもあると思うが、だいたいは上記対処①~③の手段の組み合わせで、なんとか大量データを扱っているのではないだろうか。