Разработка отчетов на базе Системы компоновки данных (СКД) — это стандарт индустрии для современной платформы 1С. Однако почти каждый разработчик сталкивался с ситуацией, когда в Конфигураторе схема полностью переработана, добавлены новые поля и группировки, но при запуске в режиме 1С:Предприятие отчет упорно показывает старую структуру или выдает ошибку. В этой статье мы подробно разберем, почему так происходит и как заставить систему «увидеть» обновленную схему.
Прежде чем переходить к действиям, давайте проанализируем ситуацию. Основная причина кроется в механизме сохранения пользовательских настроек. Платформа 1С стремится сделать работу пользователя комфортной, поэтому она запоминает все изменения, которые пользователь внес в форму отчета: выбранные поля, измененные отборы, сортировки и ширину колонок.
Эти данные сохраняются в Хранилище системных настроек (SystemSettingsStorage). Когда вы открываете внешний отчет (файл .erf), платформа выполняет следующие действия:
Если вы удалили поле в Конфигураторе, а в сохраненных настройках пользователя оно было выбрано, возникает конфликт. В лучшем случае вы просто не увидите новых полей, в худшем — получите ошибку «Ошибка создания источника доступных настроек компоновки данных».
Рассмотрим самый простой и быстрый способ, который помогает в 90% случаев. Если структура отчета изменилась, нам нужно заставить платформу игнорировать старые пользовательские настройки и загрузить те, что прописаны в схеме по умолчанию.
Выполним следующие шаги в режиме 1С:Предприятие:
После этого действия КомпоновщикНастроек будет инициализирован заново на основании вашей новой схемы. Все старые «фантомные» поля исчезнут, а новые появятся в списке доступных.
Разберем ситуацию, когда отчет зарегистрирован в справочнике «Дополнительные отчеты и обработки». Если вы отлаживаете отчет, просто открывая файл через Файл -> Открыть, система может идентифицировать его по внутреннему имени и подтянуть настройки от того экземпляра, который уже загружен в базу.
Выясним причину конфликта: платформа связывает настройки не с путем к файлу на диске, а с уникальным идентификатором или внутренним именем объекта. Чтобы гарантированно проверить работу новой схемы, попробуйте следующее:
Конфигураторе (например, добавьте префикс Тест_)..erf.Иногда проблема кроется глубже — в локальном кэше пользователя. Платформа кэширует описание метаданных внешних обработок для ускорения работы. Если вы часто перезаписываете один и тот же файл, кэш может «залипнуть».
Проанализируем шаги по очистке кэша:
%AppData%\1C\1Cv8%LocalAppData%\1C\1Cv8Эта ошибка часто возникает во время программной инициализации отчета. Если вы используете программный вывод, убедитесь, что ваш код корректно обрабатывает инициализацию компоновщика. Рассмотрим пример правильной инициализации в модуле формы или объекта:
// В процедуре ПриКомпоновкеРезультата или аналогичной
СхемаКомпоновки = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(ПоместитьВоВременноеХранилище(СхемаКомпоновки));
// Важно правильно инициализировать компоновщик
КомпоновщикНастроек.Инициализировать(ИсточникДоступныхНастроек);
Если вы редактировали XML-код схемы вручную, проверьте корректность структуры DataSets (наборов данных). Ошибка источника часто означает, что КомпоновщикНастроек не может сопоставить текущие настройки с полями наборов данных из-за их повреждения или отсутствия.
Если вы распространяете внешний отчет среди множества пользователей, вы не сможете подойти к каждому и нажать «Установить стандартные настройки». В таком случае разберем программный метод. Мы можем добавить проверку версии отчета и, если она изменилась, принудительно очищать настройки.
Посмотрим на пример кода, который можно разместить в модуле объекта отчета:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
// Если мы радикально поменяли схему, можно форсировать загрузку настроек
// Это гарантирует, что пользователь увидит актуальные поля
Если ПараметрыСеанса.ТекущийПользователь.Наименование = "Разработчик" Тогда
// Для отладки можно всегда сбрасывать
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
КонецЕсли;
КонецПроцедуры
Не стоит забывать и о серверном кэшировании. В редких случаях, особенно при использовании фоновых заданий для формирования отчетов, серверный процесс rphost может удерживать старую версию схемы в памяти. Если все вышеперечисленные методы не помогли:
Подведем итог: Основной алгоритм при изменении схемы СКД — сохранить отчет, открыть в 1С и сразу нажать «Установить стандартные настройки». Если же вы столкнулись с ошибкой источника настроек — проверяйте программный код инициализации КомпоновщикаНастроек и целостность XML-структуры макета схемы.