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

Writeoff. Списания

Методы для работы с документами «Списание»: получение документов со строками, создание документа и его строк, проведение (списание товара со склада) и аннулирование, удаление.

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

Методы

Метод Адрес Что делает
Получить списания /api/writeoff Возвращает документы списания с фильтрами по датам и точке продаж
Создать или изменить документ /api/writeoff/update Обновляет шапку документа или создаёт документ, проводит и аннулирует
Удалить документ /api/writeoff/delete Удаляет документ-черновик
Создать или изменить строку /api/writeoff/updateItems Обновляет строку черновика или добавляет новую
Удалить строку /api/writeoff/deleteItems Удаляет строку черновика

Где передавать параметры. Ключ apikey и формат format принимаются и в адресной строке, и в теле POST-запроса. Параметры id, external_id и create_if_not_exist в методах update, delete, updateItems и deleteItems читаются только из адресной строки (GET). Остальные параметры можно передавать и в адресной строке, и в теле POST. Значения с кириллицей, пробелами и знаками + кодируйте.

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

Значение Название Что означает
draft Черновик Документ наполняется, остатки не менялись. Только черновик и его строки можно изменять и удалять
done Списан Товар списан со склада, остатки уменьшены

Статус меняется параметром status метода update: done проводит документ и списывает товар, draft у проведённого документа аннулирует списание и возвращает остатки.

Получение списаний

GET https://[компания].myvirtualpos.ru/api/writeoff?apikey=MySecret&days=90&warehouse_id=6&withitems=1

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

id Число. Ид документа. Если указан, ищется только этот документ
external_id Строка. Код документа во внешней системе (например, в 1С). Действует, если не указан id
last_id Число. Вернуть документы с ид больше указанного. Действует, если не указаны id и external_id
warehouse_id Число. Ид точки продаж. Если не указан, возвращаются документы всех точек
ext_warehouse_id Строка. Код точки продаж во внешней системе. Действует, если не указан warehouse_id. Если точки с таким кодом нет, возвращается пустой список
date Дата ГГГГММДД. Документы с этой датой документа
datefrom, dateto Дата ГГГГММДД. Документы с датой документа с указанной даты и по указанную включительно
cdatefrom, cdateto Дата ГГГГММДД. То же по дате создания документа в системе
days Число. Глубина поиска в днях от текущей даты по дате документа. По умолчанию 30
withitems 1 — добавить строки документов. По умолчанию возвращаются только шапки
format json (по умолчанию) или xml

Условия объединяются по «и». Даты передаются строго в формате ГГГГММДД, иначе метод вернёт ошибку Incorrect date format. Документы возвращаются по убыванию id: новые первыми.

Ограничение days действует всегда. По умолчанию отбираются только документы за последние 30 дней по дате документа, и это ограничение накладывается вместе со всеми остальными условиями, в том числе id, external_id и датами. Чтобы получить старые документы, добавьте days с достаточным значением, например days=3650. При days=0 ограничение снимается, и метод пытается собрать в одном ответе все документы; на больших базах это может закончиться ошибкой сервера по памяти.

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

success 1 — данные получены
type Тип данных, всегда writeoff
days_limit Число дней глубины поиска: 30 по умолчанию или значение days
count Количество документов в ответе
writeoffs Список документов. Каждый обёрнут в объект writeoff

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

Пустые значения в JSON приходят как null, в XML — как пустой элемент.

id Число. Ид документа
external_id Строка. Код документа во внешней системе
guid Строка. Уникальный идентификатор документа (GUID)
docnum Строка. Номер документа
docdate Строка. Дата документа, формат гггг-мм-дд чч:мм:сс
status, status_name Строка. Код и название статуса, см. раздел «Статусы документа»
type Строка. Тип списания: G — товары, M — материальные ценности
reason Строка. Название причины списания
comment Строка. Комментарий
amount Строка. Сумма списания по себестоимости
warehouse_id Число. Ид точки продаж
warehouse_external_id Строка. Код точки продаж во внешней системе
created_date, last_update_date Строка. Дата и время создания и последнего изменения
created_by, last_update_by Число. Ид пользователя, создавшего и изменившего документ
items Список строк; при withitems=0 пустой. Каждая строка обёрнута в объект item

