При программной загрузке остатков ТМЦ в конфигурацию «1С:Бухгалтерия предприятия 3.0» разработчики часто сталкиваются с ситуацией, когда данные основной табличной части заполняются успешно, но при попытке записать данные по счетам-фактурам (подчиненная табличная часть ДанныеПоСФ) реквизит СчетФактура остается пустым или принимает значение Неопределено. Разберем причинно-следственные связи этой проблемы и выясним, как правильно организовывать программный ввод данных.
Проанализируем ситуацию: при ручном вводе документа «Ввод начальных остатков» поле для выбора счета-фактуры или документа расчетов с контрагентом работает корректно, однако программный код не присваивает значение. На это есть две основные причины:
ДокументОбъект вместо ДокументСсылка (например, мРезультат[0].Партия = ДокРасчетов вместо ДокРасчетов.Ссылка). Из-за несоответствия типов платформа сбрасывает значение реквизита.ДанныеПоСФ связаны со строками основной табличной части НоменклатураНаСкладе с помощью специального числового поля КлючСубконто (или КлючСтроки). Если этот ключ не заполнен, платформа не понимает, к какой именно позиции запасов относится запись о счет-фактуре, и очищает поле.Рассмотрим фрагмент кода создания партионного документа и заполнения партии. Обязательно убедимся, что при присвоении реквизитам Партия и СчетФактура передается именно Ссылка записанного документа.
// Создание документа расчетов с контрагентом
ДокРасчетов = Документы.ДокументРасчетовСКонтрагентом.СоздатьДокумент();
ДокРасчетов.Организация = ОснОрганизация;
ДокРасчетов.Дата = ДатаДокумента;
ДокРасчетов.ДатаВходящегоДокумента = ДатаВходящегоДокумента;
ДокРасчетов.НомерВходящегоДокумента = НомерВходящегоДокумента;
ДокРасчетов.Контрагент = КонтрагентСсылка;
ДокРасчетов.ДоговорКонтрагента = ДоговорСсылка;
ЗаписатьДокументБезопасно(ДокРасчетов);
// Заполнение партии в основной табличной части
// ВАЖНО: Присваиваем именно Ссылку, а не объект ДокРасчетов
СтрокаНоменклатуры.Партия = ДокРасчетов.Ссылка;
Выясним, как связать записи основной табличной части НоменклатураНаСкладе и подчиненной ДанныеПоСФ. При добавлении строки в первую табличную часть платформа формирует уникальный ключ. Его необходимо скопировать в соответствующую строку второй табличной части.
Посмотрим на итоговый пример правильного программного заполнения документа ввода остатков:
// Получаем объект документа ввода остатков
НачОстатки = ДокНачальныхОстатков.ПолучитьОбъект();
// 1. Добавляем строку в основную табличную часть
ТЧМатериалы = НачОстатки.НоменклатураНаСкладе;
НоваяСтрокаМПЗ = ТЧМатериалы.Добавить();
НоваяСтрокаМПЗ.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Материал);
НоваяСтрокаМПЗ.Склад = Справочники.Склады.НайтиПоНаименованию(Склад);
НоваяСтрокаМПЗ.Количество = Количество;
НоваяСтрокаМПЗ.Сумма = Сумма;
НоваяСтрокаМПЗ.Партия = ДокРасчетов.Ссылка; // Передаем ссылку!
// Генерируем или получаем ключ связи
КлючСвязи = НоваяСтрокаМПЗ.КлючСубконто;
// 2. Добавляем запись в подчиненную табличную часть по НДС/Свет-фактурам
ТЧСчФактуры = НачОстатки.ДанныеПоСФ;
нСтрока = ТЧСчФактуры.Добавить();
// Устанавливаем ключ связи с первой табличной частью
нСтрока.КлючСубконто = КлючСвязи;
// Присваиваем ссылку на счет-фактуру или документ расчетов
нСтрока.СчетФактура = ДокРасчетов.Ссылка;
нСтрока.ВидЦенности = Перечисления.ВидыЦенностей.Материалы;
нСтрока.СпособУчетаНДС = Перечисления.СпособыУчетаНДС.ПринимаетсяКВычету;
нСтрока.СчетУчетаНДС = ПланыСчетов.Хозрасчетный.НДСпоПриобретеннымМПЗ; // 19.03
нСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС18;
нСтрока.Количество = Количество;
нСтрока.СуммаБезНДС = Сумма;
// Записываем документ
НачОстатки.Записать(РежимЗаписиДокумента.Запись);
При ведении раздельного учета НДС в «1С:Бухгалтерии 8.3» помимо записей в бухгалтерском учете необходимо следить за корректным заполнением специализированных регистров. Если заполнять только документ «Ввод начальных остатков», убедитесь, что в конфигурации корректно настроены режимы ввода остатков.
Для предотвращения ошибок списания партий в будущем рекомендуется соблюдать следующий порядок проверок:
ДокументРасчетовСКонтрагентом) должен быть записан в информационной базе до момента его подстановки в табличную часть.НоменклатураНаСкладе должны строго совпадать с показателями в ТЧ ДанныеПоСФ для одинаковых ключей связи.РаздельныйУчетНДС, чтобы убедиться в формировании движений по способам учета НДС.