Области табличного документа в 1С

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

Создадим обработку 1С, в которой будем разрабатывать макеты для демонстрации работы с разными областями табличных документов 1С.

И начнем с вертикальных областей.

Вертикальные области табличного документа 1С 8.3

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

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

Макет обработки 1С

Нам нужно создать вертикальную область в этом макете. Для этого выделим те колонки макета табличного документа, в которых мы хотим создать область, и выполним команду «Назначить имя», которая находится по пути «Главное меню – Таблица – Имена».

Колонки табличного документа 1С

В открывшемся окне введем имя области.

Имя области табличного документа 1С

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

Вертикальная область табличного документа 1С

Немного доработаем макет. Объединим ячейки во второй строке. Для этого необходимо их выделить, вызвать контекстное меню, и применить команду «Объединить» этого меню.

Объединение ячеек макета 1С

В объединенных ячейках установим в свойство Заполнение  значение Параметр. У нас в этих ячейках будет выходить какой-то параметр, назовем его НомерКолонки, а также в свойство Горизонтальное положение установим значение Центр.

Свойство ячеек макета 1С

И увеличим размер шрифта.

Шрифт текста в ячейке макета 1С

Всё, с макетом мы закончили.

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

Управляемая форма обработки 1С

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

&НаСервереБезКонтекста
Функция ПолучитьТабличныйДокументВертикальныеОбласти(КоличествоОбластей)

	ТабличныйДокумент = Новый ТабличныйДокумент;
	
    Возврат ТабличныйДокумент;
КонецФункции // ПолучитьТабличныйДокументВертикальныеОбласти()
 

&НаКлиенте
Процедура ВывестиВертикальныеОбласти(Команда)
	Если КоличествоКолонок = 0 Тогда 
		Возврат;
	КонецЕсли;	
	ТабДок = ПолучитьТабличныйДокументВертикальныеОбласти(КоличествоКолонок);
	ТабДок.Показать("Вертикальные области");
КонецПроцедуры

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

&НаСервереБезКонтекста
Функция ПолучитьТабличныйДокументВертикальныеОбласти(КоличествоОбластей)

	ТабличныйДокумент = Новый ТабличныйДокумент;
	
	Макет = Обработки.ПримерТабличныхДокументов.ПолучитьМакет("ВертикальныеОбласти");
	ВертикальнаяОбласть = Макет.ПолучитьОбласть("Колонка");
	
	Для н = 1 по КоличествоОбластей Цикл 
		ВертикальнаяОбласть.Параметры.НомерКолонки = "Колонка №" + Строка(н); 
		ТабличныйДокумент.Присоединить(ВертикальнаяОбласть);
	КонецЦикла;	
	
    Возврат ТабличныйДокумент;
КонецФункции // ПолучитьТабличныйДокументВертикальныеОбласти()

И у нашей обработки будет следующий результат работы.

Вертикальные области табличного документа 1С

Горизонтальные области табличного документа 1С 8.3

В этой задаче будем выводить в табличном документе пронумерованные строки. Для этого создадим макет обработки, который назовем «Горизонтальные области». В этом макете выделим строки, и выполним уже знакомую команду «Назначить имя» («Главное меню – Таблица – Имена»).

Горизонтальные области табличного документа 1С

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

Горизонтальные области табличного документа 1С

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

Ячейки табличного документа 1С

На основной форме обработки создадим новый реквизит КоличествоКолонок (тип Число) и команду ВывестиГоризонтальныеОбласти.

Управляемая форма обработки 1С

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

&НаСервереБезКонтекста
Функция ПолучитьТабличныйДокументГоризонтальныеОбласти(КоличествоОбластей)

	ТабличныйДокумент = Новый ТабличныйДокумент;
	
	Макет = Обработки.ПримерТабличныхДокументов.ПолучитьМакет("ГоризонтальныеОбласти");
	ГоризонтальнаяОбласть = Макет.ПолучитьОбласть("Строки");
	
	Для н = 1 по КоличествоОбластей Цикл 
		ГоризонтальнаяОбласть.Параметры.НомерСтроки = "Строка №" + Строка(н); 
		ТабличныйДокумент.Вывести(ГоризонтальнаяОбласть);
	КонецЦикла;	
	
    Возврат ТабличныйДокумент;
КонецФункции // ПолучитьТабличныйДокументГоризонтальныеОбласти()
 

&НаКлиенте
Процедура ВывестиГоризонтальныеОбласти(Команда)
	Если КоличествоСтрок = 0 Тогда 
		Возврат;
	КонецЕсли;
	
	ТабДок = ПолучитьТабличныйДокументГоризонтальныеОбласти(КоличествоСтрок);
	ТабДок.Показать("Горизонтальные области");
	
КонецПроцедуры 

И результат работы этого кода.

Горизонтальные области табличного документа 1С

Таким образом. Метод Присоединить табличного документа добавляет области по горизонтали таблицы, а метод Вывести – по вертикали.

Научимся выводить таблицу.

Пересечение областей табличного документа 1С 8.3

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

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

Пересечение областей табличного документа 1С

В пересечении областей объединим ячейки, зададим параметр, отцентрируем, а также обведем объединенную ячейку.

Пересечение областей табличного документа 1С

На форме обработки создадим команду ВывестиТаблицу.

Команда формы обработки 1С

Создадим обработчик команды и функцию, которая будет формировать таблицу.

