Документация Sync1C - содержание


Заказы / Уточнение настроек заказов для разных способов оплаты и доставки

В файле НастройкиДляЗаказов.xml есть базовый набор настроек (описывается секцией <БазовыеНастройки>), и к нему можно добавить уточнения, для конкретных методов оплаты и доставки. При обработке очередного заказа программа берёт базовые настройки, добавляет к ним подходящие уточнения (в зависимости от того - какие у этого заказа способы оплаты, доставки, и т.д.), и получает исполнительные настройки, которые и используются при обработке этого заказа. Примеры будут для конфигурации "Управление нашей фирмой 1.6", но принцип одинаков для всех конфигураций.

Структура файла НастройкиДляЗаказов.xml выглядит примерно таким образом:

<НастройкиДляЗаказов>

   <ОбщиеПараметры>
      ...
   </ОбщиеПараметры>

   <БазовыеНастройки>
      ...
   </БазовыеНастройки>

   <УточнениеНастроек УсловиеДля="shipping_code" Шаблон="pickup.pickup" >
      ...
   </УточнениеНастроек>

   <УточнениеНастроек УсловиеДля="shipping_code" Шаблон="cdek.*" >
      ...
   </УточнениеНастроек> 

</НастройкиДляЗаказов>

Атрибуты условий

Теги <УточнениеНастроек> содержат условия, при срабатывании которых к базовым настройкам применяется это уточнение. Атрибут УсловиеДля содержит имя поля заказа:

  • "payment_code" - код метода оплаты ("cod", "sbrf_online", "yandexplusplus" и т.д.)
  • "payment_method" - название метода оплаты ("Оплата при получении", "Сбербанк-Онлайн (перевод по номеру карты)", "Яндекс.Деньги" и т.д.)
  • "shipping_code" - код метода доставки ("pickup.pickup", "flat.flat", "cdek.pvz_138_VGL3" и т.д.)
  • "shipping_method" - название метода доставки ("Самовывоз", "Доставка по Москве (в пределах МКАД)", "СДЭК. Доставка до пункта выдачи: Предтеченская, 72" и т.д.)

Атрибут Шаблон содержит шаблон для сравнения со значением поля. На данный момент поддерживаются только самые простые шаблоны:

  • либо конкретное значение (например: "cdek.pvz_138_VGL3")
  • либо начало значения (например: "cdek.*") - в этом случае в конце шаблона ставится символ "звёздочка", который как бы означает "и так далее". В частности, шаблон "cdek.*" подходит к значениям "cdek.pvz_138_VGL3", "cdek.cur_139", и вообще к любым другим, которые начинаются на "cdek.".

Ещё можно добавить такой атрибут к условию: ИгнорРегистра="Да". В этом случае, при сравнении будет игнорироваться регистр символов (большие и маленькие буквы будут считаться одинаковыми).

Содержимое уточнений

Содержимое секции <УточнениеНастроек> представляет собой "выжимку" из базовых настроек. И даже необязательно "выжимку" - теоретически, можно туда скопировать полностью всё содержимое секции <БазовыеНастройки>. Но, на практике, такое вряд ли кому-нибудь когда-нибудь понадобится.

Рассмотрим пример. Для конфигурации УНФ в базовых настройках есть секция <НовыйДокументЗаказ_УслугаДоставка>. Она описывает услугу доставки, которая добавляется в заказе на вкладку "Товары, услуги" для стоимости доставки.

<БазовыеНастройки>
        ...
    <НовыйДокументЗаказ_УслугаДоставка>
        <Прототип>
            <Номенклатура Тип="СправочникСсылка.Номенклатура, Строка"> </Номенклатура>
            <СтавкаНДС Обязательный="Да" Тип="СправочникСсылка.СтавкиНДС">Без НДС</СтавкаНДС>
        </Прототип>
    </НовыйДокументЗаказ_УслугаДоставка>
    ...
</БазовыеНастройки>

В прототипе, в свойстве "Номенклатура" можно указать услугу общую для всех способов доставки, скажем, "Доставка товара". Но так не всегда удобно и правильно. А можно сделать секции уточнений, которые будут задавать нужную номенклатуру для разных способов доставки:

<УточнениеНастроек УсловиеДля="shipping_code" Шаблон="cdek.*" >    
    <НовыйДокументЗаказ_УслугаДоставка>
        <Прототип>
            <Номенклатура Тип="СправочникСсылка.Номенклатура, Строка"> Доставка СДЭК </Номенклатура>
        </Прототип>
    </НовыйДокументЗаказ_УслугаДоставка>
</УточнениеНастроек>

Свойство "СтавкаНДС" для доставки СДЭК не меняется, поэтому уточнение его не содержит. Но если будет содержать такое же, как в базовых настройках - то ничего страшного не произойдёт, программа просто присвоит ему то же самое значение "Без НДС". То есть, создавая это уточнение, проще всего это сделать так: скопировать сюда секцию <НовыйДокументЗаказ_УслугаДоставка> из базовых настроек, и задать значение номенклатуры. Строку со ставкой НДС лучше удалить, чтобы не было избыточности. Но если её оставить, то плохого ничего не будет.

Уточнение может содержать любые свойства из базовых настроек - и из прототипов, и прочие. Надо только сохранить структуру родительских элементов, чтобы программа могла найти соответствующие свойства в базовых настройках. Следующий пример показывает надуманное, но вполне работоспособное уточнение:

