Помощь Интеграция 1С

Сам задал вопрос, сам на него и отвечу (может быть кому-то пригодится)
PHP:
    foreach ($xml_variant->Склад as $store) {
        switch((string) $store['ИдСклада']) {
        // Получение атрибутов элемента по индексу
        case '03e25a71-4d56-13e4-a0b9-082700cf0500':
            $variant->st0 = $store['КоличествоНаСкладе'];
        break;
        case 'e9825a55-4eb0-13e4-a0bc-082700cf0500':
            $variant->st1 = $store['КоличествоНаСкладе'];
        break;
        case 'e9825a57-4eb0-13e4-a0bc-082700cf0500':
            $variant->st2 = $store['КоличествоНаСкладе'];
        break;
        case '7eb2529e-448f-13e5-a0eb-082700cf0500':
            $variant->st3 = $store['КоличествоНаСкладе'];
        break;
        }
    }
после выполнения кода, количество товара на каждом складе запишется в соответствующую переменную.

нужна помощь, 1с + симпла . трабл с обработкой заказов. заказ приходит, - в 1с меняем статус с "новый" на "приянт", статус меняется в симпле с 0 на 1 ,но без письма клиенту, а далее глухота. Не выполнен, не удален, не отменен - изменений нет. После полного проведения заказа в 1с , статус оплаты тоже не меняется.
Кто поможет?

Давайте попробуем разобраться, я не большой специалист.
Если что-то будет не так, надеюсь, знатоки исправят.

Мы рассматриваем случаи когда изменился статус заказа или признак оплаты в базе 1с.
В файле 1c_exchange.php в районе строки с номером 62 есть такой код
PHP:
        if(isset($xml_order->ЗначенияРеквизитов->ЗначениеРеквизита))
        foreach($xml_order->ЗначенияРеквизитов->ЗначениеРеквизита as $r)
        {
            switch ($r->Наименование) {
            case 'Проведен':
                $proveden = ($r->Значение == 'true');
                break;
            case 'ПометкаУдаления':
                $udalen = ($r->Значение == 'true');
                break;
            // ДОБАВИМ проверку. была ли оплата?
            // запомним признак оплаты, который получили из 1с
            case 'Заказ оплачен':
                $order->paid = ($r->Значение == 'true');
                break;
            // ДОБАВИМ проверку, был ли доставлен заказ по базе 1с?
            // значение "[F] Доставлен", НУЖНО будет уточнить в файле,
            // который создает 1с при обмене
            case 'Статус заказа':
                $delivered = ($r->Значение == "[F] Доставлен");
                break;
            }
        }
        if($proveden)
           $order->status = 1;
        else
           $order->status = 0;
        // если заказ доставлен по базе 1c,
        // в simpla считаем, что он выполнен
        if ($delivered)
           $order->status = 2;
        if($udalen)
           $order->status = 3;
Смотрим далее
PHP:
            // здесь идет проверка на существование заказа в базе simpla
            if ($existed_order) {
            //если заказ существует, то происходит его обновление
            //при этом никто не смотрит на предыдущее состояние заказа
            //заказ в simpla просто заменяется на заказ из 1с
                $simpla->orders->update_order($order->id, $order);
            } else {
                $order->id = $simpla->orders->add_order($order);
            }
Нужно добавить несколько строк.
PHP:
        if ($existed_order) {
        // если заказ существует
           $send_mail = false;
           if ($existed_order->status != $order->status) {
           // если статус существующего заказа
           // не совпадает с новым статусом заказа, то
           // отправить письмо пользователю
              $send_mail = true;
           }
           else {
           // если статусы заказов совпадают,
           // т.е. мы еще не отправляли уведомление заказчику,
           // проверим, изменился ли признак оплаты
              if ($existed_order->paid != $order->paid) {
              // если признак оплаты изменился,
              // отправим уведомление
                 $send_mail = true;
              }
            }
            // обновить заказ в simpla
            $simpla->orders->update_order($order->id, $order);

            // если есть необходимость, отправить уведомление
            if ($send_mail) {
                $simpla->notify->email_order_user(intval($order->id));
            }
        } else {
            $order->id = $simpla->orders->add_order($order);
        }
 
Последнее редактирование:
Сейчас заказы переходят новый-принят - удален ( в выполненный не попадает). оплата тоже где то потерялась. доставка вообще нету, может и не предусмотрено?

как то все запутано, сообщения начали приходить, но
1) статус с нового на принят меняется ( обмен с цмс есть и письмо и приходит), только статус заказа не меняется остается "принят" ,
2) в 1с удалить "пометить на удаление" (обмен есть, письмо есть (но статус остается"обрабатывается")), заказ попадает в "удалены",
если в1с заказ статус "завершен-отменен" - то заказ не переходит в удалены
а если с цмс удалить то в 1с попадает "завершен-отменен"
чуть написал)))

при отправке с цмс статусы в заказе соответствуют разделу где лежат
 
Да, точно - я ошибся.
Сначала отправляется уведомление при не изменившемся заказе, а потом происходит обновление заказа в базе simpla. А должно быть наоборот - сначала должен обновиться заказ в simpla, а потом высылается письмо. Сейчас исправлю.

Теперь нужно договориться. ПРИНИМАЕМ, что
  • если статус заказа в 1с проведен, то в simpla статус заказа ПРИНЯТ,
    иначе (если в 1с не проведен) статус заказа в simpla НОВЫЙ;
  • НО если статус заказа в 1с "[F] Доставлен", то в simpla статус заказа ВЫПОЛНЕН;
  • если статус заказа в 1с удален, то в simpla статус заказа УДАЛЕН.
PHP:
        if($proveden)
            $order->status = 1;
        else
            $order->status = 0;
        // если заказ доставлен по базе 1c,
        // в simpla считаем, что он выполнен
        if ($delivered)
            $order->status = 2;
        if($udalen)
            $order->status = 3;
Либо предложите свой вариант.

И еще немного: в базе данных simpla в таблице заказов (orders) есть поле (closed), которое изменяется в зависимости от состояния заказа (status)
  • новый (status = 0, closed = 0);
  • принят (status = 1, closed = 1);
  • выполнен (status = 2, closed = 1);
  • удален (status = 3, closed = 0).
Где используется в simpla поле closed?
 
Последнее редактирование:
Где используется в simpla поле closed?
я могу ошибаться, но видимо поле closed = 1 означает успешное/конверсионное действие, т.е. ведущее к успешному закрытию заказа в деньги. В статистике отображаются?
 
Назад
Сверху