Документи через API
Документи в API Skynum використовують для створення й оновлення замовлень, продажів, повернень, поставок, внутрішніх складських документів, виробництва, інвентаризацій і рахунків на оплату.
Це найбільш відповідальна частина API, тому що після активації документ може змінити залишки, резерви, очікування, собівартість, взаєморозрахунки, фінансові показники та аналітику.
Повʼязані інструкції:
- Життєвий цикл документа;
- Додавання товарів у документ;
- Замовлення покупця;
- Товарна накладна;
- Повернення продажу;
- Надходження від постачальника;
- Повʼязані платежі;
- Статуси і стани;
- Ліміти та безпечна робота з API.
Endpoint-и документів
| Метод | Endpoint | Призначення |
|---|---|---|
| GET | /v1/documents | отримати список документів |
| POST | /v1/documents | створити документ |
| GET | /v1/documents/:id | отримати один документ |
| PUT | /v1/documents/:id | оновити документ |
| DELETE | /v1/documents/:id | видалити документ |
| PUT | /v1/documents/:id/activate | активувати документ |
| PUT | /v1/documents/:id/deactivate | деактивувати документ |
| PUT | /v1/documents/:id/change_status | змінити статус документа |
| POST | /v1/documents/:id/generate | створити новий документ з поточного |
| POST | /v1/documents/:id/lazy_sale_return | створити повернення продажу спрощеним способом |
Типи документів
Тип документа передається у полі typedoc. Для POST /v1/documents це обовʼязкове поле.
API документів підтримує такі типи:
typedoc | Назва в Skynum | Призначення |
|---|---|---|
client_order | Замовлення покупця | Резервує товари для покупця і може бути виконане продажем. |
sale | Товарна накладна | Фіксує продаж товарів покупцю. |
sale_return | Повернення продажу | Повертає товари від покупця після продажу. |
retail | Продаж роздрібний | Документ роздрібного продажу, зокрема зі Skynum.Каса. |
retail_return | Повернення роздрібного продажу | Повернення роздрібного продажу. |
payment_invoice | Рахунок на оплату | Рахунок для покупця без списання товарів зі складу. |
price_list | Прайс-лист | Документ для роботи з цінами. |
supplier_order | Замовлення постачальнику | Формує очікування товарів від постачальника. |
receipt | Надходження від постачальника | Оприбутковує товари від постачальника. |
receipt_return | Повернення постачальнику | Повертає товари постачальнику. |
surplus | Оприбуткування | Оприбутковує товар без контрагента. |
product_off | Списання | Списує товари зі складу. |
movement | Переміщення | Переміщує товари між складами. |
manufacture | Виробництво продукції | Виробничий документ для списання матеріалів і випуску продукції. |
disassembly | Розукомплектація | Зворотний процес до виробництва або комплектації. |
inventory | Інвентаризація | Документ інвентаризації. |
Інші типи документів платформи не слід використовувати в API V1, якщо вони не входять у цей список.
Чернетка, активність, стан і статус
У документах важливо розрізняти чотири речі:
| Поле | Що означає |
|---|---|
active | Чи активований документ. Неактивний документ є чернеткою і не проводить облікові зміни. |
docstate | Системний стан документа. Він відображає бізнес-етап документа. |
status_id | Статус із налаштувань компанії. Статуси налаштовуються користувачами, але привʼязані до системних станів. |
typedoc | Тип документа, від якого залежить його облікова логіка. |
Після створення документ зберігається як чернетка. Щоб документ почав впливати на облік, його потрібно активувати або створити одразу з activate: true.
Не плутайте статус і стан. status_id - це конкретний статус компанії, а docstate - системний стан, який визначає логіку документа.
Системні стани документів
Загальні стани для більшості документів:
docstate | Людська назва |
|---|---|
created | Новий |
activated | Активований |
generated | У процесі |
completed | Виконаний |
partially_completed | Частково виконано |
canceled | Скасовано |
Для замовлення покупця використовуються окремі назви станів:
docstate | Людська назва |
|---|---|
created | Новий |
activated | Резерв оформлений |
generated | Продаж створений |
partially_completed | Частково виконано |
completed | Продаж завершений |
canceled | Скасовано |
Для замовлення постачальнику:
docstate | Людська назва |
|---|---|
created | Новий |
activated | Активований |
generated | Прихід створений |
completed | Прихід завершений |
partially_completed | Частково виконано |
canceled | Скасовано |
Для виробництва:
docstate | Людська назва |
|---|---|
created | Нове |
reserved | Зарезервовано |
manufacturing | Матеріали списані |
activated | Завершено |
Отримання списку документів
GET /v1/documents повертає список документів. Параметр typedoc є обовʼязковим.
Підтримані фільтри:
| Параметр | Призначення |
|---|---|
typedoc | Тип документів. Обовʼязковий. |
offset | Сторінка або зміщення списку. За замовчуванням 1. |
limit | Кількість записів. За замовчуванням 100, максимум 1000. |
date_from | Дата документа від. |
date_to | Дата документа до. |
query | Пошук за номером документа або кодом. |
stock_id | Фільтр за складом. |
contragent_id | Фільтр за контрагентом. |
payment_subject_id | Фільтр за субʼєктом платежу, якщо документ повʼязаний з фінансовим сценарієм. |
payment_subject_type | Тип субʼєкта платежу для такого фільтра. |
typepay | Фільтр за типом оплати документа. |
active | Фільтр за активністю. |
status_id | Фільтр за статусом. |
with_custom_fields | Додати у відповідь додаткові поля. |
updated_from | Оновлено від. |
updated_to | Оновлено до. |
Приклад:
GET /v1/documents?typedoc=client_order&limit=100&updated_from=2026-05-01
Отримання одного документа
GET /v1/documents/:id повертає один документ за ID.
Додатково можна передати:
with_custom_fields=true
щоб отримати додаткові поля документа.
Створення документа
Мінімально для створення документа потрібен typedoc:
{
"document": {
"typedoc": "client_order"
}
}
На практиці для облікового документа зазвичай передають:
typedoc- тип документа;docdate- дату документа;stock_from_idабоstock_to_id- склад, залежно від типу документа;contragentабоcontragent_idчерез обʼєкт контрагента, якщо документ працює з покупцем або постачальником;typepay- спосіб оплати документа;typeprice- тип ціни;currency_id,currency_rate,accounting_currency_rate- валютні параметри, якщо потрібні;line_items- товарні рядки;activateабо окрему активацію після перевірки документа.
Приклад спрощеного замовлення покупця:
{
"document": {
"typedoc": "client_order",
"docdate": "2026-05-12",
"stock_from_id": "stock-id",
"typepay": "credit",
"typeprice": "price_retail",
"contragent": {
"id": "contragent-id"
},
"line_items": [
{
"product_id": "product-id",
"quantity": 2,
"price": 500
}
]
}
}
Поля для створення й оновлення документа
| Поле | Призначення |
|---|---|
id | Внутрішній ID документа. Використовується для наявного документа, коли інтеграція передає вже відомий запис. |
typedoc | Тип документа. Обовʼязкове поле для створення. |
docdate | Дата документа. |
product_off_date | Дата списання товарів або матеріалів, якщо вона використовується в сценарії документа. |
docnum | Номер документа. |
code | Код документа. |
api_id | Зовнішній ID інтеграції. |
api_number | Зовнішній номер інтеграції. |
description | Опис або примітка до документа. |
filial_id | Філія або юридична особа. |
sale_channel_id | Канал продажів. |
owner_id | Власник документа. |
executor_id | Виконавець документа. |
status_id | Статус документа. |
currency_id | Валюта документа. |
currency_rate | Курс валюти документа. |
accounting_currency_rate | Обліковий курс валюти. |
stock_from_id | Склад, з якого списуються товари. |
stock_to_id | Склад, на який надходять товари. |
typeprice | Тип ціни в документі. |
typepay | Тип оплати документа. |
cashbox_id | Каса для оплати готівкою. |
bankbox_id | Банківський рахунок для безготівкової або карткової оплати. |
paid_by_cash | Сума оплати готівкою. |
paid_by_card | Сума оплати карткою. |
paid_by_bonus | Сума оплати бонусами. |
payment_due_date | Термін оплати. |
payment_method_id | Спосіб оплати, якщо він використовується у сценарії документа. |
disable_autobind | Вимкнути автоматичне звʼязування платежів. |
due_date | Термін виконання документа. |
amount_discount | Загальна знижка документа. |
amount_markup | Загальна націнка документа. |
perform_amount_rounding | Округлення суми документа. |
supplier_price_recalculation | Перерахунок цін постачальника. |
activate | Активувати документ після створення або оновлення. |
target_document_pay_attributes | Параметри оплати для документа, який система створює під час зміни статусу. |
delivery | Дані доставки. |
line_items | Товарні рядки. |
binds | Звʼязки документа з платежами. |
comments | Коментарі. |
custom_fields | Додаткові поля. |
Поля короткої відповіді документа
GET /v1/documents повертає список документів у короткому форматі.
| Поле | Що означає |
|---|---|
id | Внутрішній ID документа. |
api_id | Зовнішній ID інтеграції. |
api_number | Зовнішній номер інтеграції. |
typedoc | Тип документа. |
docnum | Номер документа в Skynum. |
code | Код документа. |
user_id | Користувач, повʼязаний з документом. |
description | Опис документа. |
typepay | Тип оплати документа. |
typeprice | Тип ціни документа. |
docstate | Системний стан документа. |
filial_id | Філія або юридична особа. |
executor_id | Виконавець документа. |
owner_id | Власник документа. |
status_id | Статус документа. |
contragent_id | Контрагент документа. |
currency_id | Валюта документа. |
stock_to_id | Склад надходження. |
stock_from_id | Склад списання або резерву. |
sale_channel_id | Канал продажів. |
active | Чи активований документ. |
amount | Загальна сума документа. |
docdate | Дата документа. |
product_off_date | Дата списання товарів або матеріалів. |
due_date | Термін виконання. |
payment_due_date | Термін оплати. |
custom_fields | Додаткові поля, якщо передано with_custom_fields=true. |
created_at | Дата створення. |
updated_at | Дата оновлення. |
Поля повної відповіді документа
GET /v1/documents/:id і write-запити повертають повніший обʼєкт документа.
| Поле | Що означає |
|---|---|
id | Внутрішній ID документа. |
api_id | Зовнішній ID інтеграції. |
api_number | Зовнішній номер інтеграції. |
typedoc | Тип документа. |
docnum | Номер документа в Skynum. |
code | Код документа. |
user_id | Користувач, повʼязаний з документом. |
owner_id | Власник документа. |
executor_id | Виконавець документа. |
description | Опис документа. |
typepay | Тип оплати документа. |
typeprice | Тип ціни документа. |
docstate | Системний стан документа. |
filial_id | Філія або юридична особа. |
source_document_id | Документ-джерело, якщо документ створений на підставі іншого документа. |
perform_amount_rounding | Чи застосовується округлення суми. |
supplier_price_recalculation | Чи використовується перерахунок цін постачальника. |
cashbox_id | Каса документа. |
bankbox_id | Банківський рахунок документа. |
sale_channel_id | Канал продажів. |
docdate | Дата документа. |
product_off_date | Дата списання. |
active | Чи активований документ. |
status_id | ID статусу. |
status_title | Назва статусу. |
currency_id | ID валюти. |
currency_title | Назва валюти. |
currency_code | Код валюти. |
stock_to_id | ID складу надходження. |
stock_to_title | Назва складу надходження. |
stock_from_id | ID складу списання або резерву. |
stock_from_title | Назва складу списання або резерву. |
currency_rate | Курс валюти документа. |
accounting_currency_rate | Обліковий курс валюти. |
amount | Загальна сума документа. |
amount_rounding | Сума округлення. |
amount_products | Сума товарних рядків без загальних знижок і націнок. |
amount_products_discount | Сума знижок у товарних рядках. |
amount_discount | Загальна знижка документа. |
amount_markup | Загальна націнка документа. |
amount_contragent | Сума взаєморозрахунків з контрагентом. |
amount_nds | Сума ПДВ. |
amount_netto | Сума без ПДВ. |
paid_by_cash | Оплата готівкою. |
paid_by_bonus | Оплата бонусами. |
paid_by_card | Оплата карткою. |
due_date | Термін виконання. |
payment_due_date | Термін оплати. |
contragent | Короткі дані контрагента. |
delivery | Дані доставки. |
line_items | Товарні рядки. |
comments | Коментарі. |
target_documents | Документи, створені з поточного. |
binds | Звʼязки документа з платежами. |
custom_fields | Додаткові поля, якщо передано with_custom_fields=true. |
created_at | Дата створення. |
updated_at | Дата оновлення. |
Типи оплати документа
Поле typepay описує, як документ має бути оплачений.
typepay | Назва |
|---|---|
paid | сплачено |
credit | кредит |
free | безоплатно |
Для документів продажу або поставки вибір typepay впливає на те, чи потрібна оплата, чи виникає заборгованість, чи документ проводиться як безоплатний або особливий сценарій.
Типи цін у документі
У полі typeprice для документів використовуються такі значення:
typeprice | Назва |
|---|---|
price_balance | Облікова ціна |
price_supply | Ціна прихідна |
price_retail | Ціна роздрібна |
price_wholesale | Ціна гуртова |
price_promo | Ціна перекреслена |
У товарах для запису перекресленої ціни використовується поле price_old, а в документах для вибору типу ціни використовується значення price_promo.
Товарні рядки
Товарні рядки передаються в масиві line_items.
Поля рядка для створення або оновлення:
| Поле | Призначення |
|---|---|
id | ID товарного рядка для оновлення наявного рядка. |
api_id | Зовнішній ID товарного рядка. |
_destroy | Позначка видалення рядка під час оновлення документа. |
product_id | Внутрішній ID товару. |
product_code | Код товару. |
product_sku | Артикул товару. |
product_api_id | Зовнішній ID товару. |
modification_id | Внутрішній ID модифікації. |
modification_code | Код модифікації. |
modification_sku | Артикул модифікації. |
modification_api_id | Зовнішній ID модифікації. |
measure_id | Одиниця виміру. |
quantity | Кількість. |
price | Ціна рядка. |
discount | Знижка в рядку. |
serials | Серійні номери. |
nds_rate | Ставка ПДВ у рядку. |
price_supply | Прихідна ціна. |
price_retail | Роздрібна ціна. |
price_wholesale | Гуртова ціна. |
amount_expenses | Витрати, віднесені на товарний рядок. |
Товар у рядку можна ідентифікувати різними способами: через внутрішній product_id, код, артикул або зовнішній product_api_id. Для модифікацій так само можна передавати внутрішній ID, код, артикул або зовнішній modification_api_id.
Поля товарного рядка у відповіді
| Поле | Що означає |
|---|---|
id | ID товарного рядка. |
api_id | Зовнішній ID рядка. |
code | Код рядка. |
product_id | ID товару. |
product_title | Назва товару. |
product_code | Код товару. |
product_sku | Артикул товару. |
product_api_id | Зовнішній ID товару. |
product_international_code | Міжнародний код товару. |
category_id | ID категорії товару. |
category_title | Назва категорії товару. |
kingroup_id | ID спорідненої групи товару. |
kingroup_code | Код спорідненої групи товару. |
kingroup_title | Назва спорідненої групи товару. |
quantity | Кількість. |
price | Ціна рядка. |
price_supply | Прихідна ціна. |
price_retail | Роздрібна ціна. |
price_wholesale | Гуртова ціна. |
price_netto | Ціна без ПДВ. |
nds_rate | Ставка ПДВ. |
discount | Знижка рядка. |
amount | Сума рядка. |
amount_nds | Сума ПДВ у рядку. |
amount_netto | Сума без ПДВ. |
amount_supply | Сума в прихідних цінах. |
amount_retail | Сума в роздрібних цінах. |
amount_wholesale | Сума в гуртових цінах. |
measure_id | ID одиниці виміру. |
measure_title | Назва одиниці виміру. |
modification_id | ID модифікації. |
modification_title | Назва модифікації. |
modification_code | Код модифікації. |
modification_sku | Артикул модифікації. |
modification_api_id | Зовнішній ID модифікації. |
amount_expenses | Витрати, віднесені на рядок. |
datevalid | Термін придатності. |
notes | Примітка до рядка. |
serials | Серійні номери, якщо товар ведеться за серійними номерами. |
created_at | Дата створення. |
updated_at | Дата оновлення. |
Якщо товар має модифікації, серійні номери, партії або терміни придатності, інтеграція має передавати дані так, щоб документ відповідав реальному обліку. Інакше документ може не активуватися або провести облік не так, як очікується.
Контрагент у документі
Для документів продажу, повернення, поставки, замовлень і рахунків зазвичай потрібен контрагент.
Контрагент передається обʼєктом contragent, наприклад:
{
"contragent": {
"id": "contragent-id",
"code": "100",
"title": "Покупець",
"phone": "+380777777777",
"email": "[email protected]",
"discount_card": null,
"group_id": null
}
}
Якщо контрагент уже є в Skynum, найнадійніше передавати його id. Якщо інтеграція створює або оновлює контрагентів окремо, використовуйте контрагентів через API.
Поля contragent, які приймає документ:
| Поле | Призначення |
|---|---|
id | ID наявного контрагента. |
code | Код контрагента. |
phone | Телефон. |
email | Email. |
discount_card | Дисконтна картка. |
address | Адреса контрагента. |
group_id | Група контрагента. |
title | Назва або імʼя контрагента. |
status_id | Статус контрагента. |
entity_type | Тип особи або компанії. |
bank_id | Банк. |
bank_account | Банківський рахунок. |
taxnumber | Податковий номер. |
remark | Примітка. |
instagram | Instagram. |
currency_id | Валюта контрагента. |
Доставка в документі
Поле delivery використовується для даних доставки.
Поля доставки для створення або оновлення:
| Поле | Призначення |
|---|---|
kind | Спосіб доставки. |
planned_date | Планова дата доставки або відправлення. |
notes | Примітки до доставки. |
cost | Вартість доставки. |
recipient_first_name | Імʼя отримувача. |
recipient_last_name | Прізвище отримувача. |
recipient_middle_name | По батькові отримувача. |
recipient_phone | Телефон отримувача. |
provider_waybill_id | ID експрес-накладної у службі доставки. |
provider_registry_id | ID реєстру у службі доставки. |
waybill_number | Номер експрес-накладної. |
payer_type | Платник доставки. |
estimated_date | Орієнтовна дата доставки. |
cost_to_document_amount | Чи додавати вартість доставки до суми документа. |
cargo_type | Тип вантажу. |
shipment_notes | Опис або примітка для відправлення. |
evaluation_amount | Оціночна вартість. |
customize_seats | Чи налаштовуються місця відправлення вручну. |
seats_quantity | Кількість місць. |
volume | Обʼєм відправлення. |
weight | Вага відправлення. |
auto_evaluation_amount | Автоматично визначати оціночну вартість. |
payment_method | Спосіб оплати доставки. |
backward_delivery_enabled | Чи ввімкнена зворотна доставка. |
payment_control_enabled | Чи ввімкнений контроль оплати. |
backward_payer | Платник зворотної доставки. |
backward_amount | Сума зворотної доставки або післяплати. |
payment_control_amount | Сума контролю оплати. |
sender_address_id | Адреса відправника. |
sender_employee_id | Контактна особа відправника. |
sender_phone | Телефон відправника. |
seats | Масив місць відправлення. |
recipient_address | Адреса отримувача. |
У seats можна передавати:
| Поле | Призначення |
|---|---|
width | Ширина місця. |
length | Довжина місця. |
height | Висота місця. |
weight | Вага місця. |
volume_weight | Обʼємна вага. |
service_no_box | Ознака відправлення без коробки служби доставки. |
У recipient_address можна передавати:
| Поле | Призначення |
|---|---|
id | ID адреси. |
api_id | Зовнішній ID адреси. |
phone | Телефон адресата. |
recipient_name | Імʼя отримувача у старому форматі адреси. |
name | Назва або імʼя у старому форматі адреси. |
address | Адреса у старому форматі. |
post_office | Відділення у старому форматі. |
global_city_id | Місто з глобального довідника. |
global_post_office_id | Відділення з глобального довідника. |
global_street_id | Вулиця з глобального довідника. |
novaposhta_city_id | Місто Нової пошти. |
novaposhta_post_office_id | Відділення Нової пошти. |
novaposhta_street_id | Вулиця Нової пошти. |
address_line | Адресний рядок. |
street_name | Назва вулиці. |
house | Будинок. |
flat | Квартира або офіс. |
postal_code | Поштовий індекс. |
notes | Примітки до адреси. |
primary | Основна адреса контрагента. |
save_contragent_address | Зберегти адресу в картці контрагента. |
Докладніше про адреси та поля Нової пошти: адреси доставки, поля Нової пошти.
Додаткові поля
Додаткові поля передаються у custom_fields. Ключем є ID додаткового поля.
Приклад:
{
"custom_fields": {
"field-id-1": true,
"field-id-2": "Текст",
"field-id-3": 15,
"field-id-4": "term-id"
}
}
Для полів із власними довідниками можуть використовуватися ID або назви значень, залежно від типу поля та сценарію інтеграції.
Докладніше: додаткові поля.
Оновлення документа
PUT /v1/documents/:id оновлює документ.
Для оновлення документа можна використовувати:
activate- активувати документ після оновлення;status_id- змінити статус після оновлення;target_document_pay_attributes- параметри оплати для автоматично створеного вихідного документа.
Не передавайте activate і status_id в одному запиті. Якщо передати activate: true, документ буде активований, а сценарій зміни статусу в цьому запиті не виконається.
Активація документа
Endpoint:
PUT /v1/documents/:id/activate
Активація проводить документ в обліку. Залежно від typedoc, це може:
- зарезервувати товар;
- списати товар;
- оприбуткувати товар;
- створити очікування поставки;
- змінити собівартість;
- вплинути на взаєморозрахунки;
- оновити аналітичні звіти.
Також документ можна створити або оновити з:
{
"document": {
"activate": true
}
}
Деактивація документа
Endpoint:
PUT /v1/documents/:id/deactivate
Деактивація скасовує проведення документа, якщо це дозволено поточним станом обліку.
Деактивація може бути неможливою або небажаною, якщо:
- документ має повʼязані документи;
- документ має повʼязані платежі;
- після документа вже були наступні облікові операції;
- документ впливає на партії, серійні номери, виробництво або інвентаризацію;
- зміна зламає залишки, собівартість або взаєморозрахунки.
Зміна статусу документа
Endpoint:
PUT /v1/documents/:id/change_status
У тілі запиту передається status_id:
{
"document": {
"status_id": "status-id"
}
}
Для сценаріїв, де зміна статусу створює вихідний документ, можна передати pay_attributes:
{
"document": {
"status_id": "status-id",
"pay_attributes": {
"typepay": "credit",
"payment_due_date": "10.02.2025",
"cashbox_id": null,
"bankbox_id": null,
"paid_by_cash": 0,
"paid_by_card": 0,
"paid_by_bonus": 0
}
}
}
Це корисно, наприклад, коли замовлення покупця переводиться у стан виконання і система створює документ продажу.
Створення документа з документа
Endpoint:
POST /v1/documents/:id/generate
У тілі передається:
{
"document": {
"target_typedoc": "sale"
}
}
Система створює новий документ з поточного. Товари й основні поля копіюються з документа-джерела, а в новому документі встановлюється source_document_id.
Типовий сценарій - створити продаж із замовлення або інший повʼязаний документ за логікою Skynum.
Спрощене повернення продажу
Endpoint:
POST /v1/documents/:id/lazy_sale_return
Endpoint виконує такі дії:
- створює і активує
sale_return; - працює тільки з
client_orderіsale; - товари копіюються з документа продажу;
- оплата береться така сама, як у продажі;
- якщо повернення продажу вже існує, endpoint нічого не змінює і повертає успішну відповідь.
Перед використанням lazy_sale_return інтеграція має точно знати, який документ є джерелом повернення. Це не універсальний endpoint для будь-якого повернення.
Звʼязки з платежами
Документ може мати binds - звʼязки з платежами.
Для binds використовується така структура:
[
{
"bind_id": "payment-id",
"amount": 200
}
]
bind_id вказує ID активованого платежу, а amount - яку суму потрібно розподілити.
Платіж у binds має відповідати документу: дата платежу не повинна бути пізнішою за дату документа, контрагент, філія і валюта мають збігатися, а сума звʼязку має бути більшою за нуль.
Докладніше: Платежі через API, повʼязані платежі.
Безпечний порядок роботи
Для інтеграцій із документами рекомендований такий порядок:
- Отримати або створити довідники: товари, контрагентів, склади, додаткові поля.
- Створити документ як чернетку без
activate. - Перевірити відповідь API:
id,typedoc,amount,line_items,contragent, склад, валюту. - За потреби оновити документ.
- Активувати документ окремим запитом.
- Отримати документ повторно і перевірити
active,docstate, суми й звʼязки.
Для перших інтеграцій краще не активувати документ у тому самому запиті, яким він створюється. Окрема активація дає можливість перевірити чернетку перед проведенням.
Чеклист перед запуском
Перед запуском інтеграції з документами перевірте:
- які
typedocстворює інтеграція; - які склади використовуються у
stock_from_idіstock_to_id; - як інтеграція знаходить товар:
product_id,product_code,product_skuабоproduct_api_id; - чи потрібні модифікації, серійні номери, партії або терміни придатності;
- чи передається контрагент там, де він потрібен;
- як передаються оплата, борг або термін оплати;
- чи потрібні статуси і переходи між станами;
- чи є черга write-запитів, щоб не отримувати
Concurrent write locked; - чи не дублюються документи при повторній відправці з зовнішньої системи;
- хто відповідає за помилки активації й повторну синхронізацію.
Підсумок
Документи через API потрібно створювати обережно: спочатку правильно визначити typedoc, склад, контрагента, товарні рядки, оплату й статус, а вже потім активувати документ. Неактивний документ є чернеткою, активований документ змінює облік.