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