Почему поля запроса отображаются в консоли, но не выводятся в отчете 1С

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

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

Причина 1. Кэширование пользовательских настроек и подмена макета

Наиболее распространенная ситуация возникает при создании внешнего отчета на базе уже существующего типового отчета конфигурации. Если сохранить отчет как внешний файл через меню конфигуратора, но не изменить его внутреннее свойство Имя в палитре свойств корневого объекта, платформа 1С при запуске через команду «Файл — Открыть» связывает его с уже сохраненными вариантами и настройками типового отчета информационной базы.

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

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

Способы решения конфликта настроек и макетов

Разберем по шагам, как гарантировать вывод новых полей при создании внешнего отчета:

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

Причина 2. Использование жестких макетов на вкладке «Макеты» в СКД

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

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

  1. Перейдем на вкладку «Макеты» в схеме компоновки данных.
  2. Найдем область строк, отвечающую за вывод соответствующей группировки.
  3. Добавим новую колонку в таблицу макета, выделим ячейку и в ее свойствах укажем тип заполнения Параметр или Поле.
  4. В поле выражения свяжем ячейку с добавленным полем набора данных.

Причина 3. Отключение флага «Автополе» в структуре группировок

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

Для исправления ситуации проверим каждую группировку в структуре отчета. Убедимся, что внутри списка выбранных полей группировки присутствует элемент Автополе, либо добавим требуемые поля непосредственно в состав выбранных полей конкретной строки или таблицы.

Причина 4. Влияние механизма RLS и директивы «РАЗРЕШЕННЫЕ»

Выясним причину расхождения данных между консолью запросов и пользовательским сеансом при работе с правами доступа. В консоли запросов разработчик обычно работает под учетной записью с полными административными правами, либо запрос выполняется без учета ограничений на уровне записей (RLS).

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

При тестировании запросов в консоли всегда рекомендуем добавлять директиву РАЗРЕШЕННЫЕ и выполнять тестирование под учетной записью пользователя с ограниченными правами:


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

Причина 5. Несовпадение параметров виртуальных таблиц в СКД

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

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

← На главную