為替レートの読み込みの例による1Cでの外部Webサービスの使用

私は、habrで長引く1Cをあまり好まないことを知っています。 プラットフォーム8.3のリリース (Linuxのクライアントを使用)で、彼らはそれをもう少し愛し始めました。 ちなみに、最近と同じように、主要な1C開発の1つである実稼働エンタープライズ管理構成のインターフェースは完全に英語に翻訳されました。 なぜ私はここで1Cについて書いていないのかという質問に何度も出会った。 それらに対する答えは非常に明白です-すべての問題をすばやく議論し、何かを読むことができる多くの専門的なリソースがあります。



この記事がここで存続しないと信じるにはあらゆる理由がありますが、私はそれを危険にさらしています。



しばらくの間、1C 8.xではWebサービスを使用できるようになりました。1Cはサプライヤーまたはコンシューマーとして機能できます。 この記事では、CBRサーバーから為替レートを受け取る例を使用して、消費者として1Cを使用する方法を示します。



Webサービス



中央銀行には、為替レート、ニュース、為替レートのダイナミクスなど、毎日のデータを受信するためのWebサービスがあります。 サービスの説明は、 http://www.cbr.ru/scripts/Root.asp?Prtid = DWSにあります 。 このサービスのメソッドの1つに興味があります: GetCursOnDate(On_date) -特定の日付の為替レートを受け取ります。 1つの引数On_dateがメソッドに渡されます-これは、コースを受け取りたい日付です。 結果は、 ValuteCursOnDateテーブル(コース自体と関連情報)を含むXMLです。



構成



開発のために、1C 8.2(私の場合は8.2.15.317)を取得し、空の構成を作成しました。 WS-linkオブジェクトは外部Webサービスを使用するために提供されていますが、使用する必要はなく、コードからサービスに動的にアクセスできます。 最初のオプションを使用してから、2番目のオプションの使用方法を示します。 構成では、処理を作成し、「LoadingCoursesCurrencyCBR」という名前を付けました。 フォーム(管理)を追加し、基本にしました。 フォームに詳細を作成し、図のようにコントロールを配置しました。







ここで最も重要なことは、Webサービスの説明へのリンクを作成することです。 構成で、タイプWS-linkの新しいオブジェクトを追加します。 表示されるウィンドウで、WSDLへのリンクを指定します(この形式の説明は記事の範囲外です。Wikipediaで読むことができます ): http : //www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx? WSDL。







1Cは、受け取った説明に基づいて、Webサービスの視覚的なマップを自動的に作成します。 Webサービスの名前、使用可能な操作、使用されているデータ型を確認できます。







この設定はほぼ完了しました。アプリケーションをより美的に見やすくするために、いくつかのストロークを行う必要があります。 設定のルートを右クリックして、メニュー「デスクトップのコマンドインターフェイスを開く」を呼び出します。 表示されるウィンドウで、「CBR為替レートの読み込み」処理の反対側の「可視性」フラグのチェックを外す必要があります。 OKをクリックします。 次に、構成のルートを右クリックし、メニュー「デスクトップのワークスペースを開く」を呼び出します。ここで、図のように設定を行います。







これらの設定により、1C Enterpriseモードでデスクトップ(1Cプログラムのデスクトップ)に処理フォームを直接表示できます。



プログラミング



現在、処理の意味を入力する必要があります。為替レートを受け取り、フォームのテーブルに表示します。 フォーム編集モードでは、新しいフォームコマンドを追加する必要があります。それをLoadCurrenciesと呼びましょう。 このコマンドは、フォームにあるボタンに関連付ける必要があります。 チームのアクションに次のコードを入力します(著者のメモ:ハブには1Cコードのハイライトがありますが、正しく機能していません):



&  ()   ()  ("   !", .); ; ; .(); (); 
      
      





ここでは、最初に日付が入力されているかどうかがチェックされます(入力されていない場合は、ユーザーに通知し、それ以外は何もしません)。 次に、フォームにあるテーブルがクリアされ、DownloadCoursesCurrency()プロシージャが呼び出され、日付が転送されます。



プロシージャコードDownloadCoursesCurrency()、説明はコードのコメントに記載されています。



  () //      -, //    URI  ,  ,  .  = WS.CBR_DailyInfoWebServ.WS( "http://web.cbr.ru/", "DailyInfo", "DailyInfoSoap"); //  ,     GetCursOnDate. WS = .XDTO..( "http://web.cbr.ru/").("GetCursOnDate"); //         On_Date. WS = .XDTO.(WS); WS.On_Date = ; //  -,     .  = .GetCursOnDate(WS); //  ValuteCursOnDate,    //      (   ).     .GetCursOnDateResult.diffgram.ValuteData.ValuteCursOnDate   = .(); . = .Vname; . = .Vnom; . = .Vcode; . = .VChCode; . = .Vcurs; ; 
      
      





これで、データベース構成(F7)を更新し、1C Enterprise(F5)を実行できます。 すべてが正しく行われた場合、次の図のようなウィンドウが表示されます。







結果を確認するには、為替レートを取得する日付を入力し、[通貨のダウンロード]ボタンをクリックする必要があります。 リクエストが成功した場合、フォーム上のテーブルにコース値が入力されます。







最後に、外部Webサービスに動的にアクセスする方法、つまりWS-linkオブジェクトを追加しない方法を示します。 したがって、このようなWebサービスは、構成に縛られることなく外部処理から使用できます。



DownloadCoursesCurrency()行の手順で



  = WS.CBR_DailyInfoWebServ.WS("http://web.cbr.ru/", "DailyInfo", "DailyInfoSoap");
      
      





次の2行で置き換える必要があります



  =  WS("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL");  =  WS(, "http://web.cbr.ru/", "DailyInfo", "DailyInfoSoap");
      
      





最初に、WSDLからWebサービスのいわゆる定義を作成します。 次に、プロキシを作成してアクセスします。



ご覧のとおり、1Cの外部Webサービスの使用は一般的に非常に簡単です(ただし、私を含む型の定義を理解するのは多少困難です)。



この出版物がここで応答を見つけた場合、あなたが話すことができるいくつかのトピックがあります。



リンクを使用して、設定例とサンプル(cf-file)をダウンロードできます。



All Articles