1Cのオンラインストアからデータをインポートする:貿易管理

最近、友人から、小さなオンラインストアから1Cにデータをインポートする作業を手伝ってほしいと頼まれました:Trade Management 11。 主な仕事として、私はSharePointと.Netスタックを扱い、視野を広げて新しいことに挑戦するというアイデアが気に入りました。 タスクは次のように設定されました。

-1Cでの1回限りのデータダウンロードを行い、その後1Cからオンラインストアへの一方向の同期を行います。

-ストアデータはMS SQL Serverのデータベースに保存されます。

-SQL Serverからのデータエクスポートを実行し、最小限のコードで通常の手段を使用して1Cにインポートすることが望ましい。



この記事は、フォーラムと1Cのドキュメントの研究に基づいて書かれています。 1Cにデータをロードするプロセスを説明しています。 トピックが必要な場合は、1Cからオンラインストアへの同期を設定する方法をもう一度書きます。 私は1Cの経験がないように、プロセスを可能な限り詳細に記述して、人々が使用できるようにしました。 この典型的なタスクの時間を節約し、間違いを避けるのに役立つことを願っています。 この記事ではSQL Serverからのデータのエクスポートについて説明していますが、他のDBMSでも役立ちます。



1Cの標準配信:貿易管理には、スプレッドシートドキュメントからのデータのダウンロードの処理が含まれます(1Cの経験のない人のために、これはTableDocument.epfの1つのファイルDownloadDataであり、1Cディストリビューションのディスクにあります)。たとえば、MS Excelファイルからの1Cリファレンスブック。 この処理をインポートに使用します。 標準機能をそのまま使用する利点は、ソリューションの開発を節約できることです。 インターネットでは、この処理の使用例がいくつか見つかります。 この記事の主な違いは、商品の標準的な詳細だけでなく、自分で作成する追加の詳細のインポート手順の説明になります(以下を参照)。 そのような例は見つかりませんでしたが、実際のシナリオでは非常に人気があります。 たとえば、後で商品を1Cからオンラインストアに同期できるように、商品のIDをサイトに保存するための追加の商品が必要になります。 標準の詳細の1つでIdを記述することは可能です(他の目的に使用します)が、より困難ではありますが、より正確な方法で進みます。



データベーススキーマの説明から始めましょう。 製品とカテゴリのあるテーブルに興味があります。 各製品は複数のカテゴリに属する​​ことができ、各カテゴリには多くの製品を含めることができます。 さらに、各カテゴリにはいくつかのサブカテゴリを含めることができます。たとえば、「スポーツ用品」というカテゴリがあり、その下にさまざまなスポーツのカテゴリがあります。 簡単にするために、例に必要な属性のみを残します。 各ストアには製品属性のセットがありますが、ほとんどのプロパティには名前、価格、記事などのプロパティがあります。 したがって、次の3つのテーブルに制限します。

  1. 製品
  2. カテゴリー
  3. ProductCategoriesは、製品とカテゴリ間の多対多の中間テーブルです。


基本図は次のとおりです。





まず、データベースからファイルに商品をアップロードする必要があります。 これはSQL Management Studioで行うのは非常に簡単です。固定列幅のファイルにクエリを実行し、Excelでcsvファイルとして開くことができます。 また、Management Studioの結果とともにテーブルの結果をExcelに単にコピーすることもできます。 目的のリクエストを書き込むことは残っています。



オンラインストアでは、製品は複数のカテゴリに属する​​ことができますが、1Cでは、標準設定では、商品は1つのカテゴリ(アイテムのタイプ)に属します。 おそらく1Cでは、オプションで、命名法と命名法のタイプとの多対多の関係を構成できますが、標準構成に限定します。 したがって、製品ごとにエクスポートする場合、親カテゴリを持たない最初のカテゴリ(カテゴリ1レベル)を使用します。



クエリを作成するには、カテゴリテーブルの階層データを操作する必要があります。 このようなクエリに対して、SQL Serverには共通テーブル式と呼ばれる特別なメカニズムがありますが、ユーザー定義関数を使用して、よりシンプルで理解しやすい方法で説明します。 まず、再帰関数を定義して、指定されたcategoryIdの第1レベルのカテゴリーを選択します。



create function dbo.get_parent_category(@categoryId int) returns nvarchar(256) begin declare @parentId int set @parentId = (select ParentCategoryId from dbo.Category where CategoryId = @categoryId) if @parentId is null begin return @categoryId end return dbo.get_parent_category(@parentId) end
      
      







次に、特定の製品の第1レベルの最初のカテゴリの名前を返す関数:

 create function dbo.get_parent_product_category(@productId int) returns nvarchar(256) begin declare @categoryId int, @parentCategory int declare @categoryName nvarchar(256) set @categoryId = (select top 1 c.CategoryId from dbo.Product p inner join dbo.ProductCategory pc on p.ProductId = pc.ProductId inner join dbo.Category c on pc.CategoryId = c.CategoryId where p.ProductId = @productId) set @parentCategory = dbo.get_parent_category(@categoryId) return (select Name from dbo.Category where CategoryId = @parentCategory) end
      
      







