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

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

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

Анализ причин возникающей ошибки

Проанализируем ситуацию: при ручном вводе документа «Ввод начальных остатков» поле для выбора счета-фактуры или документа расчетов с контрагентом работает корректно, однако программный код не присваивает значение. На это есть две основные причины:

  1. Передача объекта вместо ссылки: при заполнении реквизитов партий или документов расчетов разработчики иногда присваивают переменную типа ДокументОбъект вместо ДокументСсылка (например, мРезультат[0].Партия = ДокРасчетов вместо ДокРасчетов.Ссылка). Из-за несоответствия типов платформа сбрасывает значение реквизита.
  2. Отсутствие ключа связи табличных частей: в документе «Ввод начальных остатков» табличные части разделены. Строки подчиненной табличной части ДанныеПоСФ связаны со строками основной табличной части НоменклатураНаСкладе с помощью специального числового поля КлючСубконто (или КлючСтроки). Если этот ключ не заполнен, платформа не понимает, к какой именно позиции запасов относится запись о счет-фактуре, и очищает поле.

Шаг 1. Проверка типов и корректная передача ссылки

Рассмотрим фрагмент кода создания партионного документа и заполнения партии. Обязательно убедимся, что при присвоении реквизитам Партия и СчетФактура передается именно Ссылка записанного документа.


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

ЗаписатьДокументБезопасно(ДокРасчетов);

// Заполнение партии в основной табличной части
// ВАЖНО: Присваиваем именно Ссылку, а не объект ДокРасчетов
СтрокаНоменклатуры.Партия = ДокРасчетов.Ссылка;

Шаг 2. Связывание табличных частей через ключ строки

Выясним, как связать записи основной табличной части НоменклатураНаСкладе и подчиненной ДанныеПоСФ. При добавлении строки в первую табличную часть платформа формирует уникальный ключ. Его необходимо скопировать в соответствующую строку второй табличной части.

Посмотрим на итоговый пример правильного программного заполнения документа ввода остатков:


// Получаем объект документа ввода остатков
НачОстатки = ДокНачальныхОстатков.ПолучитьОбъект();

// 1. Добавляем строку в основную табличную часть
ТЧМатериалы = НачОстатки.НоменклатураНаСкладе;
НоваяСтрокаМПЗ = ТЧМатериалы.Добавить();
НоваяСтрокаМПЗ.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Материал);
НоваяСтрокаМПЗ.Склад = Справочники.Склады.НайтиПоНаименованию(Склад);
НоваяСтрокаМПЗ.Количество = Количество;
НоваяСтрокаМПЗ.Сумма = Сумма;
НоваяСтрокаМПЗ.Партия = ДокРасчетов.Ссылка; // Передаем ссылку!

// Генерируем или получаем ключ связи
КлючСвязи = НоваяСтрокаМПЗ.КлючСубконто; 

// 2. Добавляем запись в подчиненную табличную часть по НДС/Свет-фактурам
ТЧСчФактуры = НачОстатки.ДанныеПоСФ;
нСтрока = ТЧСчФактуры.Добавить();

// Устанавливаем ключ связи с первой табличной частью
нСтрока.КлючСубконто = КлючСвязи; 

// Присваиваем ссылку на счет-фактуру или документ расчетов
нСтрока.СчетФактура = ДокРасчетов.Ссылка;
нСтрока.ВидЦенности = Перечисления.ВидыЦенностей.Материалы;
нСтрока.СпособУчетаНДС = Перечисления.СпособыУчетаНДС.ПринимаетсяКВычету;
нСтрока.СчетУчетаНДС = ПланыСчетов.Хозрасчетный.НДСпоПриобретеннымМПЗ; // 19.03
нСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС18;
нСтрока.Количество = Количество;
нСтрока.СуммаБезНДС = Сумма;

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

Особенности раздельного учета НДС

При ведении раздельного учета НДС в «1С:Бухгалтерии 8.3» помимо записей в бухгалтерском учете необходимо следить за корректным заполнением специализированных регистров. Если заполнять только документ «Ввод начальных остатков», убедитесь, что в конфигурации корректно настроены режимы ввода остатков.

Для предотвращения ошибок списания партий в будущем рекомендуется соблюдать следующий порядок проверок:

  1. Проверка ссылочной целостности: документ-основание (например, ДокументРасчетовСКонтрагентом) должен быть записан в информационной базе до момента его подстановки в табличную часть.
  2. Соответствие сумм и количества: показатели количества и сумм в ТЧ НоменклатураНаСкладе должны строго совпадать с показателями в ТЧ ДанныеПоСФ для одинаковых ключей связи.
  3. Проверка регистра «Раздельный учет НДС»: после записи и проведения документа ввода остатков сформируйте отчет по регистру накопления РаздельныйУчетНДС, чтобы убедиться в формировании движений по способам учета НДС.
← На главную