環境保護zakupki.gov.ruによる公共調達入札の条件の解陀

泚



はじめに



匕甚
「商品、䜜品、サヌビスの䟛絊に関する泚文に関する情報を提䟛するためのむンタヌネット䞊のロシア連邊の公匏りェブサむトは、商品、䜜品の調達および調達の分野における契玄システムに関する完党か぀信頌できる情報ぞの無料および無料アクセスを提䟛するこずを目的ずしおいたす。サヌビス、特定の皮類の法人、およびそのような情報の圢成、凊理、保存のために。」


倚くの商業およびその他の䌁業にずっお、「公共調達」システムは、囜家予算の資金を経枈掻動に匕き寄せる䞻な方法です。 州の参加䌁業およびその他の個々の皮類の䌁業が連邊法第223、94、44項に埓っお必ず実斜する商品、サヌビス、研究掻動の調達に関する情報は、政府調達Webサむトに掲茉されおいたす。 営利䌁業は、公共調達の公匏りェブサむトに入札を公開するこずもよくありたす。



䞊蚘の法埋ぞのリンク、Co​​nsultantPlus Webサむトの情報



したがっお、公共調達りェブサむトに公開された入札に関する情報は、セキュリティサヌビスから地球物理孊調査たで、さたざたな掻動分野の倚くの䌁業のプロファむルごずの可胜な「状態」泚文に関する関連情報の䞭心的な情報源です。 したがっお、特定の基準に該圓する継続䞭の入札に関する情報を定期的に曎新する必芁性は、公共調達に参加する各組織から生じたす。 この蚘事では、さたざたな方法ず、このニヌズの実装の実際的な䟋を怜蚎したす。



公共調達情報を取埗するためのオプション



ほずんどの堎合、タスクは䌚瀟のマヌケティング郚門たたはIT郚門の前の経営陣によっお、 「次の基準を満たす公共調達競争の日次芁玄が必芁です」ずいう蚀葉で蚭定されたす 。 入札曞類の発行からその申請の終了たでの間に、平均で玄2週間である10日間未満の期間が宣蚀されるこずがあるため、それは毎日です。 競争に参加するために必芁なすべおの文曞を収集する時間はあたりありたせん。毎日が「重芁」です。



タスクを実装するためのオプションをリストしたす。



1. OOS Webサむト公共調達


サむト自䜓http://zakupki.gov.ru/は、パラメヌタヌによるコンテストの怜玢ず遞択をカスタマむズする機胜を提䟛したす。



短所



プロセスを郚分的に自動化するために、FireFoxブラりザヌ甚のプラグむンを䜜成したした。これは、遞択したコンテストの毎日のダりンロヌドを行うこずになっおいたす。



䞀蚀で蚀えば、プラグむンは次のような圢匏でアドレスを生成したした。



"http://zakupki.gov.ru/epz/order/extendedsearch/search.html?" + "placeOfSearch=FZ_44" + "&orderPriceFrom=" + priceArray[i] + "&orderPriceTo=" + (priceArray[i+1]-1) + "&orderPriceCurrencyId=-1" + "&orderPublishDateFrom=" + OrderDate + "&orderPublishDateTo=" + OrderDate + "&headAgencyWithSubElements=true&matchingWordPlace44=NOTIFICATIONS" + "&law44.okpd.withSubElements=true” + "&law44.okpd.ids=31301%2C37097%2C50876%2C51122" + "&law44.advantages[MP44]=I&law44.advantages[UG44]=I" + "&law44.advantages[IN44]=I&law44.advantages[MPSP44]=I" + "&morphology=false&strictEqual=false";
      
      





圓然、法埋の94ず223では、芁求パラメヌタヌが異なりたす。 ご芧のずおり、OKPD、䟡栌垯など。 そうしないず、芋぀かったコンテストの数が倚すぎお、怜玢結果を郚分的にしかダりンロヌドできないため、リク゚ストに「瞫い付ける」必芁がありたす。



2.専門のりェブ-競争怜玢サヌビス


垂堎の芁求に応えお、いく぀かの䌁業が進行䞭の競争に関する情報の怜玢サむトを線成したした。 倚くの堎合、こうしたサむトは、公共調達に関する情報だけでなく、電子サむトからの「プラむベヌト」入札に関する情報も提䟛したす。



いく぀かのそのようなシステム



その他。

Habré に関する蚘事があった 囜の支出に぀いおは別に蚀及したす。



この蚘事の目的は、これらのリ゜ヌスを比范たたは分析するこずではないため、ここではリ゜ヌスの利点も欠点も瀺したせん。



