Добавление собственного виджета в 1С:Документооборот версии 3.0



Делимся экспертизой.

Сотрудник нашей компании Арсений, который занимает должность программист-консультант 1С, подготовил материал в котором рассказал все тонкости и нюансы при добавлении собственного виджета в 1С:Документооборот версии 3.0.

Не так давно мне досталась задачка по созданию собственных виджетов по отслеживанию невыполненных задач в виде кольцевой диаграммы и показателей в Документообороте 3.0. Поиск в интернете особо ничего выдал, только статью на ИТС и на Инфостарте, как это делается в Документообороте 2.1. Начал смотреть и разбираться, оказалось, что отличий очень много, поэтому и родилась идея написать данную статью, так как ДО 3.0 сейчас активно внедряется, а информации по ней мало. Итак, приступим.

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

  1. Создать сам виджет.
  2. Создать групповой показатель. Он нужен для того, чтобы на самом виджете отображалось количество задач по нашим показателям.
  3. Создать и настроить показатели виджета
  4. Настроить сам виджет.

Далее переходим в конфигуратор и начинаем программировать работу виджета и показателей.

  1. Пишем функцию, которая будет обрабатывать и выводить количество задач для наших показателей на самом виджете
  2. Создаем команды для перехода, кликая по показателю на форму Задачи мне, но с нашими отборами, которые соответствуют названию показателя.
  3. Дописываем типовые процедуры и функции, где указываем, как формировать наши группировки задач, а если точнее, то отборы для динамического списка.

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

План нарисовали, можно приступать.

Еще немаловажный момент. Делалось все через расширение, так как заказчик попросил конфу не менять.

1. Создаем сам виджет

Делается это достаточно легко, открываем функции для технического специалиста и вбиваем поиск "Виджеты". Находится один справочник в него и переходим.

Нам открывается справочник, в котором есть только предопределенные значения. Особой необходимости как в ДО 2.1 делать предопределенным новый виджет нет, поэтому берем тот, что более-менее похож на наш, к примеру, "Задачи мне (диаграмма, по видам)" и копируем его. На текущем этапе достаточно только обозвать его так, как нам нужно. В моем случае это будет выглядеть вот так:


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

2. Создаем групповой показатель

Групповой показатель, как писал ранее, нужен для вывода информации о количестве задач, которые будут по нашим показателям на виджете. По этому также открываем функции для технического специалиста и вбиваем поиск "Групповые Показатели". Нам открывается аналогичный Виджетам справочник, в котором есть опять же только предопределенные значения. Копируем аналогичный виджету групповой показатель, а именно "Итоги "Задачи мне" (по видам)", и начинаем его настраивать.


Пробежимся по реквизитам:

  1. В первую очередь наименование так как оно должно быть уникальным.
  2. Далее выражение. Это как раз та функция, которую нам придется в дальнейшем закодировать, чтобы по указанным свойствам, которые указаны ниже, передавать количество задач. В моем случае я ее назвал "ЗадачиМнеИтогиПоДокументам"
  3. Вкладка Свойства. На этой вкладке мы укажем ключи для наших показателей. Соответственно старые я удалил и вбил свои.
  4. Вкладку события не трогаем, там перечислены события, по которым данная функция будет дергаться для обновления показателей.

Записываем и закрываем, больше нам тут делать нечего. Идем дальше.

3. Создание и настройка показателей виджетов

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

Меняем значение реквизитов:

  1. Наименование в моем случае "Задачи мне: Договоры"
  2. Заголовок "Договоры". Так будет выглядеть наименование на самом виджете
  3. Подсказку по желанию
  4. Немаловажный реквизит - картинка. Без нее будет плохо, поверьте мне. Я потратил кучу времени на то, чтобы понять, почему из показателя получается абракадабра. Выбираем любой цвет из ЛегендаДиаграммы. Я выбрал такое значение "ЛегендаДиаграммыСиний".
  5. Цвет виджета серии по аналогии с картинкой берем "Синий"
  6. Далее у нас уже стоит Тип "Групповой"
  7. Групповой показатель выбираем тот, который создали ранее: "Итоги "Задачи мне" по документам"
  8. Свойство группового показателя - выбираем тот, который мы закладывали заранее для этого показателя "ЗадачиМнеДоговоры"
  9. Тип Значения уже стоит "Число", поэтому не трогаем.
  10. В разделе Действие пока ничего не трогаем, так как без Источника виджет будет ломаться, а команды для перехода мы сделаем только сильно позже.
  11. События оповещения нам не нужны.

Если все правильно сделали, то выглядеть будет вот так:


Записываем, закрываем и повторяем процедуру еще 3 раза, только указываем для каждого показателя свои значения.

Теперь настало время для настройки самого виджета.

4. Настройка виджета

Для того, чтобы нам удалось настроить виджет, необходима какая-нибудь обработка, которая позволит увидеть больше, чем то, что показывает нам сам документооборот. Я воспользовался 1С Admin. После открытия через данную обработку нашего виджета мы увидим, что у нас, оказывается, есть еще куча табличных частей, которые нам постеснялись показать.


Скрываем пустые ТЧ, удаляем все значения в ТЧ "Дополнительные показатели", "Основные показатели" и "Команды".

Добавляем в ТЧ "Основные показатели" наши показатели в том порядке, в каком вы хотите их видеть на виджете.


