Как найти в табличном документе область

В этой статье научимся работать с областями табличного документа в 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

   ale-sarin

12 – 20.06.13 – 18:07

(4)(5) Внимательно смотрел?

КоллекцияОбластейТабличногоДокумента (SpreadsheetDocumentAreaCollection)

Найти (Find)

Синтаксис:

Найти(<НаименованиеОбласти>)

Параметры:

<НаименованиеОбласти> (обязательный)

Тип: Строка.

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

Возвращаемое значение:

Тип: ОбластьЯчеекТабличногоДокумента; РисунокТабличногоДокумента, Неопределено.

Если указанная область отсутствует, то возвращается значение Неопределено.

Описание:

Осуществляет поиск области ячеек табличного документа или рисунка табличного документа по имени.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.

Пример:

Макет = ЭтотОбъект.ПолучитьМакет(“СоставПоказателей”);

ТекОбласть = Макет.Области.Найти(ИмяОбласти);

   ale-sarin

18 – 20.06.13 – 18:29

(17) Ну как не судить строго, если лентяй, а?

ТабличныйДокумент (SpreadsheetDocument)

НайтиТекст (FindText)

Синтаксис:

НайтиТекст(<Строка>, <Начало>, <Где>, <ИскатьПоСтрокам>, <ЯчейкаЦеликом>, <ИскатьВперед>, <ИгнорироватьРегистр>)

Параметры:

<Строка> (обязательный)

Тип: Строка.

Искомый текст.

<Начало> (необязательный)

Тип: ОбластьЯчеекТабличногоДокумента.

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

<Где> (необязательный)

Тип: ОбластьЯчеекТабличногоДокумента.

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

<ИскатьПоСтрокам> (необязательный)

Тип: Булево.

Определяет последовательность обхода ячеек при поиске.

Истина – искать по текущей строке, затем переходить на следующую и т.д. в общем направлении поиска, Ложь – искать по текущей колонке, затем переходить на следующую и т.д. в общем направлении поиска.

Значение по умолчанию: Истина

<ЯчейкаЦеликом> (необязательный)

Тип: Булево.

Истина – искать только такие ячейки, в которых с искомым текстом совпадает весь текст ячейки, Ложь – искать часть текста ячейки.

Значение по умолчанию: Ложь

<ИскатьВперед> (необязательный)

Тип: Булево.

Определяет направление поиска: Истина – искать вперед; Ложь – искать назад.

Значение по умолчанию: Истина

<ИгнорироватьРегистр> (необязательный)

Тип: Булево.

Истина – без учета регистра, Ложь – поиск с учетом регистра.

Значение по умолчанию: Ложь

Возвращаемое значение:

Тип: ОбластьЯчеекТабличногоДокумента; РисунокТабличногоДокумента.

Область, содержащая искомый текст. Если текст не найден, то возвращается значение Неопределено.

Описание:

Осуществляет поиск текста в ячейках табличного документа.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.

Пример:

// чтобы посмотреть работу данного метода, добавьте

// следующие строки в конец примера метода НачатьГруппуСтрок()

Отдел = “Итого2”;

Область=ТабДок.НайтиТекст(Отдел);

Если ТипЗнч(Область)=Тип(“Неопределено”) Тогда

   Сообщить(“Значение не найдено!”);

Иначе

   Поз = Найти(Область.Имя,”C”);

   Имя= Лев(Область.Имя,Поз)+

       Строка(Число(Прав(Область.Имя,СтрДлина(Область.Имя)-Поз))+1);

   Сообщить(“Итог по отделу 2 = “+ТабДок.Область(Имя).Текст);

КонецЕсли;

   GANR

19 – 20.06.13 – 18:30

Никаких лишних попыток – лично меня они достали в режиме “Остановка по ошибке” останавливать код, где не надо.

(0) К слову, альтернативно, если бы не было метода (12) можно было бы проверить есть ли в объекте поле с определенным именем, это делается так:

ИдентификаторНезаполненности = Новый УникальныйИдентификатор;

