Как программно создать документ «Реализация товаров и услуг» в 1С:Бухгалтерия 3.0 с использованием типовых методов?

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

Программное создание документов в конфигурации «Бухгалтерия предприятия 3.0» (БП 3.0) — это задача, с которой часто сталкиваются разработчики при интеграции систем или автоматизации загрузки данных. Однако просто заполнить реквизиты объекта недостаточно. Чтобы документ был корректным с точки зрения методологии бухгалтерского учета и успешно проходил проверки (особенно в облачных сервисах типа 1С:Фреш), необходимо максимально задействовать типовые механизмы конфигурации. Рассмотрим подробнее, как автоматизировать этот процесс, избегая «хардкода» счетов учета и ручного расчета налогов.

Шаг 1. Инициализация объекта и заполнение базовых реквизитов

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


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

// Инициализируем стандартные настройки (валюта, склад по умолчанию и т.д.)
НовыйДокумент.Заполнить(Неопределено);

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

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

Шаг 2. Автоматическое заполнение договоров и счетов расчетов

Одной из самых распространенных ошибок является ручное указание счетов учета расчетов (например, 62.01 и 62.02). В БП 3.0 эти данные хранятся в регистре сведений «Счета учета расчетов с контрагентами». Чтобы не писать запросы к этому регистру, воспользуемся специализированным общим модулем. Выясним, как это сделать:


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

// Автоматически заполняем счета расчетов (62.01, 62.02 и т.д.)
СчетаУчетаВДокументах.ЗаполнитьСчетаУчетаРасчетов(НовыйДокумент);

Функция СчетаУчетаВДокументах.ЗаполнитьСчетаУчетаРасчетов(Объект) — это мощный инструмент, который анализирует вид договора, контрагента и организацию, подставляя актуальные счета из настроек программы. Это гарантирует, что ваш код не сломается, если бухгалтер решит изменить счета учета для конкретного контрагента.

Шаг 3. Заполнение табличной части «Товары» и счетов учета номенклатуры

Переходим к заполнению строк документа. Для каждой позиции номенклатуры нам необходимо определить счета учета (41, 90.01.1, 90.02.1), ставку НДС и цену. Вместо прямого присвоения, разберем по шагам использование типовых процедур:


Для Каждого СтрокаДанных Из МояСтруктураДанных Цикл
    НоваяСтрока = НовыйДокумент.Товары.Добавить();
    НоваяСтрока.Номенклатура = СтрокаДанных.Номенклатура;
    НоваяСтрока.Количество = СтрокаДанных.Количество;
    
    // 1. Заполняем счета учета номенклатуры (доходов, расходов, ТМЦ)
    // Метод использует регистр "Счета учета номенклатуры"
    СчетаУчетаВДокументах.ЗаполнитьСчетаУчета(НовыйДокумент, "Товары");
    
    // 2. Рассчитываем НДС
    УчетНДС.ЗаполнитьСтавкуНДС(НоваяСтрока, НовыйДокумент.Организация);
    УчетНДС.РассчитатьСуммуНДС(НоваяСтрока, НовыйДокумент.ЦенаВключаетНДС);
    
    // 3. Заполнение цен (если необходимо использовать тип цен из договора)
    ПараметрыЗаполненияЦен = ОбработкаТабличныхЧастей.ПараметрыЗаполненияЦен();
    ПараметрыЗаполненияЦен.ТипЦен = НовыйДокумент.ДоговорКонтрагента.ТипЦен;
    ОбработкаТабличныхЧастей.ЗаполнитьЦеныИВалюту(НовыйДокумент, ПараметрыЗаполненияЦен);
КонецЦикла;

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

Шаг 4. Итоговые расчеты и проверка заполнения

После того как все строки добавлены, необходимо актуализировать общие итоги документа (сумму, сумму НДС, количество). В современных версиях БП 3.0 для этого часто используются механизмы модуля объекта или модуля формы. При программном создании рекомендуется вызвать проверку заполнения, чтобы убедиться в полноте данных:

Проанализируем завершающий этап:


// Пересчитываем итоги по всему документу
НовыйДокумент.Записать(РежимЗаписиДокумента.Запись);

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

Особенности работы в облачных сервисах (1С:Фреш)

Если вы разрабатываете внешнюю обработку для работы во «Фреше», крайне важно использовать только те методы, которые разрешены в безопасном режиме. Использование типовых общих модулей, таких как ОбщегоНазначения, СчетаУчетаВДокументах и УчетНДС, является «золотым стандартом». Это не только упрощает прохождение аудита, но и гарантирует, что ваша обработка не перестанет работать после очередного обновления конфигурации, так как эти модули являются частью стабильного API 1С.

Резюме и рекомендации

Подведем итог нашему разбору. Для качественной реализации создания документа «Реализация товаров и услуг» придерживайтесь следующего алгоритма:

  1. Всегда используйте Объект.Заполнить() сразу после создания объекта для первичной инициализации.
  2. Никогда не указывайте счета учета вручную в коде. Используйте методы модуля СчетаУчетаВДокументах.
  3. Для расчета налогов применяйте функции модуля УчетНДС, это обезопасит вас от ошибок при изменении законодательства (например, смене ставки НДС).
  4. Для определения цен используйте методы Ценообразование или ОбработкаТабличныхЧастей, чтобы учитывать настройки прайс-листов организации.
  5. Перед проведением обязательно вызывайте ПроверитьЗаполнение(), чтобы поймать ошибки до момента записи в базу данных.

Такой подход делает ваш код профессиональным, читаемым и легко поддерживаемым. Мы вместе разобрали основные методы, которые позволяют превратить обычное программное создание документа в надежный автоматизированный процесс, соответствующий всем требованиям типовой конфигурации 1С.

← На главную