Как исправить ошибку «Поле не найдено ОстаткиНаНачало.СуммаОстатокДт» при переносе «Карточки счета» в расширение БП 3.0?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При попытке кастомизации типовых отчетов в «1С:Бухгалтерия предприятия 3.0», таких как «Карточка счета», разработчики часто сталкиваются с тем, что простого добавления объекта в расширение недостаточно. Ошибка Поле не найдено ОстаткиНаНачало.СуммаОстатокДт является классическим примером нарушения связей метаданных внутри расширения. Разберем подробно, почему это происходит и как правильно решить задачу добавления контрагента в представление регистратора.

Причина возникновения ошибки в виртуальных таблицах

Проанализируем ситуацию: когда мы добавляем в расширение РегистрБухгалтерии.Хозрасчетный, система не всегда автоматически подтягивает все зависимости, необходимые для генерации виртуальных таблиц остатков. Поля СуммаОстатокДт и СуммаОстатокКт не существуют физически в таблице движений — они рассчитываются платформой «на лету» на основании ресурсов регистра и настроек плана счетов.

Выясним основные причины, по которым поле может быть «не найдено»:

  1. Отсутствие связи с Планом счетов: Если ПланСчетов.Хозрасчетный добавлен в расширение, но в свойствах регистра бухгалтерии в расширении поле План счетов не заполнено (или ссылается на основную конфигурацию некорректно), виртуальные таблицы не смогут определить структуру остатков.
  2. Настройки ресурсов регистра: Для формирования полей ОстатокДт и ОстатокКт у ресурса Сумма в расширении обязательно должны быть активны флаги Балансовый и установлен соответствующий Признак учета. Если эти свойства не перенеслись, платформа «считает», что ресурс не участвует в балансе, и не создает колонки дебетовых и кредитовых остатков.
  3. План видов характеристик: Виртуальные таблицы остатков и оборотов в БП 3.0 тесно связаны с аналитикой (субконто). Если в расширение не добавлен ПланВидовХарактеристик.ВидыСубконтоХозрасчетные, механизм компоновки данных может давать сбой при обращении к виртуальным таблицам.

Способ 1: Корректный захват метаданных в расширение

Если вы твердо решили идти путем полного переноса макета отчета в расширение, выполним следующие шаги для обеспечения целостности данных:

Шаг 1. Захват базовых объектов. Добавим в расширение не только отчет, но и весь «каркас» бухгалтерского учета. Это включает в себя ПланСчетов.Хозрасчетный, РегистрБухгалтерии.Хозрасчетный и ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.

Шаг 2. Проверка признаков учета. Зайдем в свойства Регистра Бухгалтерии внутри расширения. Убедимся, что на вкладке «Данные» для ресурса Сумма стоят галочки Балансовый. Проверим, что выбраны правильные Признаки учета (например, УчетПоПодразделениям, если это используется в запросе).

Шаг 3. Обновление платформы. Рассмотрим технический нюанс: в версиях платформы ниже 8.3.18 Конструктор запроса в расширениях часто не видел виртуальные таблицы даже при правильном захвате. Если в режиме «Предприятие» отчет формируется, а в Конструкторе — ошибка, это баг платформы, который лечится обновлением.

Способ 2: Программная модификация запроса (рекомендуемый)

Вместо того чтобы копировать сложный типовой отчет (что приведет к трудностям при обновлении конфигурации), рассмотрим более элегантный способ — перехват компоновки результата. Мы можем программно добавить поле Контрагент в запрос СКД прямо перед выполнением отчета.

Для этого создадим в расширении модуль объекта отчета КарточкаСчета и добавим процедуру-обработчик:


&После("ПриКомпоновкеРезультата")
Процедура Расш1_ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
    
    // Получаем основную схему компоновки
    Схема = Отчеты.КарточкаСчета.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    
    // Проанализируем текст запроса основного набора данных
    Для Каждого НаборДанных Из Схема.НаборыДанных Цикл
        Если ТипЗнч(НаборДанных) = Тип("НаборДанныхЗапросСхемыКомпоновкиДанных") Тогда
            // Добавляем выборку контрагента через обращение к реквизиту регистратора
            // Платформа 1С позволяет обращаться через точку к реквизитам шапки документов
            НаборДанных.Запрос = СтрЗаменить(НаборДанных.Запрос, 
                "РЕГИСТРАТОР КАК Регистратор,", 
                "РЕГИСТРАТОР КАК Регистратор, ВЫРАЗИТЬ(Регистратор КАК Документ.РеализацияТоваровУслуг).Контрагент КАК Контрагент,");
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

Этот метод позволяет избежать ошибки Поле не найдено, так как мы не меняем структуру виртуальных таблиц в метаданных расширения, а работаем с текстом запроса в памяти.

Способ 3: Использование вычисляемых полей и характеристик

Если задача стоит только в выводе контрагента в отчет, разберем вариант использования вычисляемых полей в настройках СКД. В «Карточке счета» поле Регистратор имеет составной тип. Мы можем добавить вычисляемое поле, которое будет пытаться получить контрагента:

В схеме компоновки на закладке «Вычисляемые поля» добавим строку:

Важный момент: Чтобы это поле было доступно без ошибок, все типы документов, которые мы перечисляем в ТИП(), должны быть добавлены в расширение. Однако, если контрагент нужен «для всех, у кого он есть», в управляемом приложении 1С часто срабатывает обращение Регистратор.Контрагент напрямую, если платформа может однозначно разрешить этот реквизит для большинства типов из состава типа Регистратор.

Почему отчет может не формироваться даже без ошибок запроса?

Проанализируем ситуацию, когда запрос в расширении прошел проверку, но отчет пуст. В БП 3.0 формирование отчетов идет через общие модули (например, ТиповыеОтчеты). Когда вы выносите отчет в расширение, он может потерять доступ к временным таблицам, которые подготавливаются в глобальном контексте основной конфигурации.

Рекомендация: Всегда проверяйте, захвачены ли вспомогательные таблицы. В «Карточке счета» часто используются данные из таблицы ДанныеПервичныхДокументов. Если её нет в расширении, запрос отработает, но связей с реальными номерами и датами документов может не быть.

Итог: Для решения проблемы СуммаОстатокДт убедитесь, что в расширении создана полная «бухгалтерская цепочка»: Регистр — План счетов — ПВХ. Если же цель — доработка представления, используйте программную подмену текста запроса в ПриКомпоновкеРезультата, это сохранит обновляемость вашей базы.

← На главную