Выбор файла шаблона для WF VbScript(WHS)
Добавлено: 26 авг 2010, 15:29
может кому пригодится
, вообще получилось не плохо
тема такая, есть диалоги работы WF в одном из которых в соответствии с исходными данными нужно выбрать списки шаблонов MSOffice для последующего их формирования
типа так все шаблоны лежат в сети или на локальных местах (у нас переключатель путей в ini файле клиента)выглядят так
iniOS
т.е. исходные данные
- номер филиала
- тип плательщика
- канал продажи
нужно в зависимости от того что в каком состоянии - выбрать тот или иной шаблон (у нас 4 списка шаблонов)
сначала мы парились вручную инициализируя выпадающие списки WF и потом уже искали нужный файл по описанию
...
честно говоря - утомило
потом мы сделали структуру каталогов - по исходным критериям - накидали туда файлов - и читали списки скриптом
круто получилось - но одни и теже шаблоны попадали в несколько папок - множественная входимость
редактировать замучаешся тем более что у нас не Linux где это без проблем
...
поэтому - минимизировали число каталогов по числу выпадающих списков
набросали туда файлов и прицепили им префикс в котором учитываем эти самые критерии входные
т.е.
например 00FCL001 - это
- первые две цифры филиал
- третья юр или физ лицо
- четыре пять - канал продажи
- и остаток - номер шаблона
в случае если шаблон универсальный - вместо нужного куска ставим XX
получается довольно просто, на форме нащелкали по условиям - перечитали каталоги , отфильтровали их, получили имя(названия шаблонов)~tзначение(полный путь к шаблону) / т.е. строчку для выпадающего списка
код такойна вход подаем составной путь - в нашем случае каталог %ApplikationData%...Party+Кусочек который показывает имя каталога для списка (Например \Договор), задаем ключи поиска, получаем строку для выпадающего списка Лоции.
пример вызова на vba шаблоны допустим на локальной тачке
или из Лоции из скрипта
Путь разбит на 2 части чтобы в списке в поле значение не хранить слишком длинные строки - у нас там получается вторая часть пути и имя файла
...
показываем в диалоге, например для договора
выбираем нужный шаблон
нажимаем создать файл
приделываем к значению списка первую часть пути - и скриптом формируем пакет документов, для всех файлов, в нашем случае до 5ти файлов за раз
тащимся короче
чем решил и поделиться

тема такая, есть диалоги работы WF в одном из которых в соответствии с исходными данными нужно выбрать списки шаблонов MSOffice для последующего их формирования
типа так все шаблоны лежат в сети или на локальных местах (у нас переключатель путей в ini файле клиента)выглядят так
ini
Код: Выделить всё
;пути к файлам шаблонов (документы/отчеты и т.д.) (один из двух)
;Локальный - Application Data или сетевой
[Template]
;Path=Local
Path=\\..типа сетевой путь..\Ric
- номер филиала
- тип плательщика
- канал продажи
нужно в зависимости от того что в каком состоянии - выбрать тот или иной шаблон (у нас 4 списка шаблонов)
сначала мы парились вручную инициализируя выпадающие списки WF и потом уже искали нужный файл по описанию
...
честно говоря - утомило

потом мы сделали структуру каталогов - по исходным критериям - накидали туда файлов - и читали списки скриптом
круто получилось - но одни и теже шаблоны попадали в несколько папок - множественная входимость

...
поэтому - минимизировали число каталогов по числу выпадающих списков
набросали туда файлов и прицепили им префикс в котором учитываем эти самые критерии входные
т.е.
например 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
пример вызова на 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
...
показываем в диалоге, например для договора
Код: Выделить всё
vPrintContract=f_ModifyForm ( this , 'cFormPrint' , 'vPrintContract.values = ~'' + vPrintContract+'~'')+ " "
нажимаем создать файл
приделываем к значению списка первую часть пути - и скриптом формируем пакет документов, для всех файлов, в нашем случае до 5ти файлов за раз
тащимся короче

чем решил и поделиться
