При разработке обработок загрузки данных (например, из файлов Excel) часто возникает задача не просто создать документ РеализацияТоваровУслуг, но и автоматически «выписать» к нему СчетФактураВыданный. В конфигурации 1С:Бухгалтерия предприятия 3.0 (БП 3.0) этот процесс имеет свои особенности, связанные как с заполнением реквизитов, так и с отображением связи между документами в пользовательском интерфейсе.
В этой статье мы подробно разберем несколько способов программного создания счета-фактуры, проанализируем типичные ошибки и выясним, как сделать так, чтобы созданный документ корректно отображался в форме реализации.
Наиболее простым и правильным с точки зрения типовой логики является использование стандартного механизма заполнения по основанию. Рассмотрим, как это реализовать в коде. Когда мы вызываем метод Заполнить(), система обращается к обработке заполнения в модуле объекта Счета-фактуры, где уже прописаны правила переноса данных из реализации (контрагент, организация, сумма, валюта и т.д.).
// Предположим, НовыйДокументРеализация — это уже созданная и проведенная ссылка на реализацию
НовыйДокументСчФ = Документы.СчетФактураВыданный.СоздатьДокумент();
НовыйДокументСчФ.Дата = ТекущаяДата(); // Или дата реализации
НовыйДокументСчФ.Заполнить(НовыйДокументРеализация.Ссылка);
// Дополнительно можно уточнить специфические реквизиты, если они не заполнились
НовыйДокументСчФ.Записать(РежимЗаписиДокумента.Проведение);
Этот метод хорош тем, что он минимизирует количество строк кода и использует типовые алгоритмы конфигурации. Однако важно помнить, что для успешного выполнения этого кода документ-основание (реализация) обязательно должен быть предварительно записан (а лучше проведен), иначе ссылка будет пустой, и заполнение не сработает.
Иногда требуется более тонкая настройка или создание счета-фактуры в специфических условиях. В БП 3.0 связь между документами фиксируется не только в реквизите ДокументОснование, но и в табличной части ДокументыОснования. Это сделано для поддержки возможности выставления одного счета-фактуры на несколько реализаций.
Проанализируем пример кода для ручного формирования связи:
СФ = Документы.СчетФактураВыданный.СоздатьДокумент();
СФ.Дата = ТекущаяДата();
СФ.Организация = СсылкаНаРеализацию.Организация;
СФ.Контрагент = СсылкаНаРеализацию.Контрагент;
// Указываем основной реквизит основания (для совместимости)
СФ.ДокументОснование = СсылкаНаРеализацию;
// Обязательно заполняем табличную часть, иначе связь может не отобразиться в форме
НоваяСтрока = СФ.ДокументыОснования.Добавить();
НоваяСтрока.ДокументОснование = СсылкаНаРеализацию;
// Заполнение кода вида операции (01 — обычная реализация)
СФ.КодВидаОперации = "01";
СФ.ВидСчетаФактуры = Перечисления.ВидСчетаФактурыВыданного.НаРеализацию;
СФ.Записать(РежимЗаписиДокумента.Проведение);
Важный нюанс: Если вы забудете заполнить табличную часть ДокументыОснования, то в структуре подчиненности документ может быть виден, но алгоритмы учета НДС и некоторые отчеты могут работать некорректно.
В современных редакциях БП 3.0 разработчики 1С предусмотрели экспортные методы в менеджерах документов, которые позволяют автоматизировать процесс. Проанализируем возможность вызова функции создания счета-фактуры на основании.
В модуле менеджера Документы.СчетФактураВыданный часто присутствуют процедуры типа СоздатьСчетФактуруНаОснованииДокументаРеализации. Использование таких методов — самый надежный способ, так как внутри них проверяется учетная политика, настройки НДС и другие критичные параметры.
Часто программисты сталкиваются с тем, что документ в базе создан и проведен, связь установлена, но если открыть форму реализации, в нижней части экрана не появляется гиперссылка с номером счета-фактуры. Выясним причину этого поведения.
Дело в том, что форма реализации в БП 3.0 — это динамический объект. Если форма была открыта до программного создания счета-фактуры, она не «узнает» о появлении нового связанного документа автоматически. Если же вы программно создаете реализацию и СФ подряд, а потом открываете форму, проблема может заключаться в отсутствии вызова обновления интерфейса.
Для решения этой проблемы в коде обработки после записи Счета-фактуры рекомендуется использовать механизм оповещения:
ОповеститьОбИзменении(Тип("ДокументСсылка.СчетФактураВыданный"));
Эта команда заставляет все открытые формы перечитать данные и обновить связи.
Если ваша задача — не просто выписать счет-фактуру, а обеспечить печать УПД, нужно учитывать следующее. В 1С:Бухгалтерии статус УПД определяется либо реквизитом в самой реализации (флаг «УПД»), либо наличием связанного счета-фактуры с определенными настройками.
Рассмотрим пошагово, что нужно проверить:
СчетФактураВыданный обязательно.УправлениеПечатью. Вы можете сформировать массив ссылок, в который войдет ваша реализация, и передать его в менеджер печати.Чтобы избежать ошибок при формировании Книги продаж и декларации по НДС, проконтролируйте заполнение следующих полей:
СпособВыставления должно принимать значение Перечисления.СпособыВыставленияСчетовФактур.ВЭлектронномВиде.Разберем ситуацию, когда вы загружаете сотни строк из Excel. Мы настоятельно рекомендуем оборачивать создание пары «Реализация + СФ» в транзакцию. Это гарантирует целостность данных: если по какой-то причине счет-фактура не сможет записаться (например, из-за блокировки или неверных данных), реализация также не будет сохранена в базе. Это предотвратит появление «одиноких» реализаций без налоговых документов.
НачатьТранзакцию();
Попытка
// Создаем реализацию
ДокРеализация = СоздатьРеализацию(ДанныеЭксель);
ДокРеализация.Записать(РежимЗаписиДокумента.Проведение);
// Создаем СФ
ДокСФ = Документы.СчетФактураВыданный.СоздатьДокумент();
ДокСФ.Заполнить(ДокРеализация.Ссылка);
ДокСФ.Записать(РежимЗаписиДокумента.Проведение);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ЗаписьЖурналаРегистрации("Ошибка загрузки", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
КонецПопытки;
Таким образом, мы рассмотрели все основные аспекты программного формирования счетов-фактур. Использование метода Заполнить() является наиболее предпочтительным, так как оно обеспечивает максимальную совместимость с будущими обновлениями конфигурации 1С:Бухгалтерия 3.0.