СтруктураПроверки = Новый Структрура(“ТвояОбласть”, ИдентификаторНезаполненности);

ЗаполнитьЗначенияСвойств(СтруктураПроверки, ТвойОбъектСИменамиОбластей);

Если СтруктураПроверки.ТвояОбласть <> ИдентификаторНезаполненности Тогда

  // такая область есть

Иначе

  // такой области нет

КонецЕсли;

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

Раздел
Общие объекты
Подразделы
Табличный документ
ТипСтатьи
Методы

Синтаксис:

Найти(<НаименованиеОбласти>)
Параметры:

<НаименованиеОбласти> (обязательный)

Тип: Строка.
Имя области ячеек табличного документа или рисунка.
Возвращаемое значение:

Тип: ОбластьЯчеекТабличногоДокумента; РисунокТабличногоДокумента; Неопределено.
Если указанная область отсутствует, то возвращается значение Неопределено.
Описание:

Осуществляет поиск области ячеек табличного документа или рисунка табличного документа по имени.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Пример:

Макет = ЭтотОбъект.ПолучитьМакет("СоставПоказателей");
ТекОбласть = Макет.Области.Найти(ИмяОбласти);

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

2017-12-19T18:34:15+00:00<<< XML ZIP WORD DBF HTTP FTP ТекстовыйДокумент ТабличныйДокумент

Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)
Как создать табличный макет в 1С.

Оглавление (нажмите, чтобы раскрыть)

&НаКлиенте
Процедура ФормируемПечатнуюФормуИзТабличногоМакета(Команда)
 
    // В макетах обработки у нас определен макет с именем
    // ТабличныйМакет и типом ТабличныйДокумент.
    // Вот как создаются такие макеты:
    // helpme1s.ru/kak-sozdat-tablichnyj-maket-v-1s
 
    // Сформируем печатную форму на основе этого макета.
 
    // Важно понимать, что сама печатная форма - это тоже
    // табличный документ, просто составленный из кусочков других
    // документов (макетов).
 
    // Печатная форма формируется на сервере, а затем
    // возвращается обратно на клиент...
 
    ПечатнаяФорма = СформироватьПечатнуюФормуИзТабличногоДокумента();
 
    НастроитьКолонтитулы(ПечатнаяФорма);
    НастроитьПараметрыПечати(ПечатнаяФорма);
 
    // ... чтобы вывести её пользователю в виде отдельного окна
 
    ПечатнаяФорма.Показать(
        "Наш отчёт"  // заголовок окна с отчётом
    );
 
    // после показа пользователь может сам и распечатать
    // и сохранить эту форму, но ...
 
    // .. мы можем программно сами сохранить форму в файл в нужном формате
 
    //ПечатнаяФорма.Записать(
    //    СлужебныйНаКлиенте.СоздатьПапкуДляЭкспериментов() + "Наш отчёт.xls",
    //    ТипФайлаТабличногоДокумента.XLS
    //);
 
    // .. или сразу отправить её на принтер
 
    //ПечатнаяФорма.Напечатать(
    //    РежимИспользованияДиалогаПечати.НеИспользовать);
 
КонецПроцедуры
 
/// Как сформировать печатную форму из табличного документа в 1с 8.3, 8.2
 
