次の状況を想像してください。営業部門で働いていて、ほぼ同じカテゴリー(金属切削工具など)の製品の150以上のポジションの申請書を受け取ります。
ほとんどの場合、すでに10,000以上のポジションがあるサプライヤからの数十の異なる価格表があり、もちろん、最も競争力のあるオファーをクライアントに提供したいと考えています。
非常に高い確率で、異なるサプライヤからの同じ製品のコストが異なる可能性があり、別の製品が1つのサプライヤからのみ可能であると仮定することは完全に論理的です。
クライアントに最高のオファーを提供するためには、いくつかの基準に従ってすべてのサプライヤーで各ポジションの検索を順番に開始する必要があります(例えば、最も安いオファーまたは在庫が適切な数量のオファーを見つける)。
ただし、1つの注意点があります。すべての価格表は異なる人々で構成されているため、ほぼ80%の場合、少なくとも少しは異なる方法で同じ製品に名前を付けます。
図1-ドリルされた名前のさまざまなバージョン
そのため、すべての価格表および顧客からのすべてのリクエストで、各製品に固有の一般的に受け入れられている識別子がない場合、VLOOKUP関数とLookupを使用するだけでは残念ながら機能しません。長くてあまり面白くない仕事をしなければなりません。それは1日、あるいは2つすべてを引きずるかもしれません。
開始する
ロシアの工場(金属切削工具のメーカー)の営業部門で働くようになったとき、そのようなアプリケーションは1日に複数回受信され、顧客からの応答が早くなるほど、販売が行われる可能性が高くなりました。
そして今、新参者として、1000以上の位置からのアプリケーションが11のフォントで印刷され、価格がペン(!)で署名されたA4シートのパックを私に持ってきました。 さらに、それらのそれぞれについて、付加価値税の有無にかかわらず示されます。
私が言われたように-最も難しいことはすでに私のために行われているので、電子フォームと請求書にエラーなしで1000以上の価格を転送するだけです。
確かに、「それはまったく難しくありません!」と思い、テンキーのキーを押し始めました。
25分間の単調な作業と、必ずしも明確ではない何か(この場合は女性の手書き)を見て、突然、「ここで何かが間違っています。 それは確かにそのようであってはならない!」
これがなぜそうならないのか、そして実際にはどうあるべきかを理解するために、プロセス全体を段階的に見てみることにし、同僚に尋ねた後、すべてがどのように機能するかについて学びました:
- アプリケーションは、通常.xls形式でメールで届きます
- 彼らはそれを印刷して、供給部門に渡します。
- そこで、素敵な女の子が注意深くそれを研究し、モニターで必要な価格を開き、それを取り始めます。
彼女はおおよそ何をどの価格リストで見ればどこで安くなるかを知っていますが、10年以上の経験を積んでいくうちに、最も人気のあるポジションについて何百もの価格さえも記憶できなかったでしょう。少なくとも年に一度は変わるからです。 - 数日後、時には数週間後、完成したテーブルはセールスマネージャー、つまり私のものになります。 そして、まさに私がやった仕事が始まります。
- 私は請求書を送り、喜んで顧客に電話してこれについて知らせ、彼は私に答えた。
「オファーに感謝しますが、2日前に別の会社から発行された請求書を既に支払いました。」
もっと悪い言葉は想像できません。 調達部門の同僚が話を聞かなかったのは良いことです。私は考えて、2人の目と手が一度にマゾラに磨耗しないようにこのプロセスを調整する方法を考え始めました。
次のアプリケーションは、すでに処理するために私に与えられました。 私は同僚と同じことをしましたが、スプレッドシートはもう印刷せず、画面の左半分で開き、必要な3つの価格表を右に配置しました。
最初の位置から始めて、3つの価格すべてでそれを見つけ、右側の列に最良価格のセルをコピーしました。 アクションをn回繰り返して、この作業を100倍速くする方法を知っていると感じました!
解決策
私は考えました-すべての価格表を1つの大きなテーブルに要約するだけで、リクエストアイテムの右側のセルにすぐに最良の価格が表示され、次にチェックして最良の価格でポジション自体の名前を表示します。
いいね! その夜、私は仕事に取り掛かりました。
全体の問題は、どの位置が適切で、どの位置が適切でないかをシステムに説明することでした...
この時点で、私はExcelで純粋な数式でシステムを作成した経験がありました。これは英語の衣服の名前を取得し、ロシア語の同じ名前に変換します。
カテゴリ、色、性別、ブランドなどを定義します。 そして、それは次のように機能します。名前に単語の帽子がある場合、ロシア語の名前に単語「hat」が表示され、黄色または叫び声があります(一部はそう書きました) -「イエローメンズスキードゥーハット」。
説明についても同じことが行われ、オンラインストアにアップロードされます。 そのため、数千の製品を90%の精度で処理しました。 これに基づいて、新しいシステムの作業を開始しました。
最初に必要だったのはカテゴリ定義です。たとえば、名前に「Drill」または「drill」が含まれている場合、カテゴリ「Drill」が割り当てられ、そのパラメータの定義が開始されます。
「ドリル」という単語が5つのオプション(ドリル、ドリル、ドリル、ドリル、ドリル)のいずれかで最も頻繁に記述されている場合、図1のように、誰もがこのドリルのパラメーターを能力の範囲内で記述しました。
次の最も困難なステップは、各ポジションのこれらの同じカテゴリを特定し、同じビューに表示することです。
正規表現を使用してこれを行うことにしました。 しかし、記録特性の最大変動をカバーする式をどのように書くのでしょうか? もちろん、1つの式は不可欠です。作業を高速化するには、特性を記述する最も頻繁に使用される構造を理解し、そもそもそれらをカバーする必要があります。
私は他の多くのカテゴリーでも同じことをしなければならないことを知っていたので、これをすぐに自動化し、製品説明で最も一般的に使用されるパターンを識別するシステムを採用することにしました。
これは別の記事になりますので、すぐに何が起こったのかを説明します。
1〜5個のデジタルパラメータを定義する10個の正規表現。
GOSTを定義する3つの式。
メタルグレードやシャンクの形状などの残りのパラメーターは、タイトルのテキストの内容の単純な条件によって決定されました。
結果は10個の特性です。
私はすぐに最初のテストをドリルで実施しましたが、うまくいきました! 価格表のすべてのアイテムの典型的な説明が記載された既製のリストを入手しました。
図2-典型的な説明
それから彼は要求に対して同じことをしました-彼は名前を標準形式に導きました。 今では、古き良きVPRを利用することだけが残っており、数秒後に、最良の価格と選択したポジションの元の名前を含む既製のリストができました。 さらに、サプライヤが誰であるか、在庫の数についての情報をすぐに入手しました。 これは、セールが発生した場合に便利です-どこでどの価格を手に入れたかを忘れません。
これは最初の一歩に過ぎませんでした。
各カテゴリには独自の特性があるため、各カテゴリには検索用の独自のテンプレートが必要です。 数日を費やした後、8つの主要なカテゴリのテンプレートを含むテーブルを作成し、約70%のポジションを正しく特定することができました。 しかし、このような精度でさえ、ほとんどのアプリケーションを同僚よりも速く処理できるだけでなく、すべての競合他社よりも高速に処理できました。
彼らが部門でこれを見るとすぐに、すべてのアプリケーションが開発のために私に注がれ、それが明らかになりました-私は誰とでもシステムを共有するか、私が逃げたいものに戻ります-私は単調な仕事で立ち往生します。
システムはExcelおよびマクロで動作し、100,000の位置が含まれていたため、毎日更新するのに約40分かかり、テーブルで動作することは不可能でした。 そのため、各コンピューターに同じファイルをインストールするために、各ユーザーがエラーを修正してシステムを個別に変更する必要があることは言うまでもなく、試してみることにしませんでした。 持ち運びに適した適切なオプションをすぐに探す必要があったため、Googleスプレッドシートを試すことにしました。 これは多くの問題を解決することになっています。
すべての価格表は、スケジュールに従ってクラウドで削減および更新され、すべてのユーザーがそれらにアクセスできます。
スマートフォンであっても、インターネットのある場所ならどこからでも仕事ができます。
すべてのユーザーがどこからでもすぐにシステムをアップグレードおよび修正できます。
最初は同じ式ですべてをやろうとしましたが、100ポジションのテーブルが3分間処理されると、式を放棄しなければならないことに気付き、Googleドキュメントスクリプト(ガス)を勉強し始めました-これは同じjsで、追加されたものだけですグーグルの機能。
すべてのロジックをガスに転送した後、次の問題が見つかりました。たとえば、ドリルの直径だけなど、要求に1つの特性のみが記述されている場合、ほとんどの価格は直径x長さを持ち、システムは最大パラメーターを決定するため、記述された特性の数は、要求内の特性の数と一致します。 これは重大な欠陥であり、修正する必要があります。
ここで再び正規表現を使用し、典型的な特性を持つ行に変換したクエリのすべての行を正規表現に変換しました。ここで、欠落している特性「*」は「。*?」に置き換えられました。 そして、システムが検索時にこの機能を見逃して次へ進むことを意味しました。
しかし、ここで私は新しい問題に直面しています-常に最も安価な位置を選択する必要はありません。時には、最長または最短のドリルを選択する必要があります。
ここでは、解決策がより簡単であることがわかりました-すべての行に沿って一節を作成し、テンプレートに適した位置を収集し、それらをすべての情報を示すドロップダウンリストに表示します。
ワークシートは次のようになります。
図3-用途と価格を一致させるためのシート
最初の列では、クエリ全体が表形式で2番目の量で挿入されます。 入力した説明は、自動的に3列目に分類されます。 4番目の列では、システムが見つけることができたすべての適切なポジションのドロップダウンリストが各行に追加されます。デフォルトでは、価格の昇順で並べ替えられますが、必要に応じて、倉庫またはサプライヤーの数量による並べ替えに切り替えることができます。
最後に残っているのは請求書です。 これを行うために、右側の列にテンプレートが生成され、1Cにすばやくロードできます。
図4-1Cでロードするためのテンプレート
テンプレートには包括的な情報が含まれています-位置、名前、数量、価格ごとの記事を持つサプライヤ。 ここから、必要に応じて、アカウントにリクエストをさまざまなサプライヤーに送信したり、1Cに入らずにアカウントを作成したりできます。
結果:
アプリケーションの処理が20倍速くなりました(100ポジションのアプリケーションの場合、1日ではなく30分)。最良の価格での選択がより効率的になりました。これは、誰かがすべての価格を並べ替えたり、すべてのサプライヤーに要求するのが面倒だという問題がないためです
今後の計画:
Googleエンジンでの大規模な計算の使用と翻訳を学び、大きなテーブルをビッグデータに変換し、ニューラルネットワークを作成してパターンをすばやく特定します。 だから誰かがコメントで彼らの使用に関する彼らの経験を共有してくれたらとても感謝します。
あとがき:
その過程で、すでにガスで働いている多くの人にとって、そしてちょうど行きたい人にとってさえも有用であり得る有用な機能が多数書かれました。 たとえば、GmailまたはGdriveへのリンクを介してファイルを自動的にダウンロードし、Googleテーブル形式に変換する、名前の単語でディスク上のファイルから文字列を検索およびコピーするなどです。 次の記事でそれらを公開します。
この記事に興味がある場合は、コード挿入を使用したプログラムの動作について詳しく説明します。
読んでくれてありがとう。