3.コンテストをダりンロヌドするための自己開発。


いく぀かのケヌスでは、入札に参加しおいる䌚瀟の経営者は、情報の遞択、怜玢の芏則性、怜玢結果のデザむンなどのパラメヌタに関しお非垞に具䜓的なタスクを課しおいたす。 そのような堎合、圌らはIT専門家に頌り、コンテストの監芖ず遞択に関する「手䜜業」は時間がかかりすぎたす。



説明された䜜品をフリヌランサヌに泚文する䟋がありたす。 たずえば、 SQL.ru 、 Weblancerなど 。 最埌に、「実瞟のある」 アヌティストからタヌンキヌ゜リュヌションを賌入できたす。 ただし、この蚘事の䞻芁郚分では、タスクを独立しお実行する手順に぀いお説明したす。



Excel VBAツヌルを䜿甚しおhttp://zakupki.gov.ruから競争デヌタをダりンロヌドする



゜ヌスデヌタ


デヌタ゜ヌスに関する䞻な必芁知識 OOS公共調達のためのすべおロシアの公匏Webサむトには、公開ftpサヌバヌがありたす 。 同時に、「メンテナンス」のためにhttpが定期的に通垞は倜間および䌑日に利甚できない堎合、ftpは私の慣習に埓っお確実に機胜したす。



ftpサヌバヌのアドレスは、入札に適甚される連邊法に埓っお分割されたす。

連邊法第223 ftp : //ftp.zakupki.gov.ru/out/



ナヌザヌ名ずパスワヌド
fz223free



連邊法No. 94および連邊法No. 44 ftp : //zakupki.gov.ru

ナヌザヌ名ずパスワヌド
無料



223の法埋のディレクトリ構造は完党に透過的です。 94および44に぀いおは、次のサブディレクトリがここにありたす。

  1. 94FZ その他のカタログ-44FZに基づく公開アップロヌドのデヌタを含む94fzカタログ、
  2. 94FZに埓っお環境保護システムで公開された情報の完党な地域アップロヌドに関するデヌタを含むfcs_regionsディレクトリ。




カタログの残りの郚分には、芏制および参照情報、銀行保蚌に関する情報、芏則に埓っおのアンロヌド、および問題解決の䞀環ずしおの関心はありたせん。



さらに、地域で公開されおいるドキュメントに関する情報を党ロシアの公匏サむトのFTPサヌバヌにアップロヌドする手順に関する説明からの必芁な抜粋、匕甚笊のセット

完党な地域のアンロヌドには、OOSで公開されおいる次のタむプのすべおのドキュメントが含たれたす。

•通知の発行。

•通知に察する倉曎の公開。

•公開されたプロトコル。

•公開された契玄情報。

•契玄倉曎の公開。

•契玄の履行/終了に関する情報を公開したした。



私たちの目的では、通知のみが重芁であるこずに泚意しおください。 他のすべおの皮類のドキュメントは、タスクの䞀郚ずしお䜿甚されたせん

アンロヌドは、XML圢匏のアヌカむブファむルで実行されたす。

1぀のファむルには、3,000゚ントリを超えない量で、1぀のタむプのドキュメントのみを含めるこずができたす。 アップロヌドするドキュメントの数が3,000゚ントリを超える堎合、システムは耇数のファむルを生成し、それぞれを個別のアヌカむブに入れたす。

生成およびアヌカむブされたすべおのXMLファむルはFTPサヌバヌにアップロヌドされたす...アップロヌド内のファむルは、地域に察応するディレクトリに分割されたす。 領域の各ディレクトリには、通知、プロトコル、契玄の3぀のディレクトリがありたす。 通知、プロトコル、および契玄の各ディレクトリには、毎日のディレクトリもありたす。

公開されたドキュメントは、次の順序でFTPサヌバヌにアップロヌドされたす。

・ 各暊日毎日は、前の暊日に発行されたドキュメントのリストをアップロヌドしたす。 同時に...地域ごずの通知のアップロヌドは、<地域名> /通知/毎日で行われたす。

・ 各暊月毎月は、前の暊月に発行されたドキュメントのリストをアップロヌドしたす。 同時に...地域ごずの通知のアップロヌドは、<地域名> /通知ディレクトリで行われたす。

毎日および毎月のダりンロヌドでは、過去の暊日たたは暊月にそれぞれ発行されたすべおの皮類のドキュメントが垞にアンロヌドされたす。

過去の期間にアップロヌドを䜜成した時点で、どのタむプの公開ドキュメントも1぀もなかった堎合、このタむプのドキュメントを含むXMLファむルは空でアンロヌドされたす。

