1C uchun API: Chicken Delivery ombori va buyurtmalari

Chicken Delivery platformasini 1C omboriga ulash uchun 1C'da e'lon qilinadigan HTTP-servis. Platforma 1C'dan katalog, narx va qoldiqni o'qiydi, tasdiqlangan buyurtmani esa 1C'ga yuboradi.

Versiya 1.0Ildiz: /hs/chicken/v1JSON · Bearer token10 ta usul

Umumiy ma'lumot

Ombor hisobi (qoldiq, kirim, chiqim) va buxgalteriya to'liq 1C'da yuritiladi. Platforma uchun asosiysi ombor qoldig'i: qaysi tovar qaysi omborda qancha qolgani va uni sotish mumkinmi.

Asos sifatida laCafe'ning ishlab turgan 1C integratsiyasi olingan (onec.lacafe.app): bitta HTTP-servis, JSON, Bearer token, GUID identifikatorlar va idempotent buyurtma. Modifikatorlar olib tashlangan, ombor qoldig'i va kirim/chiqim harakatlari qo'shilgan.

Chicken Deliverysayt, admin panel
← katalog, narx (soatiga)
← qoldiq, stop-list (2 daq.)
← buyurtma holati (1 daq.)
← kirim/chiqim (15 daq.)
→ buyurtma: yaratish, bekor, yopish
1Combor, buxgalteriya

Kim nima qiladi. 1C dasturchisi 1C bazasida shu hujjatdagi HTTP-servisni e'lon qiladi. Platforma tomoni (Mimsoft) bu servisni chaqiradigan ulagichni yozadi. Ikkala tomon test bazada qabul ro'yxati bo'yicha sinaydi. 1C o'zi hech narsa yubormaydi, faqat so'rovlarga javob beradi.

Ulanish va xavfsizlik

TalabQiymat
ManzilOmmaviy HTTPS, domen nomi va haqiqiy sertifikat. Misol: https://1c.mijoz.uz/base/hs/chicken/v1. 192.168.x.x:8080 kabi ichki manzil yaramaydi
Kirishga ruxsatFaqat platforma serveri IP'si: 45.92.173.162
AvtorizatsiyaAuthorization: Bearer <token>, bitta baza uchun bitta token. Noto'g'ri yoki bo'sh token → 401. Token 1C'ni qayta ishga tushirmasdan almashtiriladi
FormatJSON, UTF-8, Content-Type: application/json; charset=utf-8
SanaISO 8601, vaqt mintaqasi bilan: 2026-11-06T14:30:00+05:00
SummaSo'mda, son (qo'shtirnoqsiz, bo'shliqsiz): 75000
MiqdorSon, kasr bo'lishi mumkin: 1.5 (kg)
IdentifikatorHar yozuvning id = 1C havolasining GUID'i (УникальныйИдентификатор()); nomi o'zgarsa ham o'zgarmaydi. code va article faqat ma'lumot uchun
Ro'yxatlarlimit (ko'pi 500), offset (0 dan); javobda count. O'chirilgan yozuv yashirilmaydi, active: false bilan qaytadi
TezlikBuyurtma yaratish 10 soniyagacha, ro'yxatlar 30 soniyagacha
JurnalKiruvchi so'rov va javoblar 1C ma'lumotlar registrida kamida 30 kun saqlanadi

Test baza. Ishga tushirishdan oldin xuddi shu servis bilan alohida test baza kerak: o'z manzili va o'z tokeni bilan.

Ma'lumotnomalar (1C → platforma)

Platforma katalogni soatiga bir marta va admin "Sinxronlash" tugmasini bosganda o'qiydi. Narx alohida so'ralmaydi, u mahsulot bilan birga keladi.

B2B narxlar 1C'dan olinmaydi. Ularni admin platformadagi alohida B2B menyuda o'zi kiritadi.

GET/warehouses

Omborlar. Har bir ombor platformadagi bitta filialga mos keladi.

MaydonTurIzoh
idGUIDOmbor
namematnNomi
activeboolfalse — ishlatilmaydi
GET/groups

