Документация 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 заказа - откроется окно "Служебные данные". Там будут все данные по этому заказу, полученные с сайта, и в том числе - коды и названия способов оплаты и доставки.
Также можно посмотреть названия способов на сайте, в админке - но там не отображаются коды:

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

- либо \catalog\language\ru-ru\extension\payment\cod.php
- либо \catalog\language\russian\payment\cod.php

Соответственно, у этого способа оплаты код будет "cod", а название - "Оплата при получении".
Самовывоз
- либо \catalog\model\extension\shipping\pickup.php
- либо \catalog\model\shipping\pickup.php

- либо \catalog\language\ru-ru\extension\shipping\pickup.php
- либо \catalog\language\russian\shipping\pickup.php

Соответственно, у этого способа доставки код будет "pickup.pickup", а название - "Самовывоз из магазина".
Фиксированная стоимость доставки
- либо \catalog\model\extension\shipping\flat.php
- либо \catalog\model\shipping\flat.php

- либо \catalog\language\ru-ru\extension\shipping\flat.php
- либо \catalog\language\russian\shipping\flat.php

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

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