• Каким образом в Битриксе назначать стоимость доставок при синхронизации?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Давайте разберем чуть подробнее ваш фрагмент кода и представим гипотетическую ситуацию: у вас на сайте создана 1 отгрузка, а после обмена из вашей системы прилетает 2 новые отгрузки, вместо 1 существовавшей.

    Начнем с того что в:
    // создаём отгрузки
    $shipmentCollection = $orderBx->getShipmentCollection();


    Вы получаете коллекцию отгрузок. Коллекция отгрузок представляет из себя набор, состоящий из системной отгрузки + созданных системой или пользователем.
    При обработке существующего заказа с одной отгрузкой вам вернется коллекция (объект) с содержимым в 2 отгрузки: системная + ваша.

    Далее, вы производите итерацию по пришедшим отгрузкам
    foreach (importJson['Shipments'] as $importOrderShipment)

    Т.е. получается вам пришло 2 отгрузки и соответственно вы 2 раза зайдете в ваш цикл.

    Фрагмент:
    $shipment = $shipmentCollection->createItem();
    Создаст еще одну отгрузку. Иными словами после выполнения фрагмента в коллекции отгрузок у вас будет уже 4 отгрузки: системная, исходная (которая была на сайте), а так же две новых отгрузки, которые вы создали при итерировании по импортируемым отгрузкам.

    В данном случае у вас есть несколько вариантов развития событий:
    1) Вы можете очищать коллекцию отгрузок и создавать новые. Событий на изменение заказа у вас будет большое количество, но тем не менее это даст вам больше прозрачности в вашем процессе (не говоря уже о простоте реализации).

    2) Добавить маркер и по нему обновлять существующие отгрузки - менять стоимость тип и т.п.
    Это будет сложнее, но при этом чище с точки зрения событий в системе.

    P.S. И насколько я помню, цена доставки PRICE_DELIVERY из order это вроде как сумма PRICE_DELIVERY (?CUSTOM_PRICE_DELIVERY) из всех не системных отгрузок, так что задавать его бесполезно.
    Ответ написан
    1 комментарий
  • Как сделать так, чтобы заказ создавался только после успешной оплаты?

    megafax
    @megafax
    web-программист
    У Вас неверная постановка. Если заказ прям не нужен - тогда либо в случае отсутствия оплаты в некоторый промежуток времени - удаляйте заказ, только убедитесь, что он гарантировано не может быть оплачен. Либо в случае именно отмены оплаты - удаляйте заказ.
    А то у Вас получается все наоборот, если есть оплата, то есть заказ. Без наличия самого заказа не будет работать ни один модуль оплаты, потому как ему как минимум нужен номер заказа во внутренней системе.
    Ответ написан
    Комментировать
  • Как в поступлении наличных (ПКО) массово изменить реквизит?

    Jump
    @Jump
    Системный администратор со стажем.
    Кнопка дополнительные параметры - специальные возможности - показывать служебные реквизиты
    Реквизит называется "порядок отражения аванса".
    Ответ написан
    1 комментарий
  • Событие Битрикс после синхронизации заказов из 1с?

    summoner2015
    @summoner2015
    Backend всему голова
    Отдельных событий в Bitrix при интеграции с 1С очень мало. Обычно в таких случаях используют стандартные события инфоблоков, catalog или sale.
    В Вашем случае я бы использовал событие изменения заказа, и в нём отслеживал что происходит в $_SESSION и $_REQUEST. Точно не помню названий параметров, но они появляются при импорте из 1C. Таким образом можно кастомизировать интеграцию с 1С без изменений ядра Bitrix.
    Второй вариант - выделить отдельного пользователя для 1C, и отслеживать пользователя при работе с заказами. Так тоже можно кастомизировать логику только в случае когда работает интеграция 1С.
    Ответ написан
    Комментировать