サイトを1Cに統合するだけでは不十分です。(c)民芸。
この投稿の目的は、トピックに関するすべての情報を人間の言語で提示することです。
1Cでのサイト統合-Bitrix:サイト管理と1Cは、質問と問題の無尽蔵の情報源です。Bitrixのアイデアのサイトには対応するセクションに16ページあり、フォーラムには23,000を超えるメッセージがあります。Bitrixテクニカルサポートに連絡するという形で、「Exchangewith1C」という別のタイプのリクエストもあります。
1CとBitrix上のサイトの統合は、箱から出してすぐに機能するはずだと考えられています。最も単純な機能は、実際には1〜2時間で起動できます。ただし、交換の完了に10時間または100時間を費やすことができます。
サイト交換と1Cの改良は、すでに「エキスパート」レベルの魔法であり、ひげを生やした経験豊富な開発者でさえ恐ろしいものです。この記事では、これら2つのモンスター間のデータ交換がどのように行われるか、そしてこの交換の可能性をどのように拡大できるかについて説明します。この記事には、交換に関する多くの技術的な詳細が含まれており、主に主題を理解したいプログラマーに役立ちます。
この記事では、2つのITシステム間の交換の一般的な理論と、1Cと1C-Bitrix上のサイト間の2つの標準的な交換、つまり商品の交換と参考書の交換について検討します。
少し理論
— IT-. . , () ,
= (, XML, YML, JSON, CSV).
= (, HTTP, SIP, SMTP, FTP).
= . - UML Activity.
:
( FTP, CSV);
( HTTP, XML);
. ( HTTP, YML).
3 :
.
«» («») «» («»). , , . , 1 , . , .
. «1» — , - « 1», «1:» (, «1: » «1:ERP ») . - . . 1-: — «».
— .
— .
— .
1 — .
— .
— .
1
« » ( ) 4 :
1 ( «catalog»);
1 ( «reference»);
/ 1 ( «sale»);
( «sale»):
1 ;
1.
1 HTTP, . .. 1 , «» , ( POST GET) . 1 ( ). « 1 1-».
1 — , — . 1. 1 , 1 .
. 1 ( ).
.
— 1. «success», , «progress», «error» «failure», . ( ).
— CommerceML 2 . XML, , , , , (+ ).
, — HTTP. ( ) . ,
|
|
||
GET-: |
type=< > |
|
mode=checkauth |
||
Basic access : |
1 |
|
Basic access : |
1 |
|
|
|
||
: |
success < Cookie > < Cookie > sessid=<ID > <1>=<1> <2>=<2> ... |
|
: |
failure < > |
|
1 Basic access. «success», Cookie ( ), id ( type — ).
|
|
. . |
|
. . |
|
. |
1 php- : COption::SetOptionString("catalog", "DEFAULT_SKIP_SOURCE_CHECK", "Y"); COption::SetOptionString("sale", "secure_1c_exchange", "N"); |
. |
iblock . |
. , BX_SESSION_ID_CHANGE: define('BX_SESSION_ID_CHANGE', false); |
|
- , 10 . . . |
- |
|
|
||
GET-: |
type=< > |
|
mode=init |
||
sessid=<ID > |
||
Cookie: |
< Cookie >=< Cookie > |
|
|
|
||
: |
zip=<yes|no> file_limit=<> |
|
1 . « 1» .
|
|
|
|
zip |
zip-. yes — 1 , . |
yes no |
file_limit |
HTTP-. 1 , . |
>= 0 |
, 1 . «zip=yes», zip-. . .
|
|
|
. . /upload/1c_catalog/. |
(1 -> )
(type=catalog) :
;
UF- ;
;
SKU;
;
;
;
();
;
.
1 XML-, . 1 4 :
import_ — , , .
offers_ — SKU.
prices_ — .
rests_ — .
timestamp ( ). 1 timestamp .
1. ()
|
|
||
GET-: |
type=catalog |
|
mode=file |
||
sessid=<ID > |
||
filename=< > |
||
POST: |
|
|
Cookie: |
< Cookie>=< Cookie> |
|
|
|
||
: |
success |
|
: |
failure < > |
|
. file_limit (. ) POST-. , . GET- filename . , 1 .
|
|
HTTP |
1. |
< > |
apache, . |
< > |
apache, . |
2.
|
|
||
GET-: |
type=< > |
|
mode=import |
||
sessid=<ID > |
||
filename=< > |
||
Cookie: |
< Cookie>=< Cookie> |
|
|
|
||
: |
success |
|
: |
progress < > |
|
: |
failure < > |
|
— . . 11 , 1 . GET mode=import ( !), . $_SESSION[BX_CML2_IMPORT][NS]. , STEP .
2.1 (, )
|
|
||
: |
progress
|
|
: |
progress
|
|
: |
failure < > |
|
, 1 ZIP. , ( — /upload/1c_catalog/). ( STEP ).
|
|
|
PHP zip_open Zip . — . |
2.2
|
|
||
: |
progress
|
|
($_SESSION[BX_CML2_IMPORT][NS]) |
||
STEP |
0 |
|
XML ( , ) . b_xml_tree. b_xml_tree, , .
2.3
|
|
||
: |
progress
|
|
($_SESSION[BX_CML2_IMPORT][NS]) |
||
STEP |
1 |
|
b_xml_tree . PHP BX_XML_CREATE_INDEXES_IMMEDIATELY, . OnBeforeCatalogImport1C .
|
|
|
. |
2.4 ()
|
|
||
: |
progress <>% |
|
: |
progress
|
|
: |
failure < > |
|
($_SESSION[BX_CML2_IMPORT][NS]) |
||
STEP |
2 |
|
1 , b_xml_tree. , . « 1» .
|
|
|
|
2.5
|
|
||
: |
progress
|
|
: |
failure < > |
|
($_SESSION[BX_CML2_IMPORT][NS]) |
||
STEP |
3 |
|
b_xml_tree .
|
|
|
: , . |
2.6
|
|
||
: |
progress
|
|
: |
failure
< > |
|
($_SESSION[BX_CML2_IMPORT][NS]) |
||
STEP |
4 |
|
:
SKU
( CML2_: CML2_BAR_CODE, CML2_ARTICLE, CML2_ATTRIBUTES…)
UF-
-
: . 1 , .
|
|
« ». |
|
|
API, . |
( : <>) |
, XML . |
|
|
(xml_id: <>) |
|
. |
|
. . |
|
. 1 . |
|
2.7
|
|
||
: |
progress
|
|
: |
failure
< > |
|
($_SESSION[BX_CML2_IMPORT][NS]) |
||
STEP |
5 |
|
, XML . XML- XML_ID.
XML_ID , . , XML . , TIMESTAMP_X . — . .
( LEFT_MARGIN RIGHT_MARGIN).
, . .
« 1» (nginx).
1, «progress».
.
, . , XML- 20001 . 10000 .
№ / |
.. |
|
|
1 |
0 |
10000 |
|
2 |
10000 |
10000 |
|
3 |
20000 |
1 |
progress
|
, . 10000 ( TIMESTAMP_X) 10000 , -. 3- 1 .
2.8
|
|
||
: |
progress / |
|
: |
failure
< > |
|
($_SESSION[BX_CML2_IMPORT][NS]) |
||
STEP |
6 |
|
:
/ ( 1)
1 : «» ="true", .
2019 1 . , ( , ) , ( ). « 1». , .
LEFT_MARGIN RIGHT_MARGIN .
2.9 ()
|
|
||
: |
progress <> <> |
|
: |
progress
|
|
: |
failure < > |
|
($_SESSION[BX_CML2_IMPORT][NS]) |
||
STEP |
7 |
|
DONE |
, |
|
, XML . XML_ID.
XML_ID , . , XML .
, « », TIMESTAMP_X . .
TMP_ID. <>. — XML .
|
|
|
1 1 . 4.9, 4.2. |
2.10 / ()
|
|
||
: |
progress <> <> |
|
: |
progress / |
|
: |
failure < > |
|
($_SESSION[BX_CML2_IMPORT][NS]) |
||
STEP |
8 |
|
DONE |
, |
|
( 2.8 ) . “” XML ="true" ( ). , .
2019 .
2.11
|
|
||
: |
success
|
|
: |
failure < > |
|
($_SESSION[BX_CML2_IMPORT][NS]) |
||
STEP |
9 |
|
. , OnSuccessCatalogImport1C .
3.
|
|
||
GET-: |
type=< > |
|
mode=deactivate |
||
sessid=<ID > |
||
timestamp=< > |
||
Cookie: |
< Cookie>=< Cookie> |
|
|
|
||
: |
success
|
|
: |
failure
|
|
2019 , . timestamp, 1 — , .
, ( ):
, 1 . 1 .
4.
|
|
||
GET-: |
type=< > |
|
mode=complete |
||
sessid=<ID > |
||
Cookie: |
< Cookie>=< Cookie> |
|
|
|
||
: |
success
|
|
: |
failure < > |
|
. , catalog OnCompleteCatalogImport1C. OnSuccessCatalogImport1C , .
(1 -> )
(type=reference) HL-. .
— .
1. ()
2.
|
|
||
GET-: |
type=reference |
|
mode=import |
||
sessid=<ID > |
||
Cookie: |
< Cookie>=< Cookie> |
|
2.1 (, )
2.2
|
|
||
: |
progress . : <ID> |
|
: |
failure < > |
|
HL- ( ) UF-. catalog OnBeforeCatalogImportHL. , XML-. .
:
1 , ;
1 : , , , ;
, 1 , , , ;
: UF_NAME, UF_XML_ID, UF_VERSION, UF_DESCRIPTION.
|
|
< > |
1 |
< > |
1 |
XML. : < > |
1 |
.
|
|
|
10 |
XML |
20 |
XML |
110 |
XML <> |
120 |
XML <> |
210 |
UF- higloadblock |
220 |
XML <> <> |
230 |
XML <> <> |
240 |
<> <> ( : , , , ) |
250 |
UF- highload |
310 |
higloadblock |
320 |
XML <> <> |
330 |
XML <> <> <> |
2.3 ()
|
|
||
: |
success
|
|
: |
progress : <> |
|
: |
failure < > |
|
HL-.
, HL-, UF_VERSION <ID > + «#»
catalog OnSuccessCatalogImportHL. — .
.
XML.
<>
( ).
«b_» ( ).
<> . . , (sic!)
<> :
<>
XML ID
«UF_»
<>
UF-.
<>
4 : , , ,
<> :
<>
UF_XML_ID
<>
C <ID > + «#» UF_VERSION
<>
UF_NAME
UF_DESCRIPTION
«» YYYY-MM-DD HH:MI:SS.
«» true false ( ).
?
( ) 1 /bitrix/admin/1c_exchange.php. , « » /bitrix/modules/sale/admin/1c_exchange.php. , ( /bitrix/admin/1c_exchange_custom.php) 1.
, GET- ( -) . .
. , GET-, .
|
GET[type] |
|
|
|
, |
sale |
bitrix:sale.export.1c |
\CSaleOrderLoader |
/bitrix/modules/sale/general/order_loader.php |
, , , , |
catalog |
bitrix:catalog.import.1c |
\CIBlockCMLImport |
/bitrix/modules/iblock/classes/general/cml2.php |
|
|
reference |
bitrix:catalog.import.hl |
\CBitrixCatalogImportHl |
|
3 1:
, .
.
, .
:
. /bitrix/admin/1c_exchange_custom.php.
/bitrix/modules/sale/admin/1c_exchange.php.
(, bitrix:catalog.import.1c intervolga:catalog.import.1c) .
. (, \Intervolga\Custom\Exchange\Cml \CIBlockCMLImport ImportElements).
« » 1. , .
( ) , 1 - . highloadblock (, , ) .
, 1, , .
— . . , . , 2 1 .
1Cとの統合は、多くの場合、開発プロセスで最も難しいタスクです。深刻なプロジェクトでは、Bitrixで行われているプロセスを明確に理解する必要があります。
記事の著者:アナトリーエロフィーエフ。