Записываем и закрываем. На текущем этапе в клиенте с работами пока все. Переходим в конфигуратор.

5. Функция для вывода значений показателей виджета на сам виджет.

Ранее в групповом показателе мы придумывали некую функцию. Так вот настало время ее создать. Идем в конфигурацию > Общиемодули > РаботаСЗадачиами

Для упрощения написания можно скопировать аналогичную функцию, к примеру, ту, что у нас была прописана в групповом показателе, с которого мы копировались. "ЗадачиМнеИтогиПоВидам"

Код этой функции:

 
 Код функции ЗадачиМнеИтогиПоДокументам


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

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

Далее меняем ненужные нам показатели на наши:

 
 Создаем структуру с нашими показателями

Пишем запрос который удовлетворяет наши требования. Кстати все значения получаются из регистра накопления "КоличествоДействийЗадач.Остатки"

 
 Запрос для получения показателей

Раз в типовом коде у нас получается ТЗ по результату выполнения запроса почему бы и нам также не сделать

Ну и наконец переписываем ту часть где происходит заполнение нашей структуры с показателями

 
 Заполнения структуры показателями

За поиск по наименованию не ругайте, так надо, ибо таков путь.

Переходим к командам для перехода по нашим показателям.

6. Создание команд перехода по показателям

Все команды, которые нам необходимы будем создавать в документе "Задача" так как форма с "Задачи " принадлежит этому документу. Для удобства копируем команду, которая у нас была указана в наших показателях. "ЗадачиМнеНаСогласование"

Переименовываем ее в "ГИГЗадачаМнеПоВидамДокументов "и пишем синоним "Задача мне по видам документов Договоры". синоним — это важно так как далее в коде будет прописано ссылка на этот синоним и в заголовке формы задачи мы увидим этот текст.

В самом модуле команды мы меняем только Ключ использоватения на "ФильтрПоДоговорам". Далее нам нужно будет протащить этот ключ по всему модулю формы, чтобы нигде не было ошибок при выполнении.

 
 Текст модуля команды

Для всех наших показателей создаем по аналогии.

7. Настройка отборов для корректного открытия формы Задачи с нужным перечнем задач.

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

В первую очередь нам нужно завести эти команды на форму так как в процедуре "ПриИзмененииВариантаГруппировки()" они используются как элементы формы. Поэтому "ПриСозданииНаСервере" обязательно в начале пишем:

 
 Создаем на форме наши команды

Далее для каждой команды нужно завести процедуры, но предварительно в перечислении "ВариантыГруппировкиЗадач" нужно для каждой нашей команды создать перечисление чтобы его можно было указать в нашей группировке. 

 
 Создаем процедуры для команд

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

Делаем по аналогии с тем как заданы значения для других команд.

 
 Настройка БыстрогоПоиска

Теперь правим событие ПриИзмененииВариантаГруппировки

В месте где заполняется соответствие КомандыВариантовГруппировки вписываем свой код:

 
 Редактируем ПриИзмененииВариантаГруппировки

Чтобы не получить ошибку "Неизвестный ключ назначения использования" дописываем код в процедуре ОбработатьКлючНазначенияИспользования. Встраиваемся сразу после проверки ключа "ЗадачиМнеДругие". На самом деле не обязательно именно в этом месте, но мне так было удобнее. Кстати здесь как раз и прописывается ссылка на синоним для заголовка.

 
 Редактируем процедуру ОбработатьКлючНазначенияИспользования

По аналогии с процедурой ОбработатьКлючНазначенияИспользования что бы не получить такую же ошибку дописываем код в процедуре "ОбновитьГруппировки". Вставлять текст после проверки на ключ "ЗадачиМне".

 
 Редактируем процедуру ОбновитьГруппировки

Ну и что бы не получить ошибку если кто-то полезет в группировки и начнет нажимать команды указанные там редактируем процедуру "ЗаполнитьГруппировкуЗадачиМне". Вставляем код после проверки на вариант перечисления по Флагу. Опять же не обязательно именно там.

 
 Редактируем процедуру ЗаполнитьГруппировкуЗадачиМне

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

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

 
 Редактирование процедуры ПараметрыОтбора

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

 
 Запрос для получения массива видов документов из папки Договоры

С Конфигуратором теперь тоже закончились и возвращаемся назад в клиент. Там нам нужно в наши показатели прописать в реквизит "Источник" наши команды ну и вывести наш новый реквизит на рабочий стол.

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


Ну и на рабочем столе у нас уже будут наши виджеты и выглядят они таким образом:


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

 

Далее, что касается параметров отбора. Данная процедура дергается из процедуры УстановитьПараметрыГруппировкиНаСервере()

Что интересно, в ней уже заранее заложены такие параметры как ВидПриложения хотя на форме нет возможности никак получить список задач по какому-то определенному виду документов. Возможно со временем допилят, а пока текущая версия, на которой все манипуляции делались это Документооборот КОРП, редакция 3.0 (3.0.7.28). На момент написания статьи это актуальный релиз для ДО 3.0






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

В системе 1С:ERP предусмотрен широкий функционал и набор инструментов для создания, планирования, мониторинга, корректировки и анализа бюджетов.

Остались вопросы?

ФИО*
E-mail*
Телефон*
Введите ваш вопрос
Наверх