Почему данные по доходам в отчете по финансовым результатам УТ 11 не совпадают с регистром

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

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

Разберем ситуацию на конкретном примере: в регистре накопления ФинансовыеРезультаты сумма дохода составляет 595 233,17, консоль запросов подтверждает эту цифру, но отчет на СКД упорно выводит 573 677,22. Разница составляет 21 555,95. Проанализируем причины такого поведения и выясним, как найти «потерянные» данные.

Анализ исходного запроса

Для начала рассмотрим структуру запроса, который используется в отчете. Автор использует обращение к виртуальной таблице оборотов регистра накопления ФинансовыеРезультаты:


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

На первый взгляд запрос корректен. Однако использование СКД вносит свои коррективы в процесс исполнения этого кода. Рассмотрим пошагово основные причины расхождений.

Причина 1: Особенности работы СКД с параметрами периода

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

Проанализируем типичную ошибку: передача даты без учета времени. Если параметр &КонДата имеет значение «31.08.2023 00:00:00», то все обороты, совершенные в течение дня 31 августа, не попадут в выборку, так как граница периода исключительна. В консоли запросов мы можем явно указать КОНЕЦПЕРИОДА(&КонДата, ДЕНЬ), но в СКД важно проверить, как этот параметр привязан к стандартному периоду компоновки.

Рекомендация: всегда проверяйте вкладку «Параметры» в СКД. Убедитесь, что для параметров виртуальной таблицы прописаны выражения:

  1. Для начала периода: &Период.ДатаНачала
  2. Для конца периода: &Период.ДатаОкончания

Причина 2: Влияние RLS и «ВЫБРАТЬ РАЗРЕШЕННЫЕ»

Использование ключевого слова РАЗРЕШЕННЫЕ в запросе отсекает данные, на которые у текущего пользователя нет прав доступа на уровне записей (RLS). В УТ 11 механизмы RLS очень развиты и могут ограничивать доступ по организациям, подразделениям или группам доступа номенклатуры.

Выясним, почему возникает разница:

Чтобы исключить этот фактор, попробуйте временно убрать РАЗРЕШЕННЫЕ и запустить отчет под полными правами. Если суммы совпали — проблема в настройках прав доступа.

Причина 3: Продажи между собственными организациями (Интеркампани)

В типовых отчетах УТ 11 часто заложена логика исключения внутренних оборотов. Финансовый результат холдинга не должен включать выручку от передачи товаров между своими организациями. Хотя в вашем запросе нет явного фильтра по типу хозяйственной операции, СКД может накладывать дополнительные отборы, если вы используете типовые наборы данных или если в системе включены функциональные опции «Передачи между организациями».

Проанализируем разницу в 21 555,95. Вполне вероятно, что это сумма одной накладной по передаче товаров между вашими юридическими лицами. Проверьте регистраторы, которые входят в сумму в консоли, но отсутствуют в отчете.

Причина 4: Использование Консоли СКД вместо Консоли запросов

Это самый важный инструмент для диагностики. Обычная консоль запросов выполняет «сырой» текст запроса. Консоль системы компоновки данных позволяет увидеть итоговый запрос, который 1С генерирует для СУБД после наложения всех отборов, параметров и условий RLS.

Рассмотрим, как выполнить диагностику с помощью консоли СКД:

  1. Загрузите схему вашего отчета в консоль компоновки данных.
  2. Установите те же параметры периода, что и в отчете.
  3. Нажмите кнопку «Выполнить» или «Сгенерировать запрос».
  4. Внимательно изучите текст запроса. Вы увидите, что СКД добавила множество условий в секцию ГДЕ и, возможно, изменила параметры виртуальной таблицы Обороты.

Причина 5: Статьи доходов и предопределенные значения

В вашем коде присутствует жесткое условие на предопределенную статью:


ВЫБОР
    КОГДА ФинансовыеРезультаты.СтатьяДоходов = ЗНАЧЕНИЕ(ПланВидовХарактеристик.СтатьиДоходов.ВыручкаОтПродаж)
        ТОГДА ФинансовыеРезультаты.ДоходыОборот
    ИНАЧЕ 0
КОНЕЦ КАК ВыручкаОтПродаж

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

Пошаговый план решения проблемы

Проанализируем ситуацию и выполним следующие действия для исправления:

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

Помните, что регистр ФинансовыеРезультаты в УТ 11 является производным. Данные в него попадают при проведении документов и могут уточняться при выполнении регламентной операции «Закрытие месяца». Если расчет финансового результата за период не был выполнен или выполнен с ошибками, записи в регистре могут быть неактуальными, что также может влиять на разницу при использовании различных механизмов получения данных.

← На главную