Опубликовано: 14.01.2022

Работы с табличными формами

Основным назначением табличного документа в системе «1С:Предприятие» является создание печатных форм отчётов и первичных документов. Для работы с табличными документами в системе используется специальный агрегатный тип данных "Таблица".

Рассмотрим основные моменты работы с табличными документами.

Контекст работы с таблицами

Обычно объект типа "Таблица" создаётся с помощью функции СоздатьОбъект(), в которую в качестве единственного параметра передаётся ключевое слово «Таблица» (англоязычный синоним — «Table»). Ссылка на объект присваивается переменной. Для обращения к атрибуту или для вызова метода объекта "Таблица", имя атрибута или метода (с указанием необходимых параметров) следует записать через точку после идентификатора переменной.

Пример создания объекта «Таблица»:

ПечФорма = СоздатьОбъект("Таблица");

в англоязычном варианте:

PrnForm = CreateObject("Table");

Исключение составляет случай, когда табличный документ размещается непосредственно в форме отчёта или обработки. Тогда для обращения к объекту "Таблица" используется доступный только для чтения атрибут Таблица контекста Модуля формы отчёта (обработки).

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

Исходная таблица-шаблон

Печатные формы формируются при помощи встроенного языка с использованием агрегатного объекта "Таблица". Причём чаще всего формирование печатной формы происходит на основе некоторой исходной таблицы-шаблона (см. рис. ниже), которая целиком или посекционно переносится в результирующую (виртуальную) таблицу. Исходная таблица является заготовкой, содержащей текстовые фрагменты отчёта, рамки, рисунки и т.д. В ячейках исходной таблицы может размещаться обычный текст или выражения встроенного языка 1С, которые будут вычислены в процессе формирования результирующей печатной формы.

Исходная таблица

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

Формирование простейших печатных форм с использованием исходной таблицы-шаблона

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

Исходная таблица-шаблон

Процедура формирования такой печатной формы выглядит следующим образом:

Процедура Печать()

   Таб = СоздатьОбъект("Таблица");
   // Инициализируем исходную таблицу
   ИмяФайлаПечатнойФормы = КаталогИБ()+"ExtForms\PrnForms\1cbro.mxl";
   Если ФС.СуществуетФайл(ИмяФайлаПечатнойФормы) = 1 Тогда
      Таб.ИсходнаяТаблица(ИмяФайлаПечатнойФормы);
   Иначе
      Таб.ИсходнаяТаблица("РКО");
   КонецЕсли;

   ПредставлениеГода = Лев(ДатаГод(ДатаДок), 3);

   Таб.Вывести();   // переносим исходную таблицу в результирующую

   // Устанавливаем опции печати и выводим печатную форму на экран
   Пропись("");
   Таб.Опции(0, 0, 0, 0, "ОпцииПечатиРКО", "ОкноРКО");
   Таб.ТолькоПросмотр(1);
   Таб.Показать("Печать РКО", "");

КонецПроцедуры

Посекционное формирование печатных форм с использованием исходной таблицы-шаблона

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

Исходная таблица-шаблон

Пример исходного кода для посекционного формирования печатной формы:

Процедура ПечатьНакладной()

   Таб = СоздатьОбъект("Таблица");
   // Инициализируем исходную таблицу
   Таб.ИсходнаяТаблица("Накладная");
   // Переносим в результирующую таблицу секцию "Шапка"
   Таб.ВывестиСекцию("Шапка");

   // Обрабатываем табличную часть документа
   ВыбратьСтроки();
   Пока ПолучитьСтроку() = 1 Цикл
      // Переносим в результирующую таблицу секцию "Строка"
      Таб.ВывестиСекцию("Строка");
   КонецЦикла;
   // Переносим в результирующую таблицу секцию "Подвал"
   Таб.ВывестиСекцию("Подвал");

   // Устанавливаем опции печати и выводим печатную форму на экран
   Таб.Опции(0, 0, 0, 0, "ОпцииПечатиНакладной", "ОкноНакладная");
   Таб.ТолькоПросмотр(1);
   Таб.Показать("Печать накладной", "");

КонецПроцедуры

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

Исходная таблица-шаблон

Причём, для переноса первой части секции (обычно той, которая займёт в результирующей таблице крайнее левое положение) используется всё тот же метод ВывестиСекцию(), в котором в качестве параметра следует указать имена пересекающихся секций, поставив между ними символ «|» (вертикальная черта), например, "Шапка|Список". А для переноса каждой последующей части секции (то есть тех, что будут добавляться правее) используется метод ПрисоединитьСекцию(), в котором в качестве параметра также следует указать имена соответствующих пересекающихся секций (горизонтальной и вертикальной), поставив между ними символ «|», например, "Шапка|Оклад".

Пример:

Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("СписокСотрудников");

// Формируем "шапку" списка
Таб.ВывестиСекцию("Шапка|Список");
Если ПоказыватьОклад = 1 Тогда
   Таб.ПрисоединитьСекцию("Шапка|Оклад");
КонецЕсли;

// Формируем табличную часть
СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.ВыбратьЭлементы();
Ном = 1;
Пока СпрСотр.ПолучитьЭлемент() = 1 Цикл
   ФИОПолностью = СпрСотр.Наименование;
   Таб.ВывестиСекцию("Строка|Список");
   Если ПоказыватьОклад = 1 Тогда
      ОклСотр = СпрСотр.Оклад;
      Таб.ПрисоединитьСекцию("Строка|Оклад");
   КонецЕсли;
   Ном = Ном + 1;   // наращиваем счетчик
КонецЦикла;

// Устанавливаем опции печати
// и выводим печатную форму на экран
Таб.Опции(0,0,0,0,"ОпцииПечатиСписка","ОкноСписка");
Таб.ТолькоПросмотр(1);
Таб.Показать("Печать списка", "");

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

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

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

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

Рассмотрим следующий пример:

Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("ПечатьСчета");
Шапка = Таб.ПолучитьСекцию("Шапка");
Шапка.Клиент.Текст = Контрагент;
Таб.ВывестиСекцию("Шапка");
    . . .
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
   Строка = Таб.ПолучитьСекцию("Строка");
   Строка.Товар.Текст = Товар;
       . . .
   Таб.ВывестиСекцию("Строка");
КонецЦикла;
Таб.Показать();

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

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

Формирование печатных форм без использования исходной таблицы-шаблона

Данный способ используется в основном для создания универсальных отчётов, для которых невозможно определить заранее их внешний вид. А потому, с точки зрения написания алгоритма, этот способ является наиболее трудоёмким. Для работы с будущей таблицей здесь используется метод Область(), позволяющий по координатам строки и столбца формируемой таблицы обращаться к объекту типа "ОбластьТаблицы". Атрибуты и методы этого объекта позволяют задать содержимое и элементы оформления ячеек (текст, цвета, рамки и т.д.).

Рассмотрим фрагмент примера печати документа этим способом:

Таб = СоздатьОбъект("Таблица");
Таб.Область(2, 3).Текст = Контрагент;
    . . .
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
   Таб.Область(НомерСтроки + 3, 3).Текст = Товар;
       . . .
КонецЦикла;
Таб.Показать();

Таблицы для ввода данных

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

Для создания исходной таблицы-шаблона, поддерживающей режим ввода данных, при создании новой формы необходимо в главном меню Конфигуратора последовательно выбирать пункты «Действия -> Свойства формы»:

Просмотр свойств формы

А в появившемся окне в параметре «Использовать таблицу» выбрать вариант «Для ввода данных»:

Свойства формы

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

Свойства ячейки таблицы

Для ячеек, в которые предполагается вводить данные, на вкладке «Текст» следует выключить признак «Защита».

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

Ввод значения в ячейку таблицы

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

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

Атрибуты объекта "Таблица"

Получить значение встроенного объекта таблицы (объекта типа "Картинка", "Диаграмма" или "OLE объект") позволяет доступный только для чтения атрибут ТекущийОбъект (англоязычный синоним — CurrentObj). Он доступен только в выражении (и в теле процедур, которые вызываются в выражении), которое записывается в Конфигураторе в свойствах встроенного объекта таблицы типа "Картинка", "Диаграмма" или "OLE объект"Свойства -> Дополнительные -> Текст»). Этот атрибут позволяет использовать в программном модуле полученное значение объекта для манипуляций с ним, например, для взаимодействия с внешним приложением через механизм OLE Automation.

Допустим, в таблицу для построения диаграммы внедрён OLE-объект MicrosoftGraf97. В свойствах этого объекта («Свойства -> Дополнительные -> Текст») в Конфигураторе записано выражение:

ПостроитьГрафик(Таб.ТекущийОбъект, Запрос)

В программном модуле, в процедуре ПостроитьГрафик(), можно записать алгоритм построения графика, непосредственно управляя внешним приложением MicrosoftGraf97:

Процедура ПостроитьГрафик(График, Запрос)
   Datasheet = График.Application.Datasheet;
   XCounter = 2;
   YCounter = 2;
   Пока Запрос.Группировка("Клиент") = 1 Цикл
      Если Запрос.Клиент.ЭтоГруппа() = 1 Тогда
         Продолжить;
      КонецЕсли;
      range = Datasheet.Cells(1, XCounter);
      range.Value = Запрос.Клиент.Наименование;
      Пока Запрос.Группировка("Товар") = 1 Цикл
         range = Datasheet.Cells(YCounter, 1);
         range.Value = Запрос.Товар.Наименование;
         range = Datasheet.Cells(YCounter, XCounter);
         range.Value = Запрос.ПродСум;
         YCounter = YCounter + 1;
      КонецЦикла;
      YCounter = 2;
      XCounter = XCounter + 1;
   КонецЦикла;
