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