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

Обновлено: 07.07.2024

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

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

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

Для получения области может быть использовано ее имя. Например:

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

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

Для получения области табличного документа также может быть передан адрес в формате RC :

Наряду с методом ПолучитьОбласть() у табличного документа существует свойство "Область", имеющее аналогичный синтаксис.

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

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

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

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

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

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

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

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

Этот код комментировать не будем, если у вас он вызывает затруднения, то ознакомьтесь с моими предыдущими статьями и видео-уроками.

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

Согласитесь, что такой вариант формирования печатной формы не лицеприятно выглядит.

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

Поясним этот код.

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

В функции мы создали массив, который состоит из области строки и из области подавала таблицы.

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

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

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

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

Это изображение имеет пустой атрибут alt; его имя файла - 1C-в-желтом-цвете-3D-221x300.jpg

Это изображение имеет пустой атрибут alt; его имя файла - 1_в-желтом-цвете-3D-маленькая-221x300.jpg

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

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

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


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

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

Такой вопросик, есть поле табличного документа, я туда вывела информацию(из справочника), нужная мне информация в 2 колонке окрашивается в нужный мне цвет
создала на этой же форме кнопку, которая должна будет у элементов номенклатуры, которые были в поле табличного документа подсвечены (опр цветом) менять родителя на их наименование, то-есть если у меня во-второй колонке есть банк "СберБанк" и он окрашен в красный цвет, то поле родитель должно поменяться на "СберБанк" и при след выводе данное поле будет уже принимать цвет, который задан в коде ранее, для совпадающих наименований 2й колонки и Родителя
не совсем понимаю, как мне по нажатию кнопки получить область с опр окрасной в поле табличного документа и поменять там родителя

(5) сравнивайте значения из таблицы, а не параметры с ними (ОбластьПодвал.Параметры.Банк <> эл.Родитель) . сохраните в ТаблицаЗначений НаименованиеРодителя и НаименованиеЭлемента и их сравнивайте. НайтиПоНаименованию - эта часть скорее всего не нужна вообще.
Еще раз - кнопка перезаписывает справочники, а другая процедура - заполняет таб док, вам надо это разделить, и вызывать одно после другого.

(13) чувствую есть опять ограничение "не используя запроса" ) можно в цикле по всем элементам проверять

примерно так, часть можно пропустить(напр. условие на "ЭтоГруппа"), некоторые данные неплохо бы заранее в тз иметь, такие как "РодительНаименование"

(1) не совсем понятно, что за "родитель" имеется в виду - сразу со скриншотом выставляйте вопрос). Возможно признак цвета стоит хранить в самой ссылке справочника, или таблице, из которой заполняется табдок. Отталкиваться от окрашенной области таб дока, скорее всего, не правильный подход.

(2)У меня есть справочник, в справочнике есть 7 Групп, в каждой из груп находится от 2 до 5 элементов, с помощью выборки я вывожу в поле табличного документа в 5 колонок данные, РасчетныйСчет, КПП, ИНН, Банк, Родитель(Родителем я указала саму группу, где хранятся элементы, то-есть, Р/С - "1234567890", ИНН - 3333003333, КПП - 3333003, Банк - "СберБарнк", Родитель "Папка где хранятся эти элементы", но перед выводом в Табличный документ, я изначально проверяю, совпадает-ли у меня Банк с наименованием Родителя, если нет, то окрашиваю в красный цвет, если еще какие-то не совпадения, то окрашиваю в другой цвет, данные выводятся в поле табличного документа, всё отлично, но вот проблема в том, что я создала кнопку, которая должна менять Родителя в тех полях, которые окрашены красным цветом, я не понимаю, как мне сделать так, чтобы по нажатию кнопки проверялось какой цвет у в строке у поля табличного документа и чтобы Родитель менялся на такую же наименование какое имеет Банк

(3) кнопкой вы перезаписываете элементы справочника (изменяете им наименование или родителя) ? Если так, то после этого заново сформируйте табдок, если раньше окрашивалось по цветам корректно.

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

(5) сравнивайте значения из таблицы, а не параметры с ними (ОбластьПодвал.Параметры.Банк <> эл.Родитель) . сохраните в ТаблицаЗначений НаименованиеРодителя и НаименованиеЭлемента и их сравнивайте. НайтиПоНаименованию - эта часть скорее всего не нужна вообще.
Еще раз - кнопка перезаписывает справочники, а другая процедура - заполняет таб док, вам надо это разделить, и вызывать одно после другого.

(4)Что-то не совсем понимаю, мне нужно заново формирование табличного документа сделать и после уже проверять всё? мне нужно перезаписать именно родителя, то-есть если у меня Банк "СберБанк" и родитель совсем другой, то нужно сделать так, чтобы родитель стал тоже "СберБарк"

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

(7) Окрасятся они по условию несовпадения наименований (после формирования Табдока), а наименования будут по кнопке меняться - запись элементов спр.

(9)Поэтому я изначально и подумала, что нужно просто получить уже окрашенные строки, а после уже перезаписывать

(13) чувствую есть опять ограничение "не используя запроса" ) можно в цикле по всем элементам проверять

примерно так, часть можно пропустить(напр. условие на "ЭтоГруппа"), некоторые данные неплохо бы заранее в тз иметь, такие как "РодительНаименование"

(14)Спасибо большое за помощь, сейчас буду разбираться детальнее, что и куда

(10)Я тут начала делать и поняла, что скорее всего такой вариант будет не правльный, потому что есть 2 условия, если Банк <> Родитель, окрашиваю в красный цвет и если Банк <> Родитель, и родителя с таким наименованием нет в справочнике, если я сравню все значение в Таблице значений, то у меня тогда все сразу сменятся, но нужно сделать именно сейчас кнопку, которая будет замену производить только тех строк, где банк не совпадает с родителем, а где не совпадает и родителя с таким наименованием нет, то они должны остаться такими же как и были

Преподаватель 1С
Санкт-Петербург
зарплата от 100 000 руб. до 120 000 руб.
Временный (на проект)

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

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



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


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

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

Читайте также: