Как разработать отчет по дебиторской и кредиторской задолженности на СКД в обычных формах 1С

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

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

Почему внешний отчет на СКД открывается пустым в конфигураторе

Рассмотрим распространенную ситуацию: вы сохранили отчет-образец на диск, открыли его в конфигураторе, но в дереве объекта нет ни реквизитов, ни форм, ни программного кода в модуле объекта. Это не ошибка и не повреждение файла. Данная особенность означает, что отчет целиком построен на механизме СКД.

Вся логика выборки, структура полей, отборы и оформления хранятся внутри объекта Основная схема компоновки данных. Платформа 1С умеет генерировать стандартную форму отчета «на лету» в режиме предприятия. В такой автогенерируемой форме уже присутствуют стандартные кнопки управления («Сформировать», «Настройки»), а также панель быстрого доступа к параметрам и отборам. Чтобы отредактировать такой отчет, достаточно нажать кнопку Открыть схему компоновки данных в окне свойств отчета.

Разделение дебиторской и кредиторской задолженности в схеме компоновки

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

Разберем по шагам два основных способа разделения показателей:

  1. Разделение на уровне текста запроса: в тексте запроса к виртуальной таблице остатков используем условную конструкцию ВЫБОР КОГДА.
    
    ВЫБРАТЬ
        ВзаиморасчетыОстатки.ДоговорКонтрагента.Владелец КАК Контрагент,
        ВзаиморасчетыОстатки.ДоговорКонтрагента КАК Договор,
        ВЫБОР
            КОГДА ВзаиморасчетыОстатки.СуммаВзаиморасчетовОстаток > 0
                ТОГДА ВзаиморасчетыОстатки.СуммаВзаиморасчетовОстаток
            ИНАЧЕ 0
        КОНЕЦ КАК ДебиторскаяЗадолженность,
        ВЫБОР
            КОГДА ВзаиморасчетыОстатки.СуммаВзаиморасчетовОстаток < 0
                ТОГДА -ВзаиморасчетыОстатки.СуммаВзаиморасчетовОстаток
            ИНАЧЕ 0
        КОНЕЦ КАК КредиторскаяЗадолженность
    ИЗ
        РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&Период, ) КАК ВзаиморасчетыОстатки
    
  2. Использование вычисляемых полей СКД: в запросе выбирается единое поле СуммаВзаиморасчетовОстаток, а на вкладке Вычисляемые поля создаются два отдельных выражения. Например, для кредиторской задолженности в поле выражения указывается:
    
    Выбор Когда СуммаВзаиморасчетовОстаток < 0 Тогда -СуммаВзаиморасчетовОстаток Иначе 0 Конец
    
    Затем на вкладке Ресурсы для обоих полей задается функция расчета итогов: Сумма(ДебиторскаяЗадолженность) и Сумма(КредиторскаяЗадолженность).

Корректная передача параметров периода в виртуальные таблицы

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

  1. На закладке Параметры для параметра КонецПериода установим тип Дата.
  2. Для служебного параметра виртуальной таблицы (например, Период) в колонке Выражение укажем: КонецПериода(&КонецПериода, "ДЕНЬ")
  3. Включим флажок Ограничение доступности для параметра Период, чтобы скрыть его от пользователя, оставив на форме только понятный параметр КонецПериода.

Интеграция СКД в обычные (толстые) формы 8.2

Существует заблуждение, что СКД полноценно работает только на управляемых формах. На самом деле СКД отлично функционирует и на обычных формах конфигураций платформы 8.2 и 8.3.

Рассмотрим два варианта работы с формой:

  1. Использование автоматической формы: если в отчете не создавать форму вручную, платформа предоставит стандартный интерфейс с панелью настроек, кнопкой формирования и автоматической обработкой расшифровки ячеек.
  2. Создание собственной формы: если требуется индивидуальный дизайн, добавим обычную форму отчета. На форму помещаются:
    • Элемент управления ПолеТабличногоДокумента (в него будет выводиться результат);
    • Табличное поле с данными КомпоновщикНастроек.Настройки.Отбор для удобного редактирования отборов пользователем прямо на рабочей панели.

Для программного формирования отчета на обычной форме не требуется писать сложный код инициализации компоновщика и процессора вывода. Достаточно вызвать встроенный платформенный метод:


Процедура ДействияФормыСформировать(Кнопка)
    
    ЭлементыФормы.ПолеТабличногоДокумента.Очистить();
    СкомпоноватьРезультат(ЭлементыФормы.ПолеТабличногоДокумента);
    
КонецПроцедуры

Метод СкомпоноватьРезультат автоматически берет настройки из компоновщика, выполняет компоновку и заполняет указанное ПолеТабличногоДокумента с сохранением всех группировок, ресурсов и расшифровок.

← На главную