&НаСервереБезКонтекста
Функция ПолучитьТабличныйДокументТаблицу(КоличествоКолонок, КоличествоСтрок)

	ТабличныйДокумент = Новый ТабличныйДокумент;
	
	Макет = Обработки.ПримерТабличныхДокументов.ПолучитьМакет("ПересечениеОбластей");
	ОбластиЯчейки = Макет.ПолучитьОбласть("Строки|Колонки");
	
	Для н = 1 по КоличествоСтрок Цикл 
		ОбластиЯчейки.Параметры.Область = Строка(н) + ".1";
		ТабличныйДокумент.Вывести(ОбластиЯчейки);
		Для к = 2 по КоличествоКолонок Цикл 
			ОбластиЯчейки.Параметры.Область = Строка(н) + "." + Строка(к);
			ТабличныйДокумент.Присоединить(ОбластиЯчейки);
		КонецЦикла;	
	КонецЦикла;	
	
    Возврат ТабличныйДокумент;
КонецФункции 
 

&НаКлиенте
Процедура ВвестиТаблицу(Команда)
	Если КоличествоСтрок = 0 или КоличествоКолонок = 0 Тогда 
		Возврат;
	КонецЕсли;
	
	ТабДок = ПолучитьТабличныйДокументТаблицу(КоличествоКолонок, КоличествоСтрок);
	ТабДок.Показать("Таблица");
КонецПроцедуры

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

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

В этот раз у нас будет следующий результат.

Пересечение областей табличного документа 1С

Видео ниже почти повторяет статью, но в нем есть БОНУС. В конце видео я показываю, как добавить в таблицу вывод шапки и боковика, а также вывожу табличный документ на управляемой форме 1С.

Области табличного документа 1С

Смотрите в этом видео:

Другие статьи про табличные документы в 1С:

Создание макета табличного документа в 1С 8.3

Вывод на печать табличного документа в 1С 8.3

Табличный документ на управляемой форме 1С 8.3

Более подробно и основательно разработка в 1С дается в моей книге: «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu


Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog


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

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

2 Replies to “Области табличного документа в 1С”

  1. Добрый вечер. А сделать печать документа с динамическими колонками (которые создаются программно)?
    «В документе не хочет печатать 🙁 Выдает ошибку:
    Значение не является значением объектного типа (Параметры)
    {Документ.КомплектационныйЛист.Форма.ФормаДокумента.Форма(264)}: Заголовок.Параметры.НомерДок = Объект.Номер;
    {Документ.КомплектационныйЛист.Форма.ФормаДокумента.Форма(298)}: ТабДок = ПечатьЛистаКомплектацииНаСервере();»

    Код:
    ТабДок = Новый ТабличныйДокумент;
    Макет = Документы.КомплектационныйЛист.ПолучитьМакет(«ПечатьЛистаКомплектации»);

    Заголовок = Макет.ПолучитьОбласть(«ГорОблЗаголовок|ВертОблОснова»);
    Заголовок.Параметры.НомерДок = Объект.Номер;
    Заголовок.Параметры.ДатаДокумента = Формат(Объект.Дата,»ДФ=dd.MM.yyyy»);
    ТабДок.Вывести(Заголовок);

    Шапка = Макет.ПолучитьОбласть(«ГорОблШапка|ВертОблОснова»);
    ШапкаБоковик = Макет.ПолучитьОбласть(«ГорОблШапка|ВертОблКлиент»);
    СтрокаБоковик = Макет.ПолучитьОбласть(«ГорОблШапка|ВертОблОснова»);
    Боковик = Макет.ПолучитьОбласть(«ГорОблСтрока|ВертОблКлиент»);

    ТабДок.Вывести(Шапка);
    Для Н = 1 По Объект.СписокКлиентов.Количество() Цикл
    ШапкаБоковик.Параметры.КодКлиента = Н.КодКлиента;
    ТабДок.Присоединить(ШапкаБоковик);
    КонецЦикла;

    Для СтрН = 1 По Объект.Товары.Количество() Цикл
    СтрокаБоковик.Параметры.НПП = СтрН.НомерСтроки;
    СтрокаБоковик.Параметры.Товар = СтрН.Номенклатура.НаименованиеПолное;
    СтрокаБоковик.Параметры.СтранаТовара = СтрН.Номенклатура.Родитель;
    СтрокаБоковик.Параметры.ПроизводительТовара = СтрН.Номенклатура.Производитель.Наименование;
    ТабДок.Вывести(СтрокаБоковик);

    Для К = 1 По Объект.СписокКлиентов.Количество() Цикл
    Боковик.Параметры.КолВо = 0;
    ТабДок.Присоединить(Боковик);
    КонецЦикла;
    КонецЦикла;

    Возврат ТабДок;

  2. Подскажите пожалуйста как реализовать перенос колонок на новую строку???

    Функция Кнопка2НаСервере(КоличествоОбластей)
    ТабличныйДокумент = Новый ТабличныйДокумент;

    Макет = Обработки.ПечатьЦенник.ПолучитьМакет(«ВертикальныеОбласти»);
    ВертикальнаяОбласть = Макет.ПолучитьОбласть(«Колонка»);

    ТекСтрокаНоменклатура = ЭтаФорма.Элементы.Состав.ТекущаяСтрока;

    Для Каждого ТекСтрокаНоменклатура Из Объект.Состав Цикл

    Для н = 1 по КоличествоОбластей Цикл
    ВертикальнаяОбласть.Параметры.НомерКолонки = ТекСтрокаНоменклатура.ТабНоменклатура;
    ВертикальнаяОбласть.Параметры.Цена = «Цена»;
    ТабличныйДокумент.Присоединить(ВертикальнаяОбласть);
    КонецЦикла;

    КонецЦикла;

    Возврат ТабличныйДокумент;
    КонецФункции

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *