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.
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.
← qoldiq, stop-list (2 daq.)
← buyurtma holati (1 daq.)
← kirim/chiqim (15 daq.)
→ buyurtma: yaratish, bekor, yopish
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
| Talab | Qiymat |
|---|---|
| Manzil | Ommaviy 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 ruxsat | Faqat platforma serveri IP'si: 45.92.173.162 |
| Avtorizatsiya | Authorization: Bearer <token>, bitta baza uchun bitta token. Noto'g'ri yoki bo'sh token → 401. Token 1C'ni qayta ishga tushirmasdan almashtiriladi |
| Format | JSON, UTF-8, Content-Type: application/json; charset=utf-8 |
| Sana | ISO 8601, vaqt mintaqasi bilan: 2026-11-06T14:30:00+05:00 |
| Summa | So'mda, son (qo'shtirnoqsiz, bo'shliqsiz): 75000 |
| Miqdor | Son, kasr bo'lishi mumkin: 1.5 (kg) |
| Identifikator | Har yozuvning id = 1C havolasining GUID'i (УникальныйИдентификатор()); nomi o'zgarsa ham o'zgarmaydi. code va article faqat ma'lumot uchun |
| Ro'yxatlar | limit (ko'pi 500), offset (0 dan); javobda count. O'chirilgan yozuv yashirilmaydi, active: false bilan qaytadi |
| Tezlik | Buyurtma yaratish 10 soniyagacha, ro'yxatlar 30 soniyagacha |
| Jurnal | Kiruvchi 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.
Omborlar. Har bir ombor platformadagi bitta filialga mos keladi.
| Maydon | Tur | Izoh |
|---|---|---|
id | GUID | Ombor |
name | matn | Nomi |
active | bool | false — ishlatilmaydi |
Mahsulot guruhlari (saytda menyu bo'limlari).
| Maydon | Tur | Izoh |
|---|---|---|
id | GUID | Guruh |
name | matn | Nomi |
parent_id | GUID yoki null | Yuqori guruh |
active | bool | false — saytda yashiriladi |
Shu ombordagi mahsulotlar. Ixtiyoriy filtr updated_since (ISO sana): faqat shu vaqtdan keyin o'zgarganlar.
| Maydon | Tur | Izoh |
|---|---|---|
id | GUID | Nomenklatura havolasi |
group_id | GUID | Guruh |
name | matn | Saytda ko'rinadigan nom |
unitmajburiy | matn | kg yoki dona |
price | son | Sotuv narxi, 1 unit uchun |
weight_g | son yoki null | Dona mahsulotda o'ram og'irligi, gramm |
article, code | matn | Ma'lumot uchun |
active | bool | false — saytda yashiriladi |
{"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}]}To'lov turlari.
| Maydon | Tur | Izoh |
|---|---|---|
id | GUID | To'lov turi |
name | matn | Nomi |
kind | matn | cash / card / online / transfer |
active | bool | false — 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.
| Maydon | Tur | Izoh |
|---|---|---|
warehouse_id | GUID | So'ralgan ombor |
generated_at | sana | Qoldiq qaysi vaqtga |
stock[].item_id | GUID | Mahsulot |
stock[].quantity | son | Ombordagi qoldiq, mahsulotning unit ida (kg yoki dona) |
stock[].reserved | son | Tasdiqlangan, lekin hali yopilmagan buyurtmalardagi miqdor |
stock[].stopped | bool | Qoldiqdan qat'i nazar qo'lda sotuvdan olingan |
Ro'yxatda yo'q mahsulot qoldig'i 0 deb hisoblanadi.
{"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.
Buyurtma yaratish. Javob: order.id, order.number, order.external_id, order.status.
| Maydon | Izoh |
|---|---|
external_id | Platformadagi buyurtma GUID'i, takrorni aniqlash kaliti |
number, date | Platformadagi raqam va vaqt |
warehouse_id | Qaysi ombordan |
type | delivery yoki pickup |
client | name, phone, kind (b2c yoki b2b), inn (B2B uchun) |
items[] | item_id, name, quantity (kasr bo'lishi mumkin), price (1 unit uchun), comment |
delivery | address, lat, lon, comment, fee |
discount | amount, promo_code |
total | Jami summa |
payment | paid (bool), parts[]: payment_type_id, amount, transaction_id |
courier | name, phone (kuryer biriktirilgan bo'lsa) |
comment | Mijoz izohi |
Summa tekshiruvi
Σ 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.
{"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": ""}Holatni o'qish. Platforma ochiq buyurtmalarni har daqiqada so'raydi. Javob: order.status, order.updated_at.
Bekor qilish, zaxirani bo'shatish. Javob: order.status = cancelled.
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.
{"closed_at": "<sana>", "payment": {"paid": true, "parts": [...]}, "items": [...]}Holatlar (order.status)
| Holat | Ma'nosi |
|---|---|
new | 1C qabul qildi, tovar zaxirada |
accepted | Omborchi tasdiqladi |
packing | Tortilmoqda / yig'ilmoqda |
ready | Kuryerga topshirishga tayyor |
delivering | Kuryer yo'lda |
closed | Yetkazildi, sotuv o'tkazildi |
cancelled | Bekor 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.
| Maydon | Izoh |
|---|---|
id | 1C hujjat qatori GUID'i |
document_id, document_number, document_date | Asos hujjat |
kind | receipt (kirim), sale (sotuv), write_off (hisobdan chiqarish, yaroqsiz), transfer_in, transfer_out, adjustment (inventarizatsiya) |
item_id | Mahsulot |
quantity | Kirimda musbat, chiqimda manfiy, unit da |
amount | Tannarx bo'yicha summa, so'mda |
comment | Izoh (masalan hisobdan chiqarish sababi) |
order_external_id | Sotuv 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):
{"success": false, "error": {"code": "ITEM_NOT_FOUND", "message": "…", "details": {"item_ids": ["7b2e…"]}}}| HTTP | code | Qachon | Platforma nima qiladi |
|---|---|---|---|
| 400 | BAD_REQUEST | JSON emas, maydon yo'q yoki turi xato; details.field | Qayta yubormaydi, adminga xato |
| 401 | UNAUTHORIZED | Token yo'q yoki noto'g'ri | To'xtaydi, adminga "tokenni tekshiring" |
| 404 | ORDER_NOT_FOUND | Bunday external_id yo'q | Adminga xato |
| 404 | WAREHOUSE_NOT_FOUND | /items yoki /stock da noma'lum ombor | Adminga xato |
| 409 | ALREADY_CLOSED | Yopilgan buyurtmani bekor qilish | Holatni 1C'dagidek yangilaydi |
| 409 | ALREADY_CANCELLED | Bekor qilinganini yopish | Holatni 1C'dagidek yangilaydi |
| 422 | ITEM_NOT_FOUND | Mahsulot 1C'da o'chirilgan; hammasi details.item_ids da | Adminga xato, katalogni qayta o'qiydi |
| 422 | INSUFFICIENT_STOCK | Qoldiq yetmaydi; details.items[]: item_id, requested, available | Adminga xato, qoldiqni yangilaydi |
| 422 | PAYMENT_TYPE_NOT_FOUND | Noma'lum to'lov turi | Adminga xato |
| 422 | TOTAL_MISMATCH | To'lovlar yig'indisi total ga teng emas | Adminga xato |
| 500 / 503 / vaqt tugadi | INTERNAL_ERROR | 1C ichidagi xato yoki javob kelmadi | Navbatda 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:
- Konfiguratsiya nomi va versiyasi (masalan УТ 11.5, УНФ 3.0, Бухгалтерия 3.0)
POST /ordersqaysi hujjatni yaratadi vacloseqaysi hujjatlarni o'tkazadi (sotuv, kassa kirimi)- 1C'dagi buyurtma holatlari va ularning shu hujjatdagi holatlarga mosligi
- B2B mijozlar 1C'da qanday belgilanadi (kontragent turi, shartnoma) va buyurtma narxini platformadan qabul qilish mumkinligi
- Test va ishchi baza uchun servis manzili va token, alohida-alohida (token faqat shaxsiy xabarda)
- Har usuldan bitta haqiqiy javob namunasi
- 1C dasturchisining aloqa ma'lumoti
Qabul ro'yxati (test bazada)
- Katalog yuklanadi; mahsulot nomi o'zgarsa
ido'zgarmaydi; o'chirilganiactive: falsebo'ladi - 1C'da qoldiq 0 bo'lgan mahsulot saytda 3 daqiqa ichida "mavjud emas" bo'ladi
- Yetkazish buyurtmasi online to'lov bilan 1C'ga tushadi, tovar zaxiraga olinadi
- Olib ketish buyurtmasi qabulda to'lov bilan: yaratilganda to'lov hujjati ochilmaydi
- B2B buyurtma platformadan kelgan narx bilan tushadi, 1C narxni o'zgartirmaydi
- Bir xil
external_idqayta yuborilsa ikkinchi hujjat ochilmaydi - 1C'da holat o'zgarsa platformada 1 daqiqa ichida ko'rinadi
- Bekor qilish zaxirani bo'shatadi; yopish sotuvni o'tkazadi, takror yopish ikkinchi to'lov yaratmaydi
- Kirim va hisobdan chiqarish hujjatlari
/stock_movementsda chiqadi - Noto'g'ri token →
401, o'chirilgan mahsulot bilan buyurtma →422 ITEM_NOT_FOUND
Ochiq savollar
- Vebxuklar (1C o'zgarishni darhol yuborishi) birinchi bosqichga kiradimi.
- Kasr miqdor (1.5 kg) platformada qachon yoqiladi. Hozir sayt butun son bilan buyurtma qiladi, 1C esa kasrni boshidanoq qabul qilishi kerak.