Переопределение превью документа
страницаДокументооборот ПРОФ, КОРП, ДГУ
30.03.2016
Переопределение превью документа
- Что такое превью документа
- Переопределяемые модули для подмены превью документа
- Пример переопределения превью в карточке документа
- Примеры переопределения превью в списке документов
Что такое "превью" документа
В 1С: "Документообороте" под "превью" понимается HTML-поле для предварительного просмотра информации о документе. Поле содержит в себе идентификационные данные (например, наименование и регистрационные данные) и основные реквизиты документа.
Превью отображается:
- в области просмотра списков документов,
- на закладке "Обзор" карточек документов.
В списках документов область просмотра выводится с помощью одноименной команды в подменю Еще – Настройки. Отображение этой области настраивается для каждого списка и для каждого пользователя индивидуально. Область просмотра отображает сокращенное превью документа, которое содержит основные данные документа, список файлов документа, задачи, созданные на его основании, и таблицу связанных с ним объектов.

При открытии карточки пользователь видит закладку "Обзор" первой. Отображение закладки "Обзор" регулируется персональной настройкой (Настройка и администрирование – Сервис – Персональные настройки – Документы – Использовать обзор документов) и по умолчанию включено. Для каждого типа документа закладка обзор содержит таблицу файлов и превью с реквизитами данного документа.

Тексты превью карточек документов формируются в функциях общего модуля ОбзорДокумента. Для внутреннего документа это ПолучитьОбзорВнутреннегоДокумента(Форма), для входящего документа – ПолучитьОбзорВходящегоДокумента(Форма), для исходящего – ПолучитьОбзорИсходящегоДокумента(Форма). В качестве параметра в функции передаются соответствующие управляемые формы. Также данный модуль содержит и все сопутствующие процедуры и функции, которые помогают формировать превью карточки документа.
Для форм списков документа созданы отдельные общие модули ОбзорСпискаДокументов и ОбзорСпискаДокументовКлиент. Первый содержит процедуры и функции, которые подготавливают данные и формируют превью документа. Второй – общие процедуры, которые выводят данные на формы списков.
Практически все реквизиты, представленные в превью, являются ссылками, причем клик на разные данные порождает различные действия. Например, клик по электронной почте открывает форму создания письма на указанный адрес. Обработчик нажатия на реквизиты превью находится в общем модуле ДелопроизводствоКлиент ОбработатьНажатиеНаПолеОбзор. В настоящий момент процедура умеет отправлять письма, открывать сайты, переходить в формы различных справочников, а также открывать документ на нужной вкладке (например, может открыть закладку "Этапы" документа).
Переопределяемые модули для подмены превью документа
Сформировать собственное превью карточки или списка документов можно с помощью одноименных функций в переопределяемых модулях. Для карточки документа это общий модуль ОбзорДокументаПереопределяемый, для списка документов – ОбзорСпискаДокументовПереопределяемый.
Рассмотрим, например, процедуру ОбзорДокументаПереопределяемый. ПолучитьОбзорИсходящегоДокумента(Форма):
// Переопределяемая функция получения обзора исходящего документа в виде HTML текста. // // Параметры: // Форма - УправляемаяФорма - форма, из которой формируется обзор докмуента // // Возвращаемое значение: // HTMLТекст - Строка - обзор переданного объекта в виде HTML текста // Функция ПолучитьОбзорИсходящегоДокумента(Форма) Экспорт
HTMLТекст = "";
// Укажите свое представление документа.
Возврат HTMLТекст;
КонецФункции
Данная процедура вызывается в начале построения стандартного превью документа ОбзорДокумента.ПолучитьОбзорИсходящегоДокумента. Если она возвращает не пустую строку, то программа считает, что превью документа переопределено, и показывает его. При этом стандартное отображение превью игнорируется.
Пример переопределения превью в карточке документа
Рассмотрим такой пример: заказчик просит, чтобы у документов на сумму более 100 000 рублей в превью сумма выделялась красным цветом. Это удобно для быстрой идентификации таких документов сотрудниками.
Для реализации просьбы необходимо сделать следующее:
- Разрешить редактирование объекта метаданных общий модуль ОбзорДокументаПереопределяемый.
- Из модуля ОбзорДокумента скопировать процедуры ПолучитьОбзорВнутреннегоДокументаСКорреспондентом, ПолучитьКонтактнуюИнформацияОбъекта, ДобавитьДопРеквизит, ДобавитьРеквизит, ДобавитьЗначение, ДобавитьПодпись, СостояниеДела.
- В начале процедуры ПолучитьОбзорВнутреннегоДокументаСКорреспондентом сделать проверку включения учета суммы у данного вида документа и проверить сумму (что она больше 100 000 рублей). Если условия не выполняются, то вернуть пустую строку, которая будет означать отображение стандартного превью.
- Далее в код, который выводит сумму документа, добавить указание цвета реквизита.
Функция ПолучитьОбзорВнутреннегоДокументаСКорреспондентом(Форма)
Объект = Форма.Объект;
Если Не ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.ВидДокумента, "УчитыватьСуммуДокумента")
Или Объект.Сумма < 100000 Тогда
Возврат "";
КонецЕсли;
…… Если РеквизитыВида.УчитыватьСуммуДокумента Тогда ДобавитьРеквизит(HTMLТекст, НСтр("ru = 'Сумма:'"), Формат(Объект.Сумма, "ЧДЦ=2; ЧН=0") + " " + Объект.Валюта.Наименование, "FF0303"); ……
Тогда превью документа будет выглядеть так:

