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 |