輸出品に対する要求自体を記述することは残っています。 説明されている機能を使用すると、これは簡単です。

 select Name, Price, Articul, Vendor, dbo.get_parent_product_category(ProductId), ProductId from Product order by p.Name
      
      







SQLの専門家は、カスタム関数を使用せずに簡単なソリューションを提供できる場合がありますが、この例では、上記のソリューションで十分です。



そこで、データをExcelにエクスポートしました。 次のステップは1Cへのインポートです。 1Cの商品:貿易管理(UT)は、命名ディレクトリに保存されます。 まず、このディレクトリで、オンラインストアのデータベースに商品のIDを格納するための追加の属性を追加する必要があります(既に述べたように、これは1Cからオンラインストアへの商品のその後の同期に必要です)。 次のようにしてこれを行うことができます。編集モードで製品を開き、[追加情報]ボタン(フォーム上部の目立たないアイコン)を選択します。





開いたウィンドウで、[追加]> [一般プロパティ]> [選択]> [作成]を選択し、新しい属性の名前(「サイト上の製品のID」など)を入力します。





セットに新しい属性を追加したら、製品編集フォームを再発見する必要があります。 小道具編集フォームがフォームに表示されます。





表形式ドキュメントからデータをロードする処理を開始するには、通常のアプリケーションモードで1Cを開く必要があります(デフォルトでは、1C UT 11は管理されたアプリケーションモードで開きます)。 コンフィギュレーターで通常のアプリケーションモードに切り替えるには、[管理]> [ユーザー]>ユーザーを選択し、[その他]タブの[その他]タブの[実行モード]フィールドで、通常のアプリケーションをインストールします。 また、インフォベースを起動するための設定では、[メイン起動モード]フィールドで[自動]を選択する必要があります。



次に、通常のアプリケーションモードでインフォベースを開き、表形式ドキュメントからデータをロードする処理をロードします([ファイル]> [開く])。 開いたウィンドウで、ストアデータベースからエクスポートしたExcelファイルを開くことを選択します。





商品をインポートする前に、データを依存ディレクトリのメーカーとアイテムのタイプにインポートする必要があります。インポートしない場合、これらのフィールドは空のままになります。 製造元を一番上にインポートするには、ダウンロードモード=ディレクトリにダウンロード、ディレクトリビュー=製造元を選択します。 [設定]タブで、次の値を設定します。





列番号を指定し、検索フィールドを選択することが重要です(そうでない場合は複製が作成されます)。 [ダウンロード]をクリックすると、製造元がディレクトリにインポートされます。



類推により、ディレクトリの命名法の種類にデータをインポートします。 メーカーとは異なり、標準構成では、[設定]タブでのみ、販売登録オプションとアイテムタイプを設定する必要があります。





これで、商品のインポートを開始できます。 次の図に示すように設定を設定します。





上記で作成した追加の必要な「サイトの製品ID」にデータをロードするには、オブジェクトを記録するときに、Events>に次のハンドラーを追加します。

 Object.AdditionalRequirements.Clean();

プロパティ識別子=
種特性の計画、追加の詳細と情報、名前で検索(「サイト上の製品ID」、True);
         
 identifier OnSite = Object。追加詳細。追加();
サイトのIDプロパティ=プロパティID。
サイトのID値=セルのテキスト[6];
 Object.Record();




その後、商品をロードします。 すべてが正しく行われていれば、インポートは成功し、いずれかの製品で編集フォームを開くと、そのプロパティが表示されます。これはExcelと同じです。



あと1ステップだけです-価格のインポート。 このステップは、特定の構成と価格のタイプに大きく依存します。 一般的な手順のうち、次のものを区別できます。 処理フォームで、[ダウンロードモード] = [表形式のセクションにダウンロード] = [アイテムの価格を設定]を選択します。 次に、もう一度[リンク]をクリックして、新しいドキュメントを追加します。



作成後、それを選択し(ドキュメントがフォームリンクフィールドに表示されます)、[テーブルセクション]フィールドで[製品]を選択し、[設定]タブで次の設定を設定します。



ここでは、インポート時に価格を取得する列を指定することが重要です。 その後、価格をアップロードできます。 すでに書いたように、価格をダウンロードするプロセスは特定の構成に大きく依存しているため、ここでは詳しく説明しません。 詳細に興味がある場合は、次の記事をお勧めします。Excelの価格表から命名リファレンスブックにデータをロードする 。 また、命名法の価格を設定するには、作成されたドキュメントに同意する必要があるかもしれません。



したがって、1Cのオンラインストアのデータベースからデータをダウンロードし、後で会計で使用できるようにしました。 この記事が誰かが同様のタスクで時間とお金を節約するのに役立つことを願っています。 私は1Cでは動作しません。したがって、専門家がこの記事で不正確な点を見つけた場合は、それらを寛大に扱い、特定の応用問題を解決するためのガイドとしてのみ記事を検討してください。



All Articles