При разработке отчетов в системе 1С:Предприятие 8, особенно в конфигурациях на базе Бухгалтерия предприятия 2.0, программисты часто сталкиваются с задачей получения «чистой» выручки. По умолчанию на счете 90.01 («Выручка») в бухгалтерском учете суммы отражаются с учетом НДС. Если отчет строится на основе виртуальных таблиц регистра бухгалтерии, таких как ХозрасчетныйОборотыДтКт, простое извлечение ресурса Сумма выдаст значение, включающее налог. Ситуация осложняется тем, что в разных документах НДС может начисляться по-разному: либо «в сумме», либо «сверху».
Разберем детально несколько способов решения этой задачи, проанализируем их плюсы и минусы, а также выясним, какой метод является наиболее точным и производительным.
Это самый элегантный и быстрый способ для типовых конфигураций (БП 2.0, УПП, КА 1.1). Рассмотрим логику работы системы: в бухгалтерском учете (БУ) на счете 90.01 сумма фиксируется с НДС. Однако в налоговом учете по налогу на прибыль (ресурс СуммаНУ) на этом же счете выручка отражается уже без НДС. Это обусловлено требованиями Налогового кодекса РФ, согласно которым доходы от реализации для целей налога на прибыль определяются за вычетом косвенных налогов.
Посмотрим, как изменить запрос в СКД, чтобы получить нужные данные без переписывания всей логики соединения таблиц. Если в вашем исходном запросе используется обращение к виртуальной таблице оборотов, достаточно заменить или добавить поле налогового учета.
Проанализируем пример кода:
ВЫБРАТЬ
ХозрасчетныйОборотыДтКт.СубконтоКт3 КАК Номенклатура,
ХозрасчетныйОборотыДтКт.СуммаОборот КАК СуммаСНДС,
// Используем СуммаНУ для получения данных без НДС
ХозрасчетныйОборотыДтКт.СуммаНУОборотКт КАК СуммаБезНДС,
ХозрасчетныйОборотыДтКт.КоличествоОборотКт КАК Количество
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(
&НачПер,
&КонПер,
Регистратор, , ,
СчетКт = &Сч90_01, ,
Организация = &Организация) КАК ХозрасчетныйОборотыДтКт
Важные нюансы этого метода:
Если по каким-то причинам доверять налоговому учету нельзя, рассмотрим классический бухгалтерский подход. Сумма НДС, начисленная с продаж, отражается по дебету счета 90.03 («Налог на добавленную стоимость») в корреспонденции со счетом 68.02. Сумма без НДС — это Оборот Кт 90.01 - Оборот Дт 90.03.
Однако здесь возникает техническая сложность. В БП 2.0 счет 90.01 обычно имеет аналитику по номенклатуре (если это включено в настройках) и номенклатурным группам. Счет 90.03 чаще всего ведется только в разрезе номенклатурных групп. Если вам нужен отчет с детализацией до конкретного товара (номенклатуры), простое вычитание оборотов счетов в запросе потребует левого соединения по регистратору и дополнительного распределения НДС, что может существенно замедлить отчет.
Пример структуры запроса для получения НДС со счета 90.03:
ВЫБРАТЬ
Продажи.Номенклатура,
Продажи.СуммаБур КАК СуммаСНДС,
ЕСТЬNULL(НДС.СуммаНДС, 0) КАК СуммаНДС,
Продажи.СуммаБур - ЕСТЬNULL(НДС.СуммаНДС, 0) КАК СуммаЧистая
ИЗ
(ВЫБРАТЬ... ИЗ РегистрБухгалтерии.Хозрасчетный.Обороты... ГДЕ СчетКт = &Сч90_01) КАК Продажи
ЛЕВОЕ СОЕДИНЕНИЕ
(ВЫБРАТЬ... ИЗ РегистрБухгалтерии.Хозрасчетный.Обороты... ГДЕ СчетДт = &Сч90_03) КАК НДС
ПО Продажи.Регистратор = НДС.Регистратор
Рассмотрим ситуацию, когда автор темы пытался соединить данные с регистром накопления НДСЗаписиКнигиПродаж. Это правильное направление, так как именно в регистрах НДС хранится точная информация о ставках и суммах налога. Но при соединении возникла проблема «безумно странных цифр».
Выясним причину: в регистре бухгалтерии по одной реализации может быть одна строка (если это общая сумма выручки по номенклатурной группе), а в регистре НДСЗаписиКнигиПродаж — несколько строк (например, если в документе были товары с разными ставками НДС или разные виды ценностей). Происходит «размножение» строк при соединении (Cartesian product), и суммы задваиваются или застраиваются.
Как правильно реализовать это соединение:
ЛЕВОЕ СОЕДИНЕНИЕ, чтобы не потерять продажи без НДС.Пример правильной группировки перед соединением:
ВЫБРАТЬ
НДС.Регистратор,
СУММА(НДС.СуммаБезНДС) КАК СуммаБезНДС,
СУММА(НДС.НДС) КАК СуммаНДС
ИЗ
РегистрНакопления.НДСЗаписиКнигиПродаж КАК НДС
ГДЕ
НДС.Период МЕЖДУ &НачПер И &КонПер
СГРУППИРОВАТЬ ПО
НДС.Регистратор
Если небольшая погрешность (в копейках из-за округления) не критична, можно воспользоваться формулой прямо в настройках компоновки данных. Рассмотрим этот вариант для случаев, когда нужно быстро получить результат без изменения текста запроса.
Разберем шаги настройки:
СуммаБезНДС.Сумма / 1.2.Номенклатура, выражение станет более гибким: Сумма / (1 + СтавкаНДС / 100).Внимание: Этот метод крайне опасен, если в базе есть документы со ставками «Без НДС», «0%» или если ставка налога менялась законодательно в течение периода отчета (например, переход с 18% на 20%). Мы рекомендуем использовать его только для оперативных проверок, но не для официальной финансовой отчетности.
Проанализировав все подходы, можно сделать следующие выводы:
СуммаНУОборотКт. Это самый производительный метод, не требующий сложных соединений таблиц.НДСЗаписиКнигиПродаж, но обязательно через предварительную группировку в подзапросе.Использование правильного ресурса из регистра бухгалтерии (СуммаНУ) позволяет сократить время разработки отчета в несколько раз и гарантирует, что данные будут соответствовать стандартным оборотно-сальдовым ведомостям по налоговому учету.