Как добавить новое поле в типовой отчет «Ведомость по амортизации ОС»?

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

При работе с типовыми конфигурациями, такими как Бухгалтерия предприятия 3.0, часто возникает необходимость расширить функционал стандартных отчетов, добавив в них специфические данные. Рассмотрим на примере отчета Ведомость по амортизации ОС, как правильно добавить новое поле, чтобы оно корректно отображалось в виде отдельной колонки и было доступно всем пользователям.

Шаг 1. Модификация запроса в схеме компоновки данных (СКД)

Первым делом нам необходимо внести изменения в запрос схемы компоновки данных. Если мы работаем через расширение или копию отчета, находим основную схему компоновки. В тексте запроса добавим получение нужного нам реквизита. Проанализируем типичную ситуацию: когда поле получается через «точку» от другого объекта, например, из справочника ОсновныеСредства.

Важно помнить о правах доступа. Чтобы избежать проблем с отображением поля у пользователей с ограниченными правами, используем конструкцию ВЫРАЗИТЬ. Это необходимо, так как поле может иметь составной тип данных, и системе нужно явно указать тип для проверки прав. Пример кода в запросе:


ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.ОсновноеСредство КАК Справочник.ОсновныеСредства).КодЯчейкиНаСкладе КАК ОС_КодЯчейкиНаСкладе

Шаг 2. Вывод поля в отдельную колонку через ресурсы

Часто программисты сталкиваются с тем, что новое поле добавляется в группировку (например, внутрь строки с основным средством), но не выводится отдельным столбцом. Выясним причину: СКД по умолчанию группирует нечисловые данные. Чтобы заставить систему вывести текстовое поле как отдельный показатель (аналогично суммам), разберем следующий прием:

  1. Перейдем на закладку Ресурсы в СКД.
  2. Добавим наше поле ОС_КодЯчейкиНаСкладе в список ресурсов.
  3. В выражении укажем само имя поля или используем агрегатную функцию, например, Максимум(ОС_КодЯчейкиНаСкладе).

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

Шаг 3. Программное управление выбранными полями

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


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

Важный нюанс: если отчет ранее уже открывался пользователем, система загрузит старые настройки из кэша. Чтобы увидеть изменения, необходимо сбросить настройки отчета на стандартные (кнопка Еще — Установить стандартные настройки).

Шаг 4. Решение проблем с правами доступа (RLS)

Рассмотрим ситуацию, когда под полными правами поле заполнено, а у рядового бухгалтера оно пустое или отсутствует. Это происходит из-за механизма RLS (Restriction at Leaf Level). Если обращение к реквизиту идет через точку от составного поля, система может блокировать доступ. Посмотрим на два способа решения:

  1. Явное приведение типа: использование функции ВЫРАЗИТЬ в запросе (как было показано в Шаге 1).
  2. Левое соединение: вместо обращения через точку, добавим в запрос явное ЛЕВОЕ СОЕДИНЕНИЕ с таблицей справочника ОсновныеСредства. Это более надежный способ с точки зрения производительности и прав доступа.

Рекомендация по использованию расширений

В современной разработке на платформе 1С 8.3 крайне не рекомендуется копировать типовые отчеты целиком. Проанализируем преимущества использования расширений: мы можем добавить только измененную СКД, сохранив при этом типовые формы и логику обновления конфигурации. Это позволит избежать трудностей при последующих обновлениях 1C:Бухгалтерии, так как наши доработки останутся в отдельном слое.

← На главную