- Основы формирования табличного документа на основе макета
- Общая схема
- Пример вывода табличного документа
- Основные методы
- ТабличныйДокумент, метод Присоединить() работает по-разному! (с примером кода)
- Программирование в 1С для всех
- Вертикальные области табличного документа 1С 8.3
- Горизонтальные области табличного документа 1С 8.3
- Пересечение областей табличного документа 1С 8.3
- One thought on “ Области табличного документа в 1С ”
Основы формирования табличного документа на основе макета
Обычно табличный документ формируется на основе макета как из строительных блоков. Макет представляет собой шаблон для формирования печатной формы. Построение макета производится в конфигураторе в специальном табличном редакторе. Разработчик может создавать области, изменять высоту строк и ширину колонок, задавать форматирование ячеек и всего табличного документа, включать в макет рисунки, диаграммы и сводные таблицы.
Области макета предназначены для однократного или многократного вывода, например, ниже представлен макет для печати расходной накладной:
Некоторые ячейки содержат только текст, который должен быть выведен. Другие ячейки содержат имена параметров (в угловых скобках). Значения этих параметров должны указываться в программном модуле. В отличие от версии 7.7, в ячейку нельзя вписать выражение. В версии 8.0 весь программный код сосредоточен в программных модулях и при выводе секций нет связи с текущим контекстом программного модуля. Назначение параметров табличного документа должно производиться явно из программного модуля через коллекцию «Параметры» объекта «ТабличныйДокумент».
Область может состоять из нескольких расположенных подряд строк или колонок, либо быть прямоугольной областью таблицы. К области можно обратиться по имени или по координатам. Можно также обращаться к пересечению областей, используя вертикальную черту (как в версии 7.7).
Общая схема
Общая схема формирования печатной формы на основе макета:
- Создание макета в табличном редакторе (определение областей, имен параметров, форматирования).
- Создание нового табличного документа (этот пункт не требуется, если отчет выводится в элемент управления ПолеТабличногоДокумента).
- Получение макета в переменную (метод ПолучитьМакет).
- Получение областей макета (метод ПолучитьОбласть).
- Заполнение параметров области (свойство Параметры).
- Вывод области в табличный документ (методы Вывести и Присоединить).
- Установка свойств отображения табличного документа (сетка, заголовки, только просмотр и т.д.).
- Отображение табличного документа на экране (а может быть отправка на принтер или сохранение).
Пример вывода табличного документа
Ниже приведен пример формирования печатной формы расходной накладной из модуля документа:
Процедура Печать(ТабДок) Экспорт
//создание нового табличного документа
ТабДок = Новый ТабличныйДокумент ;
//получение макета для печати расходной накладной
Макет = Документы.РасходнаяНакладная. ПолучитьМакет («Основной»);
//получим область «Заголовок» как новый табличный документ (!)
Область = Макет. ПолучитьОбласть («Заголовок»);
//укажем параметры области
Область. Параметры .НомерДокумента = Номер;
Область.Параметры.От = Дата;
Область.Параметры.Кому = Контрагент;
//выведем заполненную область «Заголовок» в табличный документ
ТабДок. Вывести (Область);
//выведем область «Шапка» в табличный документ
ТабДок.Вывести(Макет.ПолучитьОбласть(«Шапка»));
//получение области «Строка»
//обратите внимание, что это можно сделать до цикла по строкам
Область = Макет.ПолучитьОбласть(«Строка»);
//вывод строк документа в печатную форму
Для Каждого СтрСостава Из Состав Цикл
//заполнение параметров области из строки табличной части
Область.Параметры. Заполнить (СтрСостава);
//вывод сформированной области в табличный документ
ТабДок.Вывести(Область);
//вывод области «Подвал»
Область = Макет.ПолучитьОбласть(«Подвал»);
Область.Параметры.ИтогоКоличество = Состав.Итог(«Количество»);
Область.Параметры.ИтогоСумма = Состав.Итог(«Сумма»);
ТабДок.Вывести(Область);
//установим параметры отображения табличного документа
ТабДок.ТолькоПросмотр = Истина;
ТабДок.ОтображатьЗаголовки = Истина;
ТабДок.ОтображатьСетку = Ложь;
//покажем табличный документ на экране
ТабДок. Показать ();
Основные методы
Основные методы формирования итогового табличного документа следующие:
Источник
ТабличныйДокумент, метод Присоединить() работает по-разному! (с примером кода)
1С 8.2. Управляемое приложение.
Делаю программную генерацию отчета. Обнаружил странную особенность метода Присоединить(), не знаю как обойти.
Проблема в следующем. Предположим, нужно вывести колонку с надписью, а справа от нее еще 10 колонок с цифрами 1..10. Вот так (правильно):
Надпись 1 2 3 4 5 6 7 8 9 10
Так вот, если надпись, выводимая в табличный документ через метод Вывести(), является табличным документом, созданным на основе табличного документа, куда и будет сделан вывод, то цифры будут присоединены в той же строке (что мне и нужно).
Но если надпись, выводимая в табличный документ через метод Вывести(), является другим табличным документом, то цифры будут присоединены на следующей строке! Вот так (неправильно):
Надпись
1 2 3 4 5 6 7 8 9 10
Чтобы было понятнее, вот пример кода:
&НаКлиенте
Процедура КомандаПоказатьТаблицу(Команда)
ТабДок = Новый ТабличныйДокумент;
ДниТабДок = ТабДок.ПолучитьОбласть(«R1C1»); // Вариант 1 — правильный
// ДниТабДок = Новый ТабличныйДокумент; // Вариант 2 — неправильный
ДниТабДок.Область(«R1C1»).Текст = «Дни»;
ТабДок.Вывести(ДниТабДок);
Для К=1 По 10 Цикл
Секция = ТабДок.ПолучитьОбласть(«R1C1»);
Секция.Область().Текст = «День «+К;
ТабДок.Присоединить(Секция);
КонецЦикла;
То есть, от того, на основе чего был сделан последний вставленный табличный документ, зависит поведение метода Присоединить().
Но я не могу всё делать на основе одного документа. У меня в отчете несколько шаблонов, несколько созданных в коде табличных документов. И я не могу их толком прилепить справа. Они всегда прилепляются снизу, а не на той же строке!
Вопрос. Как обойти эту особенность? Что я делаю не так?
(1) Это максимально упрощенный код из официальной справки по методу Присоединить(). В чем кривость кода?
Мне нужно, чтобы можно было работать с любым документом, чтобы любой табличный документ можно было присоединять справа.
А получается, что можно справа присоединить только тот, который сгенерирован на основе документа, куда и будем присоединять.
Источник
Программирование в 1С для всех
В этой статье научимся работать с областями табличного документа в 1С 8.3. Вы узнаете, как создать и вывести вертикальные области, как создать и вывести горизонтальные области, а также как работать с пересечением областей.
Создадим обработку 1С, в которой будем разрабатывать макеты для демонстрации работы с разными областями табличных документов 1С.
И начнем с вертикальных областей.
Вертикальные области табличного документа 1С 8.3
Выполним небольшую задачу: будем выводить в табличном документе пронумерованные колонки, количество которых задается с формы.
Для реализации, создадим у обработки макет табличного документа, который так и назовем «ВертикальныеОбласти».
Нам нужно создать вертикальную область в этом макете. Для этого выделим те колонки макета табличного документа, в которых мы хотим создать область, и выполним команду «Назначить имя», которая находится по пути «Главное меню – Таблица – Имена».
В открывшемся окне введем имя области.
После того, как мы зададим имя, на макете будет создана область: в поле сверху появится название области, а также отобразятся вертикальные полосы, которые будут эту область ограничивать.
Немного доработаем макет. Объединим ячейки во второй строке. Для этого необходимо их выделить, вызвать контекстное меню, и применить команду «Объединить» этого меню.
В объединенных ячейках установим в свойство Заполнение значение Параметр. У нас в этих ячейках будет выходить какой-то параметр, назовем его НомерКолонки, а также в свойство Горизонтальное положение установим значение Центр.
И увеличим размер шрифта.
Всё, с макетом мы закончили.
Следующим шагом, разработаем основную форму обработки. На этой управляемой форме создадим реквизит «Количество колонок» (тип целое и неотрицательно число), а также команду формы «Вывести вертикальные области».
У команды формы создадим клиентский обработчик, который будет вызывать серверную бесконтекстную функцию.
В функции ПолучитьТабличныйДокументВертикальныеОбласти мы получим макет обработки, получим область макета «Колонка», создадим простой цикл от 1 до значения реквизита формы количество колонок, а потом в теле цикла будет в табличном документе присоединять область при помощи метода Присоединить(), который добавляет ячейки области по горизонтали, как бы присоединяя их.
И у нашей обработки будет следующий результат работы.
Горизонтальные области табличного документа 1С 8.3
В этой задаче будем выводить в табличном документе пронумерованные строки. Для этого создадим макет обработки, который назовем «Горизонтальные области». В этом макете выделим строки, и выполним уже знакомую команду «Назначить имя» («Главное меню – Таблица – Имена»).
В результате выполнения команды, выйдет окно, где нужно ввести название области, после того, как введем название области, макет табличного документа изменится: в поле слева появится название области, а также отобразятся горизонтальные полосы, которые будут эту область ограничивать.
Также как и с предыдущим макетом (вертикальные области), объединим ячейки, сделаем их параметром, увеличим шрифт и выполним центрирование.
На основной форме обработки создадим новый реквизит КоличествоКолонок (тип Число) и команду ВывестиГоризонтальныеОбласти.
Далее, мы создаем обработчик события команды формы и функцию, которая возвращает табличный документ с горизонтальными областями. В этом коде будет все точно также, как и в коде, который формировал табличный документ с вертикальными областями, но только вместо метода Присоединить будет использоваться метод Вывести, который добавляет ячейки области по вертикали.
И результат работы этого кода.
Таким образом. Метод Присоединить табличного документа добавляет области по горизонтали таблицы, а метод Вывести – по вертикали.
Научимся выводить таблицу.
Пересечение областей табличного документа 1С 8.3
Сделаем возможность вывода таблицы с определенным количеством строк и колонок, которое будет задаваться из реквизитов формы, созданных ранее.
Для этого создадим новый макет табличного документа, с пересекающимися вертикальными и горизонтальными областями.
В пересечении областей объединим ячейки, зададим параметр, отцентрируем, а также обведем объединенную ячейку.
На форме обработки создадим команду ВывестиТаблицу.
Создадим обработчик команды и функцию, которая будет формировать таблицу.
Пересечение областей на табличной документе задается таким способом: «Строки|Колонки». Пишем название одной области, вертикальную черту и название другой области, которая с ней пересекается. Так мы получим именно пересечение областей, с которым дальше и будем работать: выводить и присоединять.
В этой функции делаем два цикла. В первом цикле обходим и создаем строки. Первую ячейку строки (она же первая ячейка колонки) мы выводим в табличный документ методом Вывести, а потом начинаем делать цикл по колонкам и уже присоединяем области по горизонтали, с помощью метода Присоединить. Когда колонки заканчиваются мы выходим из цикла по колонками и начинаем следующую итерацию цикла по строкам, выводя опять новую ячейку ниже по таблице с помощью метода Вывести. И так далее.
В этот раз у нас будет следующий результат.
Видео ниже почти повторяет статью, но в нем есть БОНУС. В конце видео я показываю, как добавить в таблицу вывод шапки и боковика, а также вывожу табличный документ на управляемой форме 1С.
Смотрите в этом видео:
Другие статьи про табличные документы в 1С:
Более подробно и основательно разработка в 1С дается в моей книге: «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Вступайте в мои группы:
One thought on “ Области табличного документа в 1С ”
Добрый вечер. А сделать печать документа с динамическими колонками (которые создаются программно)?
«В документе не хочет печатать 🙁 Выдает ошибку:
Значение не является значением объектного типа (Параметры)
<Документ.КомплектационныйЛист.Форма.ФормаДокумента.Форма(264)>: Заголовок.Параметры.НомерДок = Объект.Номер;
<Документ.КомплектационныйЛист.Форма.ФормаДокумента.Форма(298)>: ТабДок = ПечатьЛистаКомплектацииНаСервере();»
Код:
ТабДок = Новый ТабличныйДокумент;
Макет = Документы.КомплектационныйЛист.ПолучитьМакет(«ПечатьЛистаКомплектации»);
Заголовок = Макет.ПолучитьОбласть(«ГорОблЗаголовок|ВертОблОснова»);
Заголовок.Параметры.НомерДок = Объект.Номер;
Заголовок.Параметры.ДатаДокумента = Формат(Объект.Дата,»ДФ=dd.MM.yyyy»);
ТабДок.Вывести(Заголовок);
Шапка = Макет.ПолучитьОбласть(«ГорОблШапка|ВертОблОснова»);
ШапкаБоковик = Макет.ПолучитьОбласть(«ГорОблШапка|ВертОблКлиент»);
СтрокаБоковик = Макет.ПолучитьОбласть(«ГорОблШапка|ВертОблОснова»);
Боковик = Макет.ПолучитьОбласть(«ГорОблСтрока|ВертОблКлиент»);
ТабДок.Вывести(Шапка);
Для Н = 1 По Объект.СписокКлиентов.Количество() Цикл
ШапкаБоковик.Параметры.КодКлиента = Н.КодКлиента;
ТабДок.Присоединить(ШапкаБоковик);
КонецЦикла;
Для СтрН = 1 По Объект.Товары.Количество() Цикл
СтрокаБоковик.Параметры.НПП = СтрН.НомерСтроки;
СтрокаБоковик.Параметры.Товар = СтрН.Номенклатура.НаименованиеПолное;
СтрокаБоковик.Параметры.СтранаТовара = СтрН.Номенклатура.Родитель;
СтрокаБоковик.Параметры.ПроизводительТовара = СтрН.Номенклатура.Производитель.Наименование;
ТабДок.Вывести(СтрокаБоковик);
Для К = 1 По Объект.СписокКлиентов.Количество() Цикл
Боковик.Параметры.КолВо = 0;
ТабДок.Присоединить(Боковик);
КонецЦикла;
КонецЦикла;
Источник