НаименованиеОрг = [Документ].Комментарий;
[Результат] = Справочники.Организации.НайтиПоНаименованию(НаименованиеОрг);
ЗаказОснование = Документы.ЗаказКлиента.ПустаяСсылка();
ЗаказОснование = ПолучитьОснование([ДокументXML], Тип("ДокументСсылка.ЗаказКлиента"));
[Результат] = ЗаказОснование.Организация;
use Bitrix\Main\Mail;
/**
* Get from b_event table
* @var integer Existed event id
*/
$displayedEventId = 336020;
/**
* List of site ids, for event theme generation
* must be replaced by current site id in public
* @var array
*/
$arSites = [
's1'
];
try
{
/**
* First, try to find event
*/
$arEvent = Mail\Internal\EventTable::getRow([
'filter' => [
'=ID' => $displayedEventId,
]
]);
if ( !$arEvent )
{
throw new \Exception('Event not found');
}
$arEvent['FIELDS'] = $arEvent['C_FIELDS'];
/**
* Try to find all message templates for
* sites. In event handler we send for one letter
* per site.
*/
$arEventMessageFilter = [
'=ACTIVE' => 'Y',
'=EVENT_NAME' => $arEvent["EVENT_NAME"],
'=EVENT_MESSAGE_SITE.SITE_ID' => $arSites,
];
$messageDb = Mail\Internal\EventMessageTable::getList([
'select' => ['ID'],
'filter' => $arEventMessageFilter,
'group' => ['ID']
]);
foreach ($messageDb as $arMessage)
{
$eventMessage = Mail\Internal\EventMessageTable::getRowById($arMessage['ID']);
$eventMessage['FILES'] = array();
$attachmentDb = Mail\Internal\EventMessageAttachmentTable::getList(array(
'select' => array('FILE_ID'),
'filter' => array('=EVENT_MESSAGE_ID' => $arMessage['ID']),
));
while($arAttachmentDb = $attachmentDb->fetch())
{
$eventMessage['FILE'][] = $arAttachmentDb['FILE_ID'];
}
$arFields = $arEvent['FIELDS'];
// get message object for send mail
$arMessageParams = array(
'EVENT' => $arEvent,
'FIELDS' => $arFields,
'MESSAGE' => $eventMessage,
'SITE' => $arSites,
'CHARSET' => $charset,
);
$message = Mail\EventMessageCompiler::createInstance($arMessageParams);
$message->compile();
echo $message->getMailBody();
}
}
catch( \Exception $e )
{
var_dump($e);
}
// создаём отгрузки
$shipmentCollection = $orderBx->getShipmentCollection();
foreach (importJson['Shipments'] as $importOrderShipment)
$shipment = $shipmentCollection->createItem();
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler('sale', 'OnSaleOrderBeforeSaved', 'orderModify');
function orderModify(Bitrix\Main\Event $event)
{
global $USER;
/** @var \Bitrix\Sale\Order $order */
$order = $event->getParameter('ENTITY');
$personTypeId = 3;
$profileId = CSaleOrderUserProps::DoSaveUserProfile($USER->GetID(), null, 'Профиль ' . random_int(0, 500), $personTypeId,
// код свойства и его значение
[
20 => random_int(100, 900),
21 => random_int(500, 599)
], $errors);
// Получаем текущую коллекцию свойств заказа и удаляем все свойства
/** @var \Bitrix\Sale\PropertyValueCollection $orderProperties */
$orderProperties = $order->getPropertyCollection();
/** @var \Bitrix\Sale\PropertyValue $orderProperty */
foreach ($orderProperties as $orderProperty) {
$orderProperty->delete();
}
// Меняем тип плательщика
$order->setPersonTypeId($personTypeId);
// Далее взято из \Bitrix\Sale\PropertyValueCollection::load()
// Т.к. на объекте заказа уже была получена коллекция, то при вызове $order->getPropertyCollection(),
// коллекция не будет заполнена свойствами под новый тип плательщика.
// Поэтому нужно добавлять свойства вручную
// Получаем список свойств нового плательщика
$props = \Bitrix\Sale\PropertyValue::loadForOrder($order);
// Добавляем свойства к коллекции
/** @var \Bitrix\Sale\PropertyValue $prop */
foreach ($props as $prop) {
$prop->setCollection($orderProperties);
$orderProperties->addItem($prop);
// В своём коде напямую этого сделать не можем, т.к. метод и свойство имеют приватный доступ
// Но можно сделать обходным путём
// $orderProperties->setAttributes($prop);
// $orderProperties->propertyGroupMap[$prop->getGroupId() > 0 && isset($groups[$personTypeId][$prop->getGroupId()]) ? $prop->getGroupId() : 0][] = $prop;
}
// Получаем значения профиля
$profileProperties = \Bitrix\Sale\OrderUserProperties::getProfileValues($profileId);
// Записываем к заказу
$orderProperties->setValuesFromPost(array('PROPERTIES' => $profileProperties), array());
}