Почему результат запроса выводится в консоли, но отсутствует в отчете СКД?

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

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

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

Рассмотрим типовой запрос к счету 10.7 «Материалы, переданные в переработку», который может давать пустой результат в СКД:


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

В данном примере используется жесткая привязка к Субконто1, Субконто2 и Субконто3. Проанализируем, почему такой подход в СКД может привести к отсутствию данных.

Проблема 1: Определение и порядок субконто

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

Решение: Вместо обращения по номеру (Субконто1) лучше использовать универсальный подход. Рассмотрим возможность указания списка субконто в параметрах виртуальной таблицы:

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

Проблема 2: Параметры периода и автоматическое заполнение

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

Выясним причины возможного конфликта:

Проанализируем вкладку «Параметры» и убедимся, что для &НачалоПериода и &КонецПериода правильно указаны выражения, или они связаны с пользовательским полем периода.

Проблема 3: Механизм RLS и права доступа

Консоль запросов часто запускается пользователем с полными правами (Администратор) или в привилегированном режиме. Отчет же выполняется с учетом текущих прав пользователя. Если настроен RLS (Row Level Security), система может скрывать записи по конкретным контрагентам или организациям.

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

Проблема 4: Функциональные опции и роли полей

СКД анализирует метаданные конфигурации гораздо глубже, чем консоль запросов. Проанализируем следующие моменты:

Рекомендации по отладке

Если визуально настройки кажутся верными, но данных все равно нет, выполним следующие шаги:

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

Помните, что СКД — это не просто средство выполнения запроса, а мощный построитель, который динамически меняет ваш код. Внимательное отношение к типам параметров и ролям полей — залог корректного вывода данных.

← На главную