cf_СоздатьДокументЗаказ
Создание или обновление заказа клиента с реализациями. Самый сложный модуль расширения. Задание: createOrder
Логика работы
- Поиск существующего — ищет документ
ЗаказКлиентапо реквизитуcf_Id. Если найден — обновляет, если нет — создаёт новый. - Валидация — проверяет наличие организации-продавца, контрагента, договора. При ошибках — возвращает
failed. - Заполнение шапки — организация, контрагент, договор, подразделение, склад, дата, адрес доставки, менеджер и т.д.
- Заполнение товаров — Products (основные) и Services (услуги) из параметров.
- Создание реализаций — для каждого элемента
ApplicationsсоздаётРеализацияТоваровУслуг.
Поиск контрагентов (3 уровня)
Для организации, контрагента и договора применяется каскадный поиск:
- По GUID (через
ПолучитьСсылку) - По ИНН (через
НайтиПоРеквизиту) - По наименованию (через
НайтиПоНаименованию) — только для контрагентов
Поиск номенклатуры
Только по GUID. Если не найдена — используется "Доставка до клиента (рейс) абс".
Определение формы оплаты
PaymentMethod = "cash"→ Наличная- Иначе → Безналичная
Определение способа доставки
DeliveryType = "take-away"→ Самовывоз- Иначе → ДоКлиента
НДС
Налогообложение определяется динамически по учётной политике организации. Если система налогообложения = Общая, то ПродажаОблагаетсяНДС, иначе — НеОблагается.
Создание реализаций
Для каждого элемента массива Applications из параметров вызывается cf_СоздатьДокументРеализация.ПолучитьДокументРеализация. Результат — массив {Id, Guid} созданных реализаций, который возвращается в Цифру.
Запись документа
Сначала пытается записать с проведением. Если проведение не удалось — записывает без проведения (с флагом ОбменДанными.Загрузка). Все ошибки логируются в журнал регистрации.