Почему макеты в отчетах СКД искажаются в конфигураторе и как управлять их расположением?

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

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

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

Поведение макетов СКД в конфигураторе: искажение или норма?

Одна из наиболее частых причин для беспокойства при работе с макетами СКД – это их визуальное «искажение» или изменение расположения строк и ячеек при повторном открытии в конфигураторе. Пользователь открывает макет, настраивает его, сохраняет, а затем, спустя некоторое время, обнаруживает, что строки поменяли свое местоположение, ячейки переместились, и все выглядит совсем не так, как было изначально.

На первый взгляд, это может показаться серьезной ошибкой или некорректной работой системы. Возникает логичный вопрос: "А то, что в конфигураторе строки меняют свое расположение, это нормально?"

Мы с вами можем с уверенностью сказать: Да, это абсолютно нормально для СКД. И вот почему.

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

Основные особенности, объясняющие такое поведение:

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

Таким образом, мы должны смириться с тем, что макет СКД работает немного иначе. Главное, на что нам следует обращать внимание, это не на то, как выглядит макет в конфигураторе, а на то, как отчет формируется для пользователя. Если пользователь получает корректный отчет с правильными данными и оформлением, значит, все работает так, как задумано, и волноваться не стоит.

В чем особенности работы макетов СКД по сравнению с обычными?

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

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

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

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

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

  3. Автоматическое расположение: СКД обладает собственной логикой по автоматическому расположению элементов в итоговом табличном документе. Она стремится оптимизировать использование пространства, выравнивание, порядок вывода, основываясь на внутренних алгоритмах. Это может приводить к тому, что в конфигураторе мы видим один порядок строк, а СКД в процессе работы может переупорядочить их для более эффективного вывода или для соответствия заданной структуре отчета. Именно поэтому, например, она может переназначить области с R6 R5 R5 на R2 R4 R4, просто располагая их в удобном для *нее* порядке, а не в том, который мы видим в визуальном редакторе.
  4. Параметризация и выражения: Макеты СКД активно используют параметры и выражения. Это позволяет создавать очень динамичные макеты, где текст, форматирование или даже видимость элементов зависят от данных отчета или настроек пользователя. Эта динамичность также способствует тому, что статическое визуальное представление в конфигураторе является лишь одним из возможных вариантов, а не окончательной структурой.

Понимание этих фундаментальных отличий является ключом к эффективной работе с СКД. Мы перестаем бороться с "искажениями" и начинаем использовать СКД как мощный инструмент для создания адаптивных и функциональных отчетов.

Как управлять выводом данных и произвольным текстом в макетах группировок СКД?

Теперь, когда мы понимаем природу поведения макетов СКД, давайте перейдем к решению более сложной задачи, которая была поднята во втором сообщении темы: как в макете группировки СКД отключить или отделить группировку, вывести набор данных в строго указанных местах (до и после произвольного текста), а не все сразу, и не допускать повторения данных?

Это требует более тонкой настройки и понимания того, как СКД обрабатывает макеты группировок. Мы рассмотрим несколько подходов, которые позволят нам добиться желаемого результата.

  1. Создание дополнительных группировок для вывода произвольного текста

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

    Как это сделать:

    1. Откройте настройки структуры отчета в СКД.
    2. Создайте новую группировку там, где вы хотите разместить произвольный текст (например, до основной группировки с данными или между двумя такими группировками).
    3. Установите тип этой группировки как «Детальные записи». При этом не указывайте для нее поле группировки. Это создаст группировку, которая не будет группировать данные по какому-либо признаку, но позволит нам привязать к ней макет.
    4. Для этой новой группировки перейдите на вкладку "Макеты".
    5. Создайте новый макет группировки, например, типа «Заголовок».
    6. В этом макете разместите ваш произвольный текст. Вы можете использовать обычные надписи или, если текст динамический, создать в макете параметр и заполнить его значение в настройках СКД или с помощью выражения.
    7. Важно также установить для этой фиктивной группировки и ее макета параметр «Макет оформления» в значение «Без оформления», чтобы избежать нежелательных рамок, отступов или шрифтов, которые СКД применяет по умолчанию.

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

  2. Использование макетов заголовка и подвала группировок

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

    Как это работает:

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

    Совет: Если вы хотите вывести данные, которые относятся к текущей группировке (например, название контрагента в заголовке), просто перетащите поле группировки в макет. СКД автоматически подставит туда значение для текущей группы.

  3. Отключение стандартного оформления

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

    Где это настраивается:

    1. В настройках структуры отчета выберите соответствующую группировку (или поле).
    2. Перейдите на вкладку «Прочие настройки».
    3. Найдите параметр «Макет оформления».
    4. Установите его в значение «Без оформления».

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

  4. Фиксированный порядок вывода данных

    Если данные должны выводиться в строго определенном порядке, который не соответствует алфавитному или другим стандартным правилам сортировки, нам потребуется вмешаться в запрос и настройки упорядочивания СКД.

    Как обеспечить фиксированный порядок:

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

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

  5. Встраивание данных в произвольный текст через шаблоны ячеек

    Для элегантного вывода динамических данных непосредственно внутри произвольного текста в макете, мы можем использовать функциональность «Заполнение: Шаблон» для ячеек макета.

    Как это настроить:

    1. Откройте ваш макет группировки (например, макет заголовка или детальных записей).
    2. Создайте ячейку, в которую вы хотите вставить текст с данными.
    3. Откройте свойства этой ячейки.
    4. Найдите свойство «Заполнение» и установите его в значение «Шаблон».
    5. В поле «Текст» (или «Шаблон») ниже введите ваш произвольный текст, используя параметры в квадратных скобках [].
    6. Пример: Если вы хотите вывести "Товар (арт: Артикул)", вы можете написать в шаблоне: Товар: [Товар] (арт: [Артикул]).

    СКД автоматически подставит значения полей Товар и Артикул (если они доступны в текущей области данных) в соответствующий текст. Это очень удобный способ для формирования информативных и компактных строк.

  6. Использование выражений в параметрах макетов

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

    Примеры использования выражений:

    1. Условное форматирование текста: Вы можете создать параметр в макете и задать его значение через выражение, которое будет проверять какое-либо условие. Например, если значение поля Сумма отрицательное, вывести текст красным цветом.
    2. Комбинирование полей и функций: Вместо простого вывода поля, вы можете использовать выражение, которое форматирует его или объединяет с другими полями. Например, Формат(Дата, "ДФ=dd.MM.yyyy") для форматирования даты, или Строка(Количество) + " " + ЕдиницаИзмерения для вывода количества с единицей измерения.
    3. Вызов общих функций: Вы можете вызывать общие функции конфигурации прямо из выражений СКД, чтобы выполнять сложную логику, недоступную стандартными средствами. Для этого функции должны быть опубликованы как функции СКД.

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

Что делать при проблемах с кэшированием или отображением ширины колонок?

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

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

  1. Чистка кэша 1С:Предприятия: Это первое, что стоит попробовать. 1С активно кэширует различные данные, и иногда старые версии макетов или настроек могут «застревать» в кэше. Мы можем очистить кэш двумя способами:
    • В окне выбора базы данных, выберите вашу базу, нажмите кнопку «Изменить», затем «Далее» и найдите кнопку «Очистить кэш».
    • Вручную удалить папки кэша. Обычно они находятся в профиле пользователя (например, C:\Users\ВашПользователь\AppData\Roaming\1C\1CE\ и C:\Users\ВашПользователь\AppData\Local\1C\1CE\). Перед удалением убедитесь, что все сеансы 1С закрыты.

    После очистки кэша обязательно перезапустите 1С:Предприятие.

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

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

Мы надеемся, что это подробное объяснение поможет вам лучше понять логику работы макетов СКД и успешно решать возникающие задачи по оформлению отчетов. Помните, что СКД – это мощный, но требующий понимания его принципов инструмент, и освоив их, вы сможете создавать отчеты любой сложности.

← На главную