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

Inflow. Поступления

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

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

Методы

Метод Адрес Что делает
Получить поступления /api/inflow Возвращает документы поступления с фильтрами по датам и складу
Создать или изменить /api/inflow/update Обновляет шапку документа или создаёт документ, может сменить статус
Массовое обновление /api/inflow/batchUpdate Создаёт документы вместе со строками из одного XML
Удалить документ /api/inflow/delete Удаляет документ-черновик
Принять на склад /api/inflow/accepting Принимает черновик: увеличивает остатки на складе
Откатить принятие /api/inflow/rollback Возвращает принятый документ в черновик и убирает товар со склада
Создать или изменить строку /api/inflow/updateItems Обновляет строку документа или добавляет новую
Удалить строку /api/inflow/deleteItems Удаляет строку документа
Загрузить файл /api/inflow/upload Принимает накладную в формате CSV

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

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

Статус хранится в поле status. Документ проходит четыре этапа:

Значение Название Что означает
draft Черновик Документ наполняется. Остатки на складе не менялись. Только в этом статусе документ можно удалить
confirm Товар поступил, идёт сверка Промежуточный статус. Остатки ещё не изменены
accept Принят Товар оприходован, остатки на складе увеличены. Изменение количества — только корректировкой. Можно откатить методом rollback
complete Принят окончательно Корректировки недоступны. Откатить через API нельзя

Статус можно сменить параметром status в методах update и batchUpdate либо отдельным методом accepting. Переход в accept или complete принимает документ на склад. Назад по цепочке статус этими методами вернуть нельзя: для отката принятого документа используйте rollback (только из статуса accept).

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

GET https://[компания].myvirtualpos.ru/api/inflow?apikey=MySecret&datefrom=20260901&dateto=20260930&withitems=1

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

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

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

Ограничение в 30 дней действует и при поиске по ид. Если не задан ни один из параметров дат и не указан days, метод отбирает документы только за последние 30 дней по дате документа. Это касается и запросов с id, external_id и last_id: документ старше 30 дней вернётся только если добавить days с большим значением (например, days=3650) или указать дату. Параметр dateto сам по себе окно не снимает: считается 30 дней до этой даты.

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

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

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

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

Основное

id Число. Ид документа
external_id Строка. Код документа во внешней системе
guid Строка. Уникальный идентификатор документа (GUID)
status Строка. Статус документа, см. раздел «Статусы документа»
waybill Строка. Номер накладной
docdate Строка. Дата документа, формат гггг-мм-дд чч:мм:сс
accept_date Строка. Дата принятия на склад
comment Строка. Комментарий
amount Строка. Сумма документа по строкам
created_date, last_update_date Строка. Дата и время создания и последнего изменения
created_by, last_update_by Ид пользователя, создавшего и изменившего документ. Для документов, созданных через API, пусто

Точка продаж и поставщик

warehouse_id Число. Ид точки продаж
warehouse_external_id Строка. Код точки продаж во внешней системе
supplier_id Число. Ид поставщика
supplier_external_id Строка. Код поставщика во внешней системе
supplier_name, supplier_inn, supplier_kpp Строка. Название, ИНН и КПП поставщика
supplier_type Число. Ид типа поставщика
supplier_readonly_inflow Число. 1 — поступления от такого поставщика создаются автоматически (внутренний поставщик) и не редактируются

Документы-основания

factura_invoice_num, factura_invoice_date Строка. Номер и дата счёта-фактуры
UPD_num, UPD_date Строка. Номер и дата УПД
correction_num Строка. Номер исправления
parent_id, overcome_id, undercome_id Число. Ид связанных документов: родительского поступления и корректировок излишков и недостач
request_id Число. Ид заявки на пополнение запасов, по которой создано поступление
znak_document_id, znak_status, znak_acceptance_type Данные подтверждения в системе маркировки
attribute1 … attribute15 Строка. Значения гибких полей документа

Строки (при withitems=1: список items, каждая строка в объекте item; зависит от настроенных гибких полей товарного остатка)

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

Корректировка (при withadjustment=1, объект adjustment; пустой список, если корректировки нет)

id Ид корректировки поступления
title Название корректировки
created_date Дата создания
items Строки корректировки: line_id, item_id, item_ext_id, item_name, quantity (фактическое количество), quantity_expected (ожидаемое)

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

