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