&НаСервере
Функция СформироватьПечатнуюФормуИзТабличногоДокумента()
 
    // Получаем макет, сохраненный в нашей обработке.
    Макет = Обработки.ОбработкаДляИспытаний.ПолучитьМакет("ТабличныйМакет");    
 
    // Вот так можно изменить табличный макет программно,
    // уже после его создания.
    МеняемТабличныйДокументПрограммно(Макет);
 
    ПечатнаяФорма = Новый ТабличныйДокумент;
 
    // # Шапка документа #
 
    // Получаем область "Шапка" из макета.
    Шапка = Макет.ПолучитьОбласть("Шапка");
    // Заполняем её параметры.
    Шапка.Параметры.Номер = 1;
    Шапка.Параметры.Дата = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");    
    // Выводим её в нашу печатную форму.
    ПечатнаяФорма.Вывести(Шапка);
 
    // # Заголовок табличной части #
    ТабличнаяЧастьЗаголовок = Макет.ПолучитьОбласть("ТабличнаяЧастьЗаголовок");
    ПечатнаяФорма.Вывести(ТабличнаяЧастьЗаголовок);
 
    // # Строки табличной части #
 
    // Если при выводе строк наша таблица не поместится на страницу -
    // будем повторять заголовок таблицы в начале страницы.
    // Выводим с 3 по 4 строки - это как раз заголовок таблицы.
    // Использовать область "ТабличнаяЧастьЗаголовок" не получится,
    // так как нужны именно строки целиком.
    ПечатнаяФорма.ПовторятьПриПечатиСтроки = Макет.Область(3,,4);
 
    ТабличнаяЧастьСтрока = Макет.ПолучитьОбласть("ТабличнаяЧастьСтрока");
    СсылкаНаКлубнику = Справочники.Номенклатура.НайтиПоНаименованию("Клубника");
 
    // Сгруппируем строки таблицы в сворачивающийся блок.
    ПечатнаяФорма.НачатьГруппуСтрок("Товар", Истина);
 
    Для Шаг = 1 По 100 Цикл
        ТабличнаяЧастьСтрока.Параметры.Номенклатура = СсылкаНаКлубнику;
        ТабличнаяЧастьСтрока.Параметры.Количество = Шаг;
 
        // В макете мы выделили ячейку с номенклатурой и прописали
        // её параметр расшифровки "РасшифровкаНоменклатуры".
        // Заполним этот параметр, чтобы когда пользователь кликнет
        // два раза по товару - открылась его форма.
        // Дополнительный пример обработки расшифровки - см. ниже,
        // когда мы выводим табличный документ в поле формы.
        ТабличнаяЧастьСтрока.Параметры.РасшифровкаНоменклатуры = СсылкаНаКлубнику;
 
        ПечатнаяФорма.Вывести(ТабличнаяЧастьСтрока);
    КонецЦикла;
 
    // Закончим начатую группировку.
    ПечатнаяФорма.ЗакончитьГруппуСтрок();    
 
    Возврат ПечатнаяФорма;
 
КонецФункции
 
/// Как настроить колонтитулы печатной формы в 1с 8.3, 8.2
 
&НаКлиенте
Процедура НастроитьКолонтитулы(ПечатнаяФорма)
 
    // Верхний колонтитул.
    ПечатнаяФорма.ВерхнийКолонтитул.Выводить = Истина;
    ПечатнаяФорма.ВерхнийКолонтитул.НачальнаяСтраница = 1;
    ПечатнаяФорма.ВерхнийКолонтитул.ТекстВЦентре = "Этот отчёт сделан нами для тестов";
    ПечатнаяФорма.ВерхнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
 
    // Нижний колонтитул.
    ПечатнаяФорма.НижнийКолонтитул.Выводить = Истина;
    ПечатнаяФорма.НижнийКолонтитул.ТекстСправа = "[&НомерСтраницы] из [&СтраницВсего]";        
    ПечатнаяФорма.НижнийКолонтитул.ТекстВЦентре = "[&Дата][&Время]";
 
    // Использованные выше конструкции [&НомерСтраницы] и т.п. предопределены
    // платформой.
 
КонецПроцедуры
 
/// Как настроить параметры печати табличного документа в 1с 8.3, 8.2
 