{
  "success": 1,
  "type": "inflow",
  "count": 1,
  "days_limit": 30,
  "inflows": [
    {
      "inflow": {
        "id": 21230,
        "warehouse_id": 6,
        "supplier_id": 145,
        "waybill": "118",
        "docdate": "2026-09-01 00:00:00",
        "status": "accept",
        "comment": "Поставка сентября",
        "created_date": "2026-09-01 10:14:02",
        "created_by": null,
        "last_update_date": "2026-09-01 10:20:11",
        "last_update_by": null,
        "external_id": "1C-321",
        "accept_date": "2026-09-01 00:00:00",
        "factura_invoice_num": "",
        "factura_invoice_date": null,
        "UPD_num": "",
        "UPD_date": null,
        "correction_num": null,
        "guid": "803AD8B6-688C-11E7-849D-74D435EE6043",
        "supplier_external_id": "S-212",
        "supplier_name": "Мой поставщик",
        "supplier_inn": "1234567890",
        "supplier_kpp": "111",
        "supplier_type": 2,
        "supplier_readonly_inflow": 0,
        "warehouse_external_id": "WH-111",
        "items": [
          {
            "item": {
              "line_id": 252894,
              "item_id": 431,
              "item_ext_id": "ITEM-431",
              "item_name": "Открытка с шоколадом",
              "quantity": "68.000",
              "quantity_expected": "68.000",
              "barcode": null,
              "price": "65.0000",
              "amount": "4420.00",
              "manuf_date": null,
              "expir_date": null,
              "lot_number": null,
              "external_id": null,
              "vat_rate": "20.00",
              "vat_sum": "736.67",
              "sum_minus_vat": "3683.33",
              "guid": "3A148213-7184-B497-9C31-566F439CED63",
              "onhand_id": 171567
            }
          }
        ],
        "adjustment": [],
        "amount": "4420.00"
      }
    }
  ]
}

В примере для краткости опущены гибкие поля attribute1…attribute15 и связанные документы (parent_id, request_id и другие).

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

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <success>1</success>
  <type>inflow</type>
  <count>1</count>
  <inflows>
    <inflow>
      <id>21230</id>
      <warehouse_id>6</warehouse_id>
      <docdate>2026-09-01 00:00:00</docdate>
      <status>accept</status>
      <!-- остальные поля шапки -->
      <items>
        <item>
          <line_id>252894</line_id>
          <item_id>431</item_id>
          <quantity>68.000</quantity>
          <!-- остальные поля строки -->
        </item>
      </items>
      <adjustment/>
      <amount>4420.00</amount>
    </inflow>
  </inflows>
  <days_limit>30</days_limit>
</root>

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

Задача Запрос
Документы за последние 30 дней (шапки) /api/inflow?apikey=MySecret
Документы за сентябрь со строками /api/inflow?apikey=MySecret&datefrom=20260901&dateto=20260930&withitems=1
Один документ по коду из 1С /api/inflow?apikey=MySecret&external_id=1C-321&days=3650&withitems=1
Новые документы после последнего полученного /api/inflow?apikey=MySecret&last_id=21230&withitems=1
Документы точки продаж по её коду /api/inflow?apikey=MySecret&ext_warehouse_id=WH-111&datefrom=20260901
Документы, изменённые за сутки /api/inflow?apikey=MySecret&last_update_date=20260925

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

POST https://[компания].myvirtualpos.ru/api/inflow/update?apikey=MySecret&external_id=1C-321&create_if_not_exist=1
warehouse_id=6&supplier_id=145&waybill=118&docdate=2026-09-01&comment=Test

Параметры

id Число. Ид изменяемого документа
external_id Строка. Код документа во внешней системе. Если id не указан, по нему ищется документ; одновременно это поле документа, при создании оно сохраняется
create_if_not_exist 1 — создать документ, если он не найден. Новый документ создаётся в статусе черновика. Без параметра при отсутствии документа будет ошибка
warehouse_id Число. Ид точки продаж. Обязателен при создании
warehouse_external_id Строка. Код точки продаж во внешней системе. Заменяет warehouse_id, если точка с таким кодом найдена; если не найдена, параметр молча игнорируется
supplier_id Число. Ид поставщика. Обязателен при создании
supplier_external_id Строка. Код поставщика во внешней системе. Работает так же, как warehouse_external_id
waybill Строка. Номер накладной. Обязателен при создании
docdate Дата документа в формате гггг-мм-дд. Обязателен при создании. Формат дд.мм.гггг не принимается: придёт ошибка сохранения
status Статус документа. Документ сначала сохраняется, затем переводится в этот статус. Правила переходов — в разделе «Статусы документа»
comment, accept_date, factura_invoice_num, factura_invoice_date, UPD_num, UPD_date, correction_num, guid, request_id Остальные поля документа, как в ответе метода получения
attribute1 … attribute15 Значения гибких полей документа

Изменяются только переданные параметры, остальные остаются прежними. Строки документа этим методом не меняются — для этого есть updateItems и batchUpdate.

Ответ

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

