1С присоединить область справа

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

Области макета предназначены для однократного или многократного вывода, например, ниже представлен макет для печати расходной накладной:

Некоторые ячейки содержат только текст, который должен быть выведен. Другие ячейки содержат имена параметров (в угловых скобках). Значения этих параметров должны указываться в программном модуле. В отличие от версии 7.7, в ячейку нельзя вписать выражение. В версии 8.0 весь программный код сосредоточен в программных модулях и при выводе секций нет связи с текущим контекстом программного модуля. Назначение параметров табличного документа должно производиться явно из программного модуля через коллекцию "Параметры" объекта "ТабличныйДокумент".

Область может состоять из нескольких расположенных подряд строк или колонок, либо быть прямоугольной областью таблицы. К области можно обратиться по имени или по координатам. Можно также обращаться к пересечению областей, используя вертикальную черту (как в версии 7.7).

Общая схема

Общая схема формирования печатной формы на основе макета:

  1. Создание макета в табличном редакторе (определение областей, имен параметров, форматирования).
  2. Создание нового табличного документа (этот пункт не требуется, если отчет выводится в элемент управления ПолеТабличногоДокумента).
  3. Получение макета в переменную (метод ПолучитьМакет).
  4. Получение областей макета (метод ПолучитьОбласть).
  5. Заполнение параметров области (свойство Параметры).
  6. Вывод области в табличный документ (методы Вывести и Присоединить).
  7. Установка свойств отображения табличного документа (сетка, заголовки, только просмотр и т.д.).
  8. Отображение табличного документа на экране (а может быть отправка на принтер или сохранение).
Читайте также:  Что означает вертикальная черта в математике

Пример вывода табличного документа

Ниже приведен пример формирования печатной формы расходной накладной из модуля документа:

Процедура Печать(ТабДок) Экспорт

//создание нового табличного документа
ТабДок = Новый ТабличныйДокумент ;

//получение макета для печати расходной накладной
Макет = Документы.РасходнаяНакладная. ПолучитьМакет ("Основной");

//получим область "Заголовок" как новый табличный документ (!)
Область = Макет. ПолучитьОбласть ("Заголовок");

//укажем параметры области
Область. Параметры .НомерДокумента = Номер;
Область.Параметры.От = Дата;
Область.Параметры.Кому = Контрагент;

//выведем заполненную область "Заголовок" в табличный документ
ТабДок. Вывести (Область);

//выведем область "Шапка" в табличный документ
ТабДок.Вывести(Макет.ПолучитьОбласть("Шапка"));

//получение области "Строка"
//обратите внимание, что это можно сделать до цикла по строкам
Область = Макет.ПолучитьОбласть("Строка");

//вывод строк документа в печатную форму
Для Каждого СтрСостава Из Состав Цикл

//заполнение параметров области из строки табличной части
Область.Параметры. Заполнить (СтрСостава);

//вывод сформированной области в табличный документ
ТабДок.Вывести(Область);

//вывод области "Подвал"
Область = Макет.ПолучитьОбласть("Подвал");
Область.Параметры.ИтогоКоличество = Состав.Итог("Количество");
Область.Параметры.ИтогоСумма = Состав.Итог("Сумма");
ТабДок.Вывести(Область);

//установим параметры отображения табличного документа
ТабДок.ТолькоПросмотр = Истина;
ТабДок.ОтображатьЗаголовки = Истина;
ТабДок.ОтображатьСетку = Ложь;

//покажем табличный документ на экране
ТабДок. Показать ();

Основные методы

Основные методы формирования итогового табличного документа следующие:

Программирование системы 06.12.2016 10:31 4855

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

Основные функции
ПолучитьОбласть() – возвращает область макета в виде табличного документа.
Вывести() – выводит область в табличный документ добавляя её снизу, начиная с первой колонки.
Присоединить() – выводит область в табличный документ добавляя её справа, начиная со строки, в которую выводился предыдущий элемент.

Пример заполнения табличного документа

Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться

Читайте также:  Чем открывать файлы lay

Задача.

Вывести в печатную форму, на подобии печати ценников, мини-прайсы. Т.е. некий набор номенклатуры с ценами.

Для тех кто не в курсе как печатаются ценники (на примере УТ11) выводятся фиксированные блоки поочередно присоединяя их, пока они по размеру входят в выводимую область. Как только присоединение не возможно, данные выводятся на «новой строке» Таблицы. Проверка осуществляется ч/з проверить присоединение и проверить вывод

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

Решение, приведенное выше, конечно, рабочее и может применяться (даже применяется) на практике. Но к моему глубокому сожалению, для меня не приемлемо по моим внутренним убеждениям (люблю, чтоб код был простым и красивым). Поэтому у меня придумался другой подход.

Решение

Если коротко, то алгоритм следующий:

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

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

PS: Возможно, данная реализация не самая красивая и есть еще варианты. Предлагаю обсудить в комментах.

Ниже небольшая выдержка из кода обработки, прикрепленной для скачивания (демо пример в которой на ряду со «сборной» областью выводится фиксированная область, типа ценника)

Читайте также:  1С запрос сравнение строк

ТабличныйДокумент = Новый ТабличныйДокумент ;
ВременнаяОбласть = Новый ТабличныйДокумент ;

ФиксОбласть = Макет . ПолучитьОбласть ( "ФиксХ|У" );
ФиксОбласть . Параметры . Текст = ТекстФиксированногоМакета ;

Х_Шапка = Макет . ПолучитьОбласть ( "Х_Шапка|У" );
Х_Строка = Макет . ПолучитьОбласть ( "Х_Строка|У" );
Х_Подвал = Макет . ПолучитьОбласть ( "Х_Подвал|У" );

ПерваяКолонка = Истина;
Если ВыводитьФиксированнуюОбласть Тогда
Область = ФиксОбласть ;
ВывестиОбласть ( ТабличныйДокумент , Область , ПерваяКолонка );
КонецЕсли;
Для х = 1 по СтрокиТаблицы . Количество () Цикл

СтрокаТаблицы = СтрокиТаблицы [ х – 1 ];
ВременнаяОбласть . Очистить ();
Х_Шапка . параметры . Наименование = СтрокаТаблицы . Наименование ;
ВременнаяОбласть . Вывести ( Х_Шапка );
Для Каждого строкаТ из СтрокаТаблицы . Строки Цикл
ЗаполнитьЗначенияСвойств ( Х_Строка . Параметры , строкаТ );
ВременнаяОбласть . Вывести ( Х_Строка );
КонецЦикла;
ВременнаяОбласть . Вывести ( Х_Подвал );
Область = ВременнаяОбласть . ПолучитьОбласть ( "R1C1:R" + ВременнаяОбласть . ВысотаТаблицы + "C" + ВременнаяОбласть . ШиринаТаблицы );

ВывестиОбласть ( ТабличныйДокумент , Область , ПерваяКолонка );

Если ВыводитьФиксированнуюОбласть Тогда
Область = ФиксОбласть ;
ВывестиОбласть ( ТабличныйДокумент , Область , ПерваяКолонка );
КонецЕсли;

Оцените статью
Добавить комментарий

Adblock detector