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

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

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

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

Проанализируем, почему прямое присвоение значений реквизитам документа поступления не приводит к заполнению полей счета-фактуры на форме:

  1. Разделение входящей накладной и счета-фактуры: Реквизиты НомерВходящегоДокумента и ДатаВходящегоДокумента в объекте Документ.ПоступлениеТоваровУслуг предназначены исключительно для первичного учетного документа контрагента (товарной накладной ТОРГ-12, акта выполненных работ). Они не имеют прямого отношения к счету-фактуре.
  2. Счет-фактура как самостоятельный объект: В конфигурации «1С:Бухгалтерия предприятия 3.0» счет-фактура полученный представляет собой отдельный объект метаданных — Документ.СчетФактураПолученный. В отличие от версии 7.7, где данные СФ хранились непосредственно в реквизитах накладной, в версии 8.3 все движения по НДС и записи книги покупок формируются отдельным документом.
  3. Динамическое отображение данных на форме: Поля ввода номера и даты счета-фактуры, а также гиперссылка в нижней части формы поступления являются элементами формы, не привязанными к реквизитам шапки документа поступления напрямую. При открытии формы поступления выполняется динамический поиск подчиненного документа СчетФактураПолученный, у которого в табличной части ДокументыОснования указана ссылка на текущее поступление. Если подчиненный документ в информационной базе не найден, поля на форме остаются незаполненными.

Пошаговое решение: программное создание пары документов на сервере

Для корректного отражения счетов-фактур в учете, отображения их на форме документа поступления и попадания в книгу покупок необходимо программно создавать цепочку из двух документов: документа поступления и подчиненного счета-фактуры полученного. Разберем реализацию по шагам.

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

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


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

// Заполнение табличной части документа поступления
// ... (заполнение строк номенклатуры, количества, сумм и счетов учета)

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

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

// Типовое автозаполнение реквизитов и табличной части по основанию
СчетФактура.Заполнить(СсылкаНаПоступление);

// Установка параметров входящего счета-фактуры от поставщика
СчетФактура.НомерВходящегоДокумента = ВходящийНомерСФ;
СчетФактура.ДатаВходящегоДокумента = ВходящаяДатаСФ;
СчетФактура.Получен = ВходящаяДатаСФ;
СчетФактура.КодВидаОперации = "01";
СчетФактура.ОтразитьВычетНДСВКнигеПокупокДатойПолучения = Истина;

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

Практические нюансы и оптимизация

Рассмотрим важные особенности, которые необходимо учитывать при пакетной обработке и потоковой загрузке данных:

  1. Использование транзакций: При массовой загрузке рекомендуется оборачивать создание пары документов в единую транзакцию с помощью конструкций НачатьТранзакцию() и ЗафиксироватьТранзакцию(). Это предотвратит появление в базе поступлений без сформированных счетов-фактур в случае возникновения непредвиденных ошибок при проведении.
  2. Отражение универсального передаточного документа (УПД): Если поставщик передает УПД со статусом 1, номер и дата первичного документа совпадают с номером и датой счета-фактуры. В таком случае в созданном документе СчетФактураПолученный необходимо установить признак СчетФактура.УПД = Истина.
  3. Формирование записей книги покупок: Реквизит ОтразитьВычетНДСВКнигеПокупокДатойПолучения = Истина позволяет документу сформировать бухгалтерские проводки по вычету НДС (Дебет 68.02 Кредит 19) и записи в регистр накопления «НДС Покупки» сразу в момент проведения счета-фактуры без необходимости последующего ввода регламентного документа «Формирование записей книги покупок».
  4. Клиентские формы: Передавать созданные ссылки на клиент или интерактивно обновлять открытые окна не требуется. При первом открытии проведенного документа поступления любым пользователем управляемая форма автоматически считает связанный счет-фактуру и отобразит все его реквизиты в подвале окна.
← На главную