КонецПроцедуры

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

Методы объекта "Таблица"

Общие методы таблиц

Назначить исходную таблицу-шаблон позволяет метод ИсходнаяТаблица() (англоязычный синоним — SourceTable()).

Синтаксис метода:

ИсходнаяТаблица(<ИмяТаблицы>)

где <ИмяТаблицы> — строковое выражение, содержащее имя исходной таблицы формы, определённое в Конфигураторе, или имя файла, содержащего таблицу.

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

Пример использования метода:

Процедура Печать()
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("Т-5");
   Таб.Вывести();
   Таб.Опции(0,0,0,0, "ОпцииПечатиТ5", "ОкноТ5");
   Таб.ПараметрыСтраницы(1,,,0,0,0,0,0,0);
   Таб.ТолькоПросмотр(1);
   Таб.Показать("Приказ",)
КонецПроцедуры

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

Таб = СоздатьОбъект("Таблица");

ИмяФайлаПечатнойФормы = КаталогИБ() + "ExtForms\PrnForms\1cbsf189.mxl";
ИмяТаблицы = "СФ189";

Если ФС.СуществуетФайл(ИмяФайлаПечатнойФормы) = 1 Тогда
   Таб.ИсходнаяТаблица(ИмяФайлаПечатнойФормы);
Иначе
   Таб.ИсходнаяТаблица(ИмяТаблицы);
КонецЕсли;

Очистить текущее содержимое табличного документа позволяет метод Очистить() (англоязычный синоним — Clear()). Он используется, когда необходимо повторно заполнить содержимое табличного документа, выведенного в окне ранее методом Показать(). Использование метода Очистить() имеет смысл, если сам объект типа "Таблица" не уничтожался после первого заполнения. Параметры у метода отсутствуют.

Пример использования:

Перем Таб;

// ****************************************

   . . .

