1Bプログラマを支援するVBscript

最近、結果をファイルに出力する簡単なレポートを作成するための技術仕様を受け取りました。 いくつかの点を除いて、異常なことはありません:

  1. レポートの結果は、サードパーティの開発者からの特別なユーティリティを使用してスケジュールに従って送信する必要があります
  2. すべてが完全自動モードで動作するはずです。
  3. 構成を変更することはできません。


ポイント3でない場合は、おそらくかなり一般的な方法で実装したでしょう。レポートを構成に含め、特定の名前を持つ特別なユーザーが入力したときにアプリケーションモジュールにレポートの実行を追加しました。 したがって、サードパーティのユーティリティを起動する前に、この特別なユーザーのアカウントでコマンドラインから起動するように1Cを構成します。 しかし...





アイデアのほぼ全体の初期実装(OLEオートメーションを使用して1CアプリケーションCOMオブジェクトを接続し、外部レポートを開始する単純なVBScript)は、以下のコードのExecute()プロシージャに反映されます。 他のすべては、「美しく」、自分自身と他の人の生活を楽にするために衝動で書かれました。設定は変数を持つ別のブロックにまとめられ、実行エラーはコード、説明、エラーのソースとともに処理され、ログファイルに書き込まれます

On Error Resume Next



Dim ComApp, ExtProc, Path, Dest, LogName, ExtRep, ConnectionString



'

ConnectionString = "Srvr=APPSERVER;Ref=base"

'

Dest = "D:\Out\"

'

Path = LEFT(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, "\" ))

' -

LogName = Path & "errors.log"

'

ExtRep = Path & "extreport.erf"



Execute()

CheckErr()

Set ExtProc = Nothing

ComApp. Exit ( False )

Set ComApp = Nothing



Sub Execute()

Set Connector = CreateObject( "V81.ComConnector" )

Connector.Connect(ConnectionString) ' ,

Set ComApp = CreateObject( "V81.Application" )

ComApp.Connect(ConnectionString)

Set ExtProc = ComApp.ExternalReports.Create(ExtRep)

ExtProc.Path = Dest

ExtProc.Service = Path

ExtProc.Code = "42"

ExtProc.Exec()

End Sub



Sub CheckErr()

If Err.Number = 0 Then Exit Sub

Set FS = CreateObject( "Scripting.FileSystemObject" )

Set LogFile = FS.OpenTextFile(LogName, 8, True )

LogFile.WriteLine(Now & " (" & Err.Number & ") " & Err.Description & " - " & Err.Source)

LogFile.Close

Err.Clear

End Sub



* This source code was highlighted with Source Code Highlighter .








スクリプトを書いたとき、私には明らかではなかった2つの瞬間に遭遇しました。

1つ目は、通常のtry ... catchなしで例外を処理することです

これについて少し「苦しめられた」MSDNは、 On Error Resume Next命令を指定すると、エラーが発生した行の次の行に制御が移されることを発見しました。 また、プロシージャの本文でエラーが発生した場合、制御はプロシージャコールに続く行に転送されます。

したがって、すべてのメインコードをExecute()プロシージャに配置し、 CheckErr()プロシージャで例外をキャッチすることにしました。

2番目は、情報ベースがない場合のスクリプト実行の「フリーズ」です。

より正確には、ベースがない場合、COMアプリケーションは、ダイアログボックスにその存在に関するメッセージを表示し、ユーザーの反応を待ちます。 しかし、TORによると、ユーザーにはこれが表示されず、プロセスが「ハング」します...ここでは、ダイアログボックスを表示する代わりに、接続の問題の場合に例外をスローするCOMConnectorによって保存され、 Execute()コードの先頭にさらに2行が表示されました。



Set ExtProc = ComApp.ExternalReports.Create(ExtRep)は、英語の同義語を使用してExternalReportsマネージャー呼び出して、外部レポートのCOMオブジェクトのインスタンスを作成します。

次に、レポートパラメーターを初期化し、実行を開始します。



外部1Cレポートの作成はこのトピックの範囲外ですが、重要な注意事項が1つあります。オートメーションクライアントで使用できるようにするレポートの詳細、エクスポート関数、およびプロシージャは、英語で命名する必要があります。そうしないと、VBScriptからアクセスできません。



気付いた場合、データベース接続文字列にユーザー資格情報がありません。 接続を正常に行うには、Windows認証を持つユーザーが、スクリプトを実行するWindowsユーザーを使用してインフォベースに登録されている必要があります。 この方法のプラスは明らかだと思います。



スクリプト呼び出しと送信ユーティリティをcmd-fileに配置することは今も残っており、...目標は達成されています。すべてが機能し、すべてがToRに従っています。



All Articles