Рассмотрим другой пример: заказчик попросил вывести в превью документа информацию о визах согласования, чтобы ее можно было увидеть сразу, без перехода по закладкам.
Для реализации просьбы в процедуру ПолучитьОбзорВнутреннегоДокументаСКорреспондентом необходимо добавить следующий код:
Функция ПолучитьОбзорВнутреннегоДокументаСКорреспондентом(Форма)
……
Если ПолучитьФункциональнуюОпцию("ИспользоватьСостоянияДокументов") Тогда
ДобавитьПодпись(HTMLТекст, НСтр("ru = 'Состояние:'"));
HTMLТекст = HTMLТекст + СтрШаблон(
""%2
",
"status",
Форма.СостояниеТекст);
КонецЕсли;ТаблицаВизДокумента = РаботаСВизамиСогласования.ПолучитьВизыДокумента(Объект.Ссылка);
Если ТаблицаВизДокумента.Количество() > 0 Тогда
ДобавитьПодпись(HTMLТекст, НСтр("ru = 'Визы согласования:'")); КонецЕсли;
Для Каждого Виза Из ТаблицаВизДокумента Цикл
Если Виза.РезультатСогласования = Перечисления.РезультатыСогласования.НеСогласовано Тогда
ДобавитьЗначение(HTMLТекст, СокрЛП(Виза.Исполнитель) + ": " + СокрЛП(Виза.РезультатСогласования) + ";",
"B22222"); Иначе
ДобавитьЗначение(HTMLТекст, СокрЛП(Виза.Исполнитель) + ": " + СокрЛП(Виза.РезультатСогласования) + ";",
"008000"); КонецЕсли;
HTMLТекст = HTMLТекст + "
";
КонецЦикла;
HTMLТекст = HTMLТекст + "
";; ……
Тогда превью будет выглядеть следующим образом:

Пример переопределения превью в списке документов
Рассмотрим пример переопределения превью в списке внутренних документов: заказчик просит добавить в превью списка информацию о состоянии документа.
Для реализации просьбы необходимо выполнить следующее:
- Разрешить редактирование объекта метаданных общий модуль ОбзорСпискаДокументовПереопределяемый.
- Из модуля ОбзорСпискаДокументов скопировать в него процедуры ПолучитьОбзорВнутреннегоДокументаСКорреспондентом, ДобавитьДопРеквизит, ДобавитьРеквизит, ДобавитьЗначение, ДобавитьПодпись.
- В процедуру ПолучитьОбзорДокумента скопировать часть кода из процедуры ОбзорСпискаДокументов .ПолучитьДанныеОбзора и доработать его.
- Вывести в превью Состояние документа.
// Переопределяемая функция получения обзора документа Функция ПолучитьОбзорДокумента(Документ) Экспорт …
Если ПолучитьФункциональнуюОпцию("ИспользоватьСостоянияДокументов") Тогда
ДобавитьПодпись(HTMLТекст, НСтр("ru = 'Состояние:'"));
HTMLТекст = HTMLТекст + СтрШаблон(
""%2
",
"status",
Делопроизводство.ПолучитьСтроковоеПредставлениеСостояний(Выборка.Ссылка));
КонецЕсли;
…
Возврат HTMLТекст;
КонецФункции
Результат работы процедуры изображен на рисунке:

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