&НаКлиенте
Процедура НастроитьПараметрыПечати(ПечатнаяФорма)
 
    // Можно установить конкретный масштаб:
    ПечатнаяФорма.МасштабПечати = 60; // 60%
    // Или указать вариант "по ширине страницы"
    ПечатнаяФорма.АвтоМасштаб = Истина;
 
    // Поля страницы
    ПечатнаяФорма.ПолеСлева = 10;
    ПечатнаяФорма.ПолеСверху = 10;
    ПечатнаяФорма.ПолеСправа = 10;
    ПечатнаяФорма.ПолеСнизу = 10;
 
    // Партрет или альбом (ландшафт).
    ПечатнаяФорма.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
 
    // Двусторонняя печать позволяет очень экономить бумагу.
    ПечатнаяФорма.ДвусторонняяПечать = ТипДвустороннейПечати.Нет;
 
    // Количество страниц на листе при выводе документа на печать.
    // 1 - одна страницы, 2 - две, 0 - автоматическое определение.
    ПечатнаяФорма.ЭкземпляровНаСтранице = 1;
 
    // Количество копий документа, которое нужно напечатать.
    ПечатнаяФорма.КоличествоЭкземпляров = 1;    
 
    // Если печатаем несколько экземпляров - очень удобная галка.
    ПечатнаяФорма.РазборПоКопиям = Истина;
 
    // Не будем отображать сетку пользователю.
    ПечатнаяФорма.ОтображатьСетку = Ложь;
 
    // А также запретим редактирование ячеек отчёта.
    ПечатнаяФорма.ТолькоПросмотр = Истина;
 
    // Зафиксируем верхние 4 строки таблицы, чтобы
    // пользователю было удобно прокручивать
    // вниз печатную форму.
    ПечатнаяФорма.ФиксацияСверху = 4;
    ПечатнаяФорма.ФиксацияСлева = 0;    
 
КонецПроцедуры
 
/// Как изменить табличный документ программно в 1с 8.3, 8.2
 
&НаСервере
Процедура МеняемТабличныйДокументПрограммно(Макет)
 
    ОбластьЯчеек = Макет.Область("Шапка");
    ОбластьЯчеек.ЦветТекста = Новый Цвет(255, 0, 0);
    ОбластьЯчеек.ГраницаСверху =
        Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.БольшойПунктир, 2);
    ОбластьЯчеек.ГраницаСлева =
        Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.БольшойПунктир, 2);
    ОбластьЯчеек.ГраницаСправа =
        Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.БольшойПунктир, 2);
    ОбластьЯчеек.ГраницаСнизу =
        Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.БольшойПунктир, 2);    
    ОбластьЯчеек.Примечание.Текст = "Привет";    
 
    // и т.д. и т.п.
 
КонецПроцедуры
 
/// Как в обработать расшифровку в отчёте в 1с 8.3, 8.2
 
&НаКлиенте
Процедура ПолеСПечатнойФормойОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
 
    // Дополнительная обработка расшифровки возможна только
    // для табличного документа, который выведен на форму.
 
    // Это событие мы прописали для элемента формы, который связан
    // с реквизитом, имеющим тип "ТабличныйДокумент".
 
    Сообщить("Обработка расшифровки");
    Сообщить(Элемент.ТекущаяОбласть.Имя);
    Сообщить(Расшифровка);
 
    // Мы не хотим, чтобы открывалось значение расшифровки,
    // которое мы программно прописали в печатной форме.
    // Остановим дальнейшую обработку расшифровки.
    СтандартнаяОбработка = Ложь;
 
КонецПроцедуры
 
/// Как вывести табличный документ на форму в 1с 8.3, 8.2
 
&НаКлиенте
Процедура ВыводимТабличныйДокументНаФорму(Команда)
 
    // Предварительно создаём на форме реквизит с именем
    // "ПолеСПечатнойФормой" и типом ТабличныйДокумент,
    // а затем перетаскиваем его в элементы формы.
 
    ВыводимТабличныйДокументНаФормуНаСервере();
 
КонецПроцедуры
 
&НаСервере
Процедура ВыводимТабличныйДокументНаФормуНаСервере()
 
    // Формируем табличный документ.
    ПечатнаяФорма = СформироватьПечатнуюФормуИзТабличногоДокумента();
 
    // Выводим его в соотв. реквизит формы.
    ПолеСПечатнойФормой.Очистить();    
    ПолеСПечатнойФормой.Вывести(ПечатнаяФорма);
    // После этого он автоматически отобразится
    // в поле формы, с которым он связан.
 
КонецПроцедуры
 
/// Как использовать табличный документ для ввода данных в 1с 8.3, 8.2
 
