Описание встроенного языка системы 1С Предприятие

Работа с Таблицами


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

Печатные формы формируются при помощи встроенного языка с использо­ванием агрегатного объекта «Таблица», создаваемого функцией СоздатьОбъект. Наиболее типичным способом заполнения табличного доку­мента является включение в него секций. Для этого используется исходный табличный документ, который может располагаться в той же форме, в тексте программного модуля которого создан агрегатный объект «Таблица». Кроме того, исходная таблица может располагаться и в общих таблицах конфигурации и во внешнем файле. Назначение исходного табличного документа выполняет­ся методом объекта «Таблица» — ИсходнаяТаблица.

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

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




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


   Таб.ВывестиСекцию("Строка");
КонецЦикла;
Таб.Показать();
В приведенном примере в ячейках секций "Шапка" и "Строка" исходной таблицы располагаются выражения выдающие различные реквизиты докумен­та.
Существует другой способ заполнения данными включаемых секций. Этот способ отличается от описанного тем, что в секциях ячеек не задаются выраже­ния. Заполнение секции данными описывается прямо в алгоритме программно­го модуля. Для этого секция сначала выбирается из исходной таблицы, затем в ней заполняются значениями ячейки, в которых должны выводиться данные, а затем секция включается в табличный документ. Для получения секции из ис­ходной таблицы используется метод ПолучитьСекцию. Полученная секция запоминается в переменной как специальный объект типа «СекцияТаблицы». Для того, чтобы в этом объекте можно было заполнять отдельные ячейки им нужно предварительно задать имена в исходной таблице. У объекта «СекцияТаблицы» отдельные именованные ячейки являются атрибутами, имеющими тип «ОбластьТаблицы» (область может содержать и несколько ячеек). Запол­нение ячеек выполняется присвоением атрибуту "Текст" объекта «ОбластьТаблицы» необходимых значений.
Приведем пример формирования табличного документа этим способом.
Пример:
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("ПечатьСчета");
Шапка = Таб.ПолучитьСекцию("Шапка");
Шапка.Клиент.Текст = Контрагент;
Шапка = Таб.ВывестиСекцию(Шапка);
......
ВыбратьСтроки();
Пока ПолучитьСтроку () = 1 Цикл
   Строка = Таб.ПолучитьСекцию("Строка");
   Строка.Товар.Текст = Товар;
   ......
   Строка = Таб.ВывестиСекцию(Строка);
КонецЦикла;
Таб.Показать();
Этот способ может применяться в отдельных случаях для ускорения запол­нения табличного документа, если для заполнения данными используются дос­таточно сложные выражения. Кроме того, этот способ позволяет манипулиро­вать при включении секций различными свойствами ячеек. Например, можно для отдельных ячеек устанавливать жирный шрифт.


Кроме описанных способов существует способ заполнения табличного до­кумента путем непосредственного обращения к ячейкам таблицы без использо­вания в качестве заготовки исходной таблицы. Для этого используется метод Область, позволяющий по координатам строки и столбца исходной таблицы получить объект типа «ОбластьТаблицы». Атрибуты и методы этого объекта позволяют задать содержимое и элементы оформления ячеек (текст, цвета, рамки и т. д.).
Приведем фрагмент примера печати документа этим способом.
Пример:
Таб = СоздатьОбъект("Таблица");
Таб.Область(2, 3).Текст = Контрагент;
......
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
   Таб.Область(НомерСтроки + 3, 3).Текст = Товар;
   ......
КонецЦикла;
Таб.Показать();
Этот способ используется в основном для создания универсальных отчетов, для которых невозможно определить заранее их внешний вид. Заметим, что такой способ является наиболее трудоемким с точки зрения написания алго­ритма.
Во всех описанных способах основным содержанием ячеек таблицы являет­ся текст. При заполнении ячеек все данные преобразуются к текстовому виду. Кроме того, у ячейки может заполняться значение расшифровки. Это дополни­тельная возможность, которая никак не влияет на внешний вид таблицы при просмотре и печати, а используется для создания связанных отчетов и откры­тия различных объектов, отображаемых в отчете. При просмотре сформирован­ного отчета в режиме «только просмотр», при подведении курсора к ячейке, у которой заполнено значение расшифровки, курсор принимает форму крестика с лупой и при двойном щелчке мышью или нажатии клавиши <Enter> выполня­ется отработка значения расшифровки.
Стандартный механизм расшифровки позволяет открыть объект (документ, элемент справочника, счет). Кроме того, использование специальной предопре­деленной процедуры позволяет определить в модуле формы специальные дей­ствия по отработки расшифровки, например построение детализирующего от­чета.


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


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

Содержание раздела