Mahsulot guruhlari (saytda menyu bo'limlari).

MaydonTurIzoh
idGUIDGuruh
namematnNomi
parent_idGUID yoki nullYuqori guruh
activeboolfalse — saytda yashiriladi
GET/items?warehouse_id=

Shu ombordagi mahsulotlar. Ixtiyoriy filtr updated_since (ISO sana): faqat shu vaqtdan keyin o'zgarganlar.

MaydonTurIzoh
idGUIDNomenklatura havolasi
group_idGUIDGuruh
namematnSaytda ko'rinadigan nom
unitmajburiymatnkg yoki dona
pricesonSotuv narxi, 1 unit uchun
weight_gson yoki nullDona mahsulotda o'ram og'irligi, gramm
article, codematnMa'lumot uchun
activeboolfalse — saytda yashiriladi
Javob misoli
{"count": 1, "generated_at": "2026-11-06T09:00:00+05:00",
 "items": [{"id": "7b2e…", "group_id": "1c4a…", "name": "Bo'yin qismi", "unit": "kg",
            "price": 75000, "weight_g": null, "active": true}]}
GET/payment_types

To'lov turlari.

MaydonTurIzoh
idGUIDTo'lov turi
namematnNomi
kindmatncash / card / online / transfer
activeboolfalse — ishlatilmaydi

Qoldiqlar va stop-list (1C → platforma)

Platforma qoldiqni har 2 daqiqada o'qiydi. Qoldig'i 0 yoki undan kam mahsulot saytda 3 daqiqa ichida "mavjud emas" bo'ladi va buyurtma qilinmaydi. Alohida stop-list usuli yo'q: qoldiqning o'zi stop-list vazifasini bajaradi.

GET/stock?warehouse_id=
MaydonTurIzoh
warehouse_idGUIDSo'ralgan ombor
generated_atsanaQoldiq qaysi vaqtga
stock[].item_idGUIDMahsulot
stock[].quantitysonOmbordagi qoldiq, mahsulotning unit ida (kg yoki dona)
stock[].reservedsonTasdiqlangan, lekin hali yopilmagan buyurtmalardagi miqdor
stock[].stoppedboolQoldiqdan qat'i nazar qo'lda sotuvdan olingan
sotiladigan miqdor = quantity − reserved

Ro'yxatda yo'q mahsulot qoldig'i 0 deb hisoblanadi.

Javob misoli
{"warehouse_id": "5d1f…", "generated_at": "2026-11-06T09:02:00+05:00",
 "stock": [{"item_id": "7b2e…", "quantity": 42.5, "reserved": 3, "stopped": false}]}

Buyurtmalar (platforma → 1C)

Admin buyurtmani tasdiqlaganda platforma uni darhol 1C'ga yuboradi. 1C bitta hujjat yaratadi (Заказ покупателя yoki konfiguratsiyadagi o'xshash hujjat) va tovarni zaxiraga oladi. Bir xil external_id bilan qayta yuborilsa yangi hujjat ochilmaydi, mavjudi qaytadi.

POST/orders

Buyurtma yaratish. Javob: order.id, order.number, order.external_id, order.status.

