Выбор файла шаблона для WF VbScript(WHS)

Обсуждение технических вопросов работы с системами управления базами данных (СУБД), работе с языком SQL и скриптовыми языками.
Ответить
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Выбор файла шаблона для WF VbScript(WHS)

Сообщение Александр »

может кому пригодится :wink:, вообще получилось не плохо
тема такая, есть диалоги работы WF в одном из которых в соответствии с исходными данными нужно выбрать списки шаблонов MSOffice для последующего их формирования
типа так
Захват-110.gif
Захват-110.gif (24.21 КБ) 16763 просмотра
все шаблоны лежат в сети или на локальных местах (у нас переключатель путей в ini файле клиента)выглядят так
ini

Код: Выделить всё

;пути к файлам шаблонов (документы/отчеты и т.д.) (один из двух)
;Локальный - Application Data или сетевой
[Template] 
;Path=Local
Path=\\..типа сетевой путь..\Ric
OS
Захват-111.gif
Захват-111.gif (10.76 КБ) 16763 просмотра
т.е. исходные данные
- номер филиала
- тип плательщика
- канал продажи
нужно в зависимости от того что в каком состоянии - выбрать тот или иной шаблон (у нас 4 списка шаблонов)
сначала мы парились вручную инициализируя выпадающие списки WF и потом уже искали нужный файл по описанию
...
честно говоря - утомило :wink:
потом мы сделали структуру каталогов - по исходным критериям - накидали туда файлов - и читали списки скриптом
круто получилось - но одни и теже шаблоны попадали в несколько папок - множественная входимость :wink: редактировать замучаешся тем более что у нас не Linux где это без проблем
...
поэтому - минимизировали число каталогов по числу выпадающих списков
набросали туда файлов и прицепили им префикс в котором учитываем эти самые критерии входные
т.е.
например 00FCL001 - это
- первые две цифры филиал
- третья юр или физ лицо
- четыре пять - канал продажи
- и остаток - номер шаблона
в случае если шаблон универсальный - вместо нужного куска ставим XX
получается довольно просто, на форме нащелкали по условиям - перечитали каталоги , отфильтровали их, получили имя(названия шаблонов)~tзначение(полный путь к шаблону) / т.е. строчку для выпадающего списка
код такой

Код: Выделить всё

'-------------------------------------------------------------------------------------------------------------------------
'функция чтения имен файлов указанного каталога
'  гPath - первая часть пути к каталогу
'  fPath - вторая часть пути к каталогу
'  Key1 - филиал
'  Key1 - U- Юр. лицо/ F-Физ. лицо/ X-любое
'  Key1 - CL-Прямой клиент/DL-Дилер/CD-Клиент дилера/XX-Любой
' На выходе список отформатированный для выпадающего списка Лоции
'-------------------------------------------------------------------------------------------------------------------------
Function GetPathFNameList(uPath, fPath, Key1, Key2, Key3)
 Dim FSO, Name, Ret, Pr, Ch

  Ret = "-" & vbTab & " " & "/"
  If CheckExists(uPath & fPath, 1) Then
    Set FSO = CreateObject("Scripting.FileSystemObject")
    fPath = uPath & fPath & "\\"
'msgbox  fPath & vbcr & key1 & vbcr & key2 & vbcr & key3 
    Ch = 0
    For Each File In FSO.getfolder(fPath).Files
      Name = FSO.GetBaseName(File.Name)
      Pr = Left(Name, 8)
      If SelectFile(Pr, Key1, 1, 2) Then
        If SelectFile(Pr, Key2, 3, 1) Then
          If SelectFile(Pr, Key3, 4, 2) Then Ch = 1
        End If
      End If
      If Ch = 1 Then Ret = Ret & Right(Name, Len(Name) - 9) & vbTab & right(File.Path, len(File.Path)-len(uPath))& "/"
      Ch = 0
    Next
    If Not FSO Is Nothing Then Set FSO = Nothing
  End If

  If Right(Ret, 1) = "/" Then Ret = Left(Ret, Len(Ret) - 1)                                        'отрезать хвостик если есть
  GetPathFNameList = Ret
End Function

'-------------------------------------------------------------------------------------------------------------------------
'функция выбора файла для выпадающего списка по префиксу и ключу
'  Pr - префикс
'  Key - ключ - если есть -"X" то все файлы с "X" если нет то все нужные файлы плюс "X"
'  pStart - начальная позиция в ключе
'  pLen - длина ключа
'---------------------------------------------------------------------------------------------------------
Function SelectFile(Pr, Key, pStart, pLen)
Dim Ch
   Ch = False
   If InStr(Mid(Pr, pStart, pLen), "X") > 0 Then
            Ch = True
          Else
            If Mid(Pr, pStart, pLen) = Key Then Ch = True
          End If
   SelectFile = Ch
End Function
на вход подаем составной путь - в нашем случае каталог %ApplikationData%...Party+Кусочек который показывает имя каталога для списка (Например \Договор), задаем ключи поиска, получаем строку для выпадающего списка Лоции.
пример вызова на vba шаблоны допустим на локальной тачке

Код: Выделить всё

Path = "C:\Documents and Settings\zaytsev\Application Data\LotsiaSoft\PartY\Templates\Document"
Path = FSO.GetPathFNameList(Path, "\Договор", "00", "U", "CL")
или из Лоции из скрипта

Код: Выделить всё

        lprintcontract=FSO.GetPathFNameList(vPathTemplate, "\Договор", cFilial, lprinttypepayer, lchannelofsale)         'Шаблоны Договоров    
          LsJob.SetVarValue "vprintcontract", lprintcontract
Путь разбит на 2 части чтобы в списке в поле значение не хранить слишком длинные строки - у нас там получается вторая часть пути и имя файла
...
показываем в диалоге, например для договора

Код: Выделить всё

vPrintContract=f_ModifyForm ( this , 'cFormPrint' , 'vPrintContract.values  = ~'' +   vPrintContract+'~'')+ " " 
выбираем нужный шаблон
нажимаем создать файл
приделываем к значению списка первую часть пути - и скриптом формируем пакет документов, для всех файлов, в нашем случае до 5ти файлов за раз

тащимся короче :wink:
чем решил и поделиться :wink:

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Re: Выбор файла шаблона для WF VbScript(WHS)

Сообщение Александр »

чтобы завершить тему еще короткая функция для получения пути ApplicationData для клиента

Код: Выделить всё

'-------------------------------------------------------------------------------------------------------------------------
'функция возвращает путь ApplicationData
'  для x32 x86
'-------------------------------------------------------------------------------------------------------------------------
Function GetAppDataPath()
Dim oShell, oProcEnv, sPath
  Set oShell = CreateObject("WScript.Shell")
  Set oProcEnv = oShell.Environment("PROCESS")

'прочтем из параметров
  sPath = oProcEnv("AppData")
'если нет - прочтем из системного реестра
  If sPath = "" Then
'    sPath = oShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Common AppData")   ' HKEY_LOCAL_MACHINE Глобальные аппаратные и программные настройки системы
    sPath = oShell.RegRead("HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\AppData")                  ' HKEY_CURRENT_USER  Настройки для текущего пользователя
  End If

 if Not oProcEnv Is Nothing Then Set oProcEnv = Nothing
 if Not oShell Is Nothing Then Set oShell = Nothing
 
 GetAppDataPath=sPath
End function
каталог + \LotsiaSoft\PartY оказался оч удобным для работы(/обновления/редактирования) со всей кучей пользовательских файлов для Лоции (иконки шаблоны и т.д....

ps
скрипты - наше все :wink:

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Ответить