17 return \Bitrix\Sale\Exchange\EntityType::INVOICE;
20 protected static function load($id)
22 return \Bitrix\Crm\Invoice\Invoice::load($id);
27 return new \Bitrix\Crm\Invoice\Internals\InvoiceTable();
32 return new \Bitrix\Crm\Invoice\Internals\PaymentTable();
37 return new \Bitrix\Crm\Invoice\Internals\ShipmentTable();
42 return new \Bitrix\Crm\Invoice\Internals\BasketTable();
47 return new \Bitrix\Crm\Invoice\Internals\InvoiceChangeTable();
52 return new \Bitrix\Crm\Invoice\EntityMarker();
57 return \Bitrix\Crm\Invoice\PersonType::class;
64 list($originatorId, $productXmlId) = explode(
"#", $xml, 2);
68 $sales = CCrmExternalSaleHelper::PrepareListItems();
70 if(isset($sales[$originatorId]))
76 return parent::normalizeExternalCode($xml);
81 return new \Bitrix\Main\Type\DateTime(CDatabase::FormatDate($arOrder[
"CRM_INVOICE_INTERNALS_INVOICE_USER_TIMESTAMP_X"]));
86 if($arOrder[
"CRM_INVOICE_INTERNALS_INVOICE_USER_XML_ID"] <>
'')
92 $xmlId = static::updateEmptyUserXmlId($arOrder, $arProp);
121 return $typeEntityId;
128 $res = \Bitrix\Crm\Invoice\InvoiceStatus::getList([
'filter'=>[
'ID'=>$id]]);
155 static $xmlRootName =
"<?xml version=\"#version#\" encoding=\"#encoding#\"?>";
168 return \Bitrix\Sale\Exchange\EntityType::ORDER;
171 protected static function load($id)
176 $orderClass = $registry->getOrderClassName();
178 return $orderClass::load($id);
183 return new \Bitrix\Sale\Internals\OrderTable();
188 return new \Bitrix\Sale\Internals\PaymentTable();
193 return new \Bitrix\Sale\Internals\ShipmentTable();
198 return new \Bitrix\Sale\Internals\BasketTable();
203 return new \Bitrix\Sale\Internals\OrderChangeTable();
208 return new \Bitrix\Sale\EntityMarker();
213 return \Bitrix\Sale\PersonType::class;
218 return new \Bitrix\Main\Type\DateTime(CDatabase::FormatDate($arOrder[
"SALE_INTERNALS_ORDER_USER_TIMESTAMP_X"]));
223 if($arOrder[
"SALE_INTERNALS_ORDER_USER_XML_ID"] <>
'')
229 $xmlId = static::updateEmptyUserXmlId($arOrder, $arProp);
237 $xmlId =
htmlspecialcharsbx(mb_substr($arOrder[
"USER_ID"].
"#".$arProp[
"USER"][
"LOGIN"].
"#".$arProp[
"USER"][
"LAST_NAME"].
" ".$arProp[
"USER"][
"NAME"].
" ".$arProp[
"USER"][
"SECOND_NAME"], 0, 40));
266 return $typeEntityId;
280 $value = preg_replace(
'/<style[^>]*>.*?<\/style>/is',
'', $value);
281 $value = preg_replace(
'/<blockquote[^>]*>.*?<\/blockquote>/is',
'', $value);
282 $value = preg_replace(
'/<script[^>]*>.*?<\/script>/is',
'', $value);
284 return html_entity_decode(
286 preg_replace(
'/(<br[^>]*>)+/isu',
"\n", $value)
293 return intval($basketId) % self::DIVIDER_NUMBER_POSITION;
298 static::$lid = $value;
303 self::$xmlEncoding = $encoding;
308 return str_replace(
array(
"#version#",
"#encoding#"),
array(self::$xmlVersion,self::$xmlEncoding),self::$xmlRootName);
318 return self::$deliveryAdr;
343 return doubleval(str_replace(
" ",
"", str_replace(
",",
".", (!empty(self::$versionSchema) ? self::$versionSchema : self::DEFAULT_VERSION))));
351 static $cashBoxOneCId =
null;
353 if($cashBoxOneCId ===
null)
358 return $cashBoxOneCId;
369 $end_time = time() + $time_limit;
371 $end_time = time() + 365*24*3600;
378 if(intval($time_limit) > 0 && time() > $end_time )
386 return self::LAST_ORDER_PREFIX;
391 static $accountNumberShopPrefix =
null;
392 if($accountNumberShopPrefix ===
null)
393 $accountNumberShopPrefix = COption::GetOptionString(
"sale",
"1C_SALE_ACCOUNT_NUMBER_SHOP_PREFIX",
"");
395 return $accountNumberShopPrefix;
400 $paySystems =
array();
401 $dbPaySystem =
CSalePaySystem::GetList(Array(
"ID" =>
"ASC"), Array(
"ACTIVE" =>
"Y"),
false,
false, Array(
"ID",
"NAME",
"ACTIVE"));
402 while($arPaySystem = $dbPaySystem -> Fetch())
403 $paySystems[$arPaySystem[
"ID"]] = $arPaySystem[
"NAME"];
411 $dbDeliveryList = \Bitrix\Sale\Delivery\Services\Table::GetList();
412 while(
$service = $dbDeliveryList->fetch())
415 $delivery[$deliveryObj->GetId()] = ($deliveryObj->isProfile() ? $deliveryObj->getNameWithParent():$deliveryObj->getName());
423 if(CModule::IncludeModule(
"catalog"))
425 $dbList = CCatalogStore::GetList(
426 array(
"SORT" =>
"DESC",
"ID" =>
"ASC"),
427 array(
"ACTIVE" =>
"Y",
"ISSUING_CENTER" =>
"Y"),
430 array(
"ID",
"SORT",
"TITLE",
"ADDRESS",
"DESCRIPTION",
"PHONE",
"EMAIL",
"XML_ID")
432 while ($arStoreTmp = $dbList->Fetch())
434 if($arStoreTmp[
"XML_ID"] ==
'')
435 $arStoreTmp[
"XML_ID"] = $arStoreTmp[
"ID"];
436 $arStore[$arStoreTmp[
"ID"]] = $arStoreTmp;
444 if(floatval($arOrder[
"PRICE_DELIVERY"])<=0)
451 if(self::getVersionSchema() > self::DEFAULT_VERSION)
483 $deliveryTax =
roundEx((($arOrder[
"PRICE_DELIVERY"] / ($vatRate+1)) * $vatRate), 2);
484 if(self::$orderTax > $vatSum && self::$orderTax ==
roundEx($vatSum + $deliveryTax, 2))
509 $arMeasures =
array();
510 if(CModule::IncludeModule(
"catalog"))
512 $dbList = CCatalogMeasure::getList(
array(),
array(),
false,
false,
array(
"CODE",
"MEASURE_TITLE",
"SYMBOL_LETTER_INTL",
"SYMBOL_RUS"));
513 while($arList = $dbList->Fetch())
515 $arMeasures[$arList[
"CODE"]] = $arList;
518 if(empty($arMeasures))
526 self::$measures = $arMeasures;
540 $dbExport = $export->GetList();
541 while($arExport = $dbExport->Fetch())
543 $arAgent[$arExport[
"PERSON_TYPE_ID"]] = unserialize($arExport[
"VARS"], [
'allowed_classes' =>
false]);
551 $arProp[
"ORDER"] = $arOrder;
553 if (intval($arOrder[
"USER_ID"]) > 0)
555 $dbUser = CUser::GetByID($arOrder[
"USER_ID"]);
556 if ($arUser = $dbUser->Fetch())
557 $arProp[
"USER"] = $arUser;
562 $arProp[
"CRM"] =
array();
563 $companyID = isset($arOrder[
"UF_COMPANY_ID"]) ? intval($arOrder[
"UF_COMPANY_ID"]) : 0;
564 $contactID = isset($arOrder[
"UF_CONTACT_ID"]) ? intval($arOrder[
"UF_CONTACT_ID"]) : 0;
567 $arProp[
"CRM"][
"CLIENT_ID"] =
"CRMCO".$companyID;
571 $arProp[
"CRM"][
"CLIENT_ID"] =
"CRMC".$contactID;
581 if ($bCrmModuleIncluded)
585 $arCompanyFilter =
array(
'=ID' => $companyID);
586 $dbCompany = CCrmCompany::GetListEx(
587 array(), $arCompanyFilter,
false,
array(
"nTopCount" => 1),
590 $arCompany = $dbCompany->Fetch();
591 unset($dbCompany, $arCompanyFilter);
592 if (is_array($arCompany))
594 if (isset($arCompany[
"TITLE"]))
595 $clientInfo[
"NAME"] = $arCompany[
"TITLE"];
599 else if ($contactID > 0)
601 $arContactFilter =
array(
'=ID' => $contactID);
602 $dbContact = CCrmContact::GetListEx(
603 array(), $arContactFilter,
false,
array(
"nTopCount" => 1),
604 array(
"NAME",
"LAST_NAME",
"SECOND_NAME")
606 $arContact = $dbContact->Fetch();
607 unset($dbContact, $arContactFilter);
608 if (is_array($arContact))
610 if (isset($arContact[
"NAME"]))
611 $clientInfo[
"NAME"] = $arContact[
"NAME"];
612 if (isset($arContact[
"LAST_NAME"]))
613 $clientInfo[
"LAST_NAME"] = $arContact[
"LAST_NAME"];
614 if (isset($arContact[
"SECOND_NAME"]))
615 $clientInfo[
"SECOND_NAME"] = $arContact[
"SECOND_NAME"];
621 $arProp[
"CRM"][
"CLIENT"] = $clientInfo;
625 if(intval($arOrder[
"PAY_SYSTEM_ID"]) > 0)
626 $arProp[
"ORDER"][
"PAY_SYSTEM_NAME"] = $paySystems[$arOrder[
"PAY_SYSTEM_ID"]];
627 if($arOrder[
"DELIVERY_ID"] <>
'')
628 $arProp[
"ORDER"][
"DELIVERY_NAME"] = $delivery[$arOrder[
"DELIVERY_ID"]];
631 $propertyCollection =
$order->getPropertyCollection();
632 $locationStreetPropertyValue =
'';
633 foreach ($propertyCollection as $prop)
635 if($prop->getType() ==
'Y/N')
637 if ($prop->getValue() ==
"Y")
638 $arProp[
"PROPERTY"][$prop->getField(
'ORDER_PROPS_ID')] =
"true";
640 $arProp[
"PROPERTY"][$prop->getField(
'ORDER_PROPS_ID')] =
"false";
642 elseif ($prop->getType() ==
'STRING')
644 $arProp[
"PROPERTY"][$prop->getField(
'ORDER_PROPS_ID')] = $prop->getValue();
646 elseif ($prop->getType() ==
'ENUM')
648 if($prop->getProperty()[
'MULTIPLE'] ==
'Y')
660 foreach($curVal as $vm)
663 $arProp[
"PROPERTY"][$prop->getField(
'ORDER_PROPS_ID')] .=
", ".$arVal[
"NAME"];
665 $arProp[
"PROPERTY"][$prop->getField(
'ORDER_PROPS_ID')] = mb_substr($arProp[
"PROPERTY"][$prop->getField(
'ORDER_PROPS_ID')], 2);
670 $arProp[
"PROPERTY"][$prop->getField(
'ORDER_PROPS_ID')] =
$arVal[
"NAME"];
673 elseif ($prop->getType() ==
"LOCATION")
684 $types = \Bitrix\Sale\Location\Admin\TypeHelper::getTypeCodeIdMapCached();
686 while($item =
$res->fetch())
689 if($types[
'ID2CODE'][$item[
'TYPE_ID']] ==
'STREET')
690 $locationStreetPropertyValue = $item[
'LNAME'];
691 $path[] = $item[
'LNAME'];
694 $locationString = implode(
' - ',
$path);
698 $locationString =
'';
702 $locationString =
'';
705 $locationString = (
$arVal[
"COUNTRY_NAME"].(($arVal[
"COUNTRY_NAME"] ==
'' ||
$arVal[
"REGION_NAME"] ==
'') ?
"" :
" - ").$arVal[
"REGION_NAME"].(($arVal[
"COUNTRY_NAME"] ==
'' ||
$arVal[
"CITY_NAME"] ==
'') ?
"" :
" - ").$arVal[
"CITY_NAME"]);
707 $arProp[
"PROPERTY"][$prop->getField(
'ORDER_PROPS_ID')] = $locationString;
709 $arProp[
"PROPERTY"][$prop->getField(
'ORDER_PROPS_ID').
"_CITY"] =
$arVal[
"CITY_NAME"];
710 $arProp[
"PROPERTY"][$prop->getField(
'ORDER_PROPS_ID').
"_COUNTRY"] =
$arVal[
"COUNTRY_NAME"];
711 $arProp[
"PROPERTY"][$prop->getField(
'ORDER_PROPS_ID').
"_REGION"] =
$arVal[
"REGION_NAME"];
715 $arProp[
"PROPERTY"][$prop->getField(
'ORDER_PROPS_ID')] = $prop->getValue();
723 public static function prepareSalePropertyRekv(\
Bitrix\Sale\IBusinessValueProvider
$entity, $agentParams, $arProp, $locationStreetPropertyValue =
'')
728 $collection =
$entity->getCollection();
729 $order = $collection->getOrder();
736 $personTypeId =
$order->getPersonTypeId();
738 $personTypes = BusinessValue::getPersonTypes();
740 if (! $personType = $personTypes[$personTypeId])
742 self::logError(
$order->getId(),
'Undefined DOMAIN for person type id "'.$personTypeId.
'"');
746 $systemCodes1C = array_flip(self::$systemCodes[$personType[
'DOMAIN']]);
748 foreach($agentParams as
$k => $v)
750 if(mb_strpos(
$k,
"REKV_") !==
false)
754 $agent[
"REKV"][
$k] = $v;
759 $agent[
"REKV"][
$k] = $v[
"VALUE"];
765 $agent[
"REKV"][
$k] = $arProp[$v[
"TYPE"]][$v[
"VALUE"]];
769 if (! ($codeKey = $systemCodes1C[
$k])
770 && mb_substr(
$k, 0, 5) ===
'REKV_'
771 && ($codeIndex = mb_substr(
$k, 5)) !==
''
772 && ($codeKey = BusinessValueConsumer1C::getRekvCodeKey(
$order->getPersonTypeId(), $codeIndex))
773 && ($providerInstance = $providersInstance[$v[
"TYPE"]])
774 &&
is_set($providerInstance))
777 $agent[
"REKV"][
$k] = (is_array($bsValue) ? implode(
',', $bsValue):$bsValue);
792 $agent[
$k] = $v[
"VALUE"];
798 $agent[
$k] = $arProp[$v[
"TYPE"]][$v[
"VALUE"]];
801 if (($codeKey = $systemCodes1C[
$k])
802 && ($providerInstance = $providersInstance[$v[
"TYPE"]])
803 &&
is_set($providerInstance))
806 $agent[
$k] = (is_array($bsValue) ? implode(
',', $bsValue):$bsValue);
811 if(
$k ==
'STREET' && mb_strlen($locationStreetPropertyValue))
812 $agent[
$k] = $locationStreetPropertyValue.($agent[
$k] <>
''?
', ' :
'').$agent[
$k];
822 $arCharSets =
array();
823 $dbSitesList = CSite::GetList();
824 while ($arSite = $dbSitesList->Fetch())
825 $arCharSets[$arSite[
"ID"]] = $arSite[
"CHARSET"];
832 $dbSite = CSite::GetByID($arOrder[
"LID"]);
833 $arSite = $dbSite->Fetch();
834 self::$siteNameByOrder = $arSite[
"NAME"];
840 $entity = static::getPaymentTable();
842 $PaymentParam[
'select'] =
856 "PAY_RETURN_COMMENT",
863 $PaymentParam[
'filter'][
'ORDER_ID'] = $arOrder[
'ID'];
864 $PaymentParam[
'filter'][
'!=EXTERNAL_PAYMENT'] =
'F';
869 if(self::getVersionSchema() < self::PARTIAL_VERSION)
875 $resPayment = $entity::getList($PaymentParam);
877 while($arPayment = $resPayment->fetch())
879 foreach($arPayment as $field=>$value)
881 if(self::isFormattedDateFields(
'Payment', $field))
883 $arPayment[$field] = self::getFormatDate($value);
887 $result[
'paySystems'][$arPayment[
'PAY_SYSTEM_ID']] = $arPayment[
'PAY_SYSTEM_NAME'];
889 if($innerPS == 0 || $innerPS!=$arPayment[
'PAY_SYSTEM_ID'])
891 if($limit == 0 || $inc < $limit)
892 $result[
'payment'][] = $arPayment;
903 $entity = static::getShipmentTable();
905 $ShipmentParams[
'select'] =
913 "DATE_ALLOW_DELIVERY",
917 "REASON_UNDO_DEDUCTED",
929 $ShipmentParams[
'filter'][
'ORDER_ID'] = $arOrder[
'ID'];
930 $ShipmentParams[
'filter'][
'=SYSTEM'] =
'N';
934 if(self::getVersionSchema() < self::PARTIAL_VERSION )
937 $resShipment = $entity::getList($ShipmentParams);
938 while($arShipment = $resShipment->fetch())
940 foreach($arShipment as $field=>$value)
942 if(self::isFormattedDateFields(
'Shipment', $field))
944 $arShipment[$field] = self::getFormatDate($value);
948 $result[
'deliveryServices'][$arShipment[
'DELIVERY_ID']] = $arShipment[
'DELIVERY_NAME'];
950 if($limit == 0 || $inc < $limit)
951 $result[
'shipment'][] = $arShipment;
964 static::getParentEntityTypeId(),
973 if(intval($_SESSION[
"BX_CML2_EXPORT"][self::getOrderPrefix()]) > 0)
975 $arFilter[
">=DATE_UPDATE"] = ConvertTimeStamp($_SESSION[
"BX_CML2_EXPORT"][self::getOrderPrefix()],
"FULL");
991 return isset(
$params[
">=DATE_UPDATE"])?
$params[
">=DATE_UPDATE"]:
'';
1000 $result = new \Bitrix\Sale\Result();
1003 $timeLimit = isset(
$params[
'limit'])? intval(
$params[
'limit']):0;
1008 $xml = $export->outputXmlCMLHeader();
1012 $timeUpdate = static::getLastDateUpdateByParams(
$filter);
1013 $lastDateUpdateOrders = static::getLastOrderExported($timeUpdate);
1016 $filter[
'>=DATE_UPDATE'] = $timeUpdate;
1019 $entity = static::getParentEntityTable();
1021 $list = $entity::getList([
1024 'order' => [
"DATE_UPDATE" =>
"ASC",
"ID"=>
"ASC"],
1027 while($orderFields = $list->Fetch())
1034 $r = $export->proccess([
'ORDER_ID'=>$orderFields[
'ID']]);
1036 $xml .= $r->getData()[0];
1038 static::saveExportParams($orderFields);
1040 if(self::checkTimeIsOver($timeLimit, $end_time))
1046 $xml .= $export->outputXmlCMLFooter();
1048 return $result->setData([$xml]);
1053 $lastOrderPrefix =
'';
1054 $arCharSets =
array();
1055 $lastDateUpdateOrders =
array();
1056 $entityMarker = static::getEntityMarker();
1063 if(intval($nTopCount) > 0)
1064 $count = Array(
"nTopCount" => $nTopCount);
1068 if(intval($time_limit) > 0)
1072 $lastOrderPrefix = md5(serialize(
$arFilter));
1073 if(!empty($_SESSION[
"BX_CML2_EXPORT"][$lastOrderPrefix]) && intval($nTopCount) > 0)
1074 $count[
"nTopCount"] =
$count[
"nTopCount"]+
count($_SESSION[
"BX_CML2_EXPORT"][$lastOrderPrefix]);
1082 $lastDateUpdateOrders = static::getLastOrderExported($timeUpdate);
1085 self::$arResultStat =
array(
1108 $arOrder =
array(
"DATE_UPDATE" =>
"ASC",
"ID"=>
"ASC");
1111 "ID",
"LID",
"PERSON_TYPE_ID",
"PAYED",
"DATE_PAYED",
"EMP_PAYED_ID",
"CANCELED",
"DATE_CANCELED",
1112 "EMP_CANCELED_ID",
"REASON_CANCELED",
"STATUS_ID",
"DATE_STATUS",
"PAY_VOUCHER_NUM",
"PAY_VOUCHER_DATE",
"EMP_STATUS_ID",
1113 "PRICE_DELIVERY",
"ALLOW_DELIVERY",
"DATE_ALLOW_DELIVERY",
"EMP_ALLOW_DELIVERY_ID",
"PRICE",
"CURRENCY",
"DISCOUNT_VALUE",
1114 "SUM_PAID",
"USER_ID",
"PAY_SYSTEM_ID",
"DELIVERY_ID",
"DATE_INSERT",
"DATE_INSERT_FORMAT",
"DATE_UPDATE",
"USER_DESCRIPTION",
1116 "COMMENTS",
"TAX_VALUE",
"STAT_GID",
"RECURRING_ID",
"ACCOUNT_NUMBER",
"SUM_PAID",
"DELIVERY_DOC_DATE",
"DELIVERY_DOC_NUM",
"TRACKING_NUMBER",
"STORE_ID",
1118 "USER.XML_ID",
"USER.TIMESTAMP_X"
1121 $bCrmModuleIncluded =
false;
1122 if ($bExportFromCrm)
1124 $arSelect[] =
"UF_COMPANY_ID";
1125 $arSelect[] =
"UF_CONTACT_ID";
1127 $bCrmModuleIncluded =
true;
1133 'select' => $arSelect,
1135 'order' => $arOrder,
1136 'limit' =>
$count[
"nTopCount"]
1144 $entity = static::getParentEntityTable();
1150 if(!self::$crmMode && (
new Exchange(
Sale\
Exchange\
Logger\ProviderType::ONEC_NAME))->isEffected($arOrder, $lastDateUpdateOrders))
1155 static::$documentsToLog =
array();
1158 $order = static::load($arOrder[
'ID']);
1159 $arOrder[
'DATE_STATUS'] = $arOrder[
'DATE_STATUS']->toString();
1160 $arOrder[
'DATE_INSERT'] = $arOrder[
'DATE_INSERT']->toString();
1161 $arOrder[
'DATE_UPDATE'] = $arOrder[
'DATE_UPDATE']->toString();
1163 foreach($arOrder as $field=>$value)
1165 if(self::isFormattedDateFields(
'Order', $field))
1167 $arOrder[$field] = self::getFormatDate($value);
1173 if(self::getVersionSchema() > self::DEFAULT_VERSION && is_array($_SESSION[
"BX_CML2_EXPORT"][$lastOrderPrefix]) && in_array($arOrder[
"ID"], $_SESSION[
"BX_CML2_EXPORT"][$lastOrderPrefix]) && empty(
$arFilter[
"ID"]))
1178 self::$arResultStat[
"ORDERS"]++;
1180 $agentParams = (array_key_exists($arOrder[
"PERSON_TYPE_ID"], $arAgent) ? $arAgent[$arOrder[
"PERSON_TYPE_ID"]] :
array() );
1183 $paySystems = $arResultPayment[
'paySystems'] ?? [];
1184 $arPayment = $arResultPayment[
'payment'] ?? [];
1187 $arShipment = $arResultShipment[
'shipment'] ?? [];
1188 $delivery = $arResultShipment[
'deliveryServices'] ?? [];
1194 $agent = self::prepareSalePropertyRekv(
$order, $agentParams, $arProp, $locationStreetPropertyValue);
1197 $xmlResult[
'OrderTax'] = self::getXMLOrderTax($arOrderTax);
1202 $xmlResult[
'SaleStoreList'] = $arStore;
1203 $xmlResult[
'ShipmentsStoreList'] = self::getShipmentsStoreList(
$order);
1207 $numberItems =
array();
1208 foreach($basketItems[
'result'] as $basketItem)
1212 if(in_array($number, $numberItems))
1214 $r = new \Bitrix\Sale\Result();
1215 $r->addWarning(
new \
Bitrix\
Main\
Error(
GetMessage(
"SALE_EXPORT_REASON_MARKED_BASKET_PROPERTY").
'1C_Exchange:Order.export.basket.properties',
'SALE_EXPORT_REASON_MARKED_BASKET_PROPERTY'));
1217 $order->setField(
'MARKED',
'Y');
1218 $order->setField(
'DATE_UPDATE',
null);
1224 $numberItems[] = $number;
1228 $xmlResult[
'BasketItems'] = $basketItems[
'outputXML'];
1229 $xmlResult[
'SaleProperties'] =
self::getXmlSaleProperties($arOrder, $arShipment, $arPayment, $agent, $agentParams, $bExportFromCrm);
1233 if(self::getVersionSchema() >= self::CONTAINER_VERSION)
1236 echo
'<'.CSaleExport::getTagName(
"SALE_EXPORT_CONTAINER").
'>';
1241 if(self::getVersionSchema() >= self::PARTIAL_VERSION)
1248 if(self::getVersionSchema() >= self::CONTAINER_VERSION)
1250 echo
'</'.CSaleExport::getTagName(
"SALE_EXPORT_CONTAINER").
'>';
1251 $contentToLog = ob_get_contents();
1258 $c = ob_get_clean();
1261 $_SESSION[
"BX_CML2_EXPORT"][$lastOrderPrefix][] = $arOrder[
"ID"];
1265 static::saveExportParams($arOrder);
1268 ksort(static::$documentsToLog);
1274 $fieldToLog = $documentToLog;
1275 $fieldToLog[
'ENTITY_TYPE_ID'] = $entityTypeId;
1276 if(self::getVersionSchema() >= self::CONTAINER_VERSION)
1279 $fieldToLog[
'MESSAGE'] = $contentToLog;
1281 static::log($fieldToLog);
1285 if(self::checkTimeIsOver($time_limit, $end_time))
1294 return self::$arResultStat;
1297 public static function safetyUnZip($file_name, $last_inx =
null, $interval = 0)
1300 $dir_name = mb_substr($file_name, 0, mb_strrpos($file_name,
'/') + 1);
1302 if (mb_strlen($dir_name) <= mb_strlen(
$_SERVER[
'DOCUMENT_ROOT']))
1309 if ($oArchiver instanceof IBXArchive)
1311 $entries = $oArchiver->GetProperties()[
'nb'];
1313 for ($inx = 0; $inx < $entries; $inx++)
1316 if (is_null($last_inx) ===
false)
1318 if ((
int)$last_inx >= $inx)
1324 $oArchiver->SetOptions([
1335 $rArchiver = $oArchiver->Unpack($dir_name);
1342 if($interval > 0 && (time() -
$start_time) > ($interval))
1356 public static function UnZip($file_name, $last_zip_entry =
"", $interval = 0)
1363 if(!function_exists(
"zip_open"))
1365 $dir_name = mb_substr($file_name, 0, mb_strrpos($file_name,
"/") + 1);
1366 if(mb_strlen($dir_name) <= mb_strlen(
$_SERVER[
"DOCUMENT_ROOT"]))
1369 $hZip = zip_open($file_name);
1375 while($entry = zip_read($hZip))
1376 if(zip_entry_name($entry) == $last_zip_entry)
1382 while($entry = zip_read($hZip))
1384 $entry_name = zip_entry_name($entry);
1386 zip_entry_open($hZip, $entry);
1387 if(zip_entry_filesize($entry))
1390 $file_name = trim(str_replace(
"\\",
"/", trim($entry_name)),
"/");
1395 || !
$io->ValidatePathString(
"/".$file_name)
1400 $file_name =
$io->GetPhysicalName($dir_name.rel2abs(
"/", $file_name));
1402 $fout = fopen($file_name,
"wb");
1405 while(
$data = zip_entry_read($entry, 102400))
1407 $data_len = strlen(
$data);
1414 zip_entry_close($entry);
1417 if($interval > 0 && (time()-
$start_time) > ($interval))
1442 if(is_array($arOrderTaxAll) &&
count($arOrderTaxAll)>0)
1444 foreach ($arOrderTaxAll as $arOrderTax )
1446 $arOrderTax[
"VALUE_MONEY"] =
roundEx($arOrderTax[
"VALUE_MONEY"], 2);
1447 $orderTax += $arOrderTax[
"VALUE_MONEY"];
1456 if(is_array($arOrderTaxAll) &&
count($arOrderTaxAll)>0)
1459 $strResult .=
"<".CSaleExport::getTagName(
"SALE_EXPORT_TAXES").
">";
1460 foreach ($arOrderTaxAll as $arOrderTax )
1462 $arOrderTax[
"VALUE_MONEY"] =
roundEx($arOrderTax[
"VALUE_MONEY"], 2);
1463 $orderTax += $arOrderTax[
"VALUE_MONEY"];
1465 $strResult .=
"<".CSaleExport::getTagName(
"SALE_EXPORT_TAX").
">".
1467 "<".CSaleExport::getTagName(
"SALE_EXPORT_IN_PRICE").
">".(($arOrderTax[
"IS_IN_PRICE"]==
"Y") ?
"true" :
"false").
"</".
CSaleExport::getTagName(
"SALE_EXPORT_IN_PRICE").
">".
1468 "<".CSaleExport::getTagName(
"SALE_EXPORT_AMOUNT").
">".$arOrderTax[
"VALUE_MONEY"].
"</".
CSaleExport::getTagName(
"SALE_EXPORT_AMOUNT").
">".
1469 "</".CSaleExport::getTagName(
"SALE_EXPORT_TAX").
">";
1471 $strResult .=
"</".CSaleExport::getTagName(
"SALE_EXPORT_TAXES").
">";
1480 if(DoubleVal($arOrder[
"DISCOUNT_VALUE"]) > 0)
1482 $strResult =
"<".CSaleExport::getTagName(
"SALE_EXPORT_DISCOUNTS").
">
1493 public static function getShipmentsStoreList(
Bitrix\Sale\Order
$order)
1497 $shipmentCollection =
$order->getShipmentCollection();
1499 if($shipmentCollection->count()>0)
1502 foreach($shipmentCollection as $shipment)
1504 if ($shipment->isSystem())
1507 $storeId = $shipment->getStoreId();
1510 $result[$shipment->getId()] = $storeId;
1519 if(
count($arShipmentStore)>0)
1523 foreach($arShipmentStore as $shipmentStoreId)
1525 if(intval($shipmentStoreId) > 0 && !empty($arStore[$shipmentStoreId]))
1550 $bufer = ob_get_clean();
1553 $bufer =
"<".CSaleExport::getTagName(
"SALE_EXPORT_STORIES").
">".$bufer.
"</".
CSaleExport::getTagName(
"SALE_EXPORT_STORIES").
">";
1562 <".CSaleExport::getTagName(
"SALE_EXPORT_STORIES").
">
1571 return $storeBasket;
1581 list($productXmlId, $offerXmlId) = explode(
"#", $xml_id, 2);
1582 if ($productXmlId === $offerXmlId)
1583 $xml_id = $productXmlId;
1597 protected static function outputXmlMarkingCode($shipmentItemId,
$order)
1602 $shipmentCollection =
$order->getShipmentCollection();
1604 if($shipmentCollection->count()>0)
1607 foreach($shipmentCollection as $shipment)
1609 if ($shipment->isSystem())
1612 $shipmentItemCollection = $shipment->getShipmentItemCollection();
1615 foreach ($shipmentItemCollection as $shipmentItem)
1617 if ($shipmentItem->getId() == $shipmentItemId)
1619 $basketItem = $shipmentItem->getBasketItem();
1620 if ($basketItem->isSupportedMarkingCode())
1622 $storeCollection = $shipmentItem->getShipmentItemStoreCollection();
1624 for (
$i = $shipmentItem->getQuantity();
$i > 0;
$i--)
1626 if ($storeCollection)
1629 if ($itemStore = $storeCollection->current())
1631 $code = $itemStore->getMarkingCode();
1637 $storeCollection->next();
1653 foreach($list as
$code)
1669 if(self::getVersionSchema() > self::DEFAULT_VERSION)
1671 if(intval($arBasket[
"MEASURE_CODE"]) <= 0)
1672 $arBasket[
"MEASURE_CODE"] = 796;
1683 if($arBasket[
"MEASURE_CODE"] == 796)
1702 $entity = static::getBasketTable();
1707 $select =
array(
"ID",
"NOTES",
"PRODUCT_XML_ID",
"CATALOG_XML_ID",
"NAME",
"PRICE",
"QUANTITY",
"DISCOUNT_PRICE",
"VAT_RATE",
"MEASURE_CODE",
"SET_PARENT_ID",
"TYPE",
"VAT_INCLUDED",
"MARKING_CODE_GROUP");
1708 if(
count($arSelect)>0)
1714 'order' =>
array(
"NAME" =>
"ASC")
1729 if($priceType ==
'')
1730 $priceType = $arBasket[
"NOTES"];
1738 static::outputXmlUnit($arBasket);
1740 if(
$type ==
'Order')
1742 static::outputXmlMarkingCodeGroup($arBasket);
1746 static::outputXmlMarkingCode($arBasket[
'SALE_INTERNALS_BASKET_SHIPMENT_ITEM_ID'],
$order);
1749 if(DoubleVal($arBasket[
"DISCOUNT_PRICE"]) > 0)
1762 <?
if(self::getVersionSchema() >= self::PARTIAL_VERSION &&
$type ==
'Shipment')
1792 $dbProp =
CSaleBasket::GetPropsList(Array(
"SORT" =>
"ASC",
"ID" =>
"ASC"), Array(
"BASKET_ID" => $arBasket[
"ID"]),
false,
false,
array(
"NAME",
"SORT",
"VALUE",
"CODE"));
1793 while($arPropBasket = $dbProp->Fetch())
1804 <?
if(DoubleVal($arBasket[
"VAT_RATE"]) > 0)
1807 $vatRate = DoubleVal($arBasket[
"VAT_RATE"]);
1808 $basketVatSum = (($arBasket[
"PRICE"] / ($arBasket[
"VAT_RATE"]+1)) * $arBasket[
"VAT_RATE"]);
1809 $vatSum +=
roundEx($basketVatSum * $arBasket[
"QUANTITY"], 2);
1830 $basketSum += $arBasket[
"PRICE"]*$arBasket[
"QUANTITY"];
1833 if(self::getVersionSchema() >= self::PARTIAL_VERSION)
1835 if(
count($arShipment)>0)
1837 foreach($arShipment as $shipment)
1849 $bufer = ob_get_clean();
1853 public static function getXmlSaleProperties($arOrder, $arShipment, $arPayment, $agent, $agentParams, $bExportFromCrm)
1857 $arShipment = $arShipment[0];
1858 $arPayment = $arPayment[0];
1861 if($arOrder[
"DATE_PAYED"] <>
'')
1871 if(self::getVersionSchema() < self::PARTIAL_VERSION || $bExportFromCrm)
1873 if($arPayment[
"PAY_VOUCHER_NUM"] <>
'')
1882 if($arShipment[
"DATE_ALLOW_DELIVERY"] <>
'')
1902 if($arShipment[
"DELIVERY_ID"] <>
'')
1916 if(intval($arPayment[
"PAY_SYSTEM_ID"])>0)
1935 if(self::getVersionSchema() < self::PARTIAL_VERSION || $bExportFromCrm)
1960 <?
if($arOrder[
"DATE_CANCELED"] <>
'')
1973 if($arOrder[
"DATE_STATUS"] <>
'')
1982 if($arOrder[
"USER_DESCRIPTION"] <>
'')
2000 $bufer = ob_get_clean();
2008 $bufer = ob_get_clean();
2014 if(!empty($agent[
"REKV"]))
2016 foreach($agent[
"REKV"] as
$k => $v)
2018 if($agentParams[
$k][
"NAME"] <>
'' && $v <>
'')
2035 $ec_bufer = ob_get_clean();
2041 if(is_array($documents) &&
count($documents)>0)
2043 foreach($documents as $document)
2045 $document[
'LID'] = $arOrder[
'LID'];
2046 $document[
'VERSION'] = $arOrder[
'VERSION'];
2052 if($document[
'DATE_BILL']==
'')
2053 $document[
'DATE_BILL'] = $arOrder[
'DATE_INSERT_FORMAT'];
2059 if(
$payment->getId() == $document[
'ID'])
2061 $agent = self::prepareSalePropertyRekv(
$payment, $agentParams, $arProp, $locationStreetPropertyValue);
2072 if(($shipmentCollection =
$order->getShipmentCollection()))
2074 foreach($shipmentCollection as $shipment)
2076 if($shipment->getId() == $document[
'ID'])
2078 $agent = self::prepareSalePropertyRekv($shipment, $agentParams, $arProp, $locationStreetPropertyValue);
2086 'ORDER_ID'=>$document[
'ORDER_ID'],
2087 'SHIPMENT_ITEM.ORDER_DELIVERY_ID'=>$document[
'ID'],
2090 'SHIPMENT_ITEM.QUANTITY',
2094 array(
'PRICE_DELIVERY'=>$document[
'PRICE_DELIVERY'])
2098 $xmlResult[
'BasketItems'] = $basketItems[
'outputXML'];
2099 $document[
'BasketResult'] = $basketItems[
'result'];
2120 if(self::getDeliveryAddress() <>
'')
2135 $entity = static::getEntityChangeTable();
2140 if($document[
'ID']>0)
2144 'filter'=>
array(
'ORDER_ID'=>$document[
'ID'],
'ENTITY' =>
'SHIPMENT',
'TYPE' =>
'SHIPMENT_REMOVED'),
2145 'order'=>
array(
'ID'=>
'DESC')
2149 while($resultChange =
$result->fetch())
2190 if(self::getVersionSchema() > self::DEFAULT_VERSION)
2194 if($document[
"ID_1C"] <>
'')
2202 ?><DateUpdate><?=
$DB->FormatDate($document[
"DATE_UPDATE"], CSite::GetDateFormat(
"FULL"),
"YYYY-MM-DD HH:MI:SS");?></DateUpdate><?
2204 echo $xmlResult[
'Contragents'];
2208 <? echo $xmlResult[
'OrderTax'];
2209 echo $xmlResult[
'OrderDiscount'];
2210 echo
self::getXmlSaleStore(array_unique($xmlResult[
'ShipmentsStoreList'], SORT_NUMERIC), $xmlResult[
'SaleStoreList']);
2212 echo $xmlResult[
'BasketItems'];
2213 echo $xmlResult[
'SaleProperties'];
2245 if(
count($document[
'BasketResult'])>0)
2247 foreach($document[
'BasketResult'] as $basketItem)
2249 $price = $price + $basketItem[
'PRICE'] * $basketItem[
'SALE_INTERNALS_BASKET_SHIPMENT_ITEM_QUANTITY'];
2258 <?echo $xmlResult[
'Contragents'];?>
2266 <?=$xmlResult[
'OrderTax'];?>
2268 if(isset($xmlResult[
'ShipmentsStoreList'][$document[
"ID"]]))
2270 $storId = $xmlResult[
'ShipmentsStoreList'][$document[
"ID"]];
2285 if(isset($cashBoxOneCId) && $cashBoxOneCId>0)
2287 $checks = \Bitrix\Sale\Cashbox\CheckManager::getPrintableChecks(
array($cashBoxOneCId),
array($document[
'ORDER_ID']));
2288 foreach($checks as $checkId=>$check)
2290 if($check[
'PAYMENT_ID']==$document[
"ID"])
2292 $checkData = $check;
2346 <?
if(isset($xmlResult[
'RekvProperties']) && $xmlResult[
'RekvProperties'] <>
'') echo $xmlResult[
'RekvProperties'];?>
2354 echo $xmlResult[
'BasketItems'];
2422 <?
if(isset($xmlResult[
'RekvProperties']) && $xmlResult[
'RekvProperties'] <>
'') echo $xmlResult[
'RekvProperties'];?>
2430 <?$c = ob_get_contents();
2434 $typeEntityId = static::resolveEntityTypeId(
$typeDocument, $document);
2436 if(intval($typeEntityId)>0)
2438 $filedsTolog =
array(
2439 'ENTITY_ID' => $document[
"ID"],
2440 'XML_ID' => $document[
"ID_1C"]
2443 if(self::getVersionSchema() < self::CONTAINER_VERSION)
2444 $filedsTolog[
'MESSAGE'] = $c;
2449 $filedsTolog[
'ENTITY_DATE_UPDATE'] = new \Bitrix\Main\Type\DateTime(CDatabase::FormatDate($document[
'DATE_UPDATE']));
2450 if(self::getVersionSchema() >= self::CONTAINER_VERSION)
2451 $filedsTolog[
'PARENT_ID'] = $document[
"ID"];
2455 $filedsTolog[
'OWNER_ENTITY_ID'] = $document[
"ORDER_ID"];
2457 if(self::getVersionSchema() >= self::CONTAINER_VERSION)
2458 $filedsTolog[
'PARENT_ID'] = $document[
"ORDER_ID"];
2462 static::$documentsToLog[$typeEntityId][] = $filedsTolog;
2468 $bExportFromCrm = (isset(
$arOptions[
"EXPORT_FROM_CRM"]) &&
$arOptions[
"EXPORT_FROM_CRM"] ===
"Y");
2473 if ($bExportFromCrm):
2474 $xmlId =
htmlspecialcharsbx(mb_substr($arProp[
"CRM"][
"CLIENT_ID"].
"#".$arProp[
"CRM"][
"CLIENT"][
"LOGIN"].
"#".$arProp[
"CRM"][
"CLIENT"][
"LAST_NAME"].
" ".$arProp[
"CRM"][
"CLIENT"][
"NAME"].
" ".$arProp[
"CRM"][
"CLIENT"][
"SECOND_NAME"], 0, 40));
2476 $xmlId = static::getUserXmlId($arOrder, $arProp);
2486 if($agent[
"ADDRESS_FULL"] <>
'')
2492 $address .=
"<".CSaleExport::getTagName(
"SALE_EXPORT_PRESENTATION").
"></".
CSaleExport::getTagName(
"SALE_EXPORT_PRESENTATION").
">";
2494 if($agent[
"INDEX"] <>
'')
2496 $address .=
"<".CSaleExport::getTagName(
"SALE_EXPORT_ADDRESS_FIELD").
">
2501 if($agent[
"COUNTRY"] <>
'')
2503 $address .=
"<".CSaleExport::getTagName(
"SALE_EXPORT_ADDRESS_FIELD").
">
2508 if($agent[
"REGION"] <>
'')
2510 $address .=
"<".CSaleExport::getTagName(
"SALE_EXPORT_ADDRESS_FIELD").
">
2515 if($agent[
"STATE"] <>
'')
2517 $address .=
"<".CSaleExport::getTagName(
"SALE_EXPORT_ADDRESS_FIELD").
">
2522 if($agent[
"TOWN"] <>
'')
2524 $address .=
"<".CSaleExport::getTagName(
"SALE_EXPORT_ADDRESS_FIELD").
">
2529 if($agent[
"CITY"] <>
'')
2531 $address .=
"<".CSaleExport::getTagName(
"SALE_EXPORT_ADDRESS_FIELD").
">
2536 if($agent[
"STREET"] <>
'')
2538 $address .=
"<".CSaleExport::getTagName(
"SALE_EXPORT_ADDRESS_FIELD").
">
2543 if($agent[
"HOUSE"] <>
'')
2545 $address .=
"<".CSaleExport::getTagName(
"SALE_EXPORT_ADDRESS_FIELD").
">
2550 if($agent[
"BUILDING"] <>
'')
2552 $address .=
"<".CSaleExport::getTagName(
"SALE_EXPORT_ADDRESS_FIELD").
">
2557 if($agent[
"FLAT"] <>
'')
2559 $address .=
"<".CSaleExport::getTagName(
"SALE_EXPORT_ADDRESS_FIELD").
">
2566 if($agent[
"IS_FIZ"]==
"Y")
2568 self::$arResultStat[
"CONTACTS"]++;
2572 if($agent[
"SURNAME"] <>
'')
2576 if($agent[
"NAME"] <>
'')
2580 if($agent[
"SECOND_NAME"] <>
'')
2584 if($agent[
"BIRTHDAY"] <>
'')
2588 if($agent[
"MALE"] <>
'')
2592 if($agent[
"INN"] <>
'')
2596 if($agent[
"KPP"] <>
'')
2610 self::$arResultStat[
"COMPANIES"]++;
2620 if($agent[
"INN"] <>
'')
2624 if($agent[
"KPP"] <>
'')
2628 if($agent[
"EGRPO"] <>
'')
2632 if($agent[
"OKVED"] <>
'')
2636 if($agent[
"OKDP"] <>
'')
2640 if($agent[
"OKOPF"] <>
'')
2644 if($agent[
"OKFC"] <>
'')
2648 if($agent[
"OKPO"] <>
'')
2653 if($agent[
"ACCOUNT_NUMBER"] <>
'')
2664 if($agent[
"B_INDEX"] <>
'')
2671 if($agent[
"B_COUNTRY"] <>
'')
2678 if($agent[
"B_REGION"] <>
'')
2685 if($agent[
"B_STATE"] <>
'')
2692 if($agent[
"B_TOWN"] <>
'')
2699 if($agent[
"B_CITY"] <>
'')
2706 if($agent[
"B_STREET"] <>
'')
2713 if($agent[
"B_HOUSE"] <>
'')
2720 if($agent[
"B_BUILDING"] <>
'')
2727 if($agent[
"B_FLAT"] <>
'')
2737 if($agent[
"B_BIK"] <>
'')
2749 if($agent[
"F_ADDRESS_FULL"] <>
'')
2756 if($agent[
"F_INDEX"] <>
'')
2765 if($agent[
"F_COUNTRY"] <>
'')
2774 if($agent[
"F_REGION"] <>
'')
2783 if($agent[
"F_STATE"] <>
'')
2792 if($agent[
"F_TOWN"] <>
'')
2801 if($agent[
"F_CITY"] <>
'')
2810 if($agent[
"F_STREET"] <>
'')
2819 if($agent[
"F_HOUSE"] <>
'')
2828 if($agent[
"F_BUILDING"] <>
'')
2837 if($agent[
"F_FLAT"] <>
'')
2851 if($agent[
"PHONE"] <>
'' || $agent[
"EMAIL"] <>
'')
2856 if($agent[
"PHONE"] <>
'')
2865 if($agent[
"EMAIL"] <>
'')
2878 if($agent[
"CONTACT_PERSON"] <>
'')
2897 $filedsTolog =
array(
2898 'ENTITY_ID' => $arOrder[
"USER_ID"],
2899 'PARENT_ID' => $arOrder[
'ID'],
2900 'ENTITY_DATE_UPDATE' => static::getUserTimeStapmX($arOrder),
2907 public static function getFormatDate($value)
2914 if (($value instanceof DateTime)
2917 $setValue = $value->toString();
2921 $time =
new Bitrix\Main\Type\DateTime($setValue);
2922 if(self::getVersionSchema() >= self::PARTIAL_VERSION )
2923 $format =
'Y-m-d\TH:i:s';
2925 $format =
'd.m.Y H:i:s';
2927 return $time->format($format);
2933 return in_array($field, $formattedDateFields[
$type]);
2943 'DATE_ALLOW_DELIVERY',
2946 'Shipment' =>
array(
2947 'DATE_ALLOW_DELIVERY',
2958 private static $systemCodes =
array(
2961 BusinessValue::INDIVIDUAL_DOMAIN =>
array(
2962 'BUYER_PERSON_NAME' =>
'FULL_NAME' ,
2963 'BUYER_PERSON_NAME_FIRST' =>
'NAME' ,
2964 'BUYER_PERSON_NAME_SECOND' =>
'SECOND_NAME' ,
2965 'BUYER_PERSON_NAME_LAST' =>
'SURNAME' ,
2966 'BUYER_PERSON_NAME_AGENT' =>
'AGENT_NAME' ,
2967 'BUYER_PERSON_NAME_CONTACT' =>
'CONTACT_PERSON',
2968 'BUYER_PERSON_BIRTHDAY' =>
'BIRTHDAY' ,
2969 'BUYER_PERSON_GENDER' =>
'MALE' ,
2970 'BUYER_PERSON_INN' =>
'INN' ,
2971 'BUYER_PERSON_KPP' =>
'KPP' ,
2972 'BUYER_PERSON_ADDRESS' =>
'ADDRESS_FULL' ,
2973 'BUYER_PERSON_ZIP' =>
'INDEX' ,
2974 'BUYER_PERSON_COUNTRY' =>
'COUNTRY' ,
2975 'BUYER_PERSON_REGION' =>
'REGION' ,
2976 'BUYER_PERSON_STATE' =>
'STATE' ,
2977 'BUYER_PERSON_TOWN' =>
'TOWN' ,
2978 'BUYER_PERSON_CITY' =>
'CITY' ,
2979 'BUYER_PERSON_STREET' =>
'STREET' ,
2980 'BUYER_PERSON_HOUSING' =>
'BUILDING' ,
2981 'BUYER_PERSON_BUILDING' =>
'HOUSE' ,
2982 'BUYER_PERSON_APARTMENT' =>
'FLAT' ,
2983 'BUYER_PERSON_PHONE' =>
'PHONE' ,
2984 'BUYER_PERSON_EMAIL' =>
'EMAIL' ,
2985 'BUYER_PERSON_F_ADDRESS_FULL'=>
'F_ADDRESS_FULL',
2986 'BUYER_PERSON_F_INDEX' =>
'F_INDEX' ,
2987 'BUYER_PERSON_F_COUNTRY' =>
'F_COUNTRY' ,
2988 'BUYER_PERSON_F_REGION' =>
'F_REGION' ,
2989 'BUYER_PERSON_F_STATE' =>
'F_STATE' ,
2990 'BUYER_PERSON_F_TOWN' =>
'F_TOWN' ,
2991 'BUYER_PERSON_F_CITY' =>
'F_CITY' ,
2992 'BUYER_PERSON_F_STREET' =>
'F_STREET' ,
2993 'BUYER_PERSON_F_BUILDING' =>
'F_BUILDING' ,
2994 'BUYER_PERSON_F_HOUSE' =>
'F_HOUSE' ,
2995 'BUYER_PERSON_F_FLAT' =>
'F_FLAT' ,
2997 BusinessValue::ENTITY_DOMAIN =>
array(
2998 'BUYER_COMPANY_NAME' =>
'FULL_NAME' ,
2999 'BUYER_COMPANY_NAME_AGENT' =>
'AGENT_NAME' ,
3000 'BUYER_COMPANY_NAME_CONTACT' =>
'CONTACT_PERSON',
3001 'BUYER_COMPANY_INN' =>
'INN' ,
3002 'BUYER_COMPANY_KPP' =>
'KPP' ,
3003 'BUYER_COMPANY_ADDRESS' =>
'ADDRESS_FULL' ,
3004 'BUYER_COMPANY_ZIP' =>
'INDEX' ,
3005 'BUYER_COMPANY_COUNTRY' =>
'COUNTRY' ,
3006 'BUYER_COMPANY_REGION' =>
'REGION' ,
3007 'BUYER_COMPANY_STATE' =>
'STATE' ,
3008 'BUYER_COMPANY_TOWN' =>
'TOWN' ,
3009 'BUYER_COMPANY_CITY' =>
'CITY' ,
3010 'BUYER_COMPANY_STREET' =>
'STREET' ,
3011 'BUYER_COMPANY_HOUSING' =>
'BUILDING' ,
3012 'BUYER_COMPANY_BUILDING' =>
'HOUSE' ,
3013 'BUYER_COMPANY_APARTMENT' =>
'FLAT' ,
3014 'BUYER_COMPANY_PHONE' =>
'PHONE' ,
3015 'BUYER_COMPANY_EMAIL' =>
'EMAIL' ,
3016 'BUYER_COMPANY_EGRPO' =>
'EGRPO' ,
3017 'BUYER_COMPANY_OKVED' =>
'OKVED' ,
3018 'BUYER_COMPANY_OKDP' =>
'OKDP' ,
3019 'BUYER_COMPANY_OKOPF' =>
'OKOPF' ,
3020 'BUYER_COMPANY_OKFC' =>
'OKFC' ,
3021 'BUYER_COMPANY_OKPO' =>
'OKPO' ,
3022 'BUYER_COMPANY_BANK_ACCOUNT' =>
'ACCOUNT_NUMBER',
3023 'BUYER_COMPANY_BANK_NAME' =>
'B_NAME',
3024 'BUYER_COMPANY_BANK_BIK' =>
'B_BIK',
3025 'BUYER_COMPANY_BANK_ADDRESS_FULL' =>
'B_ADDRESS_FULL',
3026 'BUYER_COMPANY_BANK_INDEX' =>
'B_INDEX',
3027 'BUYER_COMPANY_BANK_COUNTRY' =>
'B_COUNTRY',
3028 'BUYER_COMPANY_BANK_REGION' =>
'B_REGION',
3029 'BUYER_COMPANY_BANK_STATE' =>
'B_STATE',
3030 'BUYER_COMPANY_BANK_TOWN' =>
'B_TOWN',
3031 'BUYER_COMPANY_BANK_CITY' =>
'B_CITY',
3032 'BUYER_COMPANY_BANK_STREET' =>
'B_STREET',
3033 'BUYER_COMPANY_BANK_BUILDING' =>
'B_BUILDING',
3034 'BUYER_COMPANY_BANK_HOUSE' =>
'B_HOUSE',
3035 'BUYER_COMPANY_F_ADDRESS_FULL'=>
'F_ADDRESS_FULL',
3036 'BUYER_COMPANY_F_INDEX' =>
'F_INDEX' ,
3037 'BUYER_COMPANY_F_COUNTRY' =>
'F_COUNTRY' ,
3038 'BUYER_COMPANY_F_REGION' =>
'F_REGION' ,
3039 'BUYER_COMPANY_F_STATE' =>
'F_STATE' ,
3040 'BUYER_COMPANY_F_TOWN' =>
'F_TOWN' ,
3041 'BUYER_COMPANY_F_CITY' =>
'F_CITY' ,
3042 'BUYER_COMPANY_F_STREET' =>
'F_STREET' ,
3043 'BUYER_COMPANY_F_BUILDING' =>
'F_BUILDING' ,
3044 'BUYER_COMPANY_F_HOUSE' =>
'F_HOUSE' ,
3045 'BUYER_COMPANY_F_FLAT' =>
'F_FLAT' ,
3060 if (
$filter[
'PERSON_TYPE_ID'])
3062 if (! is_array(
$filter[
'PERSON_TYPE_ID']))
3065 $personTypes = array_intersect_key($personTypes, array_flip(
$filter[
'PERSON_TYPE_ID']));
3070 $personTypes = isset($personTypes[
$filter[
'ID']])
3081 && is_array($consumer)
3082 && ($codes = $consumer[
'CODES'])
3083 && is_array($codes))
3085 foreach ($personTypes as $personTypeId => $personType)
3087 $systemCodes = self::$systemCodes[$personType[
'DOMAIN']];
3090 foreach ($codes as $codeKey =>
$code)
3094 $mapping1C =
array(
'VALUE' => $mapping[
'PROVIDER_VALUE']);
3096 switch ($mapping[
'PROVIDER_KEY'])
3099 $mapping1C[
'TYPE'] =
'';
3108 $mapping1C[
'TYPE'] = $mapping[
'PROVIDER_KEY'];
3111 default:
continue 2;
3114 if (isset(
$code[
'CODE_INDEX']))
3116 $codeKey1C =
'REKV_'.$code[
'CODE_INDEX'];
3117 $mapping1C[
'NAME'] =
$code[
'NAME'];
3121 $codeKey1C = $systemCodes[$codeKey];
3124 $vars[$codeKey1C] = $mapping1C;
3133 'ID' => $personTypeId,
3134 'PERSON_TYPE_ID' => $personTypeId,
3135 'VARS' => serialize($vars),
3141 if (! $group && is_array($group))
3159 $providersInstance =
array(
3160 'ORDER' => self::getProviderInstanceByProviderCode(
$entity,
'ORDER' ),
3161 'USER' => self::getProviderInstanceByProviderCode(
$entity,
'USER' ),
3162 'COMPANY' => self::getProviderInstanceByProviderCode(
$entity,
'COMPANY' ),
3163 'SHIPMENT' => self::getProviderInstanceByProviderCode(
$entity,
'SHIPMENT' ),
3164 'PAYMENT' => self::getProviderInstanceByProviderCode(
$entity,
'PAYMENT' ),
3165 'PROPERTY' => self::getProviderInstanceByProviderCode(
$entity,
'PROPERTY' ),
3168 return $providersInstance;
3178 static $providersInstance =
array();
3185 return $providersInstance;
3188 protected static function getProviderInstanceByProviderCode(\
Bitrix\Sale\IBusinessValueProvider
$entity, $providerCode)
3190 $providerInstance =
null;
3198 $collection =
$entity->getCollection();
3199 $order = $collection->getOrder();
3202 switch($providerCode)
3207 $providerInstance =
$order;
3215 $collection =
$order->getPaymentCollection();
3229 $collection =
$order->getShipmentCollection();
3230 foreach($collection as $shipment)
3232 $providerInstance = $shipment;
3241 return $providerInstance;
3250 return $GLOBALS[
"SALE_EXPORT"][
"SALE_EXPORT_CACHE_".$ID];
3273 'SEVERITY' =>
'ERROR',
3274 'AUDIT_TYPE_ID' =>
'SALE_1C_TO_BUSINESS_VALUE_ERROR',
3275 'MODULE_ID' =>
'sale',
3276 'ITEM_ID' => $itemId,
3282 private static function setMap($personTypeId,
array $map1C, $itemId)
3284 BusinessValueConsumer1C::getConsumers();
3286 $personTypes = BusinessValue::getPersonTypes();
3288 if (! $personType = $personTypes[$personTypeId])
3290 self::logError($itemId,
'Undefined DOMAIN for person type id "'.$personTypeId.
'"');
3294 $systemCodes1C = array_flip(self::$systemCodes[$personType[
'DOMAIN']]);
3296 foreach ($map1C as $codeKey1C => $mapping1C)
3298 if ($codeKey1C && is_array($mapping1C))
3300 if (! $mapping1C[
'VALUE'])
3303 $mapping =
array(
'PROVIDER_VALUE' => $mapping1C[
'VALUE']);
3305 if (! ($codeKey = $systemCodes1C[$codeKey1C])
3306 && mb_substr($codeKey1C, 0, 5) ===
'REKV_'
3307 && ($codeIndex = mb_substr($codeKey1C, 5)) !==
''
3308 && $mapping1C[
'NAME'])
3310 $codeKey = BusinessValueConsumer1C::getRekvCodeKey($personTypeId, $codeIndex);
3311 $mapping[
'NAME'] = $mapping1C[
'NAME'];
3317 switch ($mapping1C[
'TYPE'])
3320 $mapping[
'PROVIDER_KEY'] =
'VALUE';
3326 $mapping[
'PROVIDER_KEY'] = $mapping1C[
'TYPE'];
3329 default:
continue 2;
3332 $r = BusinessValueConsumer1C::setMapping($codeKey, $personTypeId, $mapping);
3334 if (! $r->isSuccess())
3335 self::logError($itemId,
'Cannot set mapping with code key "'.$codeKey.
'"', $r);
3349 while ($row =
$result->fetch())
3351 if (! (($map1C = unserialize($row[
'VARS'], [
'allowed_classes' =>
false])) && is_array($map1C)))
3354 $personTypeId = $row[
'PERSON_TYPE_ID'];
3356 unset($map1C[
'IS_FIZ']);
3358 if (! isset($allPersonTypes[$personTypeId]))
3360 self::logError($row[
'ID'],
'Undefined person type "'.$personTypeId.
'"');
3363 elseif (isset($allPersonTypes[$personTypeId][
'DOMAIN']))
3365 if ($allPersonTypes[$personTypeId][
'DOMAIN'] !== $domain)
3367 self::logError($row[
'ID'],
'Person type "'.$personTypeId.
'" domain is "'.$allPersonTypes[$personTypeId][
'DOMAIN'].
'", but in 1C is "'.$domain.
'"');
3373 $r = Bitrix\Sale\Internals\BusinessValuePersonDomainTable::add(
array(
3374 'PERSON_TYPE_ID' => $personTypeId,
3375 'DOMAIN' => $domain,
3378 if ($r->isSuccess())
3380 $allPersonTypes[$personTypeId][
'DOMAIN'] = $domain;
3385 self::logError($row[
'ID'],
'Unable to set person type "'.$personTypeId.
'" domain', $r);
3390 self::setMap($personTypeId, $map1C,
'Migrate:'.$personTypeId.
':'.$row[
'ID']);
3398 $GLOBALS[
"APPLICATION"]->ThrowException(
GetMessage(
"SALE_EXPORT_NO_PERSON_TYPE_ID"),
"EMPTY_PERSON_TYPE_ID");
3405 $personType = static::getPersonType();
3406 $dbRes = $personType::getList([
3413 $GLOBALS[
"APPLICATION"]->ThrowException(str_replace(
"#ID#",
$arFields[
"PERSON_TYPE_ID"],
GetMessage(
"SALE_EXPORT_ERROR_PERSON_TYPE_ID")),
"ERROR_NO_PERSON_TYPE_ID");
3423 if (! static::CheckFields(
'ADD',
$arFields))
3428 if (mb_substr(
$key, 0, 1) ==
"=")
3435 if (($map1C = unserialize(
$arFields[
'VARS'], [
'allowed_classes' =>
false])) && is_array($map1C))
3437 self::setMap(
$arFields[
'PERSON_TYPE_ID'], $map1C,
'Add:'.
$arFields[
'PERSON_TYPE_ID']);
3452 if (mb_substr(
$key, 0, 1) ==
"=")
3459 if (($map1C = unserialize(
$arFields[
'VARS'], [
'allowed_classes' =>
false])) && is_array($map1C))
3469 $r = new \Bitrix\Main\Result();
3471 $res = \Bitrix\Sale\Internals\BusinessValueCode1CTable::getList(
array(
3472 'select'=>
array(
'CODE_INDEX',
'PERSON_TYPE_ID'),
3473 'filter'=>
array(
'PERSON_TYPE_ID'=>$typeId)
3475 while($row=
$res->fetch())
3477 $r = \Bitrix\Sale\Internals\BusinessValueCode1CTable::delete(
array(
3478 'PERSON_TYPE_ID' => $row[
'PERSON_TYPE_ID'],
3479 'CODE_INDEX' => $row[
'CODE_INDEX'],
3484 $r = \Bitrix\Sale\Internals\BusinessValueTable::delete(
array(
3487 'PERSON_TYPE_ID' => $row[
'PERSON_TYPE_ID'],
3498 unset(
$GLOBALS[
"SALE_EXPORT"][
"SALE_EXPORT_CACHE_".
$ID]);
3504 if (is_array($consumer[
'CODES']))
3506 foreach ($consumer[
'CODES'] as $codeKey =>
$code)
3508 if(!isset(
$code[
'CODE_INDEX']))
3525 if (static::$lid ===
null)
3527 static::setLanguage(LANGUAGE_ID);
3532 if (empty(
$lang[static::$lid]))
3537 if (array_key_exists(
$name,
$lang[static::$lid]) && strval(trim(
$lang[static::$lid][
$name])) !==
'')
3564 if (
$fields[
'ENTITY_DATE_UPDATE'] <>
'')
3567 if (intval(
$fields[
'PARENT_ID'])>0)
3570 if (intval(
$fields[
'OWNER_ENTITY_ID'])>0)
3576 $params[
'MESSAGE'] = LoggerDiag::isOn()?
$fields[
'MESSAGE']:
null;
3578 $params[
'DATE_INSERT'] = new \Bitrix\Main\Type\DateTime();
static getConnection($name="")
static loadLanguageFile($file, $language=null, $normalize=true)
static getMessage($code, $replace=null, $language=null)
static convertEncoding($data, $charsetFrom, $charsetTo)
static getRekvCodeKey($personTypeId, $codeIndex)
static setMapping($codeKey, $personTypeId, array $mapping)
static getMapping($codeKey, $consumerKey=null, $personTypeId=null, array $options=array())
static getPersonTypes($all=false, array $resetAllPersonTypes=null)
static getValueFromProvider(IBusinessValueProvider $provider=null, $codeKey, $consumerKey)
static createObject(array $srvParams)
static updateEmptyXmlId($id, $xmlId)
const INVOICE_PAYMENT_CASH
const INVOICE_PAYMENT_CASH_LESS
const INVOICE_PAYMENT_CARD_TRANSACTION
const PAYMENT_CARD_TRANSACTION
static getDirectionType()
static getPathToNode($primary, $parameters, $behaviour=array('SHOW_LEAF'=> true))
static getInnerPaySystemId()
static getPsType($paySystemId)
static getInstance($type)
static isLocationProEnabled()
static GetByValue($PropID, $Value)
static GetList($arOrder=array("SORT"=> "ASC", "NAME"=> "ASC"), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static GetArchive($strArcName, $strType="")
static GetPropsList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static getCmrXmlRootNameParams()
static getDeliveryAddress()
static getVersionSchema()
static getOrderTax(\Bitrix\Sale\Order $order)
static OutputXmlDeliveryAddress()
static ExportOrders2Xml($arFilter=Array(), $nTopCount=0, $currency="", $crmMode=false, $time_limit=0, $version=false, $arOptions=Array())
static getProvidersInstanceByOrder(Bitrix\Sale\Order $order)
static getOrderDeliveryItem($arOrder, $bVat, $vatRate, $vatSum)
static getEndTime($time_limit)
static getEntityChangeTable()
static export(array $params)
static getAccountNumberShopPrefix()
static outputXmlUnit($arBasket)
static getLastOrderExported($timeUpdate)
static getStatusInfoByStatusId($id)
static OutputXmlRekvProperties($agent, $agentParams)
static OutputXmlDocument($typeDocument, $xmlResult, $document=array())
static setVersionSchema($versionSchema=false)
static getXmlSaleStore($arShipmentStore, $arStore)
static getXmlRekvProperties($agent, $agentParams)
static getNumberBasketPosition($basketId)
static migrateToBusinessValues()
static getXmlSaleProperties($arOrder, $arShipment, $arPayment, $agent, $agentParams, $bExportFromCrm)
static setDeliveryAddress($deliveryAdr)
static prepareFilter($arFilter=array())
static UnZip($file_name, $last_zip_entry="", $interval=0)
static getPayment($arOrder)
static OutputXmlDocumentsByType($typeDocument, $xmlResult, $arOrder, $documents, \Bitrix\Sale\Order $order=null, $agentParams, $arProp, $locationStreetPropertyValue)
static checkTimeIsOver($time_limit, $end_time)
static isFormattedDateFields($type, $field)
static GetList($order=Array("ID"=> "DESC"), $filter=Array(), $group=false, $arNavStartParams=false, $select=array())
static getCatalogMeasure()
static getSalePaySystem()
static getUserTimeStapmX(array $arOrder)
static getShipment($arOrder)
static getXmlOrderDiscount($arOrder)
static setXmlEncoding($encoding)
static saveExportParams(array $arOrder)
static ExportContragents($arOrder=array(), $arProp=array(), $agent=array(), $arOptions=array())
static getShipmentTable()
static getOrderSumTaxMoney($arOrderTaxAll)
static updateEmptyUserXmlId(array $arOrder, array $arProp)
static getUserXmlId(array $arOrder, array $arProp)
static getCashBoxOneCId()
static deleteREKV($typeId)
static resolveEntityTypeId($typeDocument, array $document)
static OutputXmlSiteName($arOrder)
static setCatalogMeasure($arMeasures)
static setCrmMode($crmMode)
static getLastDateUpdateByParams(array $params)
static setLanguage($value)
static getXmlContragents($arOrder=array(), $arProp=array(), $agent=array(), $arOptions=array())
static getXmlSaleStoreBasket($arOrder, $arStore)
static isExportFromCRM($arOptions)
static setSiteNameByOrder($arOrder)
static setCurrencySchema($currency)
static getXmlOrderTax($arOrderTaxAll)
static Update($ID, $arFields)
static setOrderSumTaxMoney($orderTax)
static getXmlBasketItems($type, $arOrder, $arFilter, $arSelect=array(), $arShipment=array(), $order=null)
static normalizeExternalCode($code)
static getParentEntityTable()
static getFormattedDateFields()
static outputXmlMarkingCodeGroup($arBasket)
static log(array $fields)
static prepareSaleProperty($arOrder, $bExportFromCrm, $bCrmModuleIncluded, $paySystems, $delivery, &$locationStreetPropertyValue, \Bitrix\Sale\Order $order)
const DIVIDER_NUMBER_POSITION
static getProvidersInstanceByEntity(\Bitrix\Sale\IBusinessValueProvider $entity)
static getParentEntityTypeId()
static OutputXmlDocumentRemove($typeDocument, $document)
static GetByID($primary, $strLang=LANGUAGE_ID)
static GetLangByID($statusId, $languageId=LANGUAGE_ID)
static getEntityChangeTable()
static getStatusInfoByStatusId($id)
static getUserTimeStapmX(array $arOrder)
static getShipmentTable()
static normalizeExternalCode($xml)
static getUserXmlId(array $arOrder, array $arProp)
static resolveEntityTypeId($typeDocument, array $document)
static getParentEntityTable()
static getParentEntityTypeId()
if(!empty($by)) $dbOrderList
</td ></tr ></table ></td ></tr ><?endif?><? $propertyIndex=0;foreach( $arGlobalProperties as $propertyCode=> $propertyValue
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
$_SERVER["DOCUMENT_ROOT"]
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
if(!defined('SITE_ID')) $lang
IsModuleInstalled($module_id)
HasScriptExtension($check_name)
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
GetMessage($name, $aReplace=null)
MakeTimeStamp($datetime, $format=false)
$GLOBALS['____1690880296']
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
if(CSalePaySystemAction::GetParamValue("DATE_PAY_BEFORE", false)) $dbBasket
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
$GLOBALS['_____370096793']