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

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

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

Автоматическое заполнение счетов учета в шапке и табличной части

Одной из главных проблем при создании документа является ручная прописка счетов учета (например, 62.01, 90.01.1). Это считается плохим тоном, так как счета могут меняться в зависимости от учетной политики или настроек номенклатуры. В БП 3.0 реализован механизм автоматического определения счетов. Проанализируем, как заставить систему сделать это за нас.

Самый простой и «чистый» способ — использовать дополнительные свойства объекта перед записью. Разберем этот пример кода:


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

// Вызываем типовой метод заполнения перед записью
СчетаУчетаВДокументах.ЗаполнитьПередЗаписью(ДокументОбъект, РежимЗаписиДокумента.Проведение);

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


СтрокиДляЗаполнения = Новый Массив;
СтрокиДляЗаполнения.Добавить(НоваяСтрокаУслуги);

// Заполняем счета для конкретных строк ТЧ "Услуги"
СчетаУчетаВДокументах.ЗаполнитьСтроки(СтрокиДляЗаполнения, "Услуги", ДокументОбъект);

Решение проблемы отсутствия сумм в проводках и пустых движений по НДС

Если после выполнения метода Записать(РежимЗаписиДокумента.Проведение) в бухгалтерских проводках (Дт/Кт) суммы равны нулю, причина чаще всего кроется в незаполненных реквизитах валюты и курса. Даже если учет ведется в рублях, для механизмов БП 3.0 критически важно наличие следующих данных:

  1. Валюта документа: Если реквизит ВалютаДокумента пуст, расчеты по регистрам бухгалтерии могут игнорироваться.
  2. Курс и кратность: Даже для рублевых документов КурсВзаиморасчетов и КратностьВзаиморасчетов должны быть равны 1. Если система видит 0, итоговая сумма в проводках (Сумма * Курс) превращается в ноль.
  3. Тип налогообложения НДС: Реквизит НалогообложениеНДС (тип ПеречислениеСсылка.ТипыНалогообложенияНДС) определяет, должна ли система вообще формировать движения по НДС.

Посмотрим на пример правильной инициализации этих реквизитов:


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

Автоматический расчет сумм и НДС в табличной части

В отличие от БП 2.0, где часто использовались процедуры «ОбработатьТабличнуюЧасть», в современной конфигурации функции вынесены в модуль ОбработкаТабличныхЧастей. Чтобы не высчитывать НДС вручную (Сумма * 20 / 120), рекомендуется использовать типовые процедуры. Выясним, как это реализовать:


// Предположим, мы заполнили Цену и Количество
НоваяСтрока.Количество = 1;
НоваяСтрока.Цена = 120;

// Рассчитываем общую сумму строки
ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(НоваяСтрока, ДокументОбъект);

// Заполняем ставку НДС из справочника Номенклатура
УчетНДС.ЗаполнитьСтавкуНДСВТабличнойЧасти(ДокументОбъект, "Услуги");

// Рассчитываем сумму НДС на основании ставки и суммы строки
ОбработкаТабличныхЧастей.РассчитатьСуммуНДС(НоваяСтрока, ДокументОбъект);

Использование ОбработкаТабличныхЧастей.РассчитатьСуммуНДС гарантирует, что расчет будет произведен корректно в зависимости от того, включен ли НДС в сумму (реквизит СуммаВключаетНДС) или начисляется сверху.

Заполнение ответственных лиц и реквизитов печати

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

Руководители.ЗаполнитьУполномоченныхЛиц(ДокументОбъект, ДокументОбъект.Организация, ДокументОбъект.Дата);

Это позволит избежать пустых полей в подписях при последующей печати документа пользователями.

Создание связанного Счета-фактуры

Если ваша операция подразумевает выставление счета-фактуры (особенно если ЭтоУниверсальныйДокумент = Ложь), его также нужно создать программно. Рассмотрим наиболее эффективный метод через менеджер документа:


// Сначала записываем основной документ
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);

// Создаем и связываем счет-фактуру
УчетНДСПереопределяемый.СоздатьСчетФактуруНаРеализацию(ДокументОбъект.Ссылка);

Этот метод автоматически создаст документ «Счет-фактура выданный», свяжет его с реализацией и заполнит все необходимые реквизиты на основании данных основания.

Итоги и рекомендации

Подведем итог. Для качественного программного создания документа «Реализация товаров и услуг» в БП 3.0 необходимо:

Такой подход делает ваш код устойчивым к изменениям в настройках программы и гарантирует корректность ведения бухгалтерского и налогового учета.

← На главную