MaydonIzoh
external_idPlatformadagi buyurtma GUID'i, takrorni aniqlash kaliti
number, datePlatformadagi raqam va vaqt
warehouse_idQaysi ombordan
typedelivery yoki pickup
clientname, phone, kind (b2c yoki b2b), inn (B2B uchun)
items[]item_id, name, quantity (kasr bo'lishi mumkin), price (1 unit uchun), comment
deliveryaddress, lat, lon, comment, fee
discountamount, promo_code
totalJami summa
paymentpaid (bool), parts[]: payment_type_id, amount, transaction_id
couriername, phone (kuryer biriktirilgan bo'lsa)
commentMijoz izohi

Summa tekshiruvi

total = Σ quantity × price − discount.amount + delivery.fee
Σ payment.parts[].amount = total

Narx platformadan keladi. price — platformadagi sotuv narxi (B2B buyurtmada admin B2B menyuda kiritgan narx). 1C bu narxni o'z narx turi bilan almashtirmaydi, hujjatga shundayligicha yozadi.

So'rov misoli
{"external_id": "4f9c…", "number": "1042", "date": "2026-11-06T10:15:00+05:00",
 "warehouse_id": "5d1f…", "type": "delivery",
 "client": {"name": "Aziz", "phone": "+998901234567", "kind": "b2c", "inn": null},
 "items": [{"item_id": "7b2e…", "name": "Bo'yin qismi", "quantity": 2, "price": 75000, "comment": ""}],
 "delivery": {"address": "Qo'qon, Turkiston ko'chasi 12", "lat": 40.53, "lon": 70.94, "comment": "", "fee": 10000},
 "discount": {"amount": 0, "promo_code": null}, "total": 160000,
 "payment": {"paid": true, "parts": [{"payment_type_id": "a3b0…", "amount": 160000, "transaction_id": "payme-123"}]},
 "courier": null, "comment": ""}
GET/orders/{external_id}

Holatni o'qish. Platforma ochiq buyurtmalarni har daqiqada so'raydi. Javob: order.status, order.updated_at.

POST/orders/{external_id}/cancel

Bekor qilish, zaxirani bo'shatish. Javob: order.status = cancelled.

POST/orders/{external_id}/close

Yetkazildi: sotuv va to'lov o'tkaziladi, tovar ombordan chiqadi. Javob: order.status = closed.

Go'sht tortib berilgani uchun items da haqiqiy tortilgan miqdor yuborilishi mumkin; 1C sotuvni shu miqdor bilan o'tkazadi. close ikkinchi marta chaqirilsa ikkinchi to'lov yaratilmaydi.

So'rov tanasi
{"closed_at": "<sana>", "payment": {"paid": true, "parts": [...]}, "items": [...]}

Holatlar (order.status)

HolatMa'nosi
new1C qabul qildi, tovar zaxirada
acceptedOmborchi tasdiqladi
packingTortilmoqda / yig'ilmoqda
readyKuryerga topshirishga tayyor
deliveringKuryer yo'lda
closedYetkazildi, sotuv o'tkazildi
cancelledBekor qilindi, zaxira bo'shatildi

Kirim va chiqim (1C → platforma)

Kirim, chiqim va hisobdan chiqarish hujjatlari 1C'da kiritiladi. Platforma ularni faqat o'qiydi va kirim/chiqim hisobotiga chiqaradi; platformada bu hujjatlar tahrirlanmaydi.

GET/stock_movements?warehouse_id=&from=&to=&limit=&offset=
MaydonIzoh
id1C hujjat qatori GUID'i
document_id, document_number, document_dateAsos hujjat
kindreceipt (kirim), sale (sotuv), write_off (hisobdan chiqarish, yaroqsiz), transfer_in, transfer_out, adjustment (inventarizatsiya)
item_idMahsulot
quantityKirimda musbat, chiqimda manfiy, unit da
amountTannarx bo'yicha summa, so'mda
commentIzoh (masalan hisobdan chiqarish sababi)
order_external_idSotuv platforma buyurtmasidan bo'lsa, uning external_id si

Platforma har 15 daqiqada oxirgi o'qilgan document_date dan boshlab so'raydi.

Xatolar, navbat va qayta urinish

1C vaqtincha ishlamasa buyurtma yo'qolmaydi: platforma uni navbatda saqlaydi va 1C qaytguncha qayta yuboradi. Takror yuborish xavfsiz, chunki external_id bo'yicha 1C ikkinchi hujjat ochmaydi.

Xato javobi doim bir xil shaklda; message kassir yoki omborchi tushunadigan tilda (o'zbek yoki rus):

Xato javobi
{"success": false, "error": {"code": "ITEM_NOT_FOUND", "message": "…", "details": {"item_ids": ["7b2e…"]}}}
HTTPcodeQachonPlatforma nima qiladi
400BAD_REQUESTJSON emas, maydon yo'q yoki turi xato; details.fieldQayta yubormaydi, adminga xato
401UNAUTHORIZEDToken yo'q yoki noto'g'riTo'xtaydi, adminga "tokenni tekshiring"
404ORDER_NOT_FOUNDBunday external_id yo'qAdminga xato
404WAREHOUSE_NOT_FOUND/items yoki /stock da noma'lum omborAdminga xato
409ALREADY_CLOSEDYopilgan buyurtmani bekor qilishHolatni 1C'dagidek yangilaydi
409ALREADY_CANCELLEDBekor qilinganini yopishHolatni 1C'dagidek yangilaydi
422ITEM_NOT_FOUNDMahsulot 1C'da o'chirilgan; hammasi details.item_ids daAdminga xato, katalogni qayta o'qiydi
422INSUFFICIENT_STOCKQoldiq yetmaydi; details.items[]: item_id, requested, availableAdminga xato, qoldiqni yangilaydi
422PAYMENT_TYPE_NOT_FOUNDNoma'lum to'lov turiAdminga xato
422TOTAL_MISMATCHTo'lovlar yig'indisi total ga teng emasAdminga xato
500 / 503 / vaqt tugadiINTERNAL_ERROR1C ichidagi xato yoki javob kelmadiNavbatda qoladi: 1, 5, 15 daqiqa, keyin har soatda; 24 soatdan keyin adminga ogohlantirish

Platforma ham har so'rov va javobni o'z jurnalida 30 kun saqlaydi; ikkala jurnal external_id bo'yicha solishtiriladi.

1C jamoasidan kerak bo'lganlar

Ulagichni yozishni boshlash uchun 1C jamoasi quyidagilarni yuboradi:

Qabul ro'yxati (test bazada)

  1. Katalog yuklanadi; mahsulot nomi o'zgarsa id o'zgarmaydi; o'chirilgani active: false bo'ladi
  2. 1C'da qoldiq 0 bo'lgan mahsulot saytda 3 daqiqa ichida "mavjud emas" bo'ladi
  3. Yetkazish buyurtmasi online to'lov bilan 1C'ga tushadi, tovar zaxiraga olinadi
  4. Olib ketish buyurtmasi qabulda to'lov bilan: yaratilganda to'lov hujjati ochilmaydi
  5. B2B buyurtma platformadan kelgan narx bilan tushadi, 1C narxni o'zgartirmaydi
  6. Bir xil external_id qayta yuborilsa ikkinchi hujjat ochilmaydi
  7. 1C'da holat o'zgarsa platformada 1 daqiqa ichida ko'rinadi
  8. Bekor qilish zaxirani bo'shatadi; yopish sotuvni o'tkazadi, takror yopish ikkinchi to'lov yaratmaydi
  9. Kirim va hisobdan chiqarish hujjatlari /stock_movements da chiqadi
  10. Noto'g'ri token → 401, o'chirilgan mahsulot bilan buyurtma → 422 ITEM_NOT_FOUND

Ochiq savollar