Средства 1С:Предприятия работы с табличными документами позволяют создавать отчеты в которых при просмотре можно получать дополнительную поясняющую информацию.
Механизм расшифровки отчетов опирается на то, что ячейка табличного документа может содержать помимо текста некоторое значение практически любого типа, которое заполняется при формировании табличного документа, а затем при двойном щелчке мыши или при нажатии пользователем клавиши Enter в этой ячейке передается в специальную предопределенную процедуру "ОбработкаЯчейкиТаблицы". Эта процедура может располагаться в модуле формы, создавшей табличный документ или в глобальном модуле.
Вызов обработки производится только, если табличный документ находится в режиме "ТолькоПросмотр". В этом режиме курсор над ячейками, для которых задано значение расшифровки, принимает форму лупы. Стандартным действием системы при обработке такого события является показ значения: для документа - открытие документа, для элемента справочника - открытие формы редактирования элемента , для счета - открытие формы счета, для строки, числа и даты отображение их на экране. То есть, действия системы зависят от типа значения расшифровки содержащегося в ячейке. Стандартные действия системы выполняются при отсутствии предопределенной процедуры "ОбработкаЯчейкиТаблицы" или если данная процедура установила флаг стандартной обработки.
Примером нестандартной обработки значения ячейки таблицы может быть вызов формирования другого отчета. Таким образом, мы можем создавать как бы вложенные отчеты, которые вызываются один из другого, выдавая с каждым разом более детальную информацию.
Рассмотрим построение вложенных отчетов на примере отчета "ПродажаТоваров", в котором отображается количество проданных за некоторый период товаров. Пример этого отчета включен в методическую конфигурацию.
В отчете выводятся данные по продажам товаров. Мы хотим получить более подробный отчет по продажам конкретного товара. Так, чтобы, указав на товар в отчете, и дважды нажав кнопку мыши, мы получали отчет по продажам именно этого товара по различным клиентам. Для этого в таблице отчета "ТабВсего" в свойствах ячейки (Свойства ячейки - Текст - поле: Расшифровка), отображающей наименование товара, проставлено выражение "Запрос.Товар".
В модуле отчета расположена процедура формирования дополнительного отчета "ПродажаТовара". Эта процедура вызывается из предопределенной процедуры "ОбработкаЯчейкиТаблицы", которая будет вызвана системой при двойном щелчке или нажатии клавиши Enter на выбранной ячейке отчета о продажах товаров. Главная задача этой процедуры - определить, что выбрана ячейка, где указано значение товара и вызвать на исполнение процедуру формирования дополнительного отчета.
В режиме исполнения, если в отчете "Продажа товаров" мы укажем курсором на товар и выполним на нем двойной щелчок мышью, то сформируется дополнительный (более подробный) отчет "Отчет о покупке товаров клиентами".
В описанном варианте расшифровки используется одно конкретное значение - товар. Однако, важной особенностью механизма расшифровок является возможность включения в ячейки в качестве значения расшифровки объекта типа "СписокЗначений". Это позволяет фактически передавать процедуре "ОбработкаЯчейкиТаблицы" в качестве параметров расшифровки несколько значений для одной ячейки. Это необходимо в том случае, если отчет являющийся расшифровкой должен параметризоваться более чем одним значением. Важно, что при выводе секции таблицы в ячейке записывается не
ссылка на список значений, а копия списка значений. Это позволяет использовать при выводе отчета один объект "СписокЗначений", изменяя его перед выводом секций и включая его во все ячейки, для которых предусматривается расшифровка. Для идентификации отдельных значений в списке можно применять методы "Установить" и "Получить", используя в качестве идентификатора строковое представление значения в списке.
В отчете "ПродажаТоваров" методической конфигурации возможность использования для расшифровки отчета списка значений демонстрируется на примере дальнейшей расшифровки полученного отчета о продаже товаров по конкретным клиентам. Для этого в поле "Расшифровка" таблицы отчета "Таблица" помещается объект "Расш". Данный объект является списком значений, и по мере формирования отчета в нем устанавливаются два значения - организация и товар. Предопределенная процедура "ОбработкаЯчейкиТаблицы" анализирует полученный в качестве значения расшифровки список значений и вызывает процедуру "Карточка", формирующую более подробный отчет по конкретному товару и конкретной организации.
Расшифровка отчета "Карточка" демонстрирует использование стандартных действий системы. В поле расшифровки включается значение типа "Документ". Процедура "ОбработкаЯчейкиТаблицы" не выполняет никаких действий с данным значением расшифровки, и система автоматически открывает документ при вызове расшифровки ячейки.
Мы рассмотрели простейшее применение механизма расшифровок отчетов. При использовании этого механизма существуют некоторые дополнительные возможности.
Например, как отмечалось выше процедура "ОбработкаЯчейкиТаблицы" может располагаться не в модуле формы сформировавшей отчет, а в глобальном модуле. Это позволяет организовать в конфигурации единый централизованный механизм расшифровок.
В поле "Расшифровка" ячейки табличного документа после выражения заполняющего собственно значение расшифровки ячейки может присутствовать символ " # ". В этом случае значение расшифровки данной ячейки будет автоматически распространяться на всю строку таблицы, за исключениям тех ячеек, для которых определено собственное значение расшифровки. Это позволяет организовать расшифровку всей строки указанием значения расшифровки только в одной ячейке этой строки. Кроме того, наличие в строке расшифровки последовательности символов " ## " позволяет создавать ячейки со "скрытыми" значениями расшифровки, которые не будут использоваться системой при двойном щелчке мыши или нажатии клавиши Enter . Их можно использовать как дополнительную информацию при вызове других расшифровок, получая их значения по известным координатам ячейки таблицы в процедуре "ОбработкаЯчейкиТаблицы". Например, в одну ячейку таблицы отчета можно помещать общие для всей таблицы данные, которые должны быть использованы в расшифровке.
Использование списка значений в качестве меню или диалога-выбора (метод "ВыбратьЗначение") позволяет в некоторых случаях в процедуре "ОбработкаЯчейкиТаблицы" организовать выбор одного из нескольких вариантов расшифровки данной ячейки таблицы. Если используется объект "СписокЗначений" с выбором в виде меню, то положение меню автоматически привязывается системой на экране к положению курсора мыши в момент вызова расшифровки или к ячейке, для которой вызвана расшифровка, если расшифровка вызвана клавишей Enter.
Достаточно представительным примером использования механизма расшифровки отчетов является система стандартных бухгалтерских отчетов, включаемая в типовую конфигурацию 1С:Бухгалтерии и комплексную конфигурацию 1С:Предприятия.
У ячеек табличного документа имеется флажок "Защита". По умолчанию этот флажок включен.
В табличном документе, используемом для формирования печатных форм отключение данного флажка позволяет установить для отдельных ячеек режим, при котором эти ячейки можно будет редактировать даже при включенном режиме "ТолькоПросмотр". Это позволяет предусмотреть для отдельных ячеек сформированной печатной формы возможность изменения их содержимого перед выводом на печать.
В методической конфигурации отключение флажка "Защита" демонстрируется на примере печати расходной накладной. В печатной форме накладной допускается изменение номера документа и способа доставки. В открытой печатной форме существует возможность перехода по ячейкам, доступным для редактирования с помощью клавиш Tab и Shift+Tab.
Особенно важна возможность отключения защиты у отдельных ячеек при использовании режима "Защита" самой таблицы. Данный режим исключает возможность фальсификации персоналом данных первичных документов и отчетов, так как не позволяет отключить режим "ТолькоПросмотр", а также выполнить копирование таблицы или сохранение ее в файле. В этом случае отключение защиты отдельных ячеек позволяет выделить часть данных табличного документа, которые могут изменяться при печати.
Заметим, что для табличного документа используемого в режиме ввода данных значение этого флажка имеет особое значение. С описанием этого режима Вы можете ознакомиться в отдельном разделе данной рубрики.
В версии 7.7 табличный документ в форме отчета (обработки) может быть включен непосредственно в форму. Он может выводиться вместе с диалогом формы или вместо диалога. Установка этого режима выполняется из меню "Действия" - пункт "Свойства формы". Для выбора режима размещения в форме табличного документа, предназначенного для просмотра и печати, следует выбрать вариант "Использовать таблицу: Пустую".
Заметим, что для подключения табличного документа используемого в режиме ввода данных следует выбрать вариант "Использовать таблицу: Для ввода данных". С описанием этого режима Вы можете ознакомиться в отдельном разделе данной рубрики.
Размещение в окне формы отчета (обработки) табличного документа, предназначенного для просмотра и печати, может использоваться в самых разнообразных целях.
Прежде всего, этот режим предназначен для создания часто используемых отчетов с небольшим количеством параметров настройки, которые размещаются в диалоге формы. Для таких отчетов возможность размещения в одном окне параметров настройки и самого табличного документа позволяет быстро обновлять содержимое отчета, изменяя параметры настройки.
Доступ к контексту табличного документа в этом режиме осуществляется с помощью предопределенного атрибута "Таблица" контекста формы и не требует вызова функции "СоздатьОбъект". В остальном, в этом режиме заполнение табличного документа ничем не отличается от обычного режима использования табличного документа.
В методической конфигурации размещение табличного документа в форме отчета демонстрируется на примере отчета "ДинамикаПродаж".
Основным преимуществом такой организации формы для пользователя является удобное переключение параметров отчета и его обновление без открытия специальных окон.
С точки зрения разработки конфигурации такой режим позволяет существенно упростить задачу обновления отчета и изменения его параметров настройки. Упрощение, прежде всего, обеспечивается тем, что табличный документ непосредственно связан с диалогом формы и модулем формы. Это позволяет избежать сложного управления расшифровками табличного документа для его обновления.
Кроме создания отчетов совмещенных с диалогом настройки этот режим позволяет решать многие другие задачи, например, на его основе разработан Путеводитель по типовой конфигурации 1С:Бухгалтерии. В методической конфигурации данный режим применен также в режиме подбора из таблицы в расходной накладной.
Использование табличного документа в режиме ввода данных является отдельным механизмом и существенно отличается от обычного использования табличного документа.
Режим ввода данных табличного документа предназначен для решения специальных задач.
Прежде всего, его целесообразно использовать для заполнения данных в больших бланках установленного образца, когда информация вводится пользователем вручную, а не формируется программой автоматически. Именно такое использование данного режима применяется в регламентированных отчетах, поставляемых для типовых конфигураций 1С:Предприятия. Однако, данный механизм может применяться и для других задач.
В методической конфигурации применение данного механизма демонстрируется на примере настройки строк используемых для вывода числовых величин, дат и периодов прописью. Обработка "НастройкаПрописи" вызывается из справочника валют и из главного меню. В этой обработке использование табличного документа позволяет организовать удобный ввод большого количества строк.
При работе табличного документа в режиме ввода данных он обязательно размещается в форме отчета (обработки). Он может выводиться вместе с диалогом формы или вместо диалога. Данный режим настраивается на этапе конфигурирования. Установка этого режима выполняется из меню "Действия" - пункт "Свойства формы". Для выбора режима ввода данных, следует выбрать вариант "Использовать таблицу: Для ввода данных".
В отличие от других режимов в режиме ввода данных в форме используется всегда только один табличный документ, и он не выводится средствами встроенного языка, а выбирается в диалоге настройки свойств формы на этапе конфигурирования. Соответственно в ходе работы формы сам состав ячеек табличного документа изменен быть не может, могут изменяться только данные и элементы оформления отдельных ячеек. Таким образом, принципы работы табличного документа в этом режиме во многом похожи на работу диалога формы.
Следует учитывать, что сама таблица, выбранная в свойствах формы, как используемая для ввода данных и настроенная соответствующим образом будет обладать специфическими свойствами и ее не следует использовать как исходную таблицу для формирования обычной печатной формы.
Существует три способа использования ячеек табличного документа в режиме ввода данных.
Часть ячеек содержит исключительно текст, и является фактически постоянной частью формы. Обычно, они соответствуют содержанию типографского бланка. У этих ячеек включен флажок "Защита" и не используется формула. Другая часть ячеек используется непосредственно для ввода информации. У этих ячеек снят флажок "Защита". Формула у них может использоваться для выполнения некоторых действий после ввода данных в конкретной ячейке. Третья часть ячеек используется для отображения некоторой производной информации, которая зависит от вводимых ячеек или данных информационной базы, но не редактируется пользователем (например, итоговые суммы по вводимым ячейкам). Для этих ячеек установлен флажок "Защита", а в формуле записывается выражение, которое будет вычисляться после любого изменения вводимых ячеек, и результат вычисления которого, собственно, и будет отображаться в ячейке. Следует заметить, что в качестве ячеек любых из указанных типов может выступать также рисунок типа "Текст".
При настройке табличного документа в режиме ввода для ячеек может быть указан тип данных. При использовании в качестве типа ячейки строки неограниченной длины значение ячейки фактически совпадает с ее текстом и работа с ней ничем не отличается от обычного использования ячеек. При выборе любого другого типа - ввод данных в ячейку будет зависеть от типа, и выполняться аналогично вводу данных в реквизит диалога. Текст ячейки при этом будет являться лишь отображением введенного значения. Например, если выбрать тип "Справочник.Валюты", то при редактировании ячейки будет выбираться валюта из справочника валют, а текст ячейки будет соответствовать стандартному представлению элемента справочника. Заметим, что использование в качестве типа данных строки неограниченной длины не позволяет устанавливать ячейке различные дополнительные свойства на закладке "Данные". Для использования этих свойств, следует выбрать любой другой тип данных.
Доступ к ячейкам табличного документа в режиме ввода данных может осуществляться стандартным способом через предопределенный атрибут "Таблица", доступный в контексте формы отчета (обработки). Однако ячейки, для которых в таблице заданно имя, доступны непосредственно в контексте формы, также как и элементы диалога формы.
При работе пользователя с табличным документом, используемым в режиме ввода данных, программа позволяет осуществлять ввод только в ячейках со снятым флажком "Защита". Причем он может переходить по таким ячейкам нажатием клавиш Tab и Shift+Tab. Кроме того, после ввода значения в ячейку система может автоматически активизировать следующую ячейку, предназначенную для ввода (по строкам или столбцам). Этот режим выбирается в настройках формы. После заполнения конкретной ячейки выполняется заданная для нее формула, которая может, например, изменить значения других ячеек. После любых изменений в табличном документе автоматически
пересчитываются все ячейки с установленным флажком "Защита", для которых указаны формулы.
Дадим несколько рекомендаций по использованию данного режима.
Режим ввода данных табличного документа имеет несколько ограничений по сравнению с возможностями диалога формы. Он не позволяет использовать такие элементы, как список, список для выбора, кнопка, флажок и т.д. Для организации выбора значения из списка значений следует использовать тип "Строка" определенной длины с включенными признаками "Кнопка выбора" и "Запретить редактирование". При этом выбор будет осуществляться с помощью предопределенной процедуры "ПриНачалеВыбораЗначения". В примере в методической конфигурации эта возможность использована при выборе рода валюты.
Для активизации пользователем выполнения некоторого действия может быть использована предопределенная процедура "ПриВыбореЯчейкиТаблицы", которая будет вызываться по двойному щелчку мыши или нажатии клавиши Enter в некоторой ячейке. Это позволяет использовать определенные ячейки для активизации пользователем необходимых действий.
Одним из удобных приемов манипулирования ячейками является вызов методов устанавливающих оформление или содержимое ячеек для именованной области, включающей сразу несколько ячеек.
Для того чтобы текст ячейки в табличном документе переносился на следующую строку, нужно для ячейки установить режим "Контроль-Переносить", а для строки, в которой размещается ячейка, установить высоту "Авто".
Если Вы в процессе редактирования исходной таблицы измените высоту строки, то режим автоматического разбиения строк работать не будет. В этом случае нужно будет снова установить высоту строки "Авто".
При создании отчетов или печатных форм табличных документов рекомендуется установить некоторые параметры, обеспечивающие удобную работу пользователя. При этом следует учитывать, что большая часть пользователей не в полной мере владеет всеми возможностями 1С:Предприятия и поэтому в процессе конфигурирования имеет смысл предусмотреть автоматическую установку даже тех параметров, которые пользователь может настроить самостоятельно.
Прежде всего, в большинстве случаев имеет смысл включить режим "ТолькоПросмотр". Если этот режим не установлен, то при открытии табличного документа будет активизироваться панель формул и, соответственно, будет происходить смещение всех окон вниз.
Практически для всех табличных документов имеет смысл указать определенный заголовок в методе "Показать", чтобы пользователь мог легко понять назначение окна в панели окон.
Рекомендуется для тех печатных форм, для которых это имеет смысл установить фиксацию шапки и боковика в параметрах метода "Опции". Это обеспечит более удобный просмотр больших отчетов.
Для отчетов и печатных форм документов рекомендуется установить в методе "Опции" идентификатор индивидуального сохранения параметров печати. Это избавит пользователя от необходимости задавать параметры страницы перед печатью каждого документа.
Для некоторых печатных форм (обычно имеющих небольшой размер) имеет смысл задать в методе "Опции" идентификатор сохранения индивидуальных размеров окна. Это позволит пользователю просматривать печатную форму в удобном для него окне.
Для широких печатных форм рекомендуется принудительно установить соответствующую ориентацию бумаги с помощью метода "ПараметрыСтраницы".
Для многостраничных форм с помощью методов "ПовторятьПриПечатиСтроки" и "ПовторятьПриПечатиСтолбцы" рекомендуется обеспечить дублирование шапки и боковика на каждой странице.
Для небольших печатных документов можно рекомендовать устанавливать автоматический вывод двух экземпляров на странице (метод "ЭкземпляровНаСтранице"). Часто пользователи не осведомлены о такой возможности, что приводит к излишнему расходу бумаги.
Для конфигураций, в которых предполагается работа большого количества персонала, можно рекомендовать использовать метод ("Защита") для исключения возможности фальсификации путем исправления первичных документов.
При использовании метода "ЭкземпляровНаСтранице" следует учитывать, что значение данного параметра не определяет собственно количество выводимых на печать экземпляров табличного документа. То есть количество экземпляров должно быть указано независимо (без учета значения параметра "Экземпляров на страницу") с помощью метода "КоличествоЭкземпляров" или пользователем при вызове функции печати. То есть, чтобы реально было распечатано 2 экземпляра на странице, нужно не только вызвать метод "ЭкземпляровНаСтранице", но и установить количество экземпляров больше или равное двум.
Свойства табличного документа, задаваемые визуально для всего документа в целом не переносятся из исходной таблицы в формируемый табличный документ. Для установки этих свойств в формируемом табличном документе следует использовать соответствующие методы объекта "Таблица". К таким свойствам относятся: показ сетки и заголовков, фиксация строк и столбцов, повторение печати на каждом листе, область печати, черно-белый режим, масштаб, режим "Только просмотр", опции печати.
Кроме того, при заполнении табличного документа из исходной таблицы не переносятся имена секций и имена областей выделенных в исходной таблице.
Метод области таблицы "ВысотаСтроки" может использоваться только для указания новой высоты строки или для получения текущей высоты установленной явно. То есть с помощью данного метода нельзя получить высоту строки для тех строк, для которых установлена высота "Авто". Для этих строк метод "ВысотаСтроки" будет возвращать нулевое значение. Фактически высота для таких строк будет определяться непосредственно в процессе печати и будет зависеть от содержимого ячеек.
Значение расшифровки ячейки табличного документа хранится в табличном документе в качестве строки. Способ хранения значений аналогичен преобразованию значения в строку с помощью функции "ЗначениеВСтрокуВнутр". Особенности данного способа преобразования описаны в разделе "Технологические вопросы - Сохранение (восстановление) значений в строку". Хранение значения расшифровки в виде строки определяет ряд особенностей использования расшифровок. При сохранении табличного документа в файле (в формате "MXL") значения расшифровок корректно сохраняются и потом могут использоваться также как и у сформированного табличного документа. Однако следует учитывать, что значения типа "Справочник", "Документ", "Счет", а также таблицы значений и списки значений, содержащие значения данных типов, могут при использовании сформированного ранее табличного документа ссылаться на уже несуществующие объекты. Кроме того, расшифровки табличного документа нельзя использовать в других информационных базах, так как применяемый для расшифровок способ сохранения в строку позволяет системе интерпретировать значение только в
той информационной базе, в которой оно было помещено в строку. Для заполнения ячеек табличного документа значениями расшифровок может использоваться метод "Расшифровка" табличного документа. При этом следует учитывать, что присвоение значения расшифровки и обращение к расшифровке сопровождаются преобразованием значения к строке и из строки. Соответственно обращение к уже присвоенному расшифровке значению агрегатного типа может сказаться на производительности алгоритма, так как будет вызывать обращение к информационной базе. Рекомендуется все операции с запоминаемым в расшифровке значением выполнять предварительно с использованием переменных.