При формировании отчетов по доходам (например, по счету 91.01 «Прочие доходы» или 90.01 «Выручка») разработчики часто сталкиваются с задачей выделить чистую выручку за вычетом НДС либо вывести сумму налога в отдельную колонку. Попытка соединить виртуальную таблицу оборотов регистра бухгалтерии напрямую с табличной частью документа РеализацияТоваровУслуг приводит к дублированию строк и искажению сумм оборотов. Проанализируем причины этой проблемы и подробно рассмотрим надежные варианты решения данной задачи.
Документ Реализация товаров и услуг содержит несколько отдельных табличных частей (например, Товары, Услуги, АгентскиеУслуги), в каждой из которых может быть множество позиций с разными ставками налога. Если выполнить прямое ЛЕВОЕ СОЕДИНЕНИЕ регистра бухгалтерии с одной из табличных частей, СУБД размножит каждую строку оборота регистратора на количество строк в документе. В результате обороты по счету многократно завышаются.
Кроме того, обращение к табличным частям через точку от реквизита составного типа (Регистратор.Товары.СуммаНДС) недопустимо в языке запросов 1С, так как поле составного типа требует явного приведения или соединения с конкретной таблицей.
Если необходимо получить сумму налога именно из данных самого документа Реализация товаров и услуг, разберем правильный алгоритм сборки данных через временные таблицы с предварительной агрегацией строк.
Товары и Услуги), объединяя их через оператор ОБЪЕДИНИТЬ ВСЕ.Ссылка с вычислением агрегатной функции СУММА(СуммаНДС).ЛЕВОЕ СОЕДИНЕНИЕ виртуальной таблицы регистра бухгалтерии с подготовленной временной таблицей.ЕСТЬNULL(), чтобы избежать появления пустых значений при расчете разницы.Посмотрим на пример реализации такого запроса:
ВЫБРАТЬ
ДокументТовары.Ссылка КАК Ссылка,
ДокументТовары.СуммаНДС КАК СуммаНДС
ПОМЕСТИТЬ ВТ_ВсеСтрокиНДС
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК ДокументТовары
ГДЕ
ДокументТовары.Ссылка.Проведен = ИСТИНА
И ДокументТовары.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДокументУслуги.Ссылка,
ДокументУслуги.СуммаНДС
ИЗ
Документ.РеализацияТоваровУслуг.Услуги КАК ДокументУслуги
ГДЕ
ДокументУслуги.Ссылка.Проведен = ИСТИНА
И ДокументУслуги.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_ВсеСтрокиНДС.Ссылка КАК ДокументРеализации,
СУММА(ВТ_ВсеСтрокиНДС.СуммаНДС) КАК ВсегоНДС
ПОМЕСТИТЬ ВТ_ИтогоНДСПоДокументам
ИЗ
ВТ_ВсеСтрокиНДС КАК ВТ_ВсеСтрокиНДС
СГРУППИРОВАТЬ ПО
ВТ_ВсеСтрокиНДС.Ссылка
ИНДЕКСИРОВАТЬ ПО
ДокументРеализации
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ХозрасчетныйОбороты.Регистратор КАК Регистратор,
ХозрасчетныйОбороты.СубконтоКт1 КАК СубконтоКт1,
ХозрасчетныйОбороты.СуммаОборот КАК ДоходСНДС,
ЕСТЬNULL(ВТ_ИтогоНДСПоДокументам.ВсегоНДС, 0) КАК СуммаНДС,
ХозрасчетныйОбороты.СуммаОборот - ЕСТЬNULL(ВТ_ИтогоНДСПоДокументам.ВсегоНДС, 0) КАК ДоходБезНДС
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(
&НачалоПериода,
&КонецПериода,
Регистратор,
,
,
СчетКт = &СчетДоходов,
,
) КАК ХозрасчетныйОбороты
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ИтогоНДСПоДокументам КАК ВТ_ИтогоНДСПоДокументам
ПО ХозрасчетныйОбороты.Регистратор = ВТ_ИтогоНДСПоДокументам.ДокументРеализации
Рассмотрим чисто бухгалтерский подход к получению дохода без НДС. В типовом плане счетов бухгалтерского учета реализация прочих активов отражается следующими проводками:
Таким образом, чтобы получить сумму налога и рассчитать чистый доход по счету 91, достаточно обратиться к оборотам между дебетом счета 91.02 и кредитом счета 68.02 в разрезе регистратора:
ВЫБРАТЬ
Доходы.Регистратор КАК Регистратор,
Доходы.СубконтоКт1 КАК СтатьяДоходов,
Доходы.СуммаОборот КАК СуммаДоходаСНДС,
ЕСТЬNULL(НДС.СуммаОборот, 0) КАК СуммаНДС,
Доходы.СуммаОборот - ЕСТЬNULL(НДС.СуммаОборот, 0) КАК ДоходБезНДС
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(
&НачалоПериода,
&КонецПериода,
Регистратор,
,
,
СчетКт = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПрочиеДоходы),
,
) КАК Доходы
ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(
&НачалоПериода,
&КонецПериода,
Регистратор,
,
,
СчетДт = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПрочиеРасходы)
И СчетКт = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.НДС),
,
) КАК НДС
ПО Доходы.Регистратор = НДС.Регистратор
Важный момент: если рассматривается обычная торговая деятельность по счету 90, начисление налога отражается проводкой Дт 90.03 — Кт 68.02. В этом случае во втором подзапросе в условии по дебету указывается счет 90.03.
Выясним причину, почему регистры подсистемы учета НДС часто удобнее регистра бухгалтерии. В типовых конфигурациях 1С (1С:Бухгалтерия предприятия, 1С:ERP, 1С:Комплексная автоматизация) при проведении документов реализации формируются записи в специализированных регистрах накопления: НДС Продажи или НДСЗаписиКнигиПродаж.
В этих регистрах ресурсы СуммаБезНДС и НДС уже рассчитаны и хранятся в готовом числовом виде. Посмотрим на пример запроса к регистру накопления:
ВЫБРАТЬ
НДСПродажиОбороты.Регистратор КАК Регистратор,
НДСПродажиОбороты.Покупатель КАК Покупатель,
НДСПродажиОбороты.СуммаБезНДСОборот КАК СуммаБезНДС,
НДСПродажиОбороты.НДСОборот КАК СуммаНДС,
НДСПродажиОбороты.СуммаБезНДСОборот + НДСПродажиОбороты.НДСОборот КАК СуммаСНДС
ИЗ
РегистрНакопления.НДСПродажи.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ) КАК НДСПродажиОбороты
Данный способ работает значительно быстрее, исключает необходимость соединять несколько табличных частей документа и гарантирует корректность итоговых сумм книги продаж.
В регистре бухгалтерского учета 1С сумма дохода для целей налогообложения прибыли (ресурс СуммаНУ) на счетах 90.01.1 и 91.01 отражается без учета НДС в соответствии с требованиями Налогового кодекса РФ.
Если цель состоит исключительно в получении базы доходов без налога, проанализируем обращение к ресурсам налогового учета:
ВЫБРАТЬ
ХозрасчетныйОбороты.Регистратор КАК Регистратор,
ХозрасчетныйОбороты.СуммаНУКтОборот КАК ДоходБезНДС_НУ
ИЗ
РегистрБухгалтерии.Хозрасчетный.Обороты(
&НачалоПериода,
&КонецПериода,
Регистратор,
Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПрочиеДоходы),
,
,
,
) КАК ХозрасчетныйОбороты
Использование ресурса СуммаНУКтОборот позволяет получить чистый доход без необходимости составления дополнительных соединений и вычитания сумм НДС.