Как программно указать номер и дату входящего счета-фактуры в документе Поступление товаров и услуг в 1С 8.3?

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

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

Разберем архитектуру хранения этих данных в типовых решениях «1С:Предприятие 8.3» и рассмотрим несколько способов программной регистрации входящего счета-фактуры.

Архитектура хранения связи между поступлением и счетом-фактурой

Проанализируем, как устроен механизм регистрации входящего НДС. В типовой конфигурации документ Поступление (акт, накладная) физически не содержит реквизитов для хранения номера, даты или ссылки на счет-фактуру. Связь между документами строится снизу вверх со стороны документа СчетФактураПолученный:

  1. Ссылка на документ поступления сохраняется в табличной части ДокументыОснования документа СчетФактураПолученный (в реквизите ДокументОснование).
  2. Строка с номером и датой счета-фактуры внизу формы документа поступления является динамически формируемым элементом интерфейса (реквизитом формы), который заполняется при открытии через обращение к данным базы.
  3. Таким образом, чтобы программно зарегистрировать входящий счет-фактуру, нам обязательно требуется создать отдельный документ СчетФактураПолученный и связать его с уже записанным документом поступления.

Способ 1. Использование типовой функции общего модуля

Рассмотрим наиболее лаконичный вариант, применяемый в коде типовой конфигурации. В общем модуле УчетНДСВызовСервера реализована экспортная функция, позволяющая создать и провести счет-фактуру одной строкой кода.

Разберем по шагам последовательность действий:

  1. Записываем и проводим документ поступления, чтобы получить валидную ссылку в базе данных.
  2. Вызываем типовую процедуру создания подчиненного счета-фактуры.

Посмотрим на пример кода:


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

// 2. Определяем входящие реквизиты поставщика
НомерВходящегоСФ = "СФ-12345";
ДатаВходящегоСФ  = ТекущаяДата();

// 3. Вызываем типовой метод создания документа
УчетНДСВызовСервера.СоздатьСчетФактуруПолученныйНаОсновании(
    СсылкаНаПТУ, 
    НомерВходящегоСФ, 
    ДатаВходящегоСФ
);

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

Способ 2. Создание документа через стандартную обработку заполнения (рекомендуемый)

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

Посмотрим на пример реализации:


// 1. Фиксируем проведение документа поступления
ДокументПоступлениеОбъект.Записать(РежимЗаписиДокумента.Проведение);
СсылкаНаПоступление = ДокументПоступлениеОбъект.Ссылка;

// 2. Создаем новый объект счета-фактуры
НовыйСФ = Документы.СчетФактураПолученный.СоздатьДокумент();

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

// 4. Указываем входящие номер и дату от поставщика
НовыйСФ.НомерВходящегоДокумента = "СФ-12345";
НовыйСФ.ДатаВходящегоДокумента  = ТекущаяДата();

// 5. Настраиваем признак вычета НДС в книге покупок
НовыйСФ.ОтразитьВычетНДСВКнигеПокупок = Истина;

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

Способ 3. Прямое заполнение реквизитов объекта

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

Рассмотрим структуру ключевых реквизитов, обязательных для заполнения:

  1. ВидСчетаФактуры — устанавливаем значение Перечисления.ВидыСчетовФактурПолученных.НаПоступление.
  2. Организация, Контрагент, ДоговорКонтрагента — копируются из документа поступления.
  3. НомерВходящегоДокумента и ДатаВходящегоДокумента — номер и дата счета-фактуры поставщика.
  4. Табличная часть ДокументыОснования — добавляем строку и заполняем реквизит ДокументОснование ссылкой на документ поступления.
  5. Табличная часть Главное — заполняются суммы взаиморасчетов, ставки и суммы НДС.

Важные нюансы и ограничения при работе со счетами-фактурами

Проанализируем ключевые особенности, которые необходимо учитывать при разработке:

  1. Наличие ссылки: Невозможно привязать счет-фактуру к документу поступления до тех пор, пока поступление не записано в информационную базу. Передавать в качестве основания можно только физическую ссылку (Ссылка), а не объектную переменную.
  2. Движения по НДС: Входной НДС на счет 19 начисляется самим документом Поступление (акт, накладная). Документ СчетФактураПолученный при проведении формирует записи в регистре накопления НДС Покупки (книга покупок) и проводку вычета (Дт 68.02 — Кт 19) только при установленном флаге ОтразитьВычетНДСВКнигеПокупок = Истина.
  3. Контроль дубликатов: В типовых конфигурациях действует проверка на уникальность комбинации полей Контрагент + НомерВходящегоДокумента + ДатаВходящегоДокумента. Перед созданием нового документа рекомендуется программно проверять базу на наличие уже зарегистрированного счета-фактуры от данного контрагента с такими же реквизитами.
← На главную