Записная книжка разработчика. Дата и номер на документе из РКК.

2 0

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

Например, в нашей организации, внутренний документ, прошедший процедуру подписания  при помощи ЭП, распечатывался, на нем ставился номер, потом снова сканировался уже с номером, и рассылался для ознакомления. Таких примеров можно привести множество. В каждой организации, наверняка, найдется процесс, связанный именно с датой и номером регистрации.

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

Предложенный код  достаточно добавить в "Действия и методы"  в справочник "Типы справочников"- "РКК" для проставления даты и номера на регистрируемом  документе. Разумеется нужно потратить время на настройку отображения в случае использования типовых бланков. 

Исходный документ преобразуется в формат pdf и сохраняется в новой версии, так что  всегда будет сохранен исходный вариант документа.

После добавления метода в карточке РКК добавим кнопку на панели инструментов для добавления даты и номера регистрации. Вы можете настроить вид по своему усмотрению. 


 

Для версии 5.6 или 5.7 код сценария немного нужно еще оптимизировать для определения места расположения и вывода. 

    RRC = Object
    DocumentID = RRC.ISBIntNumber    
    RegNumber = RRC.Дополнение 
    DateReg = RRC.ДатаВремя
    InputSh = InputDialog('Сдвиг штампа по вертикали|Сдвиг штампа по горизотали';'0|0';;;;;; TRUE)    
    
    foreach SS in CSubString('cc'; '|')   
      //Проверка на наличие РКК
      if not Assigned(RegNumber) or not Assigned(DateReg) 
         Result = 'РКК не зарегистрирована' 
         exitfor 
      EndIf    
      if not Assigned(DocumentID) 
        Result = 'С РКК не связан основной документ' 
        exitfor 
      EndIF    
      
     HTML = '<html> 
                <head> 
                    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> 
                    <title>Тег TABLE</title> 
                </head> 
                <body text = "blue"> 
                    <table width="86%" cellpadding="5"> 
                      <tr> 
                          <td><big><b> '& "Рег. № " & RegNumber & " от " & DateReg & ' </b></big> 
                          </td> 
                           
                      </tr> 
                    </table> 
                </body> 
              </html>' 
                                    
      Document = EDocuments.GetObjectByID(DocumentID)         
      // Получить последнюю версию документа 
      Version = GetLastEDocumentVersionNum(Document)    
      SQL = SQL("SELECT TypeVersionData FROM SBEDocVer WHERE Number = " & Version & " AND EDocID = "& DocumentID & "")       
      
      //Вызов функции для преобразования документа в формат PDF с помощью сервиса преобразования       
      If SQL <<>> "PDF" 
        DCTSConvertEDocumentToPDF(ConvertToPDFWSDLFileName; Document; ; FALSE) 
      EndIf   
      
      Path = GetTempFolder() & "\" & "Stamp.png"                   
      HTMLFileName = Format("%s%s%s"; ArrayOf(GetTempFolder(); GetHashInFormatGUID(); '.html'))     
      WriteFile(HTMLFileName;; HTML)                                                                  
      GeneratePNGImageFromHTML(HTMLFileName; Path; TRUE)     
      //Вставка изображения в PDF документ 
      //Параметры: Документ, версия, В новую версию - да, путь до файла, Координаты вставки  X Y, 0 - на первую страницу, масштаб      
      STAMP_X = Substring(InputSh; "|"; 1) 
      STAMP_Y = Substring(InputSh; "|"; 2)              
      AddImageToPDFDocument(Document; Version; TRUE; Path; STAMP_X; STAMP_Y; 0; ; 50)             
      DeleteFile(HTMLFileName)  
      DeleteFile(Path)      
      ShowMessage('Штамп на документ установлен')
    EndForeach 

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

    // Заменить с этого места
    Document = EDocuments.GetObjectByID(DocumentID)         
    CheckExtension = Document.Info.Editor.Extension   
    //Проверка на pdf
    if CheckExtension <<>> 'PDF'
      FCConvertEDocumentToPDF(Document)
    endif
    // Получить последнюю версию документа 
    Version = GetLastEDocumentVersionNum(Document)  
    Path = GetTempFolder() & "\" & "Stamp.png"                   
    HTMLFileName = Format("%s%s%s"; ArrayOf(GetTempFolder(); GetHashInFormatGUID(); '.html'))     
    WriteFile(HTMLFileName;; HTML)                                                                  
    GeneratePNGImageFromHTML(HTMLFileName; Path; TRUE)   
    StampInsertComplit = FALSE
    StampAutoInsert = FALSE     
    if InteractiveMode()
      while not StampInsertComplit
      Input = MessageBoxEx(INFORMATION_CAPTION; "Выберите действие";; "Сформировать|Сохранить|Отмена";;;; cbsCommandLinks; "Отмена")
        if Input == 'НЕУДАЧА: ESC' or Input == 'Отмена'
          Result = 'Прервано пользователем' 
          exit()        
        endif                            
        if Input == 'Сформировать'
          StampInsertComplit = FALSE
          InputSh = InputDialog('Сдвиг штампа по вертикали|Сдвиг штампа по горизотали';'0|0';;;;;; TRUE)        
          STAMP_X = Substring(InputSh; "|"; 1) 
          STAMP_Y = Substring(InputSh; "|"; 2) 
          FileName = GetTempFolder() & "\" & "\Temp.pdf"
          Document.Export(Version; FileName; False; False;;;)
          AddImage = AddImageToPDFFile(FileName; Path; STAMP_X; STAMP_Y; 0; ; 50)
          if AddImage
            OpenFile(FileName; 'N';'Да';ecotFile)
          else
            showmessage("Штамп не установлен")
          endif       
        endif
        if Input == 'Сохранить' 
          StampInsertComplit = TRUE        
          DeleteFile(HTMLFileName)  
          DeleteFile(Path)      
          ImportFileIntoEDocumentVersion(FileName;;;;;Document.ID) 
          ShowMessage('Штамп на документ установлен')     
        endif       
      endwhile
    endif

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

После нажатия в карточке РКК созданного действия в диалоговом окне выбираем "Сформировать"

Указываем координаты расположения и открывается окно просмотра документа с размещенным на нем штампом даты и номера регистрации.

Если вариант расположения устраивает при просмотре на документе, то документ сохраняется (скриншот выше). И в документе  будет зафиксирована дата и номер регистрации. Вывод даты и номера можно настроить по своему усмотрению в коде сценария в секции html. Если вариант расположения не устраивает, то закрываем предварительный просмотр документа, система вернется на диалоговое окно выбора действия (Сформировать... и т.д.).  После ввода новых координат  просматриваем отображение штампа. И так по кругу, пока результат не устроит. Можно заранее ввести координаты  в сценарии и тогда простановка даты и номера сведется просто к действию: нажал на кнопочку - сформировал - сохранил документ.

Пример части документа с проставленным штампом. 
 

Пока комментариев нет.

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