Почему компоновщик макета 1С не находит поле замены и как это починить

· 10 мин

Содержание

Ошибка «Не найдено поле замены» в 1С означает одно: в настройках отчёта на СКД (схеме компоновки данных) упомянуто поле, которого компоновщик макета не нашёл среди полей наборов данных. Чаще всего это поле удалили или переименовали в запросе, а в схеме, варианте отчёта или сохранённых пользовательских настройках оно осталось.

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

Как СКД превращает настройки в запрос и где ломается замена

У отчёта на СКД есть три слоя, и ошибка живёт на стыке между ними:

  • 📦 Наборы данных — запрос, объект или объединение. Каждое поле набора имеет путь к данным (ПутьКДанным) и заголовок.
  • 🧮 Схема — вычисляемые поля, ресурсы, параметры, связи наборов.
  • ⚙️ Настройки — выбранные поля, отборы, сортировка, группировки, условное оформление. Сюда же попадают варианты отчёта и пользовательские настройки.

Когда отчёт формируется, вызывается КомпоновщикМакетаКомпоновкиДанных.Выполнить(). Он берёт схему и настройки и собирает из них макет: итоговый текст запроса, выражения ресурсов, описание областей вывода. На этом шаге каждое поле из настроек заменяется на реальное поле набора или на выражение вычисляемого поля. Это и есть «поле замены».

Если для какого-то пути замены нет, компоновщик останавливается и выдаёт ошибку. Обычно в тексте сообщения рядом с фразой стоит имя проблемного поля — например, Контрагент.ИНН или СуммаОборот. Это главная подсказка, сохраните её.

Ошибка возникает до выполнения запроса к базе. Поэтому сам запрос в консоли может работать отлично, а отчёт всё равно падать: проблема не в данных, а в описании схемы и настроек.

Откуда в отчёте берётся несуществующее поле

Причин немного, и почти все сводятся к рассинхрону между слоями.

ПричинаГде искатьТипичный сценарий
Поле убрали или переименовали в запросеВкладка «Наборы данных», колонка полейСменили псевдоним КАК Сумма на КАК СуммаДокумента
Автозаполнение выключеноСвойства набора-запросаЗапрос правили, а список полей набора не обновился
Вычисляемое поле ссылается на исчезнувшее полеВкладка «Вычисляемые поля», колонка «Выражение»В выражении осталось старое имя
Ресурс считается по отсутствующему полюВкладка «Ресурсы»Сумма(СуммаНДС) при удалённом СуммаНДС
Связь наборов по удалённому полюВкладка «Связи наборов данных»Выражение источника или приёмника устарело
Старый вариант или пользовательские настройкиСохранённые настройки пользователяПосле обновления конфигурации поле исчезло из типового отчёта
Поле добавляют программноМодуль отчёта, обработчик ПриКомпоновкеРезультатаНовый ПолеКомпоновкиДанных("Имя") с опечаткой
Ошибка в пути через точкуОтборы, группировки, оформлениеКонтрагент.ИНН при поле Контрагент не ссылочного типа

Отдельно про заголовки. В выражениях вычисляемых полей и ресурсов пишут путь к данным, а не заголовок. Заголовок «Сумма с НДС» в выражении не сработает, нужен путь вроде СуммаСНДС. Когда разработчик меняет заголовок и путь одновременно, старый путь часто остаётся где-то в настройках.

Ещё один источник — ограничения использования поля. Если в наборе у поля стоит запрет на использование как поля, а в настройках оно выбрано, компоновщик тоже не сможет его подставить. Проверьте колонку «Ограничение использования» у поля из сообщения.

Диагностика: выберите симптом

Ищем виновника: консоль запросов, конструктор схемы и отладчик

Начните с имени поля из сообщения. Дальше идите от простого к сложному.

Проверка набора данных

  1. Откройте отчёт в конфигураторе, перейдите к схеме компоновки данных (кнопка «Открыть схему компоновки данных» на вкладке «Основные» свойств отчёта).
  2. На вкладке «Наборы данных» выберите набор и найдите поле в нижней таблице полей.
  3. Скопируйте текст запроса в консоль запросов и выполните. Убедитесь, что поле есть в результате с тем же псевдонимом.

Если в консоли поле есть, а в наборе нет — набор не обновился. Если нет и в консоли — поле действительно удалено из запроса.

Поиск по всей схеме

Поле может прятаться в нескольких местах одновременно. Пройдите вкладки по порядку:

  • 🔗 «Связи наборов данных» — выражения источника и приёмника;
  • 🧮 «Вычисляемые поля» — колонка выражения;
  • 📊 «Ресурсы» — выражения агрегатов;
  • ⚙️ «Настройки» — выбранные поля, отбор, порядок, условное оформление и каждая группировка структуры отдельно.

Быстрее всего искать текстом. Выгрузите конфигурацию в файлы (Конфигурация → Выгрузить конфигурацию в файлы): схема отчёта хранится в XML, и поиск по имени поля в любом редакторе сразу покажет все упоминания.

Отладчик

Если отчёт формируется программно или настройки меняются кодом, поставьте точку останова на строку с КомпоновщикМакета.Выполнить(...). В момент остановки откройте в табло переменную с настройками и разверните ВыбранныеПоля.Элементы, Отбор.Элементы, Структура. Поле, которого нет в схеме, увидите по имени.

Для типовых отчётов на БСП удобно остановиться в обработчике ПриКомпоновкеРезультата модуля объекта отчёта: туда приходят итоговые настройки с учётом пользовательских.

Исправление ошибки «не найдено поле замены»: пошагово

Действуйте в зависимости от того, что нашли на диагностике.

Шаг 1. Синхронизировать набор данных с запросом

  1. Откройте свойства набора-запроса и проверьте галочку «Автозаполнение».
  2. Если она включена — переключите её: снимите и поставьте снова. Список полей перечитается из запроса.
  3. Если автозаполнение намеренно выключено (поля настроены вручную) — добавьте поле в таблицу полей набора руками или верните его в запрос.

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

Шаг 2. Убрать ссылки на поле из схемы

  1. Исправьте выражения вычисляемых полей и ресурсов: замените старое имя на новое или удалите строку.
  2. Проверьте связи наборов. Связь по удалённому полю либо перенастройте, либо удалите.
  3. На вкладке «Настройки» удалите поле из выбранных полей, отбора, сортировки и условного оформления. Не забудьте вложенные группировки: у каждой свои настройки.

Шаг 3. Пересохранить варианты отчёта

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

Шаг 4. Сбросить пользовательские настройки

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

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

Шаг 5. Обновить конфигурацию базы данных

После правки схемы в основной конфигурации или расширении выполните Конфигурация → Обновить конфигурацию базы данных (F7). Если правили внешний отчёт .erf — просто сохраните файл и откройте его заново в пользовательском режиме.

Поля замены в коде: программные настройки и вычисляемые поля

Самые трудные случаи — когда поле подставляется кодом. В схеме его нет, поэтому визуальная проверка ничего не находит.

Типичная ошибка выглядит так: в ПриКомпоновкеРезультата разработчик добавляет выбранное поле по условию.

Поле = КомпоновщикНастроек.Настройки.ВыбранныеПоля.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
Поле.Поле = Новый ПолеКомпоновкиДанных("Контрагент.ИННКПП");

Если у контрагента нет реквизита ИННКПП, отчёт падает только тогда, когда срабатывает условие. Пользователи описывают это как «ломается при одной галочке».

Перед добавлением проверяйте, что поле доступно:

ИмяПоля = "Контрагент.ИНН";
ПолеСКД = Новый ПолеКомпоновкиДанных(ИмяПоля);
ДоступныеПоля = КомпоновщикНастроек.Настройки.ВыбранныеПоля.ДоступныеПоляВыбора;

Если ДоступныеПоля.НайтиПоле(ПолеСКД) <> Неопределено Тогда
    Элемент = КомпоновщикНастроек.Настройки.ВыбранныеПоля.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
    Элемент.Поле = ПолеСКД;
Иначе
    Сообщить("Поле " + ИмяПоля + " отсутствует в схеме отчёта");
КонецЕсли;

Для отборов используйте Отбор.ДоступныеПоляОтбора, для сортировки — Порядок.ДоступныеПоляПорядка. Логика та же: НайтиПоле() возвращает Неопределено, если поля нет.

Чтобы разом выкинуть из настроек всё недоступное, у компоновщика настроек есть метод восстановления с проверкой доступности:

КомпоновщикНастроек.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.ПроверятьДоступность);

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

Вычисляемые поля

Здесь три правила:

  1. В выражении — путь к данным, не заголовок.
  2. Ссылаться можно на поля наборов и на другие вычисляемые поля, но без циклических ссылок.
  3. Если вычисляемое поле используют в ресурсе, проверьте, что оно не удалено со вкладки «Вычисляемые поля».

Набор данных — объект

У набора-объекта поля описывают вручную, запроса нет. Поэтому любое поле в настройках должно совпадать с путём к данным в таблице полей этого набора. Колонки таблицы значений, которую вы передаёте во внешний набор, называйте так же — иначе данные не попадут в отчёт.

Чем эта ошибка отличается от похожих

СообщениеЧто не найденоГде искать
«Не найдено поле замены»Поле из настроек или выражения при сборке макетаНастройки, вычисляемые поля, ресурсы
«Поле не найдено»Поле в тексте запроса или выраженииТекст запроса, псевдонимы
«Не найден параметр»Параметр данныхВкладка «Параметры», код установки параметров

Разбор на примере: переименованная сумма в отчёте по продажам

Возьмём доработанный отчёт по продажам. В запросе было поле Выручка, разработчик переименовал его в СуммаВыручки, чтобы не путать с выручкой без НДС. Автозаполнение было включено, набор обновился сам. Отчёт у разработчика формируется.

Через день звонит менеджер: отчёт падает с «Не найдено поле замены». Что произошло:

  1. На вкладке «Ресурсы» осталось выражение Сумма(Выручка). Компоновщик не смог подставить поле.
  2. Вычисляемое поле Рентабельность делило Выручка на себестоимость — тоже старое имя.
  3. У менеджера сохранён личный вариант с колонкой Выручка и сортировкой по ней.

Разработчик исправил ресурс и вычисляемое поле, пункты 1 и 2 закрылись. Менеджеру пришлось сбросить личные настройки — пункт 3 правкой схемы не лечится. Кстати, приём с вычисляемым полем Выручка с выражением СуммаВыручки сохранил бы личные настройки без сброса.

Как не получить ошибку в новых отчётах

Перед выпуском отчёта на СКД
Выполнено: 0 / 6

Несколько привычек, которые снимают проблему почти полностью:

  • ✏️ Не переименовывайте поля без нужды. Сменили псевдоним в запросе — вы ломаете чужие сохранённые настройки. Если переименование неизбежно, сохраните старое поле вычисляемым полем с выражением на новое: старые настройки продолжат работать.
  • 🧩 Дорабатывайте типовые отчёты через расширение. При обновлении конфигурации сразу видно, что схема изменилась, и проще сверить поля.
  • 🧪 Держите тестовую базу. Прогоняйте все варианты отчёта после обновления, а не ждите звонка бухгалтера.
  • 🧹 После обновления типовых отчётов предупредите пользователей, что при ошибке достаточно сбросить настройки к стандартным.

Частые вопросы

Почему ошибка появилась после обновления типовой конфигурации, хотя я ничего не менял?
Разработчики конфигурации изменили схему отчёта: убрали или переименовали поле. Ваши сохранённые варианты и пользовательские настройки по-прежнему ссылаются на старое имя. Сбросьте настройки к стандартным и настройте вариант заново.
Можно ли исправить ошибку, не открывая конфигуратор?
Да, если причина в пользовательских настройках или сохранённом варианте. Сброс настроек и пересохранение варианта делаются в пользовательском режиме. Если ошибка в самой схеме, без конфигуратора или редактирования внешнего отчёта не обойтись.
Отчёт работает в консоли компоновки, а в базе падает. Почему?
В консоль вы загрузили только схему со стандартными настройками. В базе к ним добавляются пользовательские настройки и код обработчика ПриКомпоновкеРезультата. Ищите поле там.
Опасен ли метод Восстановить с проверкой доступности?
Нет, он меняет только настройки компоновки в памяти и данные базы не трогает. Но он молча удаляет недоступные поля, и пользователь может не увидеть нужную колонку. Сообщайте об этом или логируйте удалённые поля.
Что делать, если имени поля в сообщении нет?
Сформируйте отчёт с минимальной структурой: одна детальная группировка, без отборов. Затем возвращайте элементы настроек по одному, пока ошибка не появится снова.