Рассмотрим распространенную задачу при доработке конфигурации "1С:Бухгалтерия предприятия 3.0". Часто возникает ситуация, когда мы создаем новый документ (или дорабатываем существующий), добавляем к нему дополнительные реквизиты через механизм БСП (Библиотека Стандартных Подсистем), но сталкиваемся с проблемой: эти реквизиты не отображаются в стандартных бухгалтерских отчетах, таких как "Карточка счета" или "Оборотно-сальдовая ведомость".
Вместе разберемся, почему так происходит, как устроен механизм характеристик в Системе Компоновки Данных (СКД) и какие шаги необходимо предпринять, чтобы пользовательские поля стали доступны для отборов и группировок в отчетах.
Давайте проанализируем архитектуру. В типовых конфигурациях на базе БСП механизм дополнительных реквизитов и сведений реализован через Планы Видов Характеристик (ПВХ) и соответствующие табличные части в объектах или регистры сведений.
Когда мы открываем настройки стандартного отчета (например, "Карточка счета") и пытаемся добавить поле из группы Регистратор, мы ожидаем увидеть там наши Доп. реквизиты. Однако их там часто нет. Этому есть две основные причины, которые мы подробно разберем:
Теперь давайте перейдем к пошаговому решению этой задачи.
Прежде чем пытаться вывести данные в отчет, убедимся, что наш документ корректно встроен в подсистему "Свойства". Если вы просто добавили документ в конфигуратор, дополнительные реквизиты работать не будут.
Выполним следующие действия в конфигураторе:
ДополнительныеРеквизитыИСведения. Нам необходимо включить наш новый документ в тип значений этого ПВХ. Это позволит создавать настройки свойств для данного объекта в режиме "1С:Предприятие".ДополнительныеРеквизиты. Она должна содержать реквизиты, аналогичные тем, что есть в других документах (обычно это Свойство и Значение).УправлениеСвойствами.Если мы используем современные версии БСП, то внедрение выглядит следующим образом. В модуль менеджера документа добавим область программного интерфейса:
#Область ПрограммныйИнтерфейс
// Заполняет список команд создания на основании.
//
// Параметры:
// КомандыСозданияНаОсновании - ТаблицаЗначений - перечень команд
//
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании) Экспорт
// Код заполнения...
КонецПроцедуры
// Настройки подсистемы "Управление свойствами".
//
// Параметры:
// Настройки - Структура - настройки подсистемы.
//
Процедура ПриПолученииНастроек(Настройки) Экспорт
УправлениеСвойствамиПереопределяемый.ПриПолученииНастроек(Настройки);
КонецПроцедуры
#КонецОбласти
Этот код сигнализирует системе, что документ готов работать со свойствами. После обновления конфигурации в режиме "Предприятие" для нашего документа появится возможность добавлять дополнительные реквизиты.
Важно различать Дополнительные реквизиты и Дополнительные сведения. Это критично для производительности отчетов.
Дополнительные реквизиты хранятся непосредственно в документе (в той самой табличной части, которую мы добавили). При построении отчета данные берутся прямо из объекта, что относительно быстро.
Дополнительные сведения хранятся в отдельном регистре сведений. Чтобы вывести их в отчете через поле Регистратор, системе придется делать левое соединение (Left Join) регистра бухгалтерии с регистром сведений для каждой строки. На больших объемах данных (например, карточка счета за год) это может вызвать существенные "тормоза".
Рекомендация: Если вам нужно выводить данные в стандартные отчеты и делать по ним отборы, используйте именно Дополнительные реквизиты.
Самый сложный момент заключается в том, что даже при корректной настройке документа, поле Регистратор в отчете может не раскрываться до дополнительных реквизитов из-за составного типа данных. Стандартный отчет БП 3.0 построен сложно и программно модифицирует схему компоновки.
Посмотрим, как решить это наиболее современным способом — с помощью Расширений конфигурации (Extensions).
Мы не будем снимать конфигурацию с поддержки. Вместо этого создадим расширение и заимствуем туда схему компоновки данных нужного отчета (например, отчета КарточкаСчета).
В заимствованной схеме компоновки данных обратим внимание на вкладку "Характеристики". Именно здесь задается правило, по которому СКД понимает, откуда брать дополнительные поля.
Чтобы наш новый документ "подхватился", нам нужно либо:
Регистратор не стоит жестких ограничений по типам.Рассмотрим вариант явного указания характеристик. В СКД есть механизм, позволяющий указать:
ДополнительныеРеквизитыИСведения).Если в типовой схеме это настроено через общий механизм, то проблема может быть в том, что поле Регистратор в запросе СКД не имеет явной типизации. Мы можем попробовать использовать синтаксис ВЫРАЗИТЬ(Регистратор КАК Документ.НашНовыйДокумент).Ссылка как отдельное поле, и тогда для этого поля характеристики подтянутся автоматически.
Если задача стоит "просто посмотреть данные" или "быстро сделать выборку", и нет ресурсов на программирование расширений, воспользуемся мощным инструментом пользователя — Универсальным отчетом.
Это штатный отчет, который умеет строить данные по любым объектам метаданных. Давайте настроим его для нашего случая:
В универсальном отчете, поскольку он строится непосредственно по таблице документа (а не по регистру бухгалтерии, где регистратор обезличен), механизм дополнительных реквизитов работает "из коробки".
Мы можем:
Однако этот способ не покажет бухгалтерские проводки (Дт/Кт) в едином контексте с остатками, как это делает Карточка счета.
Стоит упомянуть, что многие отчеты в "1С:Бухгалтерии" формируются с использованием общих модулей, таких как БухгалтерскиеОтчеты или БухгалтерскиеОтчетыВызовСервера. В этих модулях часто содержится логика, которая программно "собирает" настройки компоновщика.
Если вы добавили доп. реквизиты, но они не появляются в панели настроек, возможно, проблема кроется в коде инициализации отчета. В таких случаях мы можем использовать механизм переопределения.
Посмотрим на пример логики, которая может потребоваться в модуле объекта нашего документа или в расширении общего модуля, чтобы "подсказать" отчету о наличии свойств:
// Примерный псевдокод для расширения
// Добавляем наш документ в массив типов, для которых доступны свойства
Процедура Расш_ПриОпределенииОбъектовСДопРеквизитами(Объекты)
Объекты.Добавить(Тип("Документ.НашСпециальныйДокумент"));
КонецПроцедуры
Это обеспечивает глобальную видимость свойств документа для подсистем БСП.
Для успешного использования дополнительных реквизитов нового документа-регистратора в стандартных отчетах:
Регистратор имеет составной тип. СКД с трудом "раскручивает" свойства составных типов.Такой подход позволит пользователям гибко работать с аналитикой, не перегружая план счетов лишними субконто и сохраняя конфигурацию максимально обновляемой.