Как программно создать и заполнить документ «Заказ клиента» в 1С:ERP 8.3?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет Торговля и дистрибуция
← На главную

В современной практике автоматизации на базе 1С:ERP Управление предприятием или 1С:Комплексная автоматизация часто возникает задача программного создания документов. Это может быть связано с интеграцией с внешними системами (сайтами, CRM, маркетплейсами), такими как OZON, WildBerries, Яндекс Маркет или СберМегамаркет (поможет интеграция 1С с маркетплейсами через API), а также когда необходим перенос данных из МойСклад. Для эффективной обработки входящих запросов и маршрутизации может применяться специализированный API-шлюз на платформе 1С. Рассмотрим подробнее процесс формирования объекта ЗаказКлиента, разберем обязательные реквизиты и проанализируем нюансы работы с типовыми механизмами конфигураций на управляемых формах.

Инициализация нового объекта документа

Процесс начинается с создания нового экземпляра — для этого есть модуль автоматической загрузки заказов в 1С:ERP. Для этого используется менеджер документа и метод СоздатьДокумент(). Важно понимать, что на данном этапе объект существует только в оперативной памяти.


НовыйЗаказ = Документы.ЗаказКлиента.СоздатьДокумент();
// Установка даты и автоматическое получение номера
НовыйЗаказ.Дата = ТекущаяДата();
НовыйЗаказ.УстановитьНовыйНомер();

В современных конфигурациях многие реквизиты должны заполняться значениями по умолчанию. Для корректной инициализации рекомендуется использовать механизмы БСП и процедуру ЗаполнитьДанныеЗаполнения, которая имитирует интерактивное создание документа пользователем и заполняет настройки организации, склада и другие параметры.

Заполнение основных реквизитов (шапки) документа

Перейдем к заполнению ключевых полей. В 1С:ERP существует жесткое разделение понятий «Партнер» и «Контрагент». Партнер — это управленческая сущность, а Контрагент — юридическое лицо. Рассмотрим пример заполнения этих полей:

  1. Организация — наше юридическое лицо, от имени которого оформляется продажа.
  2. Партнер — клиент из управленческого справочника.
  3. Контрагент — юридическое лицо клиента.
  4. Соглашение — условия продаж (типовое или индивидуальное).
  5. Валюта — валюта взаиморасчетов.

НовыйЗаказ.Организация = Справочники.Организации.НайтиПоНаименованию("Торговый дом");
НовыйЗаказ.Партнер = Справочники.Партнеры.НайтиПоНаименованию("Мебельщик");
// Контрагента лучше искать по ИНН или связи с партнером
НовыйЗаказ.Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("Партнер", НовыйЗаказ.Партнер);
НовыйЗаказ.Соглашение = Справочники.СоглашенияСКлиентами.НайтиПоНаименованию("Основное соглашение");
НовыйЗаказ.Валюта = Справочники.Валюты.НайтиПоКоду("643"); // Рубли

Именно из соглашения в 1С:ERP подтягиваются цены, скидки и налогообложение. Если этот реквизит не заполнен, многие автоматические алгоритмы программы не сработают корректно.

Работа с табличной частью «Товары»

Теперь разберем, как автоматизировать заполнение табличной части «Товары» и обеспечить корректный расчет цен — для этого есть автоматическая синхронизация заказов и отгрузок. Каждая строка содержит информацию о номенклатуре, количестве и финансовых показателях:


НоваяСтрока = НовыйЗаказ.Товары.Добавить();
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоАртикулу("ART-001");
// Для номенклатуры с характеристиками обязательно заполняем:
НоваяСтрока.Характеристика = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
НоваяСтрока.Количество = 10;
НоваяСтрока.Упаковка = НоваяСтрока.Номенклатура.ЕдиницаИзмерения;
НоваяСтрока.КоличествоУпаковок = 10;

В типовых решениях не рекомендуется просто присваивать значение полю Цена. Правильнее использовать экспортные процедуры для расчета по прайс-листу. Тем не менее, для простого примера установим цену вручную и рассчитаем сумму:


НоваяСтрока.Цена = 1500;
НоваяСтрока.Сумма = НоваяСтрока.Количество * НоваяСтрока.Цена;
// Не забываем про НДС
НоваяСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;

Использование типовых механизмов пересчета

Чтобы документ был валидным, после заполнения строк желательно вызвать процедуры, обновляющие итоги. Если вы создаете документ на стороне сервера, необходимо использовать методы объекта, так как методы формы недоступны. Например, расчет общей суммы документа:


// Сумма по документу обычно рассчитывается автоматически при записи,
// но если нужны итоги до записи:
НовыйЗаказ.СуммаДокумента = НовыйЗаказ.Товары.Итог("Сумма");

Запись и проведение документа

Завершающим этапом является сохранение данных. Важно помнить, что в ERP логика движений по регистрам напрямую зависит от статуса заказа. Рассмотрим безопасную запись в блоке Попытка...Исключение:


Попытка
    // Устанавливаем статус заказа, так как это влияет на проведение
    НовыйЗаказ.Статус = Перечисления.СтатусыЗаказовКлиентов.КВыполнению;
    
    // Проведение документа
    НовыйЗаказ.Записать(РежимЗаписиДокумента.Проведение);
    Сообщить("Заказ успешно создан и проведен: " + НовыйЗаказ.Номер);
Исключение
    Сообщить("Ошибка при создании заказа: " + ОписаниеОшибки());
КонецПопытки;

Причиной отказа в проведении может стать отсутствие товара на складе, незаполненные обязательные аналитики или закрытый период (поможет автоматизация управления заказами и остатками). Перед записью рекомендуется программно вызвать метод ПроверитьЗаполнение().

Дополнительные советы по оптимизации

Таким образом, мы детально разобрали процесс программного управления заказами. Внимательное заполнение связки Партнер-Контрагент-Соглашение и работа с табличными частями — это фундамент, на котором строится любая качественная интеграция в экосистеме 1С. Для этой задачи есть инструментарий для отладки API-интеграций в 1С.

← На главную