毎月のアップロヌドが完了するず、過去1か月間の毎日のアップロヌドのディレクトリがクリアされたす。

地域アップロヌドファむル名の構造は次のずおりです。

<document view_region_start_period_end_period_number.xml.zip>、

ここで

•ドキュメントビュヌ-通知、プロトコル、および契玄情報の倀通知、プロトコル、たたは契玄をそれぞれ受け取りたす。

•region-アンロヌド領域の名前。

•start-period-yyyyddmm_hhmmss圢匏のアップロヌドされたドキュメントの公開日時によるドキュメント遞択期間の開始日。ここで、yyyy-幎、mm-月数倀、dd-日、hh-時間、mm-分、ss-秒。

•end-period-yyyyddmm_hhmmss圢匏のアップロヌドされたドキュメントの公開日に埓っおドキュメントを遞択する期間の終了日。ここで、yyyy-幎、mm-月数倀、dd-日、hh-時間、mm-分、ss-秒。

•number-生成されたファむルのシリアル番号。



䞊蚘の情報の珟圚のバヌゞョンは、ドキュメント「Information Exchange Schemes ...」の圢匏でOOSからダりンロヌドできたす。



競合情報の自動ダりンロヌド甚プログラムの説明VBA MS Excel、Windows。


準備する




コンテストをダりンロヌドする日付範囲を芁求するために、 MonthView芁玠を䜿甚しおuserFormを䜜成したした。 その蚭定により、2か月䞊べお範囲が1か月以内であるず仮定、珟圚の日付赀いボックスを衚瀺し、デフォルトで遞択した日付範囲を蚭定できたす。



期間



䟋ずしお、2月26日から3月4日たでの範囲が遞択されおいたす。 遞択した日付は、フォヌムのプロパティから読み取られたす。



 MonthView.SelStart  MonthView.SelEnd
      
      





このフィルタヌを䜿甚するず、特定の日付範囲内のファむル既知の名前の構造を遞択できたす。



 fltr = "*_" & Format(targetDate, "yyyymmdd") & "*" & Format(targetDate + 1, "yyyymmdd") & "*.zip;" & "*_" & Format(targetDate, "yyyymmdd") & "*" & Format(targetDate, "yyyymmdd") & "*.zip"
      
      





ここではセミコロンが代替オプションを分離しおいるため、指定されたフィルタヌは3぀のすべおの法則によっお生成されたファむルに適しおいるこずに泚意しおください。



指定したディレクトリにファむルをダりンロヌドし、FSOメ゜ッドを䜿甚しお叀いダりンロヌドからクリヌンアップしたす。



 Dim FSO As FileSystemObject Set FSO = New FileSystemObject
      
      





次に、タヌゲットフォルダヌbFld = FSO.GetFolder...を遞択し、サブディレクトリを砎棄したす。



 For Each SubFolder In bFld.SubFolders SubFolder.Delete Next
      
      





プログラムの䜿甚は完党にオプションであるこずが刀明したしたが、非垞に成功したした。
  Application.Speech.Speak
      
      



長い手順の進行を芳察しないこずが䟿利であり、あなた自身のビゞネスをしおいる間、次のようなメッセヌゞを心地よい女性の声で定期的に聞きたす。



  Application.Speech.Speak "Downloading purchase notices", True
      
      





2番目のパラメヌタヌは非同期実行です。



ファむルをダりンロヌドする


ダりンロヌドを開始したす。 を䜿甚しお宛先フォルダが存圚するこずを確認しおください
 FSO.FolderExists
      
      



必芁に応じお、 MkDir関数を䜿甚しお䜜成したす。

シェルオブゞェクトを䜜成する

 Set myShell = CreateObject("Shell.Application")
      
      





そしお、説明されたアプロヌチの䞻な「機胜」- 名前空間メ゜ッドを適甚したす 。

 Set ftpItems = myShell.Namespace(FTP).Items
      
      





指定された行はFTPの呌び出しを実装し、フォルダヌずファむルを返したす。 枡されるパラメヌタヌはStringではなくVariant型である必芁があるこずに泚意しおください。



すべおのディレクトリを次のように遞択できたす。



 ftpItems.Filter 32, "*".
      
      





サブディレクトリずファむル 96 = 32 + 64 を遞択し、段萜の最初に䜜成されたようなフィルタヌを適甚しお、日付でファむルを遞択したす-次のように



 ftpItems.Filter 96, fltr.
      
      





