Создание договоров
Метод для создания или обновления договоров с условиями (товары и услуги) в Цифре из 1С.
Запрос
POST /api/contract/create
Параметры запроса
| Параметр |
Тип |
Обязательный |
Описание |
SecretKey |
string |
Да |
Секретный ключ |
Data |
array |
Да |
Массив договоров
Структура Data[]
|
Структура Data[]
| Поле |
Тип |
Обязательное |
Описание |
Guid |
string |
Да |
Идентификатор договора в 1C |
CompanyGuid |
string |
Условно |
Идентификатор контрагента в 1С. Обязателен для индивидуальных договоров |
TemplateType |
string |
Нет |
Тип договора: typical (типовой) или individual (индивидуальный). |
Name |
string |
Нет |
Название договора |
Date |
datetime |
Нет |
Дата договора |
Conditions |
array |
Нет |
Условия договора (товары и услуги)
Структура Conditions[]
|
Структура Conditions[]
Важно: Массив
Conditions может содержать три типа элементов:
- Товары — когда
Service пустой, null или отсутствует
- Услуги — когда указан
Service
- Зоны доставки — когда
Zone = true
Товары (когда Service пустой, null или отсутствует)
| Поле |
Тип |
Обязательное |
Описание |
Guid |
string |
Да |
Идентификатор товара в 1C |
Name |
string |
Да |
Наименование товара |
| Остальные поля (Price, VatRate, Unit, Sku, Characteristics и др.) см. в документации по продукции |
Услуги (когда Service указан)
| Поле |
Тип |
Обязательное |
Описание |
Guid |
string |
Да |
Идентификатор услуги в 1C |
Name |
string |
Да |
Наименование услуги |
Service |
string |
Да |
Тип услуги: mix (доставка), downtime (простой), pump (насос), other (прочее) |
Price |
float |
Нет |
Цена услуги (по умолчанию 0) |
VatRate |
float |
Нет |
Процент НДС (по умолчанию 0) |
VatInPrice |
boolean |
Нет |
Включен ли НДС в цену (по умолчанию false) |
PriceType |
string |
Нет |
Тип цены (по умолчанию "by_one")
Подробнее о типах цен
|
Зоны доставки (когда Zone = true)
| Поле |
Тип |
Обязательное |
Описание |
Zone |
boolean |
Да |
Должно быть true для обозначения зоны доставки |
Guid |
string |
Да |
Идентификатор зоны в 1C |
Name |
string |
Да |
Название зоны доставки |
| Остальные поля см. в документации по зонам доставки |
Типы цен (PriceType)
Допустимые значения PriceType зависят от типа услуги:
| Тип услуги (Service) |
Допустимые значения PriceType |
Описание |
mix |
by_one, by_all |
За 1 м³ или за рейс |
pump |
by_one, by_all |
За единицу или за все единоразово |
downtime |
free, by_one |
Бесплатно или за час |
other |
by_one, by_all |
За единицу или за все единоразово |
Пример запроса
{
"SecretKey": "2akgzOCYsAxLwpNl",
"Data": [
{
"Guid": "22db4291-154f-11ec-973e-244bfecb4e0a",
"CompanyGuid": "33ab5192-265g-22fc-a84f-355cgfdc5f1b",
"TemplateType": "individual",
"Name": "Договор поставки №43",
"Date": "2024-04-03 00:00:00",
"Conditions": [
{
"Guid": "44cd6203-376h-33gd-b95g-466dghde6g2c",
"Name": "БСТ М400",
"Sku": "БСГ-М400",
"Unit": "м³",
"Price": 5000,
"Total": 10,
"Vat": 20,
"VatInPrice": true,
"Characteristics": [
{
"Guid": "char-001-aaa",
"Name": "F200"
},
{
"Guid": "char-002-bbb",
"Name": "W6"
}
]
},
{
"Guid": "66ef8425-598j-55if-d17i-688fijgf8i4e",
"Name": "Щебень фр. 5-20",
"Price": 1500,
"Total": 5,
"VatRate": 0,
"VatInPrice": false
},
{
"Guid": "55de7314-487i-44he-c06h-577ehife7h3d",
"Name": "Доставка",
"Price": 50,
"VatRate": 20,
"VatInPrice": true,
"Service": "mix"
},
{
"Zone": true,
"Guid": "zone-77fg9536-609k-66jg-e28j-799gjkhg9j5f",
"Name": "Зона А - Центральный район",
"Price": 100
}
]
}
]
}
Ответ
Коды ответов
| Код |
Описание |
200 |
Частичный успех. Часть данных обработана, но есть ошибки валидации (success: true) |
201 |
Успешное создание. Все договоры обработаны без ошибок (success: true) |
401 |
Ошибка ключа. Секретный ключ не найден (success: false) |
422 |
Ошибка валидации. Data должен быть массивом (success: false) |
500 |
Ошибка сервера. Внутренняя ошибка обработки (success: false) |
Структура ответа
| Поле |
Тип |
Описание |
success |
boolean |
Успешность операции |
message |
string |
Сообщение об успешных операциях |
data_id |
integer |
ID записи в логе |
errors |
array |
Массив ошибок (только при наличии ошибок) |
Успешный ответ (201)
{
"success": true,
"message": "Добавлено документов: 1, товаров: 3, удалено товаров: 2, сервисов: 2, зон: 1",
"data_id": 123
}
Частичный успех с ошибками (207)
{
"success": true,
"message": "Добавлено документов: 1, товаров: 1, удалено товаров: 1, сервисов: 1, зон: 0",
"data_id": 123,
"errors": [
"Документов без GUID: 1",
"Товаров без GUID: 2",
"Услуг без типа: 1"
]
}
Ошибка ключа (401)
{
"success": false,
"message": "Секретный ключ не найден",
"data_id": null
}
Ошибка валидации данных (422)
{
"success": false,
"message": "Неверный тип данных",
"data_id": 123
}
Ошибка сервера (500)
{
"success": false,
"message": "Произошла ошибка: подробное описание ошибки",
"data_id": 123
}
Примечания
- Типы договоров (TemplateType):
typical (типовой) — договор-шаблон без привязки к контрагенту. Поле company_id будет null
individual (индивидуальный) — договор с конкретным контрагентом. Требуется CompanyGuid
- Определение типа договора:
- Если указан
TemplateType = typical → типовой договор (CompanyGuid не обязателен)
- Если указан
TemplateType = individual → индивидуальный договор (требуется CompanyGuid)
- Если
TemplateType не указан, но есть CompanyGuid → individual
- Если
TemplateType не указан и нет CompanyGuid → ошибка
- Обязательные поля договора:
Guid. Для индивидуальных договоров также обязателен CompanyGuid
- Обязательные поля товара:
Guid, Name
- Обязательные поля услуги:
Guid, Name, Service (тип услуги)
- Валидация услуг: Поле
PriceType должно соответствовать типу услуги. Допустимые значения:
- Для
mix, pump, other: by_one (за единицу) или by_all (за всё)
- Для
downtime: free (бесплатно) или by_one (за час)
- Обязательные поля зоны доставки:
Zone = true, Guid, Name
- Обязательные поля тарифов в зонах:
Guid, Name, Service (тип услуги). Валидация PriceType аналогична услугам
- Типы условий: Массив
Conditions может содержать товары, услуги и зоны доставки одновременно
- Определение типа элемента:
- Если
Zone = true — обрабатывается как зона доставки
- Если
Service пустой/null/отсутствует — обрабатывается как товар
- Если
Service указан — обрабатывается как услуга
- Характеристики товаров:
- Для товаров с характеристиками создается отдельная связь документа с товаром для каждой характеристики
- Характеристики без поля
Guid пропускаются
- Если характеристик нет — создается одна связь с простым GUID товара
- Синхронизация товаров:
- При обновлении договора товары, которые не были переданы в массиве
Conditions, будут удалены из договора
- Это позволяет синхронизировать товары: если товар удалён в 1С, он автоматически удалится и в Цифре при следующей отправке данных
- Количество удалённых товаров отображается в ответе:
"удалено товаров: N"
- Для индивидуальных договоров компания с указанным
CompanyGuid должна существовать в Цифре
- Товары/услуги/зоны без обязательных полей пропускаются и не создаются
- Поля
Min и Max для услуг в договорах НЕ используются (только для зон доставки)
- Не отправляйте за раз более 2000 договоров или более 1 МБ данных
См. также