Поиск “Мои незавершенные задания” по штрих-коду документа

8 5

Введение

Любому внедренцу известно, что перенести абсолютно все документы организации в электронный вид невозможно. Ряд документов обязательно будут существовать и в бумажном и в электронном виде и для их взаимной идентификации необходимо использовать штрих-код. Но сканеры штрих-кодов, как правило, достаются далеко не всем, кто работает с такими документами, а выполнять поиск заданий имея на руках только “бумажку” довольно неудобно.

Постановка задачи

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

Выбор варианта решения

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

Как видно штрих-код состоит из трех частей - слова “DIRECTUM” (видимо это своеобразная реклама) и двух чисел, соответствующих ИД инсталляции и  ИД электронного документа в системе.

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

Намного правильней создать предопределенный поиск при помощи компоненты “Поиски”. Тогда это будет, во-первых, системно, во-вторых, красиво, в-третьих, предопределенные поиски всем и всегда доступны в главном меню проводника.

Реализация

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

1. Создаем обычный предопределенный поиск с содержимым “Задания”

2. Настраиваем критерии поиска так чтобы искались задания в состоянии “В работе”, а ИД задания запрашивалось у пользователя.

3. По кнопке “Событие” добавляем следующий программный код:

  //Находим критерий относящийся к ИД задания
  i = 0
  NumId = 0
  WhereDoc = ""
  foreach ShCr in Sender.SearchCriteria
    if ShCr.RequisiteName == "ИД"
      NumId = i
      WhereDoc = ShCr.AsString
      exitfor
    endif
    
    i = i + 1
  endforeach
  
  if NumId = 0
    Exit()
  endif

  //Удаляем найденный критерий
  Sender.SearchCriteria.Delete(NumId)
  
  //Преобразуем заданные пользователем текстовые критерии в Transact SQL
  WhereDoc = Replace(WhereDoc;"РАВНО";"Att.AttachID=")
  WhereDoc = Replace(WhereDoc;" И ";" AND ")
  WhereDoc = Replace(WhereDoc;" ИЛИ ";" OR ")
  WhereDoc = Replace(WhereDoc;"ОТ";"Att.AttachID BETWEEN")
  WhereDoc = Replace(WhereDoc;"ДО";"AND")
  WhereDoc = Replace(WhereDoc;"ВСЕ КРОМЕ";"Not")
  WhereDoc = "(" & WhereDoc & ")"
  
  //Получаем ИД текущего пользователя
  UserName = Object.Connection.UserName
  UserObj = ServiceFactory.GetUserByName(UserName) 
  UserID = UserObj.ID

  //Добавляем параметры поиска на уровне SQL-запроса
  Sender.SearchCriteria.AddFrom = "SBTask Tsk, SBTaskAttach Att"
  Sender.SearchCriteria.AddWhere = "Jobs.TaskID = Tsk.XRecID" & CR &
    "(Tsk.XRecID = Att.TaskID or Tsk.MainTaskID = Att.TaskID)" & CR &
    WhereDoc & CR &
    Format("Jobs.Executor = %s";UserID)

В результате при вызове поиска на экран будет выведено окно запроса ИД задания, а поиск будет осуществляются по ИД документа.

Заключение

Описанная разработка является лишь примером того, как можно реализовывать не стандартные поиски с использованием стандартного интерфейса. Наверняка когда нибудь компания DIRECTUM реализует возможность создания экранных форм поисков, но это дело будущего, а пока приходиться “доставить правой рукой левое ухо”.

8
Авторизуйтесь, чтобы оценить материал.
1
Константин Широбоков

Хорошее решение, Андрей.

Но, назовите, пожалуйста, причны, по которым нельзя было установить на рабочих станциях таких пользователей утилиту Rapid Waiter без подключения сканера ШК. Одно из стандартных действий, выполняемых при сканировании ШК со "стандартной" для DIRECTUM маской - поиск незавершенных заданий, во вложении которых располагается данный документ. Окно ввода строки ШК доступно при нажатии на иконку Rapid`а в системном трее.

Андрей Литвинов

Константин, спасибо.

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

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

Иван Чурбаков

Причина номер 3 легко обходится настройкой утилиты.

Андрей Левчук

Андрей, а как программно осуществит вызов поиска на экран, чтобы было выведено окно запроса ИД задания?

Андрей Литвинов
oSearch = Searches.Load('Поиск заданий по ИД документа')
oSearch.Show(ssmBrowse;False)

Авторизуйтесь, чтобы написать комментарий