Как получить сумму НДС и выручку без НДС из документа реализации в запросе 1С

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

При формировании отчетов по доходам (например, по счету 91.01 «Прочие доходы» или 90.01 «Выручка») разработчики часто сталкиваются с задачей выделить чистую выручку за вычетом НДС либо вывести сумму налога в отдельную колонку. Попытка соединить виртуальную таблицу оборотов регистра бухгалтерии напрямую с табличной частью документа РеализацияТоваровУслуг приводит к дублированию строк и искажению сумм оборотов. Проанализируем причины этой проблемы и подробно рассмотрим надежные варианты решения данной задачи.

Почему прямое соединение с табличной частью документа работает некорректно

Документ Реализация товаров и услуг содержит несколько отдельных табличных частей (например, Товары, Услуги, АгентскиеУслуги), в каждой из которых может быть множество позиций с разными ставками налога. Если выполнить прямое ЛЕВОЕ СОЕДИНЕНИЕ регистра бухгалтерии с одной из табличных частей, СУБД размножит каждую строку оборота регистратора на количество строк в документе. В результате обороты по счету многократно завышаются.

Кроме того, обращение к табличным частям через точку от реквизита составного типа (Регистратор.Товары.СуммаНДС) недопустимо в языке запросов 1С, так как поле составного типа требует явного приведения или соединения с конкретной таблицей.

Способ 1. Предварительная группировка сумм НДС во временной таблице

Если необходимо получить сумму налога именно из данных самого документа Реализация товаров и услуг, разберем правильный алгоритм сборки данных через временные таблицы с предварительной агрегацией строк.

  1. Выбираем ссылки и суммы НДС из всех используемых табличных частей документа (Товары и Услуги), объединяя их через оператор ОБЪЕДИНИТЬ ВСЕ.
  2. Группируем полученные данные по полю Ссылка с вычислением агрегатной функции СУММА(СуммаНДС).
  3. Выполняем ЛЕВОЕ СОЕДИНЕНИЕ виртуальной таблицы регистра бухгалтерии с подготовленной временной таблицей.
  4. Обязательно оборачиваем полученное поле в функцию ЕСТЬNULL(), чтобы избежать появления пустых значений при расчете разницы.

Посмотрим на пример реализации такого запроса:


ВЫБРАТЬ
    ДокументТовары.Ссылка КАК Ссылка,
    ДокументТовары.СуммаНДС КАК СуммаНДС
ПОМЕСТИТЬ ВТ_ВсеСтрокиНДС
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК ДокументТовары
ГДЕ
    ДокументТовары.Ссылка.Проведен = ИСТИНА
    И ДокументТовары.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ДокументУслуги.Ссылка,
    ДокументУслуги.СуммаНДС
ИЗ
    Документ.РеализацияТоваровУслуг.Услуги КАК ДокументУслуги
ГДЕ
    ДокументУслуги.Ссылка.Проведен = ИСТИНА
    И ДокументУслуги.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_ВсеСтрокиНДС.Ссылка КАК ДокументРеализации,
    СУММА(ВТ_ВсеСтрокиНДС.СуммаНДС) КАК ВсегоНДС
ПОМЕСТИТЬ ВТ_ИтогоНДСПоДокументам
ИЗ
    ВТ_ВсеСтрокиНДС КАК ВТ_ВсеСтрокиНДС
СГРУППИРОВАТЬ ПО
    ВТ_ВсеСтрокиНДС.Ссылка
ИНДЕКСИРОВАТЬ ПО
    ДокументРеализации
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ХозрасчетныйОбороты.Регистратор КАК Регистратор,
    ХозрасчетныйОбороты.СубконтоКт1 КАК СубконтоКт1,
    ХозрасчетныйОбороты.СуммаОборот КАК ДоходСНДС,
    ЕСТЬNULL(ВТ_ИтогоНДСПоДокументам.ВсегоНДС, 0) КАК СуммаНДС,
    ХозрасчетныйОбороты.СуммаОборот - ЕСТЬNULL(ВТ_ИтогоНДСПоДокументам.ВсегоНДС, 0) КАК ДоходБезНДС
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(
            &НачалоПериода,
            &КонецПериода,
            Регистратор,
            ,
            ,
            СчетКт = &СчетДоходов,
            ,
            ) КАК ХозрасчетныйОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ИтогоНДСПоДокументам КАК ВТ_ИтогоНДСПоДокументам
        ПО ХозрасчетныйОбороты.Регистратор = ВТ_ИтогоНДСПоДокументам.ДокументРеализации