Поля строки

line_id Число. Ид строки
guid Строка. Идентификатор строки (GUID); используется как код строки при обращении к строке по external_id
item_id Число. Ид товара
item_ext_id Строка. Код товара во внешней системе
item_name Строка. Название товара
quantity Строка. Количество
barcode Строка. Штрихкод
price Строка. Себестоимость единицы
amount Строка. Сумма по строке
lot_number Строка. Серия (партия)
manuf_date, expir_date Строка. Дата изготовления и срок годности

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

{
  "success": 1,
  "type": "writeoff",
  "days_limit": 90,
  "count": 1,
  "writeoffs": [
    {
      "writeoff": {
        "id": 15125,
        "external_id": "WO-2026-08",
        "guid": "5A07A106-A1A8-ECBC-2BA7-113B8662F9AF",
        "warehouse_id": 8,
        "docnum": "15125",
        "docdate": "2026-08-31 00:00:00",
        "amount": "225.00",
        "status": "done",
        "status_name": "Списан",
        "comment": "Просрочка",
        "warehouse_external_id": "WH-8",
        "type": "G",
        "reason": "Истёк срок годности",
        "created_date": "2026-08-31 18:10:00",
        "created_by": 6,
        "last_update_date": "2026-08-31 18:15:00",
        "last_update_by": 6,
        "items": [
          {
            "item": {
              "line_id": 24900,
              "guid": "3A148213-7184-B497-9C31-566F439CED63",
              "item_id": 795,
              "item_ext_id": "SKU-795",
              "item_name": "Форма для наращивания",
              "quantity": "3.000",
              "barcode": null,
              "price": "75.0000",
              "amount": "225.00",
              "manuf_date": null,
              "expir_date": null,
              "lot_number": null
            }
          }
        ]
      }
    }
  ]
}

Тот же ответ при format=xml (сокращённо):

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <success>1</success>
  <type>writeoff</type>
  <days_limit>90</days_limit>
  <count>1</count>
  <writeoffs>
    <writeoff>
      <id>15125</id>
      <status>done</status>
      <!-- остальные поля шапки -->
      <items>
        <item>
          <line_id>24900</line_id>
          <item_id>795</item_id>
          <quantity>3.000</quantity>
          <!-- остальные поля строки -->
        </item>
      </items>
    </writeoff>
  </writeoffs>
</root>

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

POST https://[компания].myvirtualpos.ru/api/writeoff/update?apikey=MySecret&external_id=WO-2026-09&create_if_not_exist=1
warehouse_id=6&docnum=WO-1&docdate=2026-09-01&type=G&reason_id=2&comment=Просрочка

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

Параметры

id Число. Ид документа. Только GET
external_id Строка. Код документа во внешней системе. Если id не указан, по нему ищется документ; одновременно это поле документа: при создании код сохраняется. Только GET
create_if_not_exist 1 — создать документ, если он не найден. Только GET
warehouse_id Число. Ид точки продаж. Обязателен при создании
warehouse_external_id Строка. Код точки продаж во внешней системе. Заменяет warehouse_id, если точка с таким кодом найдена; если не найдена, параметр молча игнорируется
docnum Строка, до 255 символов. Номер документа. Обязателен при создании
docdate Дата документа в формате гггг-мм-дд. Обязателен при создании
type G — списание товаров, M — материальных ценностей. Обязателен при создании
reason_id Число. Ид причины списания; причина должна существовать
comment Строка. Комментарий
guid Строка. Идентификатор документа. Если не указан, при создании через API остаётся пустым
status done — провести документ, draft — аннулировать проведение. Другие значения отклоняются
attribute1 … attribute15 Значения гибких полей документа

Ответ

{"success":1,"id":"15127","isnew":"1"}
success 1 — документ сохранён
id Ид документа. При создании приходит строкой, при изменении — числом
isnew «1» — документ создан, «0» — изменён существующий

Проведение списывает товар со склада. При status=done количество каждой строки вычитается из остатка точки продаж (с учётом серии). Проведение невозможно, если в документе нет строк или остатка не хватает (кроме случая, когда в настройках разрешено списание в минус): тогда придёт ошибка Cannot change status с причиной, а документ останется черновиком. status=draft у проведённого документа возвращает остатки. Аннулировать документ без строк нельзя.

