Перейти к содержаниюСправка

PricelistAdjustment. Корректировка розничных цен

Методы для работы с документами «Корректировка розничных цен»: получение документа со строками, создание документа и его строк, массовая загрузка цен, применение цен документа к прайс-листу и откат.

Как получить ключ, как формируются запросы и какие бывают ответы и ошибки — в статье Общие сведения. Здесь описаны только особенности методов раздела priceAdjustment.

Адрес методов — /api/priceAdjustment (регистр не важен), а не pricelistadjustment. Так называется контроллер в системе; страница вики названа по разделу документации.

Методы

Метод Адрес Что делает
Получить документ /api/priceAdjustment Возвращает документ вместе со строками
Создать или изменить документ /api/priceAdjustment/update Обновляет документ или создаёт новый, применяет цены и откатывает
Установить новую цену /api/priceAdjustment/updateItem Задаёт новую цену товара в документе
Массовая установка цен /api/priceAdjustment/batchUpdate Создаёт документ и строки из одного XML

Где передавать параметры. Ключ apikey и формат format принимаются и в адресной строке, и в теле POST-запроса. Параметры id, external_id, item_id, item_ext_id, pricelist_id и create_if_not_exist читаются только из адресной строки (GET). Остальные параметры (status, price, batch) можно передавать и в адресной строке, и в теле POST.

Статусы документа

Значение Название Что означает
draft Черновик Документ наполняется, цены в прайс-листе не менялись
accept Применён Новые цены из документа установлены в прайс-листе

Получение документа

GET https://[компания].myvirtualpos.ru/api/priceAdjustment?apikey=MySecret&id=66

Параметры запроса

id Число. Ид документа. Нужно указать id или external_id. Только GET
external_id Строка. Код документа во внешней системе. Только GET
item_id Число. Ид товара: в ответе останется только строка этого товара. Только GET
item_ext_id Строка. Код товара во внешней системе. Только GET
format json (по умолчанию) или xml

Структура ответа

success 1 — данные получены
type Тип данных, всегда PriceAdjustmentLines
priceadjustment Документ вместе со строками

Поля документа

id Число. Ид документа
external_id Строка. Код документа во внешней системе
pricelist_id Число. Ид прайс-листа, цены которого меняются
status Строка. Статус документа, см. раздел «Статусы документа»
date_applied Строка. Дата и время применения; пусто у черновика
comment Строка. Комментарий
html_template_id Число. Ид шаблона ценника
created_date, last_update_date Строка. Дата и время создания и последнего изменения
created_by, last_update_by Число. Ид пользователя, создавшего и изменившего документ
attribute1 … attribute15 Строка. Значения гибких полей документа
items Список строк. Каждая обёрнута в объект item

Поля строки

line_id Число. Ид строки
item_id Число. Ид товара
item_ext_id Строка. Код товара во внешней системе
price_new Строка. Новая цена
price_old Строка. Прежняя цена
created_date, last_update_date Строка. Дата и время создания и последнего изменения строки

Пример ответа

{
  "success": 1,
  "type": "PriceAdjustmentLines",
  "priceadjustment": {
    "id": 66,
    "external_id": "ADJ-2026-09",
    "pricelist_id": 1,
    "status": "draft",
    "date_applied": null,
    "html_template_id": null,
    "comment": "Сентябрьская индексация",
    "created_date": "2026-09-01 10:00:00",
    "created_by": 6,
    "last_update_date": "2026-09-01 10:05:00",
    "last_update_by": 6,
    "items": [
      {
        "item": {
          "item_id": 462,
          "item_ext_id": "SKU-462",
          "price_new": "620.00",
          "price_old": "590.00",
          "line_id": 1,
          "created_date": "2026-09-01 10:00:00",
          "last_update_date": "2026-09-01 10:05:00"
        }
      }
    ]
  }
}

В примере опущены гибкие поля attribute1…attribute15. Тот же ответ при format=xml (сокращённо):

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <success>1</success>
  <type>PriceAdjustmentLines</type>
  <priceadjustment>
    <id>66</id>
    <pricelist_id>1</pricelist_id>
    <status>draft</status>
    <!-- остальные поля документа -->
    <items>
      <item>
        <item_id>462</item_id>
        <price_new>620.00</price_new>
        <price_old>590.00</price_old>
        <!-- остальные поля строки -->
      </item>
    </items>
  </priceadjustment>
</root>

Создание, применение и откат документа

GET https://[компания].myvirtualpos.ru/api/priceAdjustment/update?apikey=MySecret&external_id=ADJ-2026-09&pricelist_id=1&create_if_not_exist=1

Документ ищется по id, а если он не указан — по external_id. Если документ не найден, а передан create_if_not_exist=1, создаётся новый черновик.

Параметры

id Число. Ид документа. Только GET
external_id Строка. Код документа во внешней системе. Если id не указан, по нему ищется документ; при создании код сохраняется. Только GET
pricelist_id Число. Ид прайс-листа, к которому применяются цены. Обязателен при создании. У существующего документа не меняется. Только GET
create_if_not_exist 1 — создать документ, если он не найден. Только GET
status accept — применить цены документа к прайс-листу, draft — откатить применение. Другие значения отклоняются