Способ 2. Получение данных через проводки регистра бухгалтерии

Рассмотрим чисто бухгалтерский подход к получению дохода без НДС. В типовом плане счетов бухгалтерского учета реализация прочих активов отражается следующими проводками:

  1. Кредит 91.01 — отражена полная сумма выручки (с учетом НДС).
  2. Дебет 91.02 — Кредит 68.02 — начислен НДС с реализации прочих доходов и активов.

Таким образом, чтобы получить сумму налога и рассчитать чистый доход по счету 91, достаточно обратиться к оборотам между дебетом счета 91.02 и кредитом счета 68.02 в разрезе регистратора:


ВЫБРАТЬ
    Доходы.Регистратор КАК Регистратор,
    Доходы.СубконтоКт1 КАК СтатьяДоходов,
    Доходы.СуммаОборот КАК СуммаДоходаСНДС,
    ЕСТЬNULL(НДС.СуммаОборот, 0) КАК СуммаНДС,
    Доходы.СуммаОборот - ЕСТЬNULL(НДС.СуммаОборот, 0) КАК ДоходБезНДС
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(
            &НачалоПериода,
            &КонецПериода,
            Регистратор,
            ,
            ,
            СчетКт = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПрочиеДоходы),
            ,
            ) КАК Доходы
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(
                &НачалоПериода,
                &КонецПериода,
                Регистратор,
                ,
                ,
                СчетДт = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПрочиеРасходы)
                    И СчетКт = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.НДС),
                ,
                ) КАК НДС
        ПО Доходы.Регистратор = НДС.Регистратор

Важный момент: если рассматривается обычная торговая деятельность по счету 90, начисление налога отражается проводкой Дт 90.03 — Кт 68.02. В этом случае во втором подзапросе в условии по дебету указывается счет 90.03.

Способ 3. Использование регистра накопления «НДС Продажи»

Выясним причину, почему регистры подсистемы учета НДС часто удобнее регистра бухгалтерии. В типовых конфигурациях 1С (1С:Бухгалтерия предприятия, 1С:ERP, 1С:Комплексная автоматизация) при проведении документов реализации формируются записи в специализированных регистрах накопления: НДС Продажи или НДСЗаписиКнигиПродаж.

В этих регистрах ресурсы СуммаБезНДС и НДС уже рассчитаны и хранятся в готовом числовом виде. Посмотрим на пример запроса к регистру накопления:


ВЫБРАТЬ
    НДСПродажиОбороты.Регистратор КАК Регистратор,
    НДСПродажиОбороты.Покупатель КАК Покупатель,
    НДСПродажиОбороты.СуммаБезНДСОборот КАК СуммаБезНДС,
    НДСПродажиОбороты.НДСОборот КАК СуммаНДС,
    НДСПродажиОбороты.СуммаБезНДСОборот + НДСПродажиОбороты.НДСОборот КАК СуммаСНДС
ИЗ
    РегистрНакопления.НДСПродажи.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ) КАК НДСПродажиОбороты

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

Способ 4. Получение суммы выручки из налогового учета (НУ)

В регистре бухгалтерского учета 1С сумма дохода для целей налогообложения прибыли (ресурс СуммаНУ) на счетах 90.01.1 и 91.01 отражается без учета НДС в соответствии с требованиями Налогового кодекса РФ.

Если цель состоит исключительно в получении базы доходов без налога, проанализируем обращение к ресурсам налогового учета:


ВЫБРАТЬ
    ХозрасчетныйОбороты.Регистратор КАК Регистратор,
    ХозрасчетныйОбороты.СуммаНУКтОборот КАК ДоходБезНДС_НУ
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Обороты(
            &НачалоПериода,
            &КонецПериода,
            Регистратор,
            Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПрочиеДоходы),
            ,
            ,
            ,
            ) КАК ХозрасчетныйОбороты

Использование ресурса СуммаНУКтОборот позволяет получить чистый доход без необходимости составления дополнительных соединений и вычитания сумм НДС.

← На главную