Как программно создать и заполнить документ «Реализация товаров и услуг» в 1С 8.3

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

В процессе разработки на платформе 1С:Предприятие 8.3 часто возникает задача автоматизации ввода данных. Одной из самых распространенных операций является программное создание документа РеализацияТоваровУслуг. Это может потребоваться при интеграции с внешними системами, загрузке данных из Excel или при реализации сложных бизнес-цепочек. В данной статье мы подробно разберем, как правильно инициализировать объект, заполнить ключевые реквизиты и программно провести документ.

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

Для начала работы нам необходимо создать экземпляр объекта документа. Мы будем использовать менеджер документа. Проанализируем базовый код создания:


// Создаем новый объект документа
НовыйДокумент = Документы.РеализацияТоваровУслуг.СоздатьДокумент();

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

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

Заполнение реквизитов шапки документа

Рассмотрим подробнее заполнение основных полей, без которых документ не сможет быть корректно проведен или отражен в учете. К таким полям относятся Организация, Контрагент, Договор и Склад. Выясним причину, почему важно проверять соответствие договора и контрагента: в 1С жесткая связь между этими объектами, и неверный договор заблокирует проведение.

Разберем по шагам заполнение шапки:

  1. Организация: Это юридическое лицо, от имени которого оформляется продажа.
  2. Контрагент: Покупатель товаров или услуг.
  3. Договор: Основание для расчетов. Должен иметь вид "С покупателем".
  4. Склад: Место хранения, с которого списываются ТМЦ.

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

Совет: Вместо поиска по наименованию в реальных задачах лучше использовать поиск по уникальному идентификатору (GUID) или предопределенные значения, чтобы избежать ошибок при изменении названий в справочниках.

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

Теперь перейдем к самому ответственному этапу — заполнению списка товаров. Посмотрим на пример добавления строк в табличную часть Товары. Мы должны не только указать номенклатуру, но и рассчитать суммы, налоги и счета учета.

Проанализируем алгоритм добавления строки:


// Добавляем новую строку в табличную часть
НоваяСтрока = НовыйДокумент.Товары.Добавить();

// Заполняем данные товара
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("Программный продукт 1С");
НоваяСтрока.Количество = 1;
НоваяСтрока.Цена = 5000;
НоваяСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;

// Автоматический расчет суммы
НоваяСтрока.Сумма = НоваяСтрока.Количество * НоваяСтрока.Цена;

В типовых конфигурациях (таких как ERP, УТ 11 или БП 3.0) часто используются вспомогательные модули для расчета налогов. Рассмотрим подробнее: если мы хотим, чтобы система сама рассчитала НДС, можно воспользоваться экспортными процедурами типовых конфигураций, но в простом случае расчет выполняется вручную или через параметры документа.

Установка цен и расчет итогов

Для корректного заполнения всех колонок (например, СуммаНДС) рекомендуется использовать методы типовых конфигураций, если они доступны. Если мы работаем в "чистой" конфигурации или пишем универсальный механизм, расчет будет выглядеть так:


Если НоваяСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС20 Тогда
    НоваяСтрока.СуммаНДС = НоваяСтрока.Сумма * 20 / 120; // Если НДС в том числе
ИначеЕсли НоваяСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС18 Тогда
    НоваяСтрока.СуммаНДС = НоваяСтрока.Сумма * 18 / 118;
КонецЕсли;

Также важно заполнить счета учета, если документ создается в 1С:Бухгалтерия. Для этого используется реквизит СчетУчета и СчетДоходов.

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

Завершающим этапом является фиксация данных в базе. В 1С существует два режима записи: просто сохранение (РежимЗаписиДокумента.Запись) и проведение (РежимЗаписиДокумента.Проведение). Проведение документа создает движения по регистрам (остатки товаров, взаиморасчеты).

Разберем процесс записи с обработкой ошибок:


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

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

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

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

Рассмотрим этот вариант:


Основание = Документы.ЗаказКлиента.НайтиПоНомеру("001");
НовыйДокумент = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
НовыйДокумент.Заполнить(Основание); // Система сама перенесет товары и контрагента
НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);

Этот способ является наиболее предпочтительным в типовых решениях, так как он минимизирует количество кода и сохраняет логику типовой конфигурации. Мы проанализировали основные методы работы с документом РеализацияТоваровУслуг. Применяя данные подходы, вы сможете эффективно автоматизировать складской и торговый учет в вашей системе.

← На главную