&НаКлиенте
Процедура НастраиваемТаблицуДляВводаДанных(Команда)
 
    // В начале выводим в поле формы табличный документ
    // из макета с именем "ТабличныйМакетДляВвода"
 
    НастраиваемТаблицуДляВводаДанныхНаСервере();
 
    // После этого пользователь должен ввести значение,
    // а мы его получим в коде ниже.
 
КонецПроцедуры
 
&НаСервере
Процедура НастраиваемТаблицуДляВводаДанныхНаСервере()
 
    ПолеСПечатнойФормой.Очистить();
    Макет = Обработки.ОбработкаДляИспытаний.ПолучитьМакет("ТабличныйМакетДляВвода");
    Форма = Макет.ПолучитьОбласть("ФормаВвода");    
    ПолеСПечатнойФормой.Вывести(Форма);
 
КонецПроцедуры
 
&НаКлиенте
Процедура УзнатьКакойЖеТоварВыбралПользователь(Команда)
 
    // Имя ячейки ввода мы задали в макете.
    ПолеВвода = ПолеСПечатнойФормой.Область("ПолеТовар");    
 
    Если ПолеВвода.Значение.Пустая() Тогда
        Сообщить("Укажите товар в табличной форме ввода!");
    Иначе
        Сообщить("Вы выбрали " + ПолеВвода.Значение);
    КонецЕсли;
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере

Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)
Как создать табличный макет в 1С.

Работа с табличным документом в языке 1С 8.3, 8.2 (в примерах)

<<< XML ZIP WORD DBF HTTP FTP ТекстовыйДокумент ТабличныйДокумент

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

Владимир Милькин

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

Нажмите одну из кнопок, чтобы поделиться:

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

Основной код вынесен в общий модуль ОбластиМакета:

Функция ЭтоСтрока(Область)
 
 Возврат Область.Лево = 0 И Область.Право = 0;
 
КонецФункции

Функция ЭтоСтолбец(Область)
 
 Возврат Область.Верх = 0 И Область.Низ = 0;
 
КонецФункции

Функция ПолучитьОбласти(Макет, ПересечениеОбластей = Ложь) Экспорт
 
 Перем мПересечения;
 
 Если ПересечениеОбластей Тогда
  мПересечения = Новый Массив;
  Для Каждого Область Из Макет.Области Цикл
   Если ЭтоСтолбец(Область) Тогда
    мПересечения.Добавить(Область.Имя);
   КонецЕсли;
  КонецЦикла;
 КонецЕсли;
 
 СтруктураОбластей = Новый Структура;
 Для Каждого Область Из Макет.Области Цикл
  Если ПересечениеОбластей Тогда
   Если ЭтоСтолбец(Область) Тогда
    Продолжить;
   КонецЕсли;
   Если ЭтоСтрока(Область) Тогда
    Для Каждого Пересечение Из мПересечения Цикл
     СтруктураОбластей.Вставить(Область.Имя + Пересечение, Макет.ПолучитьОбласть(Область.Имя + "|" + Пересечение));
    КонецЦикла;
   Иначе
    СтруктураОбластей.Вставить(Область.Имя, Макет.ПолучитьОбласть(Область.Имя));
   КонецЕсли;
  Иначе
   СтруктураОбластей.Вставить(Область.Имя, Макет.ПолучитьОбласть(Область.Имя));
  КонецЕсли;
 КонецЦикла;
 
 Возврат СтруктураОбластей;
 
КонецФункции

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

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

Теперь посмотрим в отладчике, какие данные попадают в структуру при разных значениях флага “ПолучитьПересечения”.

ПолучитьПересечения = Ложь
ПолучитьПересечения = Истина

Привычный код

ОблСтрока1 = Макет.ПолучитьОбласть("Строка1");
//.. прочий код
ОблСтрока1.Параметры.ПП = 1;
 

при использовании моего способа аналогичен

Обл.Строка1.Параметры.ПП = 1;
 

где Обл – структура областей, полученная через функцию ПолучитьОбласти.

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