Как создать и правильно заполнить макет табличного документа в 1С 8.2?

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

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

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

Визуализируем будущий отчет: Начнем с эскиза

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

  1. Нарисуйте в Excel то, что вы хотите видеть. Используйте привычные средства для создания эскиза вашего будущего отчета. Это может быть простая таблица, но она должна отражать структуру, заголовки, расположение данных и даже желаемое форматирование.

  2. Определите, какие данные будут динамическими. На этом этапе выделите те поля, которые будут заполняться из информационной базы (например, наименование товара, количество, цена, дата). Остальной текст будет статическим.

  3. Упростите эскиз до первой записи. Для начального этапа достаточно иметь один пример заполненной строки. Это поможет понять, как организовать структуру макета, особенно если у вас есть повторяющиеся секции, такие как строки таблицы товаров.

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

Основные компоненты макета в 1С 8.2

Макет в 1С 8.2 представляет собой шаблон для формирования печатной формы. Он создается и редактируется в конфигураторе с помощью специального табличного редактора, который очень похож на Excel.

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

  1. Создание макета табличного документа. В конфигураторе необходимо выбрать объект (например, обработку, отчет или документ), для которого создается макет. В дереве объектов найдите ветку "Макеты", щелкните правой кнопкой мыши и выберите "Добавить". Укажите имя макета (например, "ПечатнаяФормаОтчета") и выберите тип "ТабличныйДокумент".

  2. Визуальное оформление. В открывшемся табличном документе (который представляет собой пустой лист) мы можем начать "рисовать" наш отчет в соответствии с созданным ранее эскизом из Excel. Здесь доступны все стандартные инструменты форматирования: установка шрифтов, выравнивания, границ, объединение ячеек и т.д. В этом и заключается гибкость редактирования – вы можете изменять внешний вид без изменения конфигурации.

  3. Определение областей (Область). Это один из ключевых моментов для "нормального" макета. Мы должны разбить наш макет на логические части, называемые областями. Области — это именованные диапазоны строк или ячеек в макете. Каждая область должна иметь уникальное имя, которое мы будем использовать в коде для ее программного заполнения и вывода.

    Типичные области:

    • "Шапка": Содержит заголовки, общую информацию об отчете (например, название отчета, период, наименование организации).

    • "ЗаголовокТаблицы": Строка с заголовками колонок табличной части.

    • "Строка": Представляет собой одну строку данных из табличной части или выборки. Эта область будет выводиться многократно в цикле.

    • "Подвал": Содержит итоговые данные, подписи, общую сумму.

    Для определения области:

    1. Выделите нужные строки или ячейки в редакторе макета.

    2. В меню "Таблица" выберите "Имена" -> "Назначить имя..." или нажмите Ctrl+Alt+N.

    3. В появившемся окне введите уникальное имя для области (например, "Шапка", "СтрокаТовара", "Итог").

    Как верно подмечено в сообщении 5, макет может быть хоть с одной областью-строкой и одним параметром. Главное — правильно его заполнять и выводить.

Работа с данными: Параметры и шаблоны

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

  1. Параметры. Если ячейка должна содержать только одно динамическое значение, используем режим заполнения "Параметр".

    Чтобы назначить ячейке параметр:

    1. Выделите нужную ячейку в макете.

    2. В окне "Свойства ячейки" (обычно справа внизу) найдите свойство "Заполнение". Установите его в значение "Параметр".

    3. В свойстве "Параметр" ниже введите имя параметра (например, "НаименованиеТовара", "Количество", "Сумма"). Рекомендуется, чтобы имена параметров в макете совпадали с именами реквизитов табличной части или полей запроса для упрощения программного заполнения.

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

  2. Шаблоны. Если ячейка должна содержать комбинацию статического текста и одного или нескольких динамических значений, используем режим заполнения "Шаблон".

    Чтобы назначить ячейке шаблон:

    1. Выделите нужную ячейку.

    2. В свойстве "Заполнение" установите значение "Шаблон".

    3. В свойстве "Текст" ячейки введите текст, включая имена параметров, заключенные в квадратные скобки. Например: "Меня зовут [МоеИмя], мне [МойВозраст] лет". Система 1С автоматически подставит значения параметров в указанные места.

Важно: Не забудьте для каждой ячейки, где будут выводиться данные, установить соответствующее свойство "Заполнение".

Программное заполнение и вывод макета

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

Это та часть, где автор темы самостоятельно разобрался с циклом, что является ключевым для динамического вывода строк.

Рассмотрим пошаговый процесс в модуле обработки или отчета:

  1. Получение макета. Сначала нам нужно получить доступ к созданному макету.

    
    Макет = ПолучитьМакет("ИмяВашегоМакета"); // 'ИмяВашегоМакета' - это имя, которое вы дали макету в конфигураторе
    
  2. Создание нового табличного документа. Результат будет формироваться в новом объекте ТабличныйДокумент.

    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.Очистить(); // На всякий случай очищаем, если уже использовался
    
  3. Получение областей макета. Мы обращаемся к макету и получаем каждую из определенных нами областей по ее имени.

    
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
    ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    
  4. Заполнение параметров и вывод Шапки. Мы присваиваем значения параметрам нашей шапки и выводим ее в результирующий табличный документ.

    
    // Предположим, у нас есть данные для шапки
    ОбластьШапка.Параметры.ДатаОтчета = ТекущаяДата();
    ОбластьШапка.Параметры.Заголовок = "Отчет по продажам";
    ОбластьШапка.Параметры.Организация = "ООО 'Пример'";
    ТабличныйДокумент.Вывести(ОбластьШапка);
    
  5. Вывод ЗаголовкаТаблицы. Если он есть и не содержит параметров, его можно вывести сразу после шапки.

    ТабличныйДокумент.Вывести(ОбластьЗаголовокТаблицы);
  6. Заполнение и вывод строк в цикле. Это ключевой момент для вывода табличных данных. Мы будем получать данные (например, из запроса) и для каждой записи заполнять параметры области "Строка", а затем выводить эту область.

    Сначала нам нужно получить данные. Это может быть результат запроса (как намекалось в сообщении 4) или данные из табличной части документа.

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

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

  7. Заполнение параметров и вывод Подвала. После завершения цикла и вывода всех строк, мы заполняем параметры подвала (например, итоговую сумму) и выводим его.

    
    ОбластьПодвал.Параметры.Итого = ОбщаяСумма;
    ТабличныйДокумент.Вывести(ОбластьПодвал);
    
  8. Отображение результата. Последний шаг — это показ сформированного табличного документа пользователю.

    ТабличныйДокумент.Показать();

Важные рекомендации и частые ошибки

При работе с макетами есть несколько моментов, которые стоит учитывать, чтобы избежать проблем:

Следуя этим рекомендациям и понимая принципы работы с макетами, областями, параметрами и циклами, вы сможете создавать мощные и гибкие печатные формы в 1С 8.2, которые будут точно соответствовать вашим требованиям.

← На главную