При разработке отчетов на Системе Компоновки Данных (СКД) в конфигурациях 1С:Управление торговлей 11, ERP или Комплексная автоматизация 2 программисты часто сталкиваются с ситуацией, когда запрос к виртуальным таблицам регистра накопления ВыручкаИСебестоимостьПродаж выдает цифры, не совпадающие с данными первичных документов. Рассмотрим причины возникновения таких расхождений и разберем, как правильно построить запрос, чтобы получить корректные данные.
Проанализируем классический пример запроса, который может выдавать неожиданные результаты. Часто разработчики пытаются получить данные напрямую из таблицы оборотов, выбирая номенклатуру через ключ аналитики:
ВЫБРАТЬ
ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиСНДСРеглОборот КАК СуммаВыручки
ИЗ
РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&НачалоПериода, &КонецПериода, , ) КАК ВыручкаИСебестоимостьПродажОбороты
На первый взгляд запрос выглядит верно, но при его выполнении суммы могут «задваиваться», «схлопываться» или просто не соответствовать реальности. Выясним, почему это происходит.
В современных конфигурациях 1С для оптимизации производительности в регистрах накопления вместо прямых ссылок на Номенклатура, Характеристика и Склад используется измерение АналитикаУчетаНоменклатуры. Это ссылка на справочник КлючиАналитикиУчетаНоменклатуры.
Важный нюанс: если в одном документе реализации присутствует одна и та же номенклатура, но с разными характеристиками, в регистре это будут разные записи с разными ключами аналитики. Если в отчете вы выводите только поле Номенклатура, но не учитываете Характеристика, и при этом в настройках СКД неверно настроена группировка или роли полей, данные могут отображаться некорректно.
Проанализируем ситуацию: если в реализации две позиции одной номенклатуры с разными характеристиками, а в запросе мы обращаемся к АналитикаУчетаНоменклатуры.Номенклатура, СКД должна правильно сгруппировать эти записи. Если же в настройках поля СуммаВыручкиСНДСРеглОборот в СКД не стоит роль «Оборот», система может выдать непредсказуемый результат при агрегации.
В регистре ВыручкаИСебестоимостьПродаж существует огромное количество ресурсов (сумма выручки, сумма выручки без НДС, себестоимость и т.д.) в разных валютах. Рассмотрим основные:
СуммаВыручкиОборот — сумма в валюте управленческого учета.СуммаВыручкиРеглОборот — сумма в валюте регламентированного учета без НДС.СуммаВыручкиСНДСРеглОборот — сумма в валюте регламентированного учета с учетом НДС.Если вы сравниваете отчет с печатной формой документа или движениями по регистру, убедитесь, что вы смотрите на данные в одной и той же валюте. Часто путаница возникает именно из-за курсовых разниц, когда в документе указана валюта (например, доллар), а отчет тянет Регл данные (в рублях) на дату совершения операции.
Разберем типичную ошибку настройки периода в СКД. При использовании виртуальной таблицы Обороты крайне важно, как передаются параметры &НачалоПериода и &КонецПериода. Если пользователь на форме выбирает СтандартныйПериод, нужно убедиться, что в схеме компоновки данных эти даты правильно подставляются в параметры виртуальной таблицы.
Для проверки правильности данных рекомендуется временно добавить в группировку отчета поле Регистратор. Проанализируем детализацию: если на уровне регистратора суммы верны, а в общих итогах — нет, проблема кроется в настройках ресурсов или группировок СКД. Если же суммы «кривые» уже на уровне регистратора, значит, запрос выбирает лишние записи (например, по другим видам хозяйственных операций).
Посмотрим на ситуацию шире: если вы анализируете обороты за период, в них могут попадать не только продажи (Реализации товаров и услуг), но и Возвраты товаров от клиентов, а также Корректировки реализаций. Эти документы делают записи в тот же регистр, но часто с отрицательными значениями или специфическими ключами аналитики. Если ваша задача — увидеть только чистую продажу по конкретному документу, необходимо накладывать фильтр по полю ХозяйственнаяОперация или ТипЗаписи.
ВаловаяПрибыльПредприятия. В нем уже реализована сложная логика сбора данных, учитывающая возвраты, корректировки и интеркампани. Вы можете скопировать схему компоновки этого отчета и добавить в нее нужные вам поля, например, «Количество остаток» из регистра ТоварыНаСкладах.Выручка и себестоимость продаж и внимательно посмотрите, в какие ресурсы и какие суммы записал документ. Обратите внимание на поле Аналитика учета номенклатуры — именно оно является ключом к пониманию того, как данные агрегируются в виртуальных таблицах.Подводя итог, можно сказать, что «кривые» цифры в СКД — это почти всегда следствие либо неучтенной аналитики (характеристики/склады), либо неправильного выбора валютного ресурса. Тщательная проверка настроек ролей полей в СКД и использование регистратора для отладки позволяют быстро найти и устранить ошибку.