Процедура Сформировать()
   Если ДатаНачала > ДатаКонца Тогда
      Предупреждение("Неправильно задан период формирования отчета!
                     |Дата начала больше даты окончания периода." );
      Возврат;
   КонецЕсли;

   Если (ТипЗначенияСтр(Таб) = "Таблица") И
        (ТекущийВариантФормирования = ВариантФормирования) И
        ((Обновить = 1) ИЛИ (Обновить = 2)) Тогда

      Таб.Очистить();

   Иначе
      Таб = СоздатьОбъект("Таблица");
   КонецЕсли;

   Если ВариантФормирования = 1 Тогда
      КнигаПродаж(ДатаНачала, ДатаКонца);
   ИначеЕсли ВариантФормирования = 2 Тогда
      ЖурналУчета();
   ИначеЕсли ВариантФормирования = 3 Тогда
      ДополнительныйЛист();
   КонецЕсли;

   Если Обновить = 2 Тогда
      СтрокаДействийФормы = "#Закрыть";
   КонецЕсли;

КонецПроцедуры   // Сформировать()

Узнать количество столбцов в секции таблицы-шаблона позволяет метод ШиринаСекции() (англоязычный синоним — SectionWidth()). Возвращаемым значением метода является числовое значение.

Синтаксис метода:

ШиринаСекции(<ИмяСекции>)

где <ИмяСекции> — строковое выражение — название секции таблицы.

Пример использования:

ШирС = Таб.ШиринаСекции("БоковикОтчета");

Узнать количество строк в секции таблицы-шаблона позволяет метод ВысотаСекции() (англоязычный синоним — SectionHeight()). Возвращаемым значением метода является числовое значение.

Синтаксис метода:

ВысотаСекции(<ИмяСекции>)

где <ИмяСекции> — строковое выражение — название секции таблицы.

Пример использования:

ВысС = Таб.ВысотаСекции("ШапкаОтчета");

Узнать текущее количество столбцов в результирующей таблице позволяет метод ШиринаТаблицы() (англоязычный синоним — TableWidth()). Параметров у этого метода нет. Возвращаемым значением метода является числовое значение.

Пример использования:

Таб.ОбластьПечати(, 2, , Таб.ШиринаТаблицы());

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

Пример использования:

Таб.Опции(0,0, Таб.ВысотаТаблицы(), 0);

Вставить в результирующую таблицу разделитель страниц позволяет метод НоваяСтраница() (англоязычный синоним — NewPage()).

Синтаксис метода:

НоваяСтраница(<НомерСтроки>)

где <НомерСтроки> — номер строки, после которой начнётся новая страница. Параметр является необязательным. Если параметр не указан, то новая страница вставляется по текущей высоте таблицы.

Пример использования:

Таб.ВывестиСекцию("Титул");
Таб.НоваяСтраница();

Вставить в результирующую таблицу разделитель колонок позволяет метод НоваяКолонка() (англоязычный синоним — NewColumn()).

Синтаксис метода:

НоваяКолонка(<НомерСтолбца>)

где <НомерСтолбца> — номер столбца, после которого начнётся новая колонка. Если параметр не указан, то новая колонка вставляется по текущей ширине таблицы.

Пример записи метода:

Таб.НоваяКолонка();

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

Синтаксис метода:

Использоватьформат(<ЗначениеФормата>)

где <ЗначениеФормата> — строковое выражение, содержащее форматную строку, подобную той, что используется в системной функции Формат(). Параметр является необязательным и не используется, когда метод необходим для получения текущего формата.

Пример использования метода:

Таб.ИсходнаяТаблица("Таблица");
Таб.ВывестиСекцию("Шапка"); 
Таб.ИспользоватьФормат("Ч15.2-,");
Результат = СоздатьОбъект("ТаблицаЗначений");
   . . .
Результат.ВыбратьСтроки();
Пока Результат.ПолучитьСтроку() = 1 Цикл
   Таб.ВывестиСекцию("ОС");
КонецЦикла;

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

Свойства ячейки таблицы

Методы для формирования результирующей таблицы на основании исходного шаблона

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

Пример использования метода:

Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("catalog");
// Переносим исходную таблицу в результирующую
Таб.Вывести();
Таб.ТолькоПросмотр(0);
// Выводим таблицу на экран
Таб.Показать("Каталог", "catalog.mxl");
Таб.ТолькоПросмотр(1);

Выполнить перенос именованной секции из исходной таблицы-шаблона в результирующую таблицу позволяет метод ВывестиСекцию() (англоязычный синоним — PutSection()). Если в качестве параметра метода задано строковое значение имени секции, то ячейки таблицы, имеющие тип «Шаблон» или «Выражение», при переносе будут заполнены соответствующими данными. Новая секция помещается со следующей строки вслед за последней перенесённой секцией, начиная с первой колонки.

Синтаксис метода:

ВывестиСекцию(<Ceкция>)

где <Ceкция> — выражение строкового типа, задающее имя переносимой секции, или значение типа "Секция", полученное при помощи метода ПолучитьСекцию().

В выражении <Ceкция> можно задавать имена двух секций (горизонтальной и вертикальной), разделяя их знаком «|» (вертикальная черта). При этом перенесена будет прямоугольная область исходной таблицы, являющаяся пересечением первой и второй указанных секций:

// формируем "шапку" списка
Таб.ВывестиСекцию("Шапка|Список");
Если ПоказыватьОклад = 1 Тогда
   Таб.ПрисоединитьСекцию("Шапка|Оклад");
КонецЕсли;
Исходная таблица-шаблон

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

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

  • <   — перенести «заголовочную» часть (с начала внешней секции до начала вложенной секции);
  • >   — перенести «подвальную» часть (с конца вложенной секции до конца внешней секции);
  •   — перенести среднюю часть (собственно вложенную секцию).
Исходная таблица-шаблон

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

// Переносим верхнюю часть секции
Таб.ВывестиСекцию("Внешняя<");
// Переносим вложенную секцию
Таб.ВывестиСекцию("Внешняя-");
// Переносим нижнюю часть секции
Таб.ВывестиСекцию("Внешняя>");

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

Если ПоВсемПодразделениям = 1 Тогда
   Таб.ВывестиСекцию("Шапка<|Список");
   Таб.ВывестиСекцию("Шапка>|Список");
   Таб.ВывестиСекцию("Заголоки|Список");
Иначе
   Таб.ВывестиСекцию("Шапка<|Список<");
   Таб.ПрисоединитьСекцию("Шапка<|Список>");
   Таб.ВывестиСекцию("Шапка-|Список<");
   Таб.ПрисоединитьСекцию("Шапка-|Список>");
   Таб.ВывестиСекцию("Заголоки|Список<");
   Таб.ПрисоединитьСекцию("Заголоки|Список>");
КонецЕсли;
Исходная таблица-шаблон

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

Синтаксис метода:

ПрисоединитьСекцию(<ОбластьCeкции>)

где <ОбластьCeкции> — выражение строкового типа, задающее область переносимой секции, или значение типа "Секция", полученное при помощи метода ПолучитьСекцию(). Область секции в параметре задаётся именами пересекающихся секций (горизонтальной и вертикальной), разделёнными знаком «|» (вертикальная черта).

Пример использования метода:

// формируем "шапку" списка
Таб.ВывестиСекцию("Шапка|Список");
Если ПоказыватьОклад = 1 Тогда
   Таб.ПрисоединитьСекцию("Шапка|Оклад");
КонецЕсли;
Исходная таблица-шаблон

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

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

  • <   — перенести «заголовочную» часть (с начала внешней секции до начала вложенной секции);
  • >   — перенести «подвальную» часть (с конца вложенной секции до конца внешней секции);
  •   — перенести среднюю часть (собственно вложенную секцию).

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

Если ПоВсемПодразделениям = 1 Тогда
   Таб.ВывестиСекцию("Шапка<|Список");
   Таб.ВывестиСекцию("Шапка>|Список");
   Таб.ВывестиСекцию("Заголоки|Список");
Иначе
   Таб.ВывестиСекцию("Шапка<|Список<");
   Таб.ПрисоединитьСекцию("Шапка<|Список>");
   Таб.ВывестиСекцию("Шапка-|Список<");
   Таб.ПрисоединитьСекцию("Шапка-|Список>");
   Таб.ВывестиСекцию("Заголоки|Список<");
   Таб.ПрисоединитьСекцию("Заголоки|Список>");
КонецЕсли;
Исходная таблица-шаблон

Методы для получения доступа к ячейкам таблицы

Получить ссылку на именованную секцию исходной таблицы-шаблона (то есть на объект типа "СекцияТаблицы") позволяет метод ПолучитьСекцию() (англоязычный синоним — GetSection()). Ячейки секции, имеющие тип «Шаблон» или «Выражение», при получении секции будут заполнены соответствующими данными.

Синтаксис метода:

ПолучитьСекцию(<ИмяСекции>)

где <ИмяСекции> — выражение строкового типа, задающее имя получаемой секции.

Для получения ссылки на прямоугольную область секции, получающуюся в результате пересечения горизонтальной и вертикальной секций, в параметре метода указываются имена этих секций, разделённые символом «|» (вертикальная черта). Например, "Шапка|Список".

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

  • <   — получить «заголовочную» часть (с начала внешней секции до начала вложенной секции);
  • >   — получить «подвальную» часть (с конца вложенной секции до конца внешней секции);
  •   — получить среднюю часть (собственно вложенную секцию).

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

// Выводим секцию таблицы
Секция = Таб.ПолучитьСекцию("Документ<|ДокументВерт<");
Таб.ВывестиСекцию(Секция);

Как я уже говорил ранее, метод ПолучитьСекцию() обычно используется при программном заполнении ячеек таблицы. Ссылка на объект типа "СекцияТаблицы" даёт возможность обращаться непосредственно к ячейкам или группам ячеек секции, которые после присвоения им уникальных имён (имена должны быть предварительно присвоены в Конфигураторе!) становятся атрибутами объекта "СекцияТаблицы":

Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("ПечатьСчета");
Шапка = Таб.ПолучитьСекцию("Шапка");
// Обращаемся к ячейке или группе ячеек с именем "Клиент"
Шапка.Клиент.Текст = Контрагент;
Таб.ВывестиСекцию("Шапка");
    . . .
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
   Строка = Таб.ПолучитьСекцию("Строка");
   // Обращаемся к ячейке или группе ячеек с именем "Товар"
   Строка.Товар.Текст = Наименование;
       . . .
   Таб.ВывестиСекцию("Строка");
КонецЦикла;
Таб.Показать();

Получить значение из текущей ячейки таблицы, позволяет метод ЗначениеТекущейЯчейки() (англоязычный синоним — ValueOfCurrentCell()). Значение получается путём вычисления выражения, заданного в Конфигураторе («Свойства ячейки -> вкладка «Текст» -> поле «Значение»»).

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

Синтаксис метода:

ЗначениеТекущейЯчейки(<Адрес>)

где <Адрес> — идентификатор переменной, куда система возвратит адрес текущей ячейки в формате RnCm (здесь n, m — номер строки и колонки соответственно). Параметр является необязательным.

Пример записи метода:

Док = Таб.ЗначениеТекущейЯчейки();

Получить ссылку на область выходной таблицы или таблицы в режиме ввода данных позволяет метод Область() (англоязычный синоним — Area()). Для метода предусмотрено два синтаксиса.

Синтаксис 1:

Область(<Адрес>)

где <Адрес> — строковое выражение, задающее имя области или адреса левого верхнего и правого нижнего углов области, записанные в формате RnCm:RxCy, где n, x, m и y — номера крайних строк и колонок соответственно. Параметр является необязательным.

Синтаксис 2:

Область(<R1>, <С1>, <R2>, <С2>)

где

  • <R1> — числовое выражение — номер первой строки области. Параметр является необязательным;
  • <C1> — числовое выражение — номер первой колонки области. Параметр является необязательным;
  • <R2> — числовое выражение — номер последней строки области. Параметр является необязательным;
  • <C2> — числовое выражение — номер последней колонки области. Параметр является необязательным.

Значения <R1>, <C1>, <R2> и <C2> представляют собой координаты верхнего левого и нижнего правого углов области соответственно. Если значения <R2> и <C2> отсутствуют, то область задана единственной ячейкой. Если номера строк или номера столбцов отсутствуют, то область задана диапазоном столбцов или строк соответственно. Если метод вызван без параметров, то область задана всей таблицей.

Пример использования:

Таб = СоздатьОбъект("Таблица");
Таб.Открыть("tabl_l.mxl");
ВыбОбласть = Таб.Область("R1C1:R8C16");

Метод Область() используется преимущественно при работе с таблицами для ввода данных и при формировании выходных таблиц без использования исходных таблиц-шаблонов для получения доступа к свойствам отдельных ячеек или групп ячеек:

Таб = СоздатьОбъект("Таблица");
Таб.Область(2, 3).Текст = Контрагент;
    . . .
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
   Таб.Область(НомерСтроки + 3, 3).Текст = Товар;
       . . .
КонецЦикла;
Таб.Показать();

Методы для установки опций показа и печати форм

Установить опции показа печатной формы документа или отчёта позволяет метод Опции() (англоязычный синоним — Options()).

Синтаксис метода:

Опции(<Сетка>, <Заголовки>, <ФиксацияСтр>,
      <ФиксацияСтолб>, <ОпцииПечати>, <РазмерОкна>,
      <ЧерноБелый>, <НаправлениеПерехода>)

где

  • <Сетка> — числовое выражение — флаг вывода сетки: 1 — показывать, 0 — не показывать. Параметр является необязательным. Значение по умолчанию — 1;
  • <Заголовки> — числовое выражение — флаг вывода заголовков строк и столбцов: 1 — показывать, 0 — не показывать. Параметр является необязательным. Значение по умолчанию — 1;
  • <ФиксацияСтр> — числовое выражение — количество фиксируемых строк, которые будут оставаться неподвижными при прокрутке таблицы. Параметр является необязательным. Значение по умолчанию — 0;
  • <ФиксацияСтолб> — числовое выражение — количество фиксируемых столбцов, которые будут оставаться неподвижными при прокрутке таблицы. Параметр является необязательным. Значение по умолчанию — 0;
  • <ОпцииПечати> — строковое выражение — идентификатор сохраняемого набора опций печати для данной печатной формы. Параметр является необязательным. Значение по умолчанию — "" (пустая строка) — в этом случае используются системные опции печати по умолчанию;
  • <РазмерОкна> — строковое выражение — идентификатор набора сохраняемых значений размеров окна для данной печатной формы. Параметр является необязательным. Если он указан, то система будет сохранять размер окна и использовать его при следующем открытии данной печатной формы. Значение по умолчанию — "" (пустая строка) — в этом случае размеры окна не запоминаются;
  • <ЧерноБелый> — число — флаг отключения цветности: 1 — черно-белый просмотр; 0 — обычный режим просмотра. Параметр является необязательным. Значение по умолчанию — 0;
  • <НаправлениеПерехода> — число: 1 — переход по строкам (т.е. при вводе данных в ячейки при нажатии клавиши Enter будет автоматически выполняться переход к следующей доступной для ввода ячейке в этой строке, а если таковой нет, то к самой левой доступной для ввода ячейке следующей строки); 2 — переход по столбцам (т.е. при вводе данных в ячейки при нажатии клавиши Enter будет автоматически выполняться переход к следующей доступной для ввода ячейке в этом столбце, а если таковой нет, то к самой верхней доступной для ввода ячейке следующего столбца); 3 — при вводе данных в ячейки автоматический переход при нажатии клавиши Enter выполняться не будет. Параметр является необязательным. Значение по умолчанию — 1.

Примечание: Уникальное имя набора опций печати, указанное в параметре <ОпцииПечати>, позволяет для данной печатной формы на разных рабочих местах сохранять и использовать разные наборы опций печати. Для каждого конкретного рабочего места опции устанавливаются пользователем в окне диалога (см. рис. ниже), которое вызывается через главное меню программы: «Файл -> Параметры страницы…».

Окно 'Параметры страницы'

Пример использования метода:

// Вывод формы отчета в окно просмотра и редактирования
Таб.Опции(0,0,5,0,"ОтчетПоОстаткам");
Таб.ТолькоПросмотр(1);
Таб.Показать("Остатки товаров на складах", "");

Запретить редактирование печатной формы в окне при просмотре позволяет метод ТолькоПросмотр() (англоязычный синоним — ReadOnly()). Возвращаемым значением метода является число — значение режима редактирования таблицы на момент до исполнения метода.

Синтаксис метода:

ТолькоПросмотр(<Флаг>)

где <Флаг> — числовое выражение, устанавливающее режим редактирования. Если значение равно 1, устанавливается режим «Только просмотр»; если 0 — допускается редактирование. Параметр является необязательным. По умолчанию, для табличных документов устанавливается режим с возможностью редактирования.

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

Пример использования:

Таб.ВывестиСекцию("Подвал");
Таб.ТолькоПросмотр(1);
Таб.Опции(0,0,0,0,"ПечатьАктСверкиРасчетов","ОкноАктСверкиРасчетов");
Таб.ОбластьПечати(1,2,1,1);
Таб.Показать("Акт сверки на " + Формат(КонДата, "Д ДДММГГГГ"));

Примечание: При необходимости пользователь может отключить режим «Только просмотр», выбрав последовательно пункты меню «Таблица -> Только просмотр», либо с помощью соответствующей кнопки () на панели редактирования таблиц.

Установить режим полной защиты таблицы от редактирования и копирования (в том числе через буфер обмена) позволяет метод Защита() (англоязычный синоним — Protection()). Возвращаемым значением метода является текущее значение флага защиты таблицы на момент до исполнения метода. Если не использовать метод Защита(), то таблица выводится в незащищенном режиме.

Синтаксис метода:

Защита(<Флаг>)

где <Флаг> — числовое выражение — флаг защиты: 1 — установить защиту; 0 — снять защиту. Параметр является необязательным. Значение по умолчанию — 1.

Пример записи метода:

Таб.Защита(1);

Задать область печати табличного документа из программного кода позволяет метод ОбластьПечати() (англоязычный синоним — PrintRange()). Необходимость в использовании данного метода обычно возникает, когда необходимо «отсечь» какие-то участки таблицы, не предназначенные для печати (например, строку стандартного отчёта с кнопками «Настройки» и «Обновить»).

Синтаксис метода:

ОбластьПечати(<Верх>, <Лево>, <Низ>, <Право>)

где

  • <Верх> — числовое выражение — номер верхней строки таблицы, выводимой на печать. Параметр является необязательным. Если параметр не указан, то печать начинается с первой строки;
  • <Лево> — числовое выражение — номер крайнего левого столбца, выводимого на печать. Параметр является необязательным. Если параметр не указан, то печать начинается с первого столбца;
  • <Низ> — числовое выражение – номер нижней строки таблицы, выводимой на печать. Параметр является необязательным. Если параметр не указан, то печатается всё до конца;
  • <Право> — числовое выражение — номер крайнего правого столбца, выводимого на печать. Параметр является необязательным. Если параметр не указан, то печатается всё до последнего столбца, содержащего что-то для печати.

Пример использования:

Таб.Опции(0, 0, 5, 0, "ОстаткиТоваров");
Таб.ОбластьПечати(1, 2, Таб.ВысотаТаблицы(),);
Таб.ТолькоПросмотр(1);
Таб.Показать("Остатки товаров на складах", "");

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

Синтаксис метода:

ПовторятьПриПечатиСтроки(<НачСтрока>, <КонСтрока>)

где

  • <НачСтрока> — числовое выражение — номер первой строки для повторения;
  • <КонСтрока> — числовое выражение — номер последней строки для повторения.

Пример:

Таб.Опции(0,0,13,2, "Параметры печати книги продаж");
Таб.ОбластьПечати(2);
Таб.ПовторятьПриПечатиСтроки(9, 13);
Таб.ПараметрыСтраницы(2,,,,,,,,,1);
Таб.ТолькоПросмотр(1);
Таб.Показать("Книга продаж","");

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

Синтаксис метода:

ПовторятьПриПечатиСтолбцы(<НачСтолбец>, <КонСтолбец>)

где

  • <НачСтолбец> — числовое выражение — номер первого столбца для повторения;
  • <КонСтолбец> — числовое выражение — номер последнего столбца для повторения.

Пример записи метода:

Таб.ПовторятьПриПечатиСтолбцы(1, Таб.ШиринаСекции("БоковикОтчета"));

Установить параметры страницы, которые будут использоваться каждый раз при выводе её на печать, позволяет метод ПараметрыСтраницы() (англоязычный синоним — PageSetup()).

Синтаксис метода:

ПараметрыСтраницы(<Ориентация>, <Масштаб>, <ПечатьКопий>,
          <ПолеСлева>, <ПолеСправа>, <ПолеСверху>,
          <ПолеСнизу>, <КолонтитулСверху>, <КолонтитулСнизу>, 
          <Автомасштаб>, <ФлагЧБПечати>, <Принтер>)

где

  • <Ориентация> — числовое выражение — ориентация вывода на печать: 1 — портрет; 2 — ландшафт. Параметр является необязательным. По умолчанию используются настройки принтера;
  • <Масштаб> — числовое выражение — масштаб (в процентах) вывода на печать. Параметр является необязательным. По умолчанию используются настройки принтера;
  • <ПечатьКопий> — числовое выражение — режим вывода нескольких копий на печать: 0 — выводить сначала первые страницы всех копий, затем вторые и т.д.; 1 — выводить страницы копий по порядку (разобрать). Параметр является необязательным. По умолчанию используются настройки принтера;
  • <ПолеСлева> — числовое выражение — расстояние (в миллиметрах) от левого края страницы. Параметр является необязательным. По умолчанию используются настройки принтера;
  • <ПолеСправа> — числовое выражение — расстояние (в миллиметрах) от правого края страницы. Параметр является необязательным. По умолчанию используются настройки принтера;
  • <ПолеСверху> — числовое выражение — расстояние (в миллиметрах) от верхнего края страницы. Параметр является необязательным. По умолчанию используются настройки принтера;
  • <ПолеСнизу> — числовое выражение — расстояние (в миллиметрах) от нижнего края страницы. Параметр является необязательным. По умолчанию используются настройки принтера;
  • <КолонтитулСверху> — числовое выражение — размер (в миллиметрах) верхнего колонтитула. Параметр является необязательным. По умолчанию используются настройки принтера;
  • <КолонтитулСнизу> — числовое выражение — размер (в миллиметрах) нижнего колонтитула. Параметр является необязательным. По умолчанию используются настройки принтера;
  • <Автомасштаб> — числовое выражение, указывающее режим автоматического подбора масштаба для размещения документа при печати на листе по ширине. Возможные значения: 1 — включить; 0 — выключить. Параметр является необязательным. Значение по умолчанию — 0;
  • <ФлагЧБПечати> — число. Возможные значения: 1 — черно-белая печать; 0 — обычный режим печати. Параметр является необязательным. Значение по умолчанию — 0;
  • <Принтер> — строка как в стандартном диалоге печати. Параметр является необязательным.

Пример использования:

Таб.Опции(0,0,13,2, "Параметры печати книги продаж");
Таб.ОбластьПечати(2);
Таб.ПовторятьПриПечатиСтроки(9, 13);
Таб.ПараметрыСтраницы(2,,,,,,,,,1);
Таб.ТолькоПросмотр(1);
Таб.Показать("Книга продаж","");

Установить количество печатаемых экземпляров табличного документа позволяет метод КоличествоЭкземпляров() (англоязычный синоним — NumberOfCopies()). Возвращаемым значением метода является текущее заданное количество печатаемых экземпляров на момент до исполнения метода.

Синтаксис метода:

КоличествоЭкземпляров(<Количество>)

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

Примечание: Если для текущей таблицы используется набор опций печати, установленный методом Опции(), то метод КоличествоЭкземпляров() следует вызывать только после вызова метода Показать(), так как иначе будут действовать автоматически устанавливаемые настройки печати.

Пример использования метода:

Если СразуНаПринтер = 0 Тогда
   Таблица.Опции(0,0,0,0,"Печать_штатного_расписания");
   Таблица.ПараметрыСтраницы(2,,,0,0,0,0,,,,1,);
   Таблица.ТолькоПросмотр(1);
   Таблица.Показать("Унифицированная форма № Т-3");
Иначе
   Таблица.ПараметрыСтраницы(2,,,0,0,0,0,,,,1,);
   Таблица.КоличествоЭкземпляров(КолЭкз);
   Таблица.Напечатать(0);
КонецЕсли;

Установить количество печатаемых экземпляров на странице позволяет метод ЭкземпляровНаСтранице() (англоязычный синоним — CopyesPerPage()). Возвращаемым значением метода является текущее заданное количество печатаемых экземпляров на странице на момент до исполнения метода.

Синтаксис метода:

ЭкземпляровНаСтранице(<Колич>)

где <Колич> — числовое выражение — количество печатаемых экземпляров на странице. Может принимать значения:

  • 1 — один экземпляр на странице;
  • 2 — два экземпляра на странице;
  • 0 — автоматический режим размещения двух экземпляров на странице исходя из размеров документа.

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

Пример записи метода:

Таб.ЭкземпляровНаСтранице(2);

Методы для вывода печатной формы на экран или на принтер

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

Синтаксис метода:

Показать(<Заголовок>, <ИмяФайла>, <Активизировать>)

где

  • <Заголовок> — строковое выражение, задающее заголовок окна, в котором будет выведен табличный документ. Параметр является необязательным. Если он не указан, в заголовке будет выводиться слово «Таблица»;
  • <ИмяФайла> — строковое выражение, задающее имя файла для сохранения табличного документа (на случай, если документ будет сохраняться пользователем). Параметр является необязательным. Если параметр указан, то при закрытии окна табличного документа система предложит сохранить документ в файл с указанным именем. Если параметр опущен или имеет пустое значение, то при закрытии окна табличного документа система не будет предлагать сохранить данные в файл;
  • <Активизировать> — необязательный параметр. Числовое выражение — признак активизации окна. Может принимать следующие значения:
    • 1 (значение по умолчанию) — активизировать окно табличного документа;
    • 0 — не активизировать окно табличного документа (окно открывается, но не становится активным);
    • –1 — закрыть окно, если оно открыто.

Пример использования:

Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("РКО");

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

// Устанавливаем опции печати и выводим
// печатную форму на экран
Таб.Опции(0,0,0,0,"ОпцииПечатиРКО","ОкноРКО");
Таб.ТолькоПросмотр(1);
Заголовок = "Расчетно-кассовый ордер N" + НомерДок +
            " от " + ДатаДок + "г.";
Таб.Показать(Заголовок, "");

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

// Для работы с табличным документом создаем
// объект типа "Таблица"
Таб = СоздатьОбъект("Таблица");
// Открываем табличный документ из файла
Таб.Открыть("\v7\db\src.mox");
// Показываем табличный документ
Таб.Показать();

Отправить на печать сформированную печатную форму позволяет метод Напечатать() (англоязычный синоним — Print()).

Синтаксис метода:

Напечатать(<Флаг>)

где <Флаг> — числовое выражение — признак запроса диалога печати. Возможные значения: 1 — запрашивать диалог печати для выбора принтера и установки дополнительных параметров печати; 0 — не запрашивать диалог печати.

Пример:

// Создаем объект типа "Таблица"
Таб = СоздатьОбъект("Таблица");
// Открываем табличный документ из файла
Таб.Открыть("D:\1sbdb\output.mox");
// Отправляем табличный документ на печать
Таб.Напечатать(0);

Методы для работы с файлами таблиц

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

Синтаксис метода:

Открыть(<ИмяФайла>)

где <ИмяФайла> — строковое выражение содержащее полное имя файла.

Пример использования:

Таб = СоздатьОбъект("Таблица");
Таб.Открыть("\v7\db\src.mox");
Таб.Показать();

Записать табличный документ в указанный файл позволяет метод Записать() (англоязычный синоним — Write()).

Синтаксис метода:

Записать(<ИмяФайла>, <ТипФайла>)

где

  • <ИмяФайла> — строковое выражение содержащее полное имя файла;
  • <ТипФайла> — числовое или строковое выражение, определяющее тип файла. Параметр является необязательным. Возможные значения:
    • 0 или "MXL" — внутренний формат 1С (значение, используемое по умолчанию);
    • 1 или "XLS" — формат Microsoft Excel’95;
    • 2 или "НТМ" или "HTML" — формат HTML;
    • 3 или "ТХТ" — файл текстового формата.

Пример использования:

Таб = СоздатьОбъект("Таблица");
Таб.Открыть("tabl_l.mxl");
Таб.Записать("tabl_2.mxl");
Таб.Записать("tabl_2", "XLS");

Атрибуты и методы секций таблицы

Атрибуты объекта "СекцияТаблицы"

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

Таб = СоздатьОбъект("Таблица");
Таб.Открыть("tabl_l.mxl");
Шапка = Таб.ПолучитьСекцию("ЗаголовокОтчета");
// Обращаемся к ячейке или группе ячеек с именем "Заглавие"
Шапка.Заглавие.Текст = "Товарный отчет";
Таб.ВывестиСекцию(Шапка);
    . . .

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

Методы объекта "СекцияТаблицы"

Получить ссылку на объект типа "ОбластьТаблицы" позволяет метод Область() (англоязычный синоним — Area()) объекта "СекцияТаблицы". От одноимённого метода объекта "Таблица" он отличается только тем, что возвращает значение области таблицы только в пределах текущей секции. Для метода также предусмотрено два синтаксиса.

Синтаксис 1:

Область(<Адрес>)

где <Адрес> — строковое выражение, задающее имя области или адреса левого верхнего и правого нижнего углов области, записанные в формате RnCm:RxCy, где n, x, m и y — номера крайних строк и колонок соответственно. Параметр является необязательным.

Синтаксис 2:

Область(<R1>, <С1>, <R2>, <С2>)

где

  • <R1> — числовое выражение — номер первой строки области. Параметр является необязательным;
  • <C1> — числовое выражение — номер первой колонки области. Параметр является необязательным;
  • <R2> — числовое выражение — номер последней строки области. Параметр является необязательным;
  • <C2> — числовое выражение — номер последней колонки области. Параметр является необязательным.

Значения <R1>, <C1>, <R2> и <C2> представляют собой координаты верхнего левого и нижнего правого углов области соответственно. Если значения <R2> и <C2> отсутствуют, то область задана единственной ячейкой. Если номера строк или номера столбцов отсутствуют, то область задана диапазоном столбцов или строк соответственно. Если метод вызван без параметров, то область задана всей таблицей.

Пример использования:

Таб = СоздатьОбъект("Таблица");
Таб.Открыть("tabl_l.mxl");
Шапка = Таб.ПолучитьСекцию("ЗаголовокОтчета");
// Обращаемся к ячейке или группе ячеек с именем "Заглавие"
ВыбОбласть = Шапка.Область("Заглавие");
ВыбОбласть.Текст = "Товарный отчет";
Таб.ВывестиСекцию(Шапка);
    . . .

Для наглядности сравните это пример с примером, приведённым выше при рассмотрении атрибутов объекта "СекцияТаблицы".

Атрибуты и методы областей таблиц

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

Атрибуты объекта "ОбластьТаблицы"

Прочитать или установить значение текста области (аналогично тому, как в Конфигураторе интерактивно задают значение формулы в свойствах ячейки таблицы) позволяет атрибут Текст объекта "ОбластьТаблицы". Англоязычный синоним атрибута — Text.

Пример использования атрибута:

Таб = СоздатьОбъект("Таблица");
Таб.Открыть("tabl_l.mxl");
ВыбОбласть = Таб.Область("R1C1");
ВыбОбласть.Текст = "Товарный отчет";

Методы объекта "ОбластьТаблицы"

Установить расшифровку ячейки таблицы позволяет метод Расшифровка() (англоязычный синоним — Details()). Если вы помните, в режиме Конфигуратора данное свойство доступно через окно свойств ячейки на вкладке «Текст»:

Свойства ячейки таблицы

Синтаксис метода Расшифровка():

Расшифровка(<Значение>, <ФлагДляВсейОбласти>)

где

  • <Значение> — значение расшифровки области;
  • <ФлагДляВсейОбласти> — число: 0 — обычный режим; 1 — установить данную расшифровку для всей области (обычно в качестве такой области выступает строка); 2 — не вызывать расшифровку для данной ячейки. Параметр является необязательным. Значение по умолчанию — 0.

Пример использования метода:

Таб = СоздатьОбъект("Таблица");
Таб.Открыть("tabl_l.mxl");
ВыбОбласть = Таб.Область("R8C4");
ВыбОбласть.Расшифровка(ВыбДокумент, 1);

Для справки: Расшифровка — это дополнительная возможность, которая никак не влияет на внешний вид таблицы при просмотре и печати, а используется для создания связанных отчётов и открытия различных объектов, отображаемых в отчёте. При просмотре сформированного отчёта в режиме «только просмотр» при подведении курсора к ячейке, у которой заполнено значение расшифровки, курсор принимает форму крестика с лупой и при двойном щелчке мышью или нажатии клавиши Enter выполняется отработка значения расшифровки.

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

Установить шрифт для области таблицы и получить имя шрифта, установленного ранее, позволяет метод Шрифт() (англоязычный синоним — Font()).

Синтаксис метода:

Шрифт(<ИмяШрифта>)

где <ИмяШрифта> — строковое выражение, задающее имя шрифта. После имени шрифта через запятую может быть указан набор символов. Основные наборы символов: 204 — русский; 238 — европейский; 186 — балтийский; 161 — греческий; 162 — турецкий. Параметр является необязательным. Если параметр опущен, то шрифт области не изменяется.

Пример использования метода:

Таб = СоздатьОбъект("Таблица");
Таб.Открыть("tabl_l.mxl");
ВыбОбласть = Таб.Область("R8C4");
ВыбОбласть.Шрифт("Arial, 204");

Примечание: В Конфигураторе данное свойство доступно через окно свойств ячейки на вкладке «Шрифт»:

Свойства ячейки таблицы

Установить размер шрифта для области и получить размер шрифта, установленный ранее, позволяет метод РазмерШрифта() (англоязычный синоним — FontSize()).

Синтаксис метода:

РазмерШрифта(<Размер>)

где <Размер> — числовое выражение, задающее размер шрифта. Параметр является необязательным. Если параметр опущен, то размер шрифта области не изменяется.

Пример использования метода:

Таб = СоздатьОбъект("Таблица");
Таб.Открыть("tabl_l.mxl");
ВыбОбласть = Таб.Область("R8C4");
ВыбОбласть.Шрифт("Arial");
ВыбОбласть.РазмерШрифта(10);

Установить/отменить жирное начертание шрифта для области и получить тип начертания шрифта, установленный ранее, позволяет метод Полужирный() (англоязычный синоним — Bold()).

Синтаксис метода:

Полужирный(<ТипНачертания>)

где <ТипНачертания> — число: 1 — жирный шрифт; 0 — не жирный шрифт. Параметр является необязательным. Если параметр опущен, то начертание шрифта для области не изменяется.

Пример использования метода:

Таб = СоздатьОбъект("Таблица");
Таб.Открыть("tabl_l.mxl");
ВыбОбласть = Таб.Область("R8C4");
ВыбОбласть.Шрифт("Arial");
ВыбОбласть.РазмерШрифта(10);
ВыбОбласть.Полужирный(1);

Установить/отменить курсивное начертание шрифта для области и получить тип начертания шрифта, установленный ранее, позволяет метод Курсив() (англоязычный синоним — Italic()).

Синтаксис метода:

Курсив(<ТипНачертания>)

где <ТипНачертания> — число: 1 — курсивное начертание; 0 — обычное начертание. Параметр является необязательным. Если параметр опущен, то начертание шрифта для области не изменяется.

Пример использования метода:

Таб = СоздатьОбъект("Таблица");
Таб.Открыть("tabl_l.mxl");
ВыбОбласть = Таб.Область("R8C4");
ВыбОбласть.Шрифт("Arial");
ВыбОбласть.РазмерШрифта(10);
ВыбОбласть.Курсив(1);

Установить/отменить подчёркивание текста для области и получить признак наличия подчёркивания, установленного ранее, позволяет метод Подчеркнутый() (англоязычный синоним — Underline()).

Синтаксис метода:

Подчеркнутый(<Признак>)

где <Признак> — число: 1 — подчёркнутый текст; 0 — не подчёркнутый текст. Параметр является необязательным. Если параметр опущен, то оформление текста области не меняется.

Пример использования метода:

Таб = СоздатьОбъект("Таблица");
Таб.Открыть("tabl_l.mxl");
ВыбОбласть = Таб.Область("R8C4");
ВыбОбласть.Шрифт("Arial");
ВыбОбласть.РазмерШрифта(10);
ВыбОбласть.Подчеркнутый(1);

Установить тип вертикального выравнивания текста в области и получить тип выравнивания, установленный ранее, позволяет метод ВертикальноеПоложение() (англоязычный синоним — VerticalAlign()).

Синтаксис метода:

ВертикальноеПоложение(<Положение>)

где <Положение> — число: 1 — сверху; 2 — снизу; 3 — по центру. Параметр является необязательным. Если параметр опущен, то тип вертикального выравнивания текста в области не меняется.

Пример использования метода:

Таб = СоздатьОбъект("Таблица");
Таб.Открыть("tabl_l.mxl");
ВыбОбласть = Таб.Область("R8C4");
ВыбОбласть.Шрифт("Arial");
ВыбОбласть.РазмерШрифта(10);
ВыбОбласть.Подчеркнутый(1);
ВыбОбласть.ВертикальноеПоложение(3);

Примечание: В Конфигураторе данное свойство доступно через окно свойств ячейки на вкладке «Положение»:

Свойства ячейки таблицы

Установить тип горизонтального выравнивания текста в области и получить тип выравнивания, установленный ранее, позволяет метод ГоризонтальноеПоложение() (англоязычный синоним — HorizontalAlign()).

Синтаксис метода:

ГоризонтальноеПоложение(<Положение>)

где <Положение> — число: 1 — слева; 2 — справа; 3 — по центру; 4 — по ширине; 5÷8 — по выделенным столбцам: слева/справа/по центру/по ширине. Параметр является необязательным. Если параметр опущен, то тип горизонтального выравнивания текста области не меняется.

Пример использования метода:

Таб = СоздатьОбъект("Таблица");
Таб.Открыть("tabl_l.mxl");
ВыбОбласть = Таб.Область("R8C4");
ВыбОбласть.Шрифт("Arial");
ВыбОбласть.РазмерШрифта(10);
ВыбОбласть.Подчеркнутый(1);
ВыбОбласть.ГоризонтальноеПоложение(3);

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

Пример использования метода:

Таб = СоздатьОбъект("Таблица");
Таб.Открыть("tabl_l.mxl");
ВыбОбласть = Таб.Область("R1C1:R8C4");
ВыбОбласть.Объединить();

Установить способ отображения текста в области и узнать способ отображения, установленный ранее, позволяет метод Контроль() (англоязычный синоним — Control()).

Синтаксис метода:

Контроль(<СпособОтображения>)

где <СпособОтображения> — число: 1 — Авто; 2 — Обрезать; 3 — Забивать; 4 — Переносить; 5 — Красный; 6 — Забивать+Красный. Параметр является необязательным. Если параметр опущен, то способ отображения текста в области не меняется.

Пример использования метода:

Таб = СоздатьОбъект("Таблица");
Таб.Открыть("tabl_l.mxl");
ВыбОбласть = Таб.Область("R8C4");
ВыбОбласть.Шрифт("Arial");
ВыбОбласть.РазмерШрифта(10);
ВыбОбласть.Подчеркнутый(1);
ВыбОбласть.ГоризонтальноеПоложение(3);
ВыбОбласть.Контроль(4);

Примечание: В Конфигураторе данное свойство доступно через окно свойств ячейки на вкладке «Текст» (поле «Контроль»):

Свойства ячейки таблицы

Установить рамки и их тип для всех ячеек области позволяет метод Рамка() (англоязычный синоним — Border()).

Синтаксис метода:

Рамка(<РамкаСлева>, <РамкаСверху>, <РамкаСправа>, <РамкаСнизу>)

где <РамкаСлева>, <РамкаСверху>, <РамкаСправа>, <РамкаСнизу> — числа, характеризующие тип рамки для разных сторон ячеек: 0 — рамки нет; 1 — очень тонкая; 2 — тонкая точечная; 3 — тонкая сплошная; 4 — средняя сплошная; 5 — толстая сплошная; 6 — двойная; 7 — тонкий средний пунктир; 8 — тонкий длинный пунктир; 9 — толстый пунктир. Параметры являются необязательными. Если какой-либо параметр опущен, то соответствующая рамка ячеек области не изменяется.

Пример использования метода:

Таб = СоздатьОбъект("Таблица");
Таб.Открыть("tabl_l.mxl");
ВыбОбласть = Таб.Область("R8C4");
ВыбОбласть.Шрифт("Arial");
ВыбОбласть.РазмерШрифта(10);
ВыбОбласть.Подчеркнутый(1);
ВыбОбласть.ГоризонтальноеПоложение(3);
ВыбОбласть.Контроль(4);
ВыбОбласть.Рамка(0,3,3,3);

Примечание: В Конфигураторе данное свойство доступно через окно свойств ячейки на вкладке «Рамка»:

Свойства ячейки таблицы

Установить рамку для одной из сторон области и её тип, а также узнать о наличии и типе рамки, установленный ранее, позволяют методы РамкаСверху() (англ. синоним — TopBorder()), РамкаСнизу() (англ. синоним — BottomBorder()), РамкаСлева() (англ. синоним — LeftBorder()) и РамкаСправа() (англ. синоним — RightBorder()).

Синтаксис методов:

РамкаСверху(<Тип>)

РамкаСнизу(<Тип>)

РамкаСлева(<Тип>)

РамкаСправа(<Тип>)

где <Тип> — число, характеризующее тип рамки: 0 — рамки нет; 1 — очень тонкая; 2 — тонкая точечная; 3 — тонкая сплошная; 4 — средняя сплошная; 5 — толстая сплошная; 6 — двойная; 7 — тонкий средний пунктир; 8 — тонкий длинный пунктир; 9 — толстый пунктир. Параметр является необязательным. Если параметр опущен, то соответствующая рамка области не меняется.

Пример использования:

Таб = СоздатьОбъект("Таблица");
Таб.Открыть("tabl_l.mxl");
ВыбОбласть = Таб.Область("R8C4");
ВыбОбласть.Шрифт("Arial");
ВыбОбласть.РазмерШрифта(10);
ВыбОбласть.Подчеркнутый(1);
ВыбОбласть.ГоризонтальноеПоложение(3);
ВыбОбласть.Контроль(4);
ВыбОбласть.РамкаСверху(3);

Обвести границу области линиями указанного типа позволяет метод РамкаОбвести() (англоязычный синоним — BorderOutline()).

Синтаксис метода:

РамкаОбвести(<Слева>, <Сверху>, <Справа>, <Снизу>)

где <Слева>, <Сверху>, <Справа>, <Снизу> — числа, характеризующие тип рамки для соответствующей стороны: 0 — рамки нет; 1 — очень тонкая; 2 — тонкая точечная; 3 — тонкая сплошная; 4 — средняя сплошная; 5 — толстая сплошная; 6 — двойная; 7 — тонкий средний пунктир; 8 — тонкий длинный пунктир; 9 — толстый пунктир. Параметры являются необязательными. Если какой-либо параметр опущен, то соответствующая рамка области не меняется.

Пример использования метода:

Таб = СоздатьОбъект("Таблица");
Таб.Открыть("tabl_l.mxl");
ВыбОбласть = Таб.Область("R8C4");
ВыбОбласть.Шрифт("Arial");
ВыбОбласть.РазмерШрифта(10);
ВыбОбласть.Подчеркнутый(1);
ВыбОбласть.ГоризонтальноеПоложение(3);
ВыбОбласть.Контроль(4);
ВыбОбласть.РамкаОбвести(0,3,3,3);

Примечание: В Конфигураторе данное свойство доступно через окно свойств ячейки на вкладке «Рамка»:

Свойства ячейки таблицы

Установить цвет фона области и получить числовое значение RGB-цвета фона области, установленное ранее, позволяет метод ЦветФона() (англоязычный синоним — BackgroundColor()). Для метода предусмотрено два синтаксиса.

Синтаксис 1:

ЦветФона(<Цвет>)

где <Цвет> — числовое выражение, значение которого задаёт RGB-цвет. Допустимыми являются значения от 0 до 16777215. Значение −1 (минус единица) задаёт цвет, используемый для всей таблицы по умолчанию. Параметр является необязательным. Если параметр опущен, то цвет фона области не меняется.

Синтаксис 2:

ЦветФона(<R>, <G>, <B>)

где

  • <R> — числовое выражение, значение которого задаёт красную компоненту цвета. Допустимые значения от 0 до 255;
  • <G>  — числовое выражение, значение которого задаёт зелёную компоненту цвета. Допустимые значения от 0 до 255;
  • <B>  — числовое выражение, значение которого задаёт синюю компоненту цвета. Допустимые значения от 0 до 255.

Пример использования метода:

Таб = СоздатьОбъект("Таблица");
Таб.Открыть("tabl_l.mxl");
ВыбОбласть = Таб.Область("R8C4");
ВыбОбласть.Шрифт("Arial");
ВыбОбласть.РазмерШрифта(10);
ВыбОбласть.Подчеркнутый(1);
ВыбОбласть.ГоризонтальноеПоложение(3);
ВыбОбласть.Контроль(4);
ВыбОбласть.ЦветФона(34, 126, 211);

Примечание: В Конфигураторе данное свойство доступно через окно свойств ячейки на вкладке «Узор»:

Свойства ячейки таблицы

Установить цвет рамок области и получить числовое значение RGB-цвета рамок области, установленное ранее, позволяет метод ЦветРамки() (англоязычный синоним — BorderColor()). Для метода предусмотрено два синтаксиса.

Синтаксис 1:

ЦветРамки(<Цвет>)

где <Цвет> — числовое выражение, значение которого задаёт RGB-цвет. Допустимыми являются значения от 0 до 16777215. Значение −1 (минус единица) задаёт цвет, используемый для всей таблицы по умолчанию. Параметр является необязательным. Если параметр опущен, то цвет рамок области не меняется.

Синтаксис 2:

ЦветРамки(<R>, <G>, <B>)

где

  • <R> — числовое выражение, значение которого задаёт красную компоненту цвета. Допустимые значения от 0 до 255;
  • <G>  — числовое выражение, значение которого задаёт зелёную компоненту цвета. Допустимые значения от 0 до 255;
  • <B>  — числовое выражение, значение которого задаёт синюю компоненту цвета. Допустимые значения от 0 до 255.

Пример использования метода:

Таб = СоздатьОбъект("Таблица");
Таб.Открыть("tabl_l.mxl");
ВыбОбласть = Таб.Область("R8C4");
ВыбОбласть.Шрифт("Arial");
ВыбОбласть.РазмерШрифта(10);
ВыбОбласть.Подчеркнутый(1);
ВыбОбласть.ГоризонтальноеПоложение(3);
ВыбОбласть.Контроль(4);
ВыбОбласть.ЦветРамки(34, 126, 211);

Примечание: В Конфигураторе данное свойство доступно через окно свойств ячейки на вкладке «Рамка»:

Свойства ячейки таблицы

Установить цвет текстового содержимого области и получить числовое значение RGB-цвета текста области, установленное ранее, позволяет метод ЦветТекста() (англоязычный синоним — TextColor()). Для метода предусмотрено два синтаксиса.

Синтаксис 1:

ЦветТекста(<Цвет>)

где <Цвет> — числовое выражение, значение которого задаёт RGB-цвет. Допустимыми являются значения от 0 до 16777215. Значение −1 (минус единица) задаёт цвет, используемый для всей таблицы по умолчанию. Параметр является необязательным. Если параметр опущен, то цвет текстового содержимого области не меняется.

Синтаксис 2:

ЦветТекста(<R>, <G>, <B>)

где

  • <R> — числовое выражение, значение которого задаёт красную компоненту цвета. Допустимые значения от 0 до 255;
  • <G>  — числовое выражение, значение которого задаёт зелёную компоненту цвета. Допустимые значения от 0 до 255;
  • <B>  — числовое выражение, значение которого задаёт синюю компоненту цвета. Допустимые значения от 0 до 255.

Пример использования метода:

Таб = СоздатьОбъект("Таблица");
Таб.Открыть("tabl_l.mxl");
ВыбОбласть = Таб.Область("R8C4");
ВыбОбласть.Шрифт("Arial");
ВыбОбласть.РазмерШрифта(10);
ВыбОбласть.Подчеркнутый(1);
ВыбОбласть.ГоризонтальноеПоложение(3);
ВыбОбласть.Контроль(4);
ВыбОбласть.ЦветТекста(34, 126, 211);

Примечание: В Конфигураторе данное свойство доступно через окно свойств ячейки на вкладке «Шрифт»:

Свойства ячейки таблицы

Установить высоту строк, проходящих через область, и получить значение высоты строк, установленное ранее, позволяет метод ВысотаСтроки() (англоязычный синоним — RowHeight()).

Синтаксис метода:

ВысотаСтроки(<Значение>)

где <Значение> — число — высота строк, проходящих через область в пунктах с точностью до 0,25. Параметр является необязательным. Если параметр опущен, то высота строк области не меняется.

Пример использования метода:

Таб = СоздатьОбъект("Таблица");
Таб.Открыть("tabl_l.mxl");
ВыбОбласть = Таб.Область("R8C4");
ВыбОбласть.Шрифт("Arial");
ВыбОбласть.РазмерШрифта(10);
ВыбОбласть.Подчеркнутый(1);
ВыбОбласть.ГоризонтальноеПоложение(3);
ВыбОбласть.Контроль(4);
ВыбОбласть.ВысотаСтроки(3);

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

Установка высоты строк

Установить ширину столбцов, проходящих через область, и получить значение ширины, установленной ранее, позволяет метод ШиринаСтолбца() (англоязычный синоним — ColumnWidth()).

Синтаксис метода:

ШиринаСтолбца(<Значение>)

где <Значение> — число — ширина столбцов, проходящих через область в стандартных символах с точностью до 0,125. Параметр является необязательным. Если параметр опущен, то ширина столбцов области не меняется.

Пример использования метода:

Таб = СоздатьОбъект("Таблица");
Таб.Открыть("tabl_l.mxl");
ВыбОбласть = Таб.Область("R8C4");
ВыбОбласть.Шрифт("Arial");
ВыбОбласть.РазмерШрифта(10);
ВыбОбласть.Подчеркнутый(1);
ВыбОбласть.ГоризонтальноеПоложение(3);
ВыбОбласть.Контроль(4);
ВыбОбласть.ШиринаСтолбца(13);

Примечание: В Конфигураторе данное свойство можно изменить с помощью соответствующей команды в контекстном меню, появляющемся при щелчке правой кнопкой мыши по выделенным столбцам (см. рис. ниже). Можно также воспользоваться командами главного меню: «Таблица -> Ширина столбца».

Установка ширины столбца

Атрибуты и методы таблицы в режиме ввода данных

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

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

Атрибуты таблицы в режиме ввода данных

В процессе конфигурирования для таблицы в режиме ввода данных можно задавать практически неограниченное число поименованных областей. Атрибут <ИмяОбласти> позволяет обращаться к поименованной области таблицы. В тексте программного модуля в качестве имени атрибута подставляется имя такой области, заданное в Конфигураторе.

Пример обращения к области «Заглавие»:

Таблица.Заглавие.Текст = "Товарный отчет";

Методы таблицы в режиме ввода данных

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

Синтаксис метода:

АктивнаяОбласть(<Адрес>)

где <Адрес> — строковое выражение, задающее имя области или её адрес в формате "R1C1:R2C2". Параметр является необязательным и обычно не используется, когда необходимо только получить имя или адрес активной области.

Пример использования метода:

Если Резидент = 0 Тогда
   Таблица.Область(Таблица.АктивнаяОбласть()).Значение = 0;
   Если Таблица.Область(Таблица.АктивнаяОбласть()).Доступность()=1 Тогда
      Таблица.Область(Таблица.АктивнаяОбласть()).ЦветФона(255,255,128);
   КонецЕсли;
   Таблица.АктивнаяОбласть("R47C1");
КонецЕсли;

Выгрузить значения и имена всех предназначенных для ввода ячеек таблицы в объект типа "СписокЗначений" позволяет метод Выгрузить() (англоязычный синоним — Load()). Выгруженное этим методом имя ячейки становится представлением в записи списка значений, а данные из этой ячейки — значением записи.

Синтаксис метода:

Выгрузить(<СписокЗначений>)

где <СписокЗначений> — идентификатор объекта типа "СписокЗначений", куда выгружаются парами значения и имена всех предназначенных для ввода ячеек.

Пример использования метода:

Список = СоздатьОбъект("СписокЗначений");
Таблица.Выгрузить(Список);

Загрузить в ячейки таблицы, предназначенные для ввода, значения из объекта типа "СписокЗначений" позволяет метод Загрузить() (англоязычный синоним — Save()). При загрузке представление списка значений расценивается как имя адресуемой ячейки, а значение записи становится значением этой ячейки.

Синтаксис метода:

Загрузить(<СписокЗначений>)

где <СписокЗначений> — идентификатор объекта типа "СписокЗначений", откуда загружаются значения в ячейки, предназначенные для ввода.

Пример использования метода:

Процедура ОчиститьТаблицу()
   Список = СоздатьОбъект("СписокЗначений");
   Таблица.Выгрузить(Список);
   ИмяЯчейки = "";
   Для Н = 1 По Список.РазмерСписка() Цикл
      ЗначЯчейки = Список.ПолучитьЗначение(Н, ИмяЯчейки);
      Список.УстановитьЗначение(Н, 0, ИмяЯчейки, 1);
   КонецЦикла;
   Таблица.Загрузить(Список);
КонецПроцедуры;

Атрибуты и методы области таблицы в режиме ввода данных

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

Атрибуты области таблицы в режиме ввода данных

Установить или прочитать значение, записанное в области таблицы позволяет атрибут Значение (англоязычный синоним — Value).

Пример использования атрибута:

ВыбОбласть = Таблица.Область("R1C1");
ВыбОбласть.Значение = '01.09.98';

Методы области таблицы в режиме ввода данных

Установить формат вывода результатов в ячейках области таблицы позволяет метод Формат() (англоязычный синоним — Format()). Возвращаемым значением метода является строковое значение, содержащее текущее (то есть на момент до исполнения метода) значение формата.

Синтаксис метода:

Формат(<ЗначениеФормата>)

где <ЗначениеФормата> — строковое выражение, содержащее форматную строку, подобную той, что используется в системной функции Формат(). Параметр является необязательным и не используется, когда метод необходим для получения текущего формата.

Пример использования метода:

ВыбОбласть.Формат("Ч15.2");

Установить тип данных для значения ячейки, которой в Конфигураторе назначен тип «Неопределенный», позволяет метод УстановитьТип() (англоязычный синоним — AssignType()).

Свойства ячейки таблицы

Синтаксис метода:

УстановитьТип(<Выражение>)

где <Выражение> — выражение, тип значения которого будет присвоен значению ячейки.

Пример использования метода:

ВыбОбласть.УстановитьТип(Товар);

Назначить тип данных для значения ячейки, которой в Конфигураторе назначен тип «Неопределенный» позволяет метод НазначитьТип() (англоязычный синоним — SetType()).

Синтаксис метода:

НазначитьТип(<ИмяТипа>, <Длина>, <Точность>)

где

  • <ИмяТипа> — строковое выражение, содержащее название типа данных, которое назначается значению ячейки, например: "Строка", "Число", "Справочник.Товары", "Документ.РасходнаяНакладная" и т.п.;
  • <Длина> — числовое выражение, определяющее длину поля представления данных. Параметр является необязательным. Имеет смысл только при задании числового или строкового типа;
  • <Точность> — числовое выражение, определяющее число знаков числа после десятичной точки. Параметр является необязательным. Имеет смысл только при задании числового типа.

Пример использования метода:

ВыбОбласть.НазначитьТип("Число", 15, 2);

Запретить или разрешить редактирование выбранной области таблицы позволяет метод Доступность() (англоязычный синоним — Enable()). Возвращаемым значением метода является текущее числовое значение режима редактирования области таблицы (на момент до исполнения метода).

Синтаксис метода:

Доступность(<Флаг>)

где <Флаг> — числовое выражение. Возможные значения: 1 — разрешить редактирование области таблицы; 0 — запретить редактирование области таблицы.

Пример использования метода:

ВыбОбласть.Доступность(0);

Определить возможность редактирования значения непосредственно в ячейках области таблицы для полей ввода типа "Число", "Строка", "Дата" и "Счет" позволяет метод Редактирование() (англоязычный синоним — EnableEdit()).

Синтаксис метода:

Редактирование(<Флаг>)

где <Флаг> — числовое выражение. Возможные значения: 1 — значения ячеек области таблицы редактируются как обычно; 0 — значения не редактируются, но могут выбираться кнопкой выбора.

Пример использования метода:

ВыбОбласть.Редактирование(1);

Примечание: В Конфигураторе данное свойство доступно через окно свойств ячейки на вкладке «Данные» (опция «Запретить редактирование»):

Свойства ячейки таблицы

Системные предопределённые процедуры для работы с таблицами

При двойном щелчке мыши или при нажатии клавиши Enter на выбранной ячейке табличного документа системой «1С:Предприятие» производится вызов предопределённой процедуры ОбработкаЯчейкиТаблицы() (англоязычный синоним — SheetCellProcessing()). Если данная процедура описана в модуле формы, то вызывается она, иначе система запускает одноимённую процедуру из глобального модуля.

Внимание! Данная предопределённая процедура не вызывается при выборе ячейки таблицы в режиме ввода данных. В этом случае вызывается предопределённая процедура ПриВыбореЯчейкиТаблицы() (см. описание ниже).

Синтаксис процедуры:

Процедура ОбработкаЯчейкиТаблицы(<Значение>, <ФлагСтОбработки>, <Контекст>, <Адрес>)
    . . .
КонецПроцедуры

где

  • <Значение> — имя переменной, через которую в процедуру передаётся вычисленное значение ячейки;
  • <ФлагСтОбработки> — имя переменной, содержащей флаг, установка которого в теле процедуры в 1 приведёт к выполнению стандартной обработки значения ячейки (открытию документа, элемента справочника и т.п.);
  • <Контекст> — имя переменной, куда система передаст контекст всей таблицы. С помощью значения этого контекста можно произвольно манипулировать данной таблицей пока она открыта, например, вывести туда дополнительные секции или очистить и заполнить всю таблицу заново. Пока данный объект "Таблица" существует, тип значения данного параметра равен 100, если закрыта — 0. Параметр является необязательным;
  • <Адрес> — имя переменной, куда система передаст адрес ячейки/объекта в формате "R1C1:R2C2". Праметр является необязательным.

Пример использования процедуры:

Процедура Подробно(Сч)
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("Описание");
   ИмяСекции = СтрЗаменить (Сч.Код, ".", "_");
   Таб.ВывестиСекцию("Отступ|Счет");
   Таб.ПрисоединитьСекцию("Подробно|Счет");
   Попытка
      Таб.ВывестиСекцию("Отступ|" + ИмяСекции);
      Таб.ПрисоединитьСекцию("Подробно|" + ИмяСекции);
   Исключение
      Таб.ВывестиСекцию("Отступ|НетОписания");
      Таб.ПрисоединитьСекцию("Подробно|НетОписания");
   КонецПопытки; 
   Если Сч.Уровень() > 1 Тогда
      Таб.ВывестиСекцию("Отступ|Ссылка");
      Таб.ПрисоединитьСекцию("Подробно|Ссылка");
   КонецЕсли;

   Таб.Опции(0, 0, 0, 0, "ОпцииПечатиОСчете", "ОкноОСчете");
   Таб.ОбластьПечати(1, 2);
   Таб.ТолькоПросмотр(1);
   Таб.Показать("Описание счета " + Сч.Код);
КонецПроцедуры   // Подробно()

// ---------------------------------------------------
// Предопределенная процедура

Процедура ОбработкаЯчейкиТаблицы(Значение, Флаг, Таблица, Адрес)
   Подробно(СчетПоКоду(Значение));
   Флаг = 0;
КонецПроцедуры   // ОбработкаЯчейкиТаблицы()

При двойном щелчке мыши или при нажатии клавиши Enter на выбранной ячейке табличного документа в режиме ввода данных системой «1С:Предприятие» производится вызов предопределённой процедуры ПриВыбореЯчейкиТаблицы() (англоязычный синоним — OnSelectSheetCell()). Данная процедура должна быть описана в программном модуле формы, в которой используется таблица в режиме ввода данных.

Синтаксис процедуры:

Процедура ПриВыбореЯчейкиТаблицы(<ИмяИлиАдрес>, <Значение>)
    . . .
КонецПроцедуры

где

  • <ИмяИлиАдрес> — имя переменной, в которую системой передаётся строковое значение имени области таблицы, если выбранная ячейка помечена в таблице как отдельная область, или адрес ячейки в формате "R1C1:R2C2";
  • <Значение> — имя переменной, в которую системой передаётся значение даной ячейки или значение выбранного элемента, если это диаграмма.

Пример использования процедуры:

Процедура ПриВыбореЯчейкиТаблицы(Адрес, Значение)
   Если Лев(Адрес, 3) = "огл" Тогда
      Ссылка = "s" + Сред(Адрес, 4);
      Таблица.АктивнаяОбласть(Ссылка);
   ИначеЕсли Лев(Адрес, 1) = "s" Тогда
      Ссылка = "огл" + Сред(Адрес, 2);
      Таблица.АктивнаяОбласть(Ссылка);
   КонецЕсли;
КонецПроцедуры   // ПриВыбореЯчейкиТаблицы()

Другие статьи по схожей тематике