Смена статуса выполняется вместе с сохранением. При переводе в accept или complete документ принимается на склад: должна быть хотя бы одна строка, а все строки должны ссылаться на существующие товары, иначе придёт ошибка и статус не изменится. Если сохранить не удалось, вся операция отменяется.

Массовое обновление

Метод создаёт документы вместе со строками одним запросом. Данные передаются в параметре batch в формате XML, поэтому используйте POST.

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

Структура batch:

<root>
  <inflows>
    <inflow>
      <external_id>1C-321</external_id>
      <waybill>118</waybill>
      <warehouse_external_id>WH-111</warehouse_external_id>
      <supplier_external_id>S-212</supplier_external_id>
      <docdate>2026-09-01</docdate>
      <comment>Поставка</comment>
      <status>accept</status>
      <items>
        <item>
          <item_ext_id>ITEM-431</item_ext_id>
          <quantity>68</quantity>
          <quantity_expected>68</quantity_expected>
          <cogs>65</cogs>
          <lot_number>A1</lot_number>
        </item>
      </items>
    </inflow>
  </inflows>
</root>

Правила обработки:

  • Документ ищется по id, а если его нет — по external_id. Если найти не удалось, создаётся новый черновик с полями из XML. Точка продаж и поставщик задаются кодами warehouse_external_id и supplier_external_id или ид warehouse_id и supplier_id.
  • Шапка существующего документа не обновляется: для найденных документов применяются только строки и статус.
  • Строка ищется по id строки, а если его нет — по item_ext_id среди строк этого документа. Если строки нет, создаётся новая по item_id или item_ext_id (с учётом lot_number). Поля строки — как в методе updateItems.
  • Статус (status) применяется в последнюю очередь, после строк.
  • Вся загрузка выполняется в одной транзакции: при любой ошибке не сохраняется ничего.

Один документ на элемент <inflows>. Метод берёт из каждого элемента <inflows> только первый <inflow>. Чтобы загрузить несколько документов, повторите сам элемент <inflows> для каждого документа. Это же относится к строкам: если у документа несколько строк одного товара с разными сериями, а поиск ведётся по item_ext_id, строка будет найдена по товару без учёта серии, и вторая строка перезапишет первую. Для таких строк указывайте item_id и lot_number.

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

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

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

Удалить можно только документ в статусе draft. Ответ: {«success»:1,«id»:21230}.

Принятие и откат принятия

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

Ответ обоих методов: {«success»:1,«id»:21230}.

  • accepting принимает документ из статуса draft сразу в статус accept: добавляет количество из строк в остатки склада, пересчитывает закупочную цену остатка и записывает движение товара. Условия: в документе есть хотя бы одна строка, нет пустых строк без товара, все товары существуют в ассортименте.
  • rollback отменяет принятие документа из статуса accept: возвращает остатки к прежним значениям и переводит документ в draft. Документ в статусе complete откатить нельзя.

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

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

POST https://[компания].myvirtualpos.ru/api/inflow/updateItems?apikey=MySecret&create_if_not_exist=1
inflow_id=21230&item_id=431&quantity=68&quantity_expected=68&cogs=65
id Число. Ид строки
external_id Строка. Код строки во внешней системе. Если id не указан, по нему ищется строка; одновременно это поле строки
create_if_not_exist 1 — добавить строку, если она не найдена
inflow_id Число. Ид документа. Обязателен при создании строки
item_id Число. Ид товара. При создании нужно указать item_id или item_ext_id
item_ext_id Строка. Код товара во внешней системе. Используется, если не указан item_id
lot_number Строка. Серия (партия). Строка с той же парой «товар + серия» в документе одна: повторный запрос вернёт уже существующую
quantity Число. Принятое количество
quantity_expected Число. Ожидаемое количество
cogs Число. Закупочная цена. Сумма строки пересчитывается
barcode, manuf_date, expir_date, vat_rate, vat_sum, sum_minus_vat, guid, recommended_retail_price Остальные поля строки, как в структуре ответа
attribute1 … attribute15 Значения гибких полей товарного остатка

Ответ: {«success»:1,«id»:«252927»,«isnew»:«1»}. id — ид строки, isnew — создана ли строка.

Числа проверяйте до отправки. Нечисловое значение в quantity или cogs ошибки не вызывает: запрос завершается успешно, а значение сохраняется как 0. Принимать документ с такими строками не стоит. Также ссылка на несуществующий item_id не отклоняется при добавлении: ошибка появится только при принятии документа.

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

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

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

Загрузка накладной файлом

Метод принимает файлы накладных в формате CSV и ставит их в очередь на обработку: поступления создаются из файлов позже, а не в момент вызова. Запрос отправляется методом POST с типом multipart/form-data; можно приложить несколько файлов.

POST https://[компания].myvirtualpos.ru/api/inflow/upload?apikey=MySecret&waybill=118&warehouse_id=6&supplier_id=145&encoding=utf8
file=@nakladnaya.csv

Параметры

waybill Строка. Номер накладной. Обязателен
supplier_id Число. Ид поставщика. Обязателен
supplier_external_id Строка. Код поставщика во внешней системе. Можно использовать вместо supplier_id
warehouse_id Число. Ид точки продаж. Обязателен
warehouse_external_id Строка. Код точки продаж во внешней системе. Можно использовать вместо warehouse_id
docdate Дата ГГГГММДД. По умолчанию — текущая дата
encoding Кодировка файла: cp1251 (по умолчанию) или utf8
unique true (по умолчанию) — не принимать накладную, которая с таким номером, точкой продаж и поставщиком уже загружалась; false — не проверять
phone Строка. Телефон клиента, если из поступления создаётся заказ
order Строка. Номер заказа, если из поступления создаётся заказ

Формат файла

Файл в формате CSV с разделителем «точка с запятой». Первая строка — заголовки столбцов, остальные — строки накладной. Пример:

Количество;Количество ожидаемое;Цена закупки;Цена закупки без НДС;Сумма закупки;Штрихкод;Серия;Годен до;ID товара у Поставщика;Название товара у поставщика;Ставка НДС;Сумма НДС;Сумма без НДС;Производитель поставщика
1;1;556.94;506.31;556.94;5000456022453;ACAT;01.11.2027;10735;Товар 1;10;50.63;506.31;Производитель 1

Набор столбцов зависит от настроек загрузки накладных в вашей системе.

Ответ

{"success":1,"files":["74e474f98c55579e5f0bc72123da2b68.csv"]}
success 1 — файлы приняты
files Имена временных файлов, в которых сохранены загруженные накладные. Из них позже будут созданы поступления

Ошибки

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

Сообщение Метод Причина Что делать
Incorrect date format '…'. Valid format is: YYYYMMDD получение Дата в параметре не в формате ГГГГММДД Передайте дату как 20260901
Укажите [id] или [external_id] для обновления\создания записи update Нет id, external_id и create_if_not_exist Передайте идентификатор или create_if_not_exist=1
You have to specify [id] or [external_id] to update record updateItems То же для строки Передайте идентификатор строки или create_if_not_exist=1
Record not found, Запись не найдена update, delete, accepting, rollback, deleteItems, updateItems Документ или строка не найдены Проверьте ид или код
Ошибка в данных. … update Не заполнены обязательные поля (точка продаж, поставщик, накладная, дата), значение слишком длинное Исправьте указанные поля
Cannot save data. … update, updateItems Ошибка сохранения; например, дата не в формате гггг-мм-дд, не указан товар при создании строки Проверьте формат и обязательные параметры; текст после точки поясняет причину
Невозможно сохранить поступление в выбранном статусе … update, batchUpdate Не удалось перевести документ в статус: неизвестный статус, возврат назад, нет строк, товара нет в ассортименте Исправьте причину, указанную в тексте
Укажите номер поступления для которого требуется создать запись о товара updateItems Документ с inflow_id не найден Проверьте inflow_id
Data validation failed. … batchUpdate, updateItems Данные документа или строки не прошли проверку Исправьте указанные поля
Parameter 'batch' not found batchUpdate Не передан параметр batch Передайте XML в параметре batch
Warehouse with external_id … not found, Supplier with external_id … not found, Item with external_id … not found batchUpdate Не найдены точка продаж, поставщик или товар по коду Проверьте коды во внешней системе
Inflow status is not draft delete Удалять можно только черновик Откатите документ (rollback) и удалите
Inflow was already accepted accepting Документ уже принят Ничего делать не нужно
Accepting failed. … accepting Нет строк, есть пустые строки или товары, которых нет в ассортименте Исправьте документ, текст после точки поясняет причину
Inflow was not accepted or has been already rollbacked rollback Документ не в статусе accept Откат возможен только для принятого документа
Не указан документ поступления upload Не передан waybill Передайте номер накладной
Не передан идентификатор поставщика / точки продаж upload Не указаны ни ид, ни внешний код Передайте supplier_id или warehouse_id
Поставщик … / Точка продаж … не найден(а) upload Нет записи с таким ид или кодом Проверьте значения
Поступление … указанного склада и поставщика уже было загружено upload Накладная с таким номером уже загружалась Передайте unique=false, если загрузка повторная
You have to specify [id] or [external_id] to delete/accept/rollback… delete, accepting, rollback, deleteItems Нет параметров поиска Передайте id или external_id

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

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