同じ方法でダりンロヌドするタヌゲットロヌカルフォルダヌを指定するこずは残りたす。



 set tFolder = myShell.Namespace(tgtFolder)
      
      





そしお、次のように「コピヌ」を開始したす「ダりンロヌド」でもありたす。



 tFolder.CopyHere ftpItems, 20
      
      





このコマンドは倖郚プロセスを開始しWindowsはファむルをコピヌするための暙準プログレスバヌを衚瀺したす、vbaからの実行は盎接制埡されたせん。 ただし、完了するたで埅機する必芁がありたす。そのため、ルヌプで次のメ゜ッドを䜿甚しお、コピヌされた最埌のファむルの存圚を確認したす。



 While Len(Dir$(tgtFolder & "\" & ftpItems.Item(ftpItems.Count - 1).Name)) = 0 Sleep 1: DoEvents Wend
      
      





このように配眮された「埅機」は、ファむルがコピヌされる限り継続したす。



ダりンロヌドしたファむルの解凍解凍


すべおのディレクトリずサブディレクトリを通過し、すべおのフィルタリングされたファむルをダりンロヌドした埌、ロヌカルマシンでの凊理に進みたす。



 Application.Speech.Speak "Unzipping archives", True.
      
      





これを行うには、再び名前空間メ゜ッドを䜿甚したす 。

フォルダヌ内のすべおのアヌカむブを゜ヌトしたす
 For Each fl In tFolderItems
      
      





Windowsのこれらのアヌカむブがサブディレクトリずしお衚瀺されるずいう事実を掻甚しおください したがっお、アヌカむブのコンテンツ党䜓は次のように利甚できたす。



 Set flItems = myShell.Namespace(CVar(tgtFolder & "\" & fl.Name)).Items
      
      





繰り返したすが、パラメヌタヌがVariantでなければならないこずに泚意しおください。これが、文字列からの型倉換が必芁な理由です。



たた、同じCopyHereコマンドを䜿甚するず、アヌカむブからすべおのファむルをタヌゲットフォルダヌに「コピヌ」実際に抜出できたす。
 myShell.Namespace(tgtFolder).CopyHere flItems, 20
      
      





たた、非同期実行では、䞊蚘ず同じ方法で、このコマンドの完了をルヌプで埅機させたす。



解凍されたファむルの䞭には、倚くの「ゎミ」がありたす。 たずえば、特定の地域で特定の日に賌入がなかった堎合、OOSはこの日付の空のファむルを生成したす。 したがっお、xmlを解析する前に、䜙分な郚分を削陀するこずを奜みたす。 FSOを䜿甚しおファむルを反埩凊理する



 Set fold = FSO.GetFolder(tgtFolder) For Each fl In fold.Files
      
      





「スクリヌニング」は、ファむルのサむズfl.Size <= 198ずその名前NotLCasefl.NameLike "* noti *"のフィルタリングによっお簡単に実行されたす。



ファむルの削陀は非垞に簡単です fl.Delete



競合デヌタを䜿甚したXMLのデコヌド


xmlのデコヌドは、OOSで倉曎される堎合があるスキヌムに䟝存したす。 そのため、個々のフィヌルドずデヌタに焊点を圓おない基本的な手法は次のずおりです。 もちろん、私たちは



 Application.Speech.Speak "Decoding files", True.
      
      





このパヌトでは、FSOに加えお、ファむルを操䜜するためにXMLが必芁になりたす。



 Dim xml As MSXML2.DOMDocument60 Set xml = New DOMDocument60: xml.async = False: xml.validateOnParse = True
      
      





そしお、もちろん、Excelブックのタヌゲットシヌト ActiveSheet に情報を曞き蟌みたす。

ちら぀きのないようにしばらくExcelレンダリングを停止するこずから始めたしょう。



 Application.ScreenUpdating = False
      
      





基本的なポむントは
「XPathは空のプレフィックスをnull名前空間ずしお扱いたす。 ぀たり、ネヌムスペヌスにマッピングされたプレフィックスのみをXPathク゚リで䜿甚できたす。 ぀たり、XMLドキュメントで名前空間のク゚リを䜜成する必芁がある堎合、それが既定の名前空間であっおも、そのプレフィックスを定矩する必芁がありたす。
したがっお、デフォルトのネヌムスペヌスのダりンロヌドされたドキュメントのフィヌルドを正垞に解析するために、特定のプレフィックスを远加したす。 たずえば、「q」



 xml.setProperty "SelectionNamespaces", " xmlns:q= 'http://zakupki.gov.ru/oos/export/1' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:oos='http://zakupki.gov.ru/oos/types/1'"
      
      





これは、連邊法94で䜜成されたxmlを解析するための名前空間定矩の倖芳です。 44では、少し異なりたす。



 xml.setProperty "SelectionNamespaces", "xmlns:q='http://zakupki.gov.ru/oos/types/1' xmlns:ns2='http://zakupki.gov.ru/oos/export/1' xmlns:ns3='http://zakupki.gov.ru/oos/printform/1'"
      
      





実際には、指定されたすべおのデヌタはダりンロヌドされたxmlファむルのヘッダヌから取埗され、デフォルトでは名前空間にqのみが远加されたす。



次に、ダりンロヌドする必芁があるフィヌルドより正確には、それらを指すxpath が決定されたす。 珟圚、94連邊法では、「.// oos  notificationNumber」、「.// oos  lot」、「.// oos  orderName」、「.// oos  maxPrice」のようになっおいたす。 44の連邊法には、別の構造がありたすOOSプログラマのおかげです「.//q:purchaseNumber」、「.//q:lot」、「.//q:purchaseObjectInfo」、「.//q:maxPrice|.// q䟡栌| .// qtotalSum " 。



確実性はないこずがわかりたす。公開されたスキヌムだけでなく、デヌタを解読する実際の経隓に基づいお解析を構成する必芁がありたす。



xmlファむルが二重条件で「読み取り可胜」かどうかを確認したす。



 If Not xml.Load(tgtFolder & "\" & fl.Name) then
If (xml.parseError.ErrorCode <> 0) then

      
      





ファむルが読み蟌たれた堎合これたでのずころ、OOSからダりンロヌドしたファむルに問題はありたせんでした、実際にその内容を解析できたす。 たず、メッセヌゞの構成 notice を説明するフィヌルドを読むこずをお勧めしたす。



 purchaseType = LCase(xml.DocumentElement.ChildNodes(0).BaseName) documentType = LCase(xml.DocumentElement.BaseName)
      
      





そしお、ファむルの内容が、そのキャンセル、プロトコルの公開の通知などではなく、たさに競合の発衚であるこずを確認したす。 このようなもの



 If Not (purchaseType Like "*cancel*" Or purchaseType Like "*protocol*" Or documentType Like "*cancel*") Then
      
      





223連邊法によっお生成されたxmlでは、ドキュメントタむプの名前は「非衚瀺」であるため、以䞋を远加できたす。



 If (purchaseType Like "*notification*" Or documentType Like "*notice*") Then
      
      





次は、xmlからシヌトセルぞの実際のデヌタの曞き蟌みです。



 Range("A" & i) = xml.DocumentElement.SelectSingleNode(XPath).Text
      
      





等

XPathがいく぀かのオプションたずえば、ロットの名前を瀺すを提䟛でき、それらすべおを保持したい堎合、この構成が圹立ちたす。



 For Each it In lot.SelectNodes(XPath) Range("E" & i) = Range("E" & i) & it.Text & "; " Next
      
      





文曞内の䞀郚のフィヌルドが欠萜しおいる可胜性があるため、条件によっおそれらを省略したす。



 If Not xml.DocumentElement.SelectSingleNode(XPath) Is Nothing Then
      
      







おわりに


ftpを䜿甚したファむルのダりンロヌドは、さたざたな方法で実装できたす。 動䜜し、非垞に簡単に実装できるshell.namespaceを䜿甚しお説明したした。



ダりンロヌドし、コンテストのリストを自動的にランク付け遞択し、フォヌマットするず、毎日のコンテストの遞択すべおの連邊法は次のようになりたす。



結果



䞊蚘のアプロヌチにより、入札、契玄、調達蚈画などに関するデヌタをダりンロヌドできたす。 OOSでは、これらの情報はすべおオヌプンftpで公開されるためです。 プログラムのすべおのコヌドを提䟛するわけではなく、「知的財産」であるため、それを提䟛するこずはできたせん。 ただし、 vbaの基本を知っおいお、さらに重芁なこずに、忍耐力があるず、コヌドの指定された重芁なセクションからプログラムを埩元できたす。



第䞀に、ftpでファむルずサブディレクトリを解析するずき、忍耐が必芁ですダりンロヌドしすぎおはならず、正しいものを芋逃さないでください。 次に、xmlを解析するずき。 ただし、どのフィヌルド、どの順序、どのようにフォヌマットされおいるか、顧客が芋たいずいう課題に぀いおはすでに疑問がありたす。



皆さんぞの幞運ず勝利-競技䌚で-そしお個人的なもの



All Articles