Ответ: {«success»:1,«id»:«68»,«isnew»:«1»} (id при создании приходит строкой, при изменении — числом; isnew — «1» для созданного документа).

Смена статуса меняет цены. Статус accept записывает новые цены из строк документа в прайс-лист и уведомляет кассы; draft у применённого документа возвращает цены прайс-листа к прежним. Если операцию выполнить нельзя (например, документ уже применён), метод вернёт ошибку Cannot change status.

Установка новой цены товара

GET https://[компания].myvirtualpos.ru/api/priceAdjustment/updateItem?apikey=MySecret&external_id=ADJ-2026-09&item_id=52&price=112
id Число. Ид документа. Нужно указать id или external_id. Только GET
external_id Строка. Код документа во внешней системе. Только GET
item_id Число. Ид товара. Нужно указать item_id или item_ext_id. Только GET
item_ext_id Строка. Код товара во внешней системе. Только GET
price Число. Новая цена. Обязательно

Если строки для товара в документе нет, она создаётся. При изменении строки прежнее значение новой цены записывается в price_old.

{"success":1,"line_id":"1000","isnew":"1","price_before":null}
success 1 — цена сохранена
line_id Ид строки. При создании приходит строкой, при изменении — числом
isnew «1» — строка создана, «0» — изменена существующая
price_before Строка. Прежнее значение price_old строки до изменения

Массовая установка цен

POST https://[компания].myvirtualpos.ru/api/priceAdjustment/batchUpdate?apikey=MySecret
batch=<root>…</root>

Параметр batch — XML. Документ создаётся черновиком, если не найден, и наполняется строками:

<root>
  <adjustment_external_id>ADJ-2026-09</adjustment_external_id>
  <pricelist_external_id>PL-RETAIL</pricelist_external_id>
  <items>
    <item>
      <ext_item_code>SKU-52</ext_item_code>
      <price>112</price>
    </item>
  </items>
</root>
adjustment_id Ид документа. Если указан, документ должен существовать
adjustment_external_id Код документа во внешней системе. Используется, если не указан adjustment_id; если документа нет, он создаётся
pricelist_id Ид прайс-листа
pricelist_external_id Код прайс-листа во внешней системе. Используется, если не указан pricelist_id
items/item/ext_item_code Код товара во внешней системе. Товар должен существовать
items/item/price Новая цена

Все изменения выполняются в одной транзакции: при ошибке не сохраняется ничего. Успешный ответ: {«success»:1,«info»:«Saved price adjustment data»}. Строки ищутся только по коду товара, поэтому в массовой загрузке товары без кода во внешней системе использовать нельзя.

Примеры запросов

Задача Запрос
Документ со строками /api/priceAdjustment?apikey=MySecret&id=66
Строка одного товара /api/priceAdjustment?apikey=MySecret&id=66&item_id=52
Создать документ /api/priceAdjustment/update?apikey=MySecret&create_if_not_exist=1&external_id=ADJ-1&pricelist_id=1
Задать новую цену /api/priceAdjustment/updateItem?apikey=MySecret&external_id=ADJ-1&item_id=52&price=112
Применить документ /api/priceAdjustment/update?apikey=MySecret&external_id=ADJ-1&status=accept
Откатить применение /api/priceAdjustment/update?apikey=MySecret&external_id=ADJ-1&status=draft

Ошибки

Ошибка авторизации и общие ошибки описаны в статье Общие сведения. Ошибки приходят с кодом HTTP 200 и success равным 0:

Сообщение Метод Причина Что делать
You have to specify pricelist adjustment using [id] or [external_id] получение Не указан документ Передайте id или external_id
Price adjustment not found получение Документ не найден Проверьте идентификатор
Item not found. id=… получение, updateItem Товар не найден Проверьте item_id или item_ext_id
You have to specify [id] or [external_id] to update record update Нет идентификатора и create_if_not_exist Передайте идентификатор или create_if_not_exist=1
Record not found update Документ не найден Проверьте идентификатор
Unknown [status]. Use one of: [draft,accept] update Недопустимый статус Передайте draft или accept
Data validation failed. … update При создании не указан pricelist_id Передайте pricelist_id
Cannot change status. … update Применить или откатить документ нельзя Текст после точки поясняет причину
You have to specify pricelist`s [id] or [external_id] updateItem Не указан документ Передайте id или external_id
You have to specify item`s [id] or [item_ext_id] updateItem Не указан товар Передайте item_id или item_ext_id
You have to specify [price] value updateItem Не передана цена Передайте price
Pricelist Adjustment not found. id=…, external_id=… updateItem Документ не найден Проверьте идентификатор
Cannot save data. … updateItem, batchUpdate Ошибка сохранения, например нечисловая цена Проверьте значения
Adjustment not found batchUpdate Документ с adjustment_id не найден Проверьте идентификатор
Pricelist not found batchUpdate Прайс-лист не найден Проверьте pricelist_id или pricelist_external_id
Item not found. Ext_id=… batchUpdate Товар с таким кодом не найден Проверьте ext_item_code

Связанные разделы