<УточнениеНастроек УсловиеДля="shipping_method" Шаблон="Голубиная почта" >
    <НовыйДокументЗаказ>
        <ПроводитьДокумент Тип="Булево"> Нет </ПроводитьДокумент>
        <Прототип>
            <Организация Обязательный="Да" Тип="СправочникСсылка.Организации"> ИП Иванов </Организация>
            <ВалютаДокумента Тип="СправочникСсылка.Валюты"> пиастры </ВалютаДокумента>
        </Прототип>
    </НовыйДокументЗаказ>
    <НовыйДокументЗаказ_Товар>
        <Прототип>
            <СтавкаНДС Обязательный="Да" Тип="СправочникСсылка.СтавкиНДС"> 20% </СтавкаНДС>
        </Прототип>
    </НовыйДокументЗаказ_Товар>
    <НовыйДоговорПокупателя>
        <Прототип>
            <Наименование>Договор о поставке без гарантии получения</Наименование>
            <Организация Обязательный="Да" Тип="СправочникСсылка.Организации"> ИП Иванов </Организация>
        </Прототип>
    </НовыйДоговорПокупателя>
</УточнениеНастроек>

В файл НастройкиДляЗаказов.xml можно добавлять столько секций уточнений настроек, сколько надо. Для каждого заказа из базовых настроек будут созданы исполнительные настройки: копия базовых настроек будет уточняться теми секциями, у кого подойдут условия, и в том порядке, в каком эти секции расположены в файле НастройкиДляЗаказов.xml.

Сколько и каких уточнений надо добавить

Какие уточнения надо добавить к базовым настройкам - это зависит только от вас. Можно никакие не добавлять, а обойтись одними базовыми настройками, если создаваемые в 1С заказы вас вполне устраивают. Но если какие-то свойства документа надо изменить, в зависимости от способа оплаты и/или доставки - вот тогда и понадобятся уточнения.

Чтобы составить условие - надо знать код или название способа оплаты/доставки. Проще всего их узнать у заказов, которые загружены с сайта и ждут обработки (т.е. которые в Sync1C на вкладке Заказы):

Служебные данные заказа, с кодом и названием способа доставки

Кликните на ID заказа - откроется окно "Служебные данные". Там будут все данные по этому заказу, полученные с сайта, и в том числе - коды и названия способов оплаты и доставки.

Также можно посмотреть названия способов на сайте, в админке - но там не отображаются коды:

Информация о заказе в админке OpenCart

Или можно в phpMyAdmin посмотреть непосредственно в таблице oc_order.

Если же вы хотите заранее настроить НастройкиДляЗаказов.xml (до того, как скачивать заказы), или не хотите рыться по всем заказам в поисках нужных способов оплаты/доставки, то можно попробовать посмотреть исходный текст соответствующих файлов PHP. В каких конкретно файлах, и в каких местах в них - это отдельный непростой вопрос... вряд ли здесь можно чётко указать общий принцип, могу только поделиться несколькими примерами. Объяснять ничего не буду, т.к. если вы неплохо разбираетесь в OpenCart - то вам должно быть и так понятно, а если нет - то объяснять придётся слишком много и долго.

Оплата при получении

  • либо \catalog\model\extension\payment\cod.php
  • либо \catalog\model\payment\cod.php
файл модели cod.php
  • либо \catalog\language\ru-ru\extension\payment\cod.php
  • либо \catalog\language\russian\payment\cod.php
языковой файл cod.php

Соответственно, у этого способа оплаты код будет "cod", а название - "Оплата при получении".

Самовывоз

  • либо \catalog\model\extension\shipping\pickup.php
  • либо \catalog\model\shipping\pickup.php
файл модели pickup.php
  • либо \catalog\language\ru-ru\extension\shipping\pickup.php
  • либо \catalog\language\russian\shipping\pickup.php
языковой файл pickup.php

Соответственно, у этого способа доставки код будет "pickup.pickup", а название - "Самовывоз из магазина".

Фиксированная стоимость доставки

  • либо \catalog\model\extension\shipping\flat.php
  • либо \catalog\model\shipping\flat.php
файл модели flat.php
  • либо \catalog\language\ru-ru\extension\shipping\flat.php
  • либо \catalog\language\russian\shipping\flat.php
языковой файл flat.php

Соответственно, у этого способа доставки код будет "flat.flat", а название - "Фиксированная стоимость доставки".

Ошибка "В прототипе не задана номенклатура - доставка"

Если вы в базовых настройках не укажете номенклатуру в секции <НовыйДокументЗаказ_УслугаДоставка>, то её надо будет указать в уточнениях. И если вам встретится заказ, для которого не нашлось подходящего уточнения (например - какой-нибудь редко используемый способ доставки), то, при попытке обработать заказы, вы получите примерно такую ошибку:

Ошибка "В прототипе не задана номенклатура - доставка"

Текст ошибки содержит и код, и название метода доставки. Вы можете их скопировать с вкладки Протокол (там дублируются сообщения об ошибках), и добавить нужное уточнение в НастройкиДляЗаказов.xml.

 


Далее: Заказы / Услуги из totals заказа
Обратно: Заказы / НастройкиДляЗаказов.xml
Документация Sync1C - содержание