Каждый разработчик 1С рано или поздно сталкивается со специфическим поведением Системы компоновки данных (СКД). Очень распространенная ситуация: простенький отчет отлично работает и формируется в консоли отчетов, но стоит выгрузить схему компоновки во внешний отчет (файл .erf) и запустить его, как система выдает критическую ошибку «Не найдено поле...» на те поля, в которых используются встроенные функции анализа. Разберем подробно причины этой ошибки и пошагово выясним, как вернуть отчету работоспособность.
Проанализируем природу функции КлассификацияABC. Она является агрегатной функцией СКД, а не простой скалярной функцией (как, например, ВЫБОР или ЕСТЬNULL). Это означает, что для её расчета системе требуется предварительно сгруппировать весь набор данных и рассчитать итоги по всей выборке.
Когда мы помещаем эту функцию в вычисляемые поля, СКД пытается рассчитать её до того, как будут окончательно сформированы итоговые группировки. Если исходные поля (в нашем случае Количество или СуммаВыручки) не объявлены как ресурсы или исключены оптимизатором СКД из результирующего запроса, компоновщик выдает ошибку о ненахождении поля.
Решение проблемы:
Перенесите логику классификации из «Вычисляемых полей» непосредственно в «Ресурсы» схемы компоновки данных. Для этого выполните следующие шаги:
КлассификацияПоКоличеству).
ВЫБОР
КОГДА КлассификацияABC("Сумма(Количество)", 3) = 1 ТОГДА "А"
КОГДА КлассификацияABC("Сумма(Количество)", 3) = 2 ТОГДА "В"
ИНАЧЕ "С"
КОНЕЦ
Обязательно укажите в колонке «Рассчитывать по...» ту группировку, для которой рассчитывается классификация (например, АналитикаУчетаНоменклатурыНоменклатура), так как расчет этого показателя для общих итогов не имеет практического смысла.
Обратим внимание на синтаксис выражения: КлассификацияABC("Сумма(Количество)", 3). В зависимости от версии платформы 1С и режима совместимости конфигурации, использование кавычек и агрегатных функций внутри строкового параметра может обрабатываться некорректно.
Если на вкладке «Ресурсы» для поля Количество уже определено выражение расчета Сумма(Количество), то внутри функции классификации дублировать слово Сумма не нужно. Попробуйте упростить синтаксис:
КлассификацияABC("Количество", 3)
В этом случае система сама подставит агрегатное выражение ресурса при компоновке результата.
Разберем ситуацию, когда внешний отчет открывается интерактивно через меню Файл -> Открыть в управляемом приложении. Если у внешнего отчета отсутствует собственная основная форма, платформа автоматически сгенерирует и выведет общую форму отчета из состава БСП.
Форма БСП инициализирует схему программно и может накладывать следующие ограничения:
Решение проблемы:
Добавьте во внешний отчет пустую основную форму отчета в Конфигураторе и назначьте её формой по умолчанию. Это заставит систему использовать стандартный механизм платформы вместо механизмов БСП при открытии файла.
Платформа 1С оптимизирует работу с внешними файлами и кэширует их структуру. Если вы изменили схему СКД и пересохранили файл под тем же именем, система часто продолжает обращаться к старой версии отчета из кэша, из-за чего ошибка «Не найдено поле» сохраняется.
Чтобы гарантированно сбросить кэш метаданных, выполните следующие действия: