При разработке и доработке внешних отчетов в системе компоновки данных (СКД) разработчики нередко сталкиваются с ситуацией, когда в структуре отчета на вкладке Настройки рядом с полями группировки отображаются красные значки-крестики. При этом отчет может продолжать формироваться без видимых ошибок, а сами поля присутствуют в списке доступных полей набора данных. Разберем детально, почему возникает такое поведение платформы и как привести схему компоновки в корректное состояние.
Выясним причину появления красных крестиков
Красный крестик на элементе структуры настроек СКД сигнализирует о том, что платформа считает данное поле недоступным, некорректным или потерявшим связь с источником данных. Проанализируем ключевые факторы, приводящие к этой проблеме:
Разрыв внутренней идентификации полей после модификации запросов: В схеме компоновки данных привязка полей в дереве настроек нередко опирается не просто на строковое имя поля, а на скрытые внутренние дескрипторы платформы. Особенно чувствительны к этому поля-связки между наборами данных или поля с заданными ролями (например, поля периодов или измерений). Если в одном из наборов данных правился текст запроса, платформа перегенерирует внутренние описания полей. При этом старая группировка в структуре варианта настроек продолжает ссылаться на устаревший дескриптор, из-за чего возникает крестик.
Ограничения на закладке «Наборы данных»: В таблице описания полей наборов данных присутствуют флаги ограничений: Г (запрет группировки), П (запрет выбора в поля), У (запрет отбора), С (запрет упорядочивания). Если для поля случайно установлен флаг в колонке Г, платформа автоматически маркирует группировку как недопустимую.
Изменение свойства «Путь к данным»: Если поле было перемещено в виртуальную папку или у него вручную скорректировали свойство Путь к данным (например, поле стало доступно как Папка.Организация), старый узел группировки теряет прямое соответствие.
Особенности внешних отчетов (.erf): В отчетах, встроенных в конфигурацию, при сохранении и проверке конфигурации выполняется валидация метаданных, обновляющая внутренние ссылки. Внешние отчеты сохраняются без жесткого сквозного контроля целостности схемы, поэтому разорванные ссылки могут оставаться в файле длительное время.
Кэширование настроек в режиме «1С:Предприятие»: Если отчет тестируется в пользовательском режиме, платформа сохраняет пользовательские настройки в системном хранилище. При повторном открытии на схему накладываются сохраненные старые настройки, которые содержат прежние ссылки на поля.
Способ 1. Пересоздание поврежденных группировок
Рассмотрим самое быстрое и надежное практическое решение, когда обычный перевыбор поля в существующей строке не убирает крестик. Обычный перевыбор часто оставляет неизменным внутренний узел группировки, продолжающий ссылаться на невалидный дескриптор.
Разберем по шагам порядок действий:
Перейдем на закладку Настройки схемы компоновки данных.
В окне структуры настроек добавим новую группировку с теми же параметрами, выбрав нужное поле из списка доступных полей заново (например, Организация или Филиал). На вновь добавленном узле крестик будет отсутствовать, так как ссылка привяжется к актуальному описанию поля.
Перенесем подчиненные элементы и детальные записи в новую группировку, если они были настроены в старой.
Если повреждено множество группировок, пересоздавать каждую вручную нерационально. Проанализируем вариант полной перезагрузки структуры варианта:
На закладке Настройки в верхней панели вариантов настроек удалим проблемный вариант или создадим новый вариант отчета.
Заново сформируем структуру через конструктор настроек СКД. Конструктор обратится к актуальному списку полей всех наборов данных и сформирует полностью валидные внутренние связи.
Способ 3. Сброс настроек в пользовательском режиме
Если в конфигураторе отчет настроен корректно, а крестики появляются только при открытии отчета в режиме 1С:Предприятие, проблема заключается в наложении сохраненных пользовательских настроек.
Выполним следующие действия в режиме предприятия:
В форме отчета откроем меню Еще (или Все действия).
Выберем пункт Установить стандартные настройки.
Платформа сбросит закэшированные настройки из хранилища и применит эталонную структуру схемы компоновки данных, сохраненную в файле отчета.
Способ 4. Программная инициализация компоновщика в форме отчета
Если у внешнего отчета создана собственная управляемая форма, реквизит формы Отчет.КомпоновщикНастроек может удерживать устаревшее состояние схемы данных. Разберем, как программно гарантировать соответствие компоновщика схеме.
Посмотрим на пример кода, который вызывается при создании формы на сервере или при инициализации отчета:
// Принудительно связываем компоновщик настроек формы с актуальной схемой макета
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(Отчет.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"));
Отчет.КомпоновщикНастроек.Инициализировать(ИсточникНастроек);
Использование объекта ИсточникДоступныхНастроекКомпоновкиДанных позволяет обновить все метаданные полей для компоновщика настроек и исключить появление битых ссылок при открытии формы.
Способ 5. Исправление структуры через выгрузку в XML
Рассмотрим вариант ручной правки для сложных схем со множеством оформлений и отборов, когда пересоздавать настройки с нуля трудоемко:
В окне редактирования схемы компоновки данных выгрузим схему в файл XML через контекстное меню.
Откроем полученный файл в текстовом редакторе.
Найдем проблемную группировку внутри блока структуры настроек. Она описывается узлом <dcsset:item xsi:type="dcsset:GroupItemField">.
Проверим значение тега <dcsset:field>. Сверим имя поля со значением атрибута field в описании полей набора данных (<dataField>).
При наличии расхождений или поврежденных путей исправим имя поля на актуальное.
Загрузим отредактированный XML-файл обратно в схему компоновки данных внешнего отчета.