ну и закончим примером как область данных отчета получить скриптом без использования отчета
Код: Выделить всё
On Error Resume Next
Set rs = CreateObject("ADODB.RecordSet")
if Err.Number=0 Then
sql="Select tw.Mnemo,
vv0.value as sCode,
vv1.value as sType,
vv2.value as sName,
vv3.value as sCount,
Coalesce(vv4.value,0) as sPriceBase,
Coalesce(vv5.value,0) as sPriceBaseNDS,
vv6.value as sListCurrency,
Coalesce(vv7.value,0) as sPriceDiscount00,
Coalesce(vv8.value,0) as sPriceDiscount01,
rw.created as sCreate
FROM lsdbo.object_reference rw left join lsdbo.object_type tw on rw.type_id = tw.id left join
lsdbo.tree_link tl on rw.id = tl.link_id left join lsdbo.attrib_value av0 on rw.id = av0.object_id and av0.attrib_id = 10.. left join
lsdbo.value_string vv0 on av0.value_id = vv0.id and av0.attrib_id = 10.. left join lsdbo.attrib_value av1 on rw.id = av1.object_id and av1.attrib_id = 10.. left join
lsdbo.value_numeric vv1 on av1.value_id = vv1.id and av1.attrib_id = 10.. left join lsdbo.attrib_value av2 on rw.id = av2.object_id and av2.attrib_id = 30.. left join
lsdbo.value_string vv2 on av2.value_id = vv2.id and av2.attrib_id = 30.. left join lsdbo.attrib_value av3 on rw.id = av3.object_id and av3.attrib_id = 10.. left join
lsdbo.value_numeric vv3 on av3.value_id = vv3.id and av3.attrib_id = 10.. left join lsdbo.attrib_value av4 on rw.id = av4.object_id and av4.attrib_id = 10.. left join
lsdbo.value_numeric vv4 on av4.value_id = vv4.id and av4.attrib_id = 10.. left join lsdbo.attrib_value av5 on rw.id = av5.object_id and av5.attrib_id = 30.. left join
lsdbo.value_numeric vv5 on av5.value_id = vv5.id and av5.attrib_id = 30.. left join lsdbo.attrib_value av6 on rw.id = av6.object_id and av6.attrib_id = 10.. left join
lsdbo.value_string vv6 on av6.value_id = vv6.id and av6.attrib_id = 10.. left join lsdbo.attrib_value av7 on rw.id = av7.object_id and av7.attrib_id = 10.. left join
lsdbo.value_numeric vv7 on av7.value_id = vv7.id and av7.attrib_id = 10.. left join lsdbo.attrib_value av8 on rw.id = av8.object_id and av8.attrib_id = 10.. left join
lsdbo.value_numeric vv8 on av8.value_id = vv8.id and av8.attrib_id = 10.. where tl.parent_id=" & id_Order & " and tw.mnemo <> 'Doc' order by sCreate"
rs.Open sql,cn
Else
msgbox "Чтение спецификации не удалось. Сори"
End if
этот запрос возвращает в recordset массив 11 колонок X сколько получилось строк
дальше мы его переписываем в свой массив, типа
Код: Выделить всё
do while not rs.Eof
Select Case rs.Fields.item(0)
Case "PSft"
Select Case Mid(rs.Fields.item(1),10,2 )
Case "05"
tmp=""
Case "08" 'Technical support
tmp=""
Case "06" 'Manuals Dock-Pack
tmp=""
Case Else
Select Case rs.Fields.item(2)
Case "0"
tmp="Программное обеспечение "
Case "1"
tmp="Предоставление неисключительного права использования "
Case Else
tmp=""
End Select
End Select
Case Else
tmp=""
End Select
Main.vPartList(j,0)=tmp & rs.Fields.item(3)
for i=4 to rs.Fields.count-2
Main.vPartList(j,i-3)= rs.Fields.item(i)
' msgbox Main.vPartList(j,i)
next
rs.MoveNext ' получить следующую запись
j=j+1
loop
и освобождаем recordset
собственно все...
1. подключились к базе
2. набрали все нужные данные, переменные массивы, все что нужно...
3. отключились от базы
4. скриптом формируем все документы которые нужны
все запросы идут от имени админа, вроде эт не страшно т.к. на чтение ну и т.д. Скорость вот что главное
ps
спасибо техподдержке за быстрый старт типа 'Hello Word'
и конечно функции Application.GetADOConnect() которая не отработала корректно для текущего юзера (уже исправлена) и пришлось подключаться как админу
одна ошибка - а сколько открылось перспектив по быстродействию!!!!!