Почему в отчете СКД по регистру «Выручка и себестоимость продаж» отображаются неверные суммы?

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

При разработке отчетов на Системе Компоновки Данных (СКД) в конфигурациях 1С:Управление торговлей 11, ERP или Комплексная автоматизация 2 программисты часто сталкиваются с ситуацией, когда запрос к виртуальным таблицам регистра накопления ВыручкаИСебестоимостьПродаж выдает цифры, не совпадающие с данными первичных документов. Рассмотрим причины возникновения таких расхождений и разберем, как правильно построить запрос, чтобы получить корректные данные.

Анализ типового запроса к регистру

Проанализируем классический пример запроса, который может выдавать неожиданные результаты. Часто разработчики пытаются получить данные напрямую из таблицы оборотов, выбирая номенклатуру через ключ аналитики:


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

На первый взгляд запрос выглядит верно, но при его выполнении суммы могут «задваиваться», «схлопываться» или просто не соответствовать реальности. Выясним, почему это происходит.

Причина 1: Особенности ключей аналитики учета номенклатуры

В современных конфигурациях 1С для оптимизации производительности в регистрах накопления вместо прямых ссылок на Номенклатура, Характеристика и Склад используется измерение АналитикаУчетаНоменклатуры. Это ссылка на справочник КлючиАналитикиУчетаНоменклатуры.

Важный нюанс: если в одном документе реализации присутствует одна и та же номенклатура, но с разными характеристиками, в регистре это будут разные записи с разными ключами аналитики. Если в отчете вы выводите только поле Номенклатура, но не учитываете Характеристика, и при этом в настройках СКД неверно настроена группировка или роли полей, данные могут отображаться некорректно.

Проанализируем ситуацию: если в реализации две позиции одной номенклатуры с разными характеристиками, а в запросе мы обращаемся к АналитикаУчетаНоменклатуры.Номенклатура, СКД должна правильно сгруппировать эти записи. Если же в настройках поля СуммаВыручкиСНДСРеглОборот в СКД не стоит роль «Оборот», система может выдать непредсказуемый результат при агрегации.

Причина 2: Выбор правильного ресурса суммы

В регистре ВыручкаИСебестоимостьПродаж существует огромное количество ресурсов (сумма выручки, сумма выручки без НДС, себестоимость и т.д.) в разных валютах. Рассмотрим основные:

  1. СуммаВыручкиОборот — сумма в валюте управленческого учета.
  2. СуммаВыручкиРеглОборот — сумма в валюте регламентированного учета без НДС.
  3. СуммаВыручкиСНДСРеглОборот — сумма в валюте регламентированного учета с учетом НДС.

Если вы сравниваете отчет с печатной формой документа или движениями по регистру, убедитесь, что вы смотрите на данные в одной и той же валюте. Часто путаница возникает именно из-за курсовых разниц, когда в документе указана валюта (например, доллар), а отчет тянет Регл данные (в рублях) на дату совершения операции.

Причина 3: Параметры периода и виртуальные таблицы

Разберем типичную ошибку настройки периода в СКД. При использовании виртуальной таблицы Обороты крайне важно, как передаются параметры &НачалоПериода и &КонецПериода. Если пользователь на форме выбирает СтандартныйПериод, нужно убедиться, что в схеме компоновки данных эти даты правильно подставляются в параметры виртуальной таблицы.

Для проверки правильности данных рекомендуется временно добавить в группировку отчета поле Регистратор. Проанализируем детализацию: если на уровне регистратора суммы верны, а в общих итогах — нет, проблема кроется в настройках ресурсов или группировок СКД. Если же суммы «кривые» уже на уровне регистратора, значит, запрос выбирает лишние записи (например, по другим видам хозяйственных операций).

Причина 4: Влияние возвратов и корректировок

Посмотрим на ситуацию шире: если вы анализируете обороты за период, в них могут попадать не только продажи (Реализации товаров и услуг), но и Возвраты товаров от клиентов, а также Корректировки реализаций. Эти документы делают записи в тот же регистр, но часто с отрицательными значениями или специфическими ключами аналитики. Если ваша задача — увидеть только чистую продажу по конкретному документу, необходимо накладывать фильтр по полю ХозяйственнаяОперация или ТипЗаписи.

Как решить проблему: пошаговый алгоритм

  1. Проверьте аналитику: Убедитесь, что в запросе или в группировках отчета учтены все составляющие ключа аналитики (номенклатура, характеристика, серия — если используется).
  2. Используйте правильные роли полей: В закладке «Наборы данных» схемы СКД для всех суммовых ресурсов установите роль «Оборот». Это заставит СКД корректно суммировать данные при любых группировках.
  3. Сравните с типовым отчетом: Разберем отличный совет — взять за основу типовой отчет ВаловаяПрибыльПредприятия. В нем уже реализована сложная логика сбора данных, учитывающая возвраты, корректировки и интеркампани. Вы можете скопировать схему компоновки этого отчета и добавить в нее нужные вам поля, например, «Количество остаток» из регистра ТоварыНаСкладах.
  4. Анализ движений: Если суммы все равно не сходятся, воспользуйтесь стандартным отчетом «Движения документа» непосредственно из формы реализации. Найдите там регистр Выручка и себестоимость продаж и внимательно посмотрите, в какие ресурсы и какие суммы записал документ. Обратите внимание на поле Аналитика учета номенклатуры — именно оно является ключом к пониманию того, как данные агрегируются в виртуальных таблицах.

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

← На главную