Удаление документа

GET https://[компания].myvirtualpos.ru/api/writeoff/delete?apikey=MySecret&id=15127
id Число. Ид удаляемого документа. Только GET
external_id Строка. Код документа во внешней системе. Только GET

Удалить можно только документ в статусе draft. Чтобы удалить проведённый документ, сначала аннулируйте его (status=draft). Ответ: {«success»:1,«id»:15127}.

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

Строки создаются и изменяются только у черновика: строки проведённого документа менять и удалять нельзя, иначе остатки на складе разошлись бы с документом.

updateItems. Создать или изменить строку

POST https://[компания].myvirtualpos.ru/api/writeoff/updateItems?apikey=MySecret&create_if_not_exist=1
writeoff_id=15127&item_id=795&quantity=2&cogs=11.24
id Число. Ид строки. Только GET
external_id Строка. Идентификатор строки (guid). Только GET
create_if_not_exist 1 — добавить строку, если она не найдена. Только GET
writeoff_id Число. Ид документа. Обязателен при создании строки
item_id Число. Ид товара; товар должен существовать. Обязателен
quantity Число не меньше 0,001. Количество. Обязательно
cogs Число. Себестоимость единицы
retail_price Число. Розничная цена
lot_number Строка. Серия (партия)
barcode Строка. Штрихкод
manuf_date, expir_date Дата изготовления и срок годности
guid Строка. Идентификатор строки, по нему её можно найти параметром external_id. Если не указан, остаётся пустым
onhand_id Число. Ид остатка, с которого списывается товар. Если не указан, подбирается по товару и серии

Ответ: {«success»:1,«id»:«24900»,«isnew»:«1»}.

deleteItems. Удалить строку

GET https://[компания].myvirtualpos.ru/api/writeoff/deleteItems?apikey=MySecret&id=24900
id Число. Ид строки. Только GET
external_id Строка. Идентификатор строки (guid). Только GET

Ответ: {«success»:1,«id»:24900}.

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

Задача Запрос
Списания за последние 30 дней (шапки) /api/writeoff?apikey=MySecret
Списания точки за квартал со строками /api/writeoff?apikey=MySecret&days=90&warehouse_id=6&withitems=1
Документ по коду из 1С /api/writeoff?apikey=MySecret&external_id=WO-2026-09&days=3650&withitems=1
Создать документ /api/writeoff/update?apikey=MySecret&create_if_not_exist=1&external_id=WO-1&warehouse_id=6&docnum=1&docdate=2026-09-01&type=G
Добавить строку /api/writeoff/updateItems?apikey=MySecret&create_if_not_exist=1&writeoff_id=15127&item_id=795&quantity=2
Провести документ /api/writeoff/update?apikey=MySecret&id=15127&status=done
Аннулировать проведение /api/writeoff/update?apikey=MySecret&id=15127&status=draft

Ошибки

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

Сообщение Метод Причина Что делать
Incorrect date format '…'. Valid format is: YYYYMMDD получение Дата не в формате ГГГГММДД Передайте дату как 20260901
You have to specify [id] or [external_id] to update record update, updateItems Нет идентификатора и create_if_not_exist Передайте идентификатор или create_if_not_exist=1
You have to specify [id] or [external_id] to delete record delete, deleteItems Нет идентификатора Передайте id или external_id
Record not found update, delete, updateItems, deleteItems Документ или строка не найдены Проверьте идентификатор
Data validation failed. … update, updateItems Не заполнены обязательные поля, несуществующие причина или товар, количество меньше 0,001 Исправьте указанные поля
Unknown [status]. Use one of: [draft,done] update Недопустимый статус Передайте draft или done
Cannot change status. … update Провести или аннулировать документ нельзя: нет строк, не хватает остатка Текст после точки поясняет причину
Writeoff status is not draft delete, updateItems, deleteItems Документ проведён Аннулируйте документ (status=draft)
Cannot save data. … update, updateItems Ошибка сохранения Текст после точки поясняет причину
Cannot delete data. … delete, deleteItems Ошибка удаления Текст после точки поясняет причину

Если по условиям ничего не найдено, метод получения возвращает успешный ответ с count равным 0 и пустым списком writeoffs.

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