Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Перевод с VBA на SQL  [new]
Stanislav L.
Member

Откуда:
Сообщений: 34
Решение к сожалению так и не найдено

но результаты такие

CREATE POCEDURE calc
@numstr char,
@FORM char,
@sumCol,
@sum real output
SA
BEGIN
SELECT @Form
@sum1=sum(case @numstr where not null then @form.@sumCol else 0 end)
END


--
CREATE POCEDURE EvCode
@EvCode char,
@Form char,
@Result1 real outut,
@Result2 real outut,
@Result3 real outut,
@Result4 real outut,
@Result5 real outut,
@Result6 real outut,
@Result7 real outut,
@Result8 real outut,
@Result9 real outut,
AS
BEGIN
CASE @Form
where @EvCode then
begin
@Result1 = calc('22',@Form,'13')
@Result2 = calc('22',@Form,'14')
@Result3 = calc('22',@Form,'15')
@Result4 = calc('23',@Form,'13')
@Result5 = calc('23',@Form,'14')
@Result6 = calc('23',@Form,'15')
@Result7 = calc('24',@Form,'13')
@Result8 = calc('24',@Form,'14')
@Result9 = calc('24',@Form,'15')
END

--
Select FROM TP.LES
'PP101'=sum(case table.who when true then TP.Result('ПП101','TP.LES') ) else 0 end),
и так далее около 40 вариантов.

Понимаю, что Outer может быть только один. Но как решить вопрос не разобраться.


То что есть на VBA
+
Sub TP_Form()
For r = 1 To 8
If names_GU(path_fil, r) <> 0 Then
If WorkbookIsOpen(T_File) = True Then Workbooks(T_File).Close SaveChanges = False

Workbooks.Open Filename:=(ThisWorkbook.Path + "\" + names_GU(path_fil, r) + "\" + T_File)

SetShortNames
MaxRow = GetMaxRow(TP, 2, 37)

For i = 11 To MaxRow
If TP.Cells(i, 24) = "Ëåñíè÷åñòâî" Or Flag_A(i) = True Then
'If TP.Cells(i, 19) <> 0 Then
If TP.Cells(i, 3) = "ÏÏ100" Then tf = run_tp(17, i)
wCode = TP.Cells(i, 3)
If wCode = "ÏÏ101" Then tf = run_tp(19, i)
If wCode = "ÏÏ160" Then tf = run_tp(29, i)
If wCode = "ËÏ200" Then tf = run_tp(33, i)
If wCode = "ËÏ220" Then tf = run_tp(35, i)
If wCode = "ËÏ220" Then tf = run_tp(37, i)
If wCode = "ËÏ220" Then tf = run_tp(39, i)
If wCode = "ÏËÊ" Then tf = run_tp(60, i)
If wCode = "ÏÑÂ" Then tf = run_tp(62, i)
If wCode = "ÑÅÂ" Then tf = run_tp(63, i)
If wCode = "ÊÌÁ" Then tf = run_tp(64, i)
If wCode = "ËÐ510" Then tf = run_tp(65, i)
If wCode = "Â300" Then tf = run_tp(67, i)
If wCode = "ÄËÊ" Then tf = run_tp(68, i)
If wCode = "Â310" Or wCode = "Â311" Then tf = run_tp(69, i)
If wCode = "Â312" Then tf = run_tp(70, i)
If wCode = "Â311" Then tf = run_tp(71, i)
If wCode = "ÐÌ100" Then tf = run_tp(73, i)
If wCode = "Â350" Or wCode = "Â370" Or wCode = "Â380" Or wCode = "Â390" Then tf = run_tp(102, i)
If wCode = "Â350" Then tf = run_tp(103, i)
If wCode = "Â360" Then tf = run_tp(106, i)
If wCode = "ÂÏ390" Then tf = run_tp(111, i)
If wCode = "ËÑÓ" Then tf = run_tp(116, i)
If wCode = "ÎÒÂõ" Or wCode = "ÎÒÂì" Then tf = run_tp(118, i)
If wCode = "ÎÒÓ" Then tf = run_tp(119, i)
If wCode = "ÎÒÑõ" Or wCode = "ÎÒÑì" Then tf = run_tp(120, i)
If wCode = "ÎÑÂ" Or wCode = "ÏÐ×" Then tf = run_tp(79, i)
If wCode = "ÏÐÆ" Then tf = run_tp(82, i)
If wCode = "ÏÐÕ" Then tf = run_tp(85, i)
If wCode = "ÎÁÍ" Then tf = run_tp(88, i)
If wCode = "ÏÐÔ" Then tf = run_tp(91, i)
If wCode = "ÐÊÐ" Then tf = run_tp(97, i)
If wCode = "ÐÊÐì" Then tf = run_tp(100, i)

'Ñïðàâêà
If wCode = "ÏÏ110" Then
tf = Spravka_tp(16, i)
tf = run_tp(31, i)
End If
If wCode = "ÏÏ111" Then
tf = Spravka_tp(17, i)
tf = run_tp(31, i)
End If
If wCode = "ÏÏ170" Then
tf = Spravka_tp(18, i)
tf = run_tp(31, i)
End If
If wCode = "ÏÏ150" And wCode = "ÏÏ210" Then
tf = Spravka_tp(21, i)
tf = run_tp(31, i)
End If
If wCode = "ÏÏ140" Then
tf = Spravka_tp(19, i)
tf = run_tp(31, i)
End If
If wCode = "ÏÏ200" Then
tf = Spravka_tp(23, i)
tf = run_tp(31, i)
End If
If wCode = "ÏÐÑ" Then
tf = Spravka_tp(25, i)
tf = run_tp(101, i)
End If
If wCode = "ÏÐÇ" Then
tf = Spravka_tp(26, i)
tf = run_tp(101, i)
End If
If wCode = "ÏÏ150" Then tf = Spravka_tp(21, i)
If wCode = "ÏÏ220" Then tf = Spravka_tp(23, i)
If wCode = "ÐÌ200" Then tf = Spravka_tp(24, i)


End If


Next i
Workbooks(T_File).Close SaveChanges = False
End If
Next r

End Sub

---



Function run_tp(num_str, str_tp)
run_tp = True

Flag = False

For j = 3 To 65535
If TPa.Cells(j, 1) = Empty Then Exit For
If CStr(TPa.Cells(j, 1)) = CStr(TP.Cells(str_tp, 2)) Then Flag = True
Next j

met = False

If Flag = False Then
' If Workbooks(T_File).Worksheets(T_Form).Cells(str_tp, 19) <> 0 Then
If TP.Cells(str_tp, 21) <> 0 Then '13 '/*
If num_str <> 31 And num_str <> 115 Then
THm.Cells(num_str, 14) = THm.Cells(num_str, 14) + CDbl(TP.Cells(str_tp, 13))
If num_str >= 79 And num_str <= 100 Then
THm.Cells(num_str + 1, 14) = THm.Cells(num_str + 1, 14) + CDbl(TP.Cells(str_tp, 14))
If num_str + 2 <> 102 Then THm.Cells(num_str + 2, 14) = THm.Cells(num_str + 2, 14) + CDbl(TP.Cells(str_tp, 15))
End If
End If
End If

If TP.Cells(str_tp, 22) <> 0 And num_str <> 115 And THm.Cells(num_str, 18) <> "x" Then '13 '/*
THm.Cells(num_str, 18) = THm.Cells(num_str, 18) + CDbl(TP.Cells(str_tp, 13))
If num_str >= 79 And num_str <= 100 Then
THm.Cells(num_str + 1, 18) = THm.Cells(num_str + 1, 18) + CDbl(TP.Cells(str_tp, 14))
If num_str + 2 <> 102 Then THm.Cells(num_str + 2, 18) = THm.Cells(num_str + 2, 18) + CDbl(TP.Cells(str_tp, 15))
End If
End If


If TP.Cells(str_tp, 23) <> 0 And num_str <> 115 Then '13 '/*
THm.Cells(num_str, 20) = THm.Cells(num_str, 20) + CDbl(TP.Cells(str_tp, 13))
If num_str >= 79 And num_str <= 100 Then
THm.Cells(num_str + 1, 20) = THm.Cells(num_str + 1, 20) + CDbl(TP.Cells(str_tp, 14))
If num_str + 2 <> 102 Then THm.Cells(num_str + 2, 20) = THm.Cells(num_str + 2, 20) + CDbl(TP.Cells(str_tp, 15))
End If
End If

If num_str >= 79 And num_str <= 100 Then num_str = num_str + 1 '/****
THm.Cells(num_str, 21) = THm.Cells(num_str, 21) + TP.Cells(str_tp, 23) / 1000 '/*
THm.Cells(num_str, 19) = THm.Cells(num_str, 19) + TP.Cells(str_tp, 22) / 1000 '/*
If num_str <> 31 Or num_str <> 51 Or num_str <> 101 <> 115 Then
THm.Cells(num_str, 15) = THm.Cells(num_str, 15) + TP.Cells(str_tp, 21) / 1000 '/*
End If


End If

If met = True Then

met:

If num_str <> 31 Then
THm.Cells(num_str, 24) = THm.Cells(num_str, 24) + CDbl(TP.Cells(str_tp, 13))
If num_str >= 79 And num_str <= 100 Then
THm.Cells(num_str + 1, 24) = THm.Cells(num_str + 1, 24) + CDbl(TP.Cells(str_tp, 14))
If num_str + 2 <> 102 Then THm.Cells(num_str + 2, 24) = THm.Cells(num_str + 2, 24) + CDbl(TP.Cells(str_tp, 15))
End If
End If
THm.Cells(num_str, 25) = THm.Cells(num_str, 25) + CDbl(TP.Cells(str_tp, 20)) '/*

End If

Flag = False

For j = 3 To 65535 '13
If Workbooks(T_File).Worksheets(A_Form).Cells(j, 1) = Empty Then Exit For
If CStr(Workbooks(T_File).Worksheets(A_Form).Cells(j, 1)) = CStr(TP.Cells(str_tp, 2)) Then
Flag = True
Exit For
End If
Next j

If Flag = True And THm.Cells(num_str, 24) <> "x" Then
THm.Cells(num_str, 24) = THm.Cells(num_str, 24) + (TP.Cells(str_tp, 13))
If num_str >= 79 And num_str <= 100 Then
THm.Cells(num_str + 1, 24) = THm.Cells(num_str + 1, 24) + CDbl(TP.Cells(str_tp, 14))
If num_str + 2 <> 102 Then THm.Cells(num_str + 2, 24) = THm.Cells(num_str + 2, 24) + CDbl(TP.Cells(str_tp, 15))
End If
End If
End Function

13 май 11, 10:33    [10645607]     Ответить | Цитировать Сообщить модератору
 Re: Перевод с VBA на SQL  [new]
Glory
Member

Откуда:
Сообщений: 104751
Stanislav L.
Решение к сожалению так и не найдено

А задача то будет оглашена ?
13 май 11, 10:39    [10645651]     Ответить | Цитировать Сообщить модератору
 Re: Перевод с VBA на SQL  [new]
Stanislav L.
Member

Откуда:
Сообщений: 34
Glory,

Задача? Есть скрипт на VBA теперь это преводится в SQL. Я показал как на настоящий момнет пытаюсь решать проблемму.
Но мне кажется существует более практичное решение. Тем более что приведённый листин для SQL не рабочий.
13 май 11, 10:48    [10645737]     Ответить | Цитировать Сообщить модератору
 Re: Перевод с VBA на SQL  [new]
Glory
Member

Откуда:
Сообщений: 104751
Stanislav L.
Glory,

Задача? Есть скрипт на VBA теперь это преводится в SQL. Я показал как на настоящий момнет пытаюсь решать проблемму.
Но мне кажется существует более практичное решение. Тем более что приведённый листин для SQL не рабочий.

По миграции кода без его объяснения обращаейтесь в форум Работа
Догадываться по вашей "простыне" кода, что вы там хотите реализовать, никто не будет
13 май 11, 10:50    [10645756]     Ответить | Цитировать Сообщить модератору
 Re: Перевод с VBA на SQL  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
исходя из vba ето какието шуры- муры с екселем, но че конкретно то надо ?????
да и t-sql весь нерабочий.......
13 май 11, 10:52    [10645776]     Ответить | Цитировать Сообщить модератору
 Re: Перевод с VBA на SQL  [new]
Stanislav L.
Member

Откуда:
Сообщений: 34
Maxx,

Та я о том и пишу что не рабочий, но если на пальцах
пришел к варианту: окло сорока однотипных блоков(отичаются строкми выборки)

Eventcode=(40 вариантов)
{
If Who= true then
if String21<>0 then
'2113'=sum(string13)
'2113'=sum(string14)
'2113'=sum(string15)
if String22<>0 then
'2213'=sum(string13)
'2213'=sum(string14)
'2213'=sum(string15)
if String23<>0 then
'2313'=sum(string13)
'2313'=sum(string14)
'2313'=sum(string15)
end if
}

Будет как то так, но как реалзовать это на SQL сломал мозг.
13 май 11, 11:01    [10645863]     Ответить | Цитировать Сообщить модератору
 Re: Перевод с VBA на SQL  [new]
Glory
Member

Откуда:
Сообщений: 104751
Stanislav L.
Будет как то так, но как реалзовать это на SQL сломал мозг.

https://www.sql.ru/forum/actualthread.aspx?tid=127456
13 май 11, 11:03    [10645877]     Ответить | Цитировать Сообщить модератору
 Re: Перевод с VBA на SQL  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
if String23<>0 then
'2313'=sum(string13)
'2313'=sum(string14)
'2313'=sum(string15)
end if
я канечно тне помню уже вба на все 100,но помоему для любого языка такая кострукция выглядит минимум странно......
13 май 11, 11:05    [10645901]     Ответить | Цитировать Сообщить модератору
 Re: Перевод с VBA на SQL  [new]
Stanislav L.
Member

Откуда:
Сообщений: 34
Glory
Stanislav L.
Будет как то так, но как реалзовать это на SQL сломал мозг.

https://www.sql.ru/forum/actualthread.aspx?tid=127456


Спасибо за напоминиание правил форума. Я читал их прежде чем сделать сообщение. Извините если, что то нарушил.
Сервер:
Microsoft SQL Server 2008 (SP1) - 10.0.2714.0 (X64) May 14 2009 16:08:52 Copyright (c) 1988-2008 Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
Пользую Managment Studio и ReportBuilder 3.0.
13 май 11, 11:47    [10646303]     Ответить | Цитировать Сообщить модератору
 Re: Перевод с VBA на SQL  [new]
Glory
Member

Откуда:
Сообщений: 104751
Stanislav L.
Glory
пропущено...

https://www.sql.ru/forum/actualthread.aspx?tid=127456


Спасибо за напоминиание правил форума. Я читал их прежде чем сделать сообщение. Извините если, что то нарушил.
Сервер:
Microsoft SQL Server 2008 (SP1) - 10.0.2714.0 (X64) May 14 2009 16:08:52 Copyright (c) 1988-2008 Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
Пользую Managment Studio и ReportBuilder 3.0.

Где постановка задачи ?
13 май 11, 11:48    [10646315]     Ответить | Цитировать Сообщить модератору
 Re: Перевод с VBA на SQL  [new]
Stanislav L.
Member

Откуда:
Сообщений: 34
Maxx,

Да в SQL нет как таковой конструкии IF, но основной код взят с рабочего запроса MS SQL. Здесь желание показать больше логическую структуру.
13 май 11, 11:48    [10646322]     Ответить | Цитировать Сообщить модератору
 Re: Перевод с VBA на SQL  [new]
Stanislav L.
Member

Откуда:
Сообщений: 34
Glory,

Задача:из логической структуры сообщения 10645863 сделать коррекный запрос к, результатом будет 9 столбцов и около 40 строк, в каждой ячейке будет сумма. Сумма формируемая многовложенныйми условиями.
13 май 11, 11:56    [10646409]     Ответить | Цитировать Сообщить модератору
 Re: Перевод с VBA на SQL  [new]
Glory
Member

Откуда:
Сообщений: 104751
Stanislav L.
Glory,

Задача:из логической структуры сообщения 10645863 сделать коррекный запрос к, результатом будет 9 столбцов и около 40 строк, в каждой ячейке будет сумма. Сумма формируемая многовложенныйми условиями.

Еще раз - никто не будет читать вашу простыню кода и догадываться, что вам нужно
Делайте постановку задачи или тема будет закрыта
13 май 11, 12:02    [10646460]     Ответить | Цитировать Сообщить модератору
 Re: Перевод с VBA на SQL  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Stanislav L.,

от спасибо просветили
и кстате, IF таки есть....
я ваще про другое у вас идетие переприсвоение... 3 раза
результат то будет

'2313'=sum(string15)
зачем еще 2 оператора перед етим ?
13 май 11, 12:06    [10646505]     Ответить | Цитировать Сообщить модератору
 Re: Перевод с VBA на SQL  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
а вообще
case 
вам в руки
13 май 11, 12:06    [10646516]     Ответить | Цитировать Сообщить модератору
 Re: Перевод с VBA на SQL  [new]
Stanislav L.
Member

Откуда:
Сообщений: 34
Glory,

Простите за мою непонятливаость. Скажите, как сделать так, что бы всё было корректоно?
P.S.
Простыню кода никого не заствляю читать и разбиратся, т.к. из неё есть "логическая выжимка". Код нужет для решения возможных спорных моментов.
13 май 11, 12:12    [10646577]     Ответить | Цитировать Сообщить модератору
 Re: Перевод с VBA на SQL  [new]
Glory
Member

Откуда:
Сообщений: 104751
Stanislav L.
Glory,

Простите за мою непонятливаость. Скажите, как сделать так, что бы всё было корректоно?

Прочитать Рекомендации и выполнить их
Особенно п.6
13 май 11, 12:14    [10646602]     Ответить | Цитировать Сообщить модератору
 Re: Перевод с VBA на SQL  [new]
Stanislav L.
Member

Откуда:
Сообщений: 34
Maxx,

Простите моя поечатка:
'2313'=sum(string13)
'2314'=sum(string14)
'2315'=sum(string15)
Конечно так!

Я понимаю, что
Case
мне в помощь, но мне не понятно как с его помощью сделать многоуровневые условия. Если у Вас есть пример, хотя бы отдалённо похожий на эту задачу, напишите пожалуйста.
13 май 11, 12:15    [10646611]     Ответить | Цитировать Сообщить модератору
 Re: Перевод с VBA на SQL  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
так вас и прсоят написать что должен делать скл код, никто кроме вас пока не догадываеться о том что конкретно то нужно в конце... Glory уже 3й раз просит озвучить задачу...
13 май 11, 12:19    [10646662]     Ответить | Цитировать Сообщить модератору
 Re: Перевод с VBA на SQL  [new]
Stanislav L.
Member

Откуда:
Сообщений: 34
Glory,

Есть Exel форма 120 на 40 ячеек. В неё встоен скрипт, VBA который из дугой формы TP, выбирает и суммирует колонки, записывая результат в одну из ячеек.

исходные данные :
Состав формы из которыйх выбираются значения:
+

EventCode CHAR(140) ***(2)
Rent CHAR(50)
#kv INTEGER
#vd INTEGER
#dl INTEGER
Measure CHAR(7)
VolumeAll REAL
VolumeActual REAL
GetAll REAL ***(13)
GetGood REAL ***(14)
GetLiquid Real *** (15)
nGetAll REAL
nGetCuse REAL
Cost4Unit REAL
CostAll REAL
Pay1 REAL
Pay2 REAL ***(21)
Pay3 REAL ***(22)
Pay4 REAL ***(23)
Pay5 REAL
Who BIT ***(25)
Users CHAR(30)


Исходник на VBA
+

Sub TP_Form()
For r = 1 To 8
If names_GU(path_fil, r) <> 0 Then
If WorkbookIsOpen(T_File) = True Then Workbooks(T_File).Close SaveChanges = False

Workbooks.Open Filename:=(ThisWorkbook.Path + "\" + names_GU(path_fil, r) + "\" + T_File)

SetShortNames
MaxRow = GetMaxRow(TP, 2, 37)

For i = 11 To MaxRow
If TP.Cells(i, 24) = "Ëåñíè÷åñòâî" Or Flag_A(i) = True Then
'If TP.Cells(i, 19) <> 0 Then
If TP.Cells(i, 3) = "ÏÏ100" Then tf = run_tp(17, i)
wCode = TP.Cells(i, 3)
If wCode = "ÏÏ101" Then tf = run_tp(19, i)
If wCode = "ÏÏ160" Then tf = run_tp(29, i)
If wCode = "ËÏ200" Then tf = run_tp(33, i)
If wCode = "ËÏ220" Then tf = run_tp(35, i)
If wCode = "ËÏ220" Then tf = run_tp(37, i)
If wCode = "ËÏ220" Then tf = run_tp(39, i)
If wCode = "ÏËÊ" Then tf = run_tp(60, i)
If wCode = "ÏÑÂ" Then tf = run_tp(62, i)
If wCode = "ÑÅÂ" Then tf = run_tp(63, i)
If wCode = "ÊÌÁ" Then tf = run_tp(64, i)
If wCode = "ËÐ510" Then tf = run_tp(65, i)
If wCode = "Â300" Then tf = run_tp(67, i)
If wCode = "ÄËÊ" Then tf = run_tp(68, i)
If wCode = "Â310" Or wCode = "Â311" Then tf = run_tp(69, i)
If wCode = "Â312" Then tf = run_tp(70, i)
If wCode = "Â311" Then tf = run_tp(71, i)
If wCode = "ÐÌ100" Then tf = run_tp(73, i)
If wCode = "Â350" Or wCode = "Â370" Or wCode = "Â380" Or wCode = "Â390" Then tf = run_tp(102, i)
If wCode = "Â350" Then tf = run_tp(103, i)
If wCode = "Â360" Then tf = run_tp(106, i)
If wCode = "ÂÏ390" Then tf = run_tp(111, i)
If wCode = "ËÑÓ" Then tf = run_tp(116, i)
If wCode = "ÎÒÂõ" Or wCode = "ÎÒÂì" Then tf = run_tp(118, i)
If wCode = "ÎÒÓ" Then tf = run_tp(119, i)
If wCode = "ÎÒÑõ" Or wCode = "ÎÒÑì" Then tf = run_tp(120, i)
If wCode = "ÎÑÂ" Or wCode = "ÏÐ×" Then tf = run_tp(79, i)
If wCode = "ÏÐÆ" Then tf = run_tp(82, i)
If wCode = "ÏÐÕ" Then tf = run_tp(85, i)
If wCode = "ÎÁÍ" Then tf = run_tp(88, i)
If wCode = "ÏÐÔ" Then tf = run_tp(91, i)
If wCode = "ÐÊÐ" Then tf = run_tp(97, i)
If wCode = "ÐÊÐì" Then tf = run_tp(100, i)

'Ñïðàâêà
If wCode = "ÏÏ110" Then
tf = Spravka_tp(16, i)
tf = run_tp(31, i)
End If
If wCode = "ÏÏ111" Then
tf = Spravka_tp(17, i)
tf = run_tp(31, i)
End If
If wCode = "ÏÏ170" Then
tf = Spravka_tp(18, i)
tf = run_tp(31, i)
End If
If wCode = "ÏÏ150" And wCode = "ÏÏ210" Then
tf = Spravka_tp(21, i)
tf = run_tp(31, i)
End If
If wCode = "ÏÏ140" Then
tf = Spravka_tp(19, i)
tf = run_tp(31, i)
End If
If wCode = "ÏÏ200" Then
tf = Spravka_tp(23, i)
tf = run_tp(31, i)
End If
If wCode = "ÏÐÑ" Then
tf = Spravka_tp(25, i)
tf = run_tp(101, i)
End If
If wCode = "ÏÐÇ" Then
tf = Spravka_tp(26, i)
tf = run_tp(101, i)
End If
If wCode = "ÏÏ150" Then tf = Spravka_tp(21, i)
If wCode = "ÏÏ220" Then tf = Spravka_tp(23, i)
If wCode = "ÐÌ200" Then tf = Spravka_tp(24, i)


End If


Next i
Workbooks(T_File).Close SaveChanges = False
End If
Next r

End Sub

---



Function run_tp(num_str, str_tp)
run_tp = True

Flag = False

For j = 3 To 65535
If TPa.Cells(j, 1) = Empty Then Exit For
If CStr(TPa.Cells(j, 1)) = CStr(TP.Cells(str_tp, 2)) Then Flag = True
Next j

met = False

If Flag = False Then
' If Workbooks(T_File).Worksheets(T_Form).Cells(str_tp, 19) <> 0 Then
If TP.Cells(str_tp, 21) <> 0 Then '13 '/*
If num_str <> 31 And num_str <> 115 Then
THm.Cells(num_str, 14) = THm.Cells(num_str, 14) + CDbl(TP.Cells(str_tp, 13))
If num_str >= 79 And num_str <= 100 Then
THm.Cells(num_str + 1, 14) = THm.Cells(num_str + 1, 14) + CDbl(TP.Cells(str_tp, 14))
If num_str + 2 <> 102 Then THm.Cells(num_str + 2, 14) = THm.Cells(num_str + 2, 14) + CDbl(TP.Cells(str_tp, 15))
End If
End If
End If

If TP.Cells(str_tp, 22) <> 0 And num_str <> 115 And THm.Cells(num_str, 18) <> "x" Then '13 '/*
THm.Cells(num_str, 18) = THm.Cells(num_str, 18) + CDbl(TP.Cells(str_tp, 13))
If num_str >= 79 And num_str <= 100 Then
THm.Cells(num_str + 1, 18) = THm.Cells(num_str + 1, 18) + CDbl(TP.Cells(str_tp, 14))
If num_str + 2 <> 102 Then THm.Cells(num_str + 2, 18) = THm.Cells(num_str + 2, 18) + CDbl(TP.Cells(str_tp, 15))
End If
End If


If TP.Cells(str_tp, 23) <> 0 And num_str <> 115 Then '13 '/*
THm.Cells(num_str, 20) = THm.Cells(num_str, 20) + CDbl(TP.Cells(str_tp, 13))
If num_str >= 79 And num_str <= 100 Then
THm.Cells(num_str + 1, 20) = THm.Cells(num_str + 1, 20) + CDbl(TP.Cells(str_tp, 14))
If num_str + 2 <> 102 Then THm.Cells(num_str + 2, 20) = THm.Cells(num_str + 2, 20) + CDbl(TP.Cells(str_tp, 15))
End If
End If

If num_str >= 79 And num_str <= 100 Then num_str = num_str + 1 '/****
THm.Cells(num_str, 21) = THm.Cells(num_str, 21) + TP.Cells(str_tp, 23) / 1000 '/*
THm.Cells(num_str, 19) = THm.Cells(num_str, 19) + TP.Cells(str_tp, 22) / 1000 '/*
If num_str <> 31 Or num_str <> 51 Or num_str <> 101 <> 115 Then
THm.Cells(num_str, 15) = THm.Cells(num_str, 15) + TP.Cells(str_tp, 21) / 1000 '/*
End If


End If

If met = True Then

met:

If num_str <> 31 Then
THm.Cells(num_str, 24) = THm.Cells(num_str, 24) + CDbl(TP.Cells(str_tp, 13))
If num_str >= 79 And num_str <= 100 Then
THm.Cells(num_str + 1, 24) = THm.Cells(num_str + 1, 24) + CDbl(TP.Cells(str_tp, 14))
If num_str + 2 <> 102 Then THm.Cells(num_str + 2, 24) = THm.Cells(num_str + 2, 24) + CDbl(TP.Cells(str_tp, 15))
End If
End If
THm.Cells(num_str, 25) = THm.Cells(num_str, 25) + CDbl(TP.Cells(str_tp, 20)) '/*

End If

Flag = False

For j = 3 To 65535 '13
If Workbooks(T_File).Worksheets(A_Form).Cells(j, 1) = Empty Then Exit For
If CStr(Workbooks(T_File).Worksheets(A_Form).Cells(j, 1)) = CStr(TP.Cells(str_tp, 2)) Then
Flag = True
Exit For
End If
Next j

If Flag = True And THm.Cells(num_str, 24) <> "x" Then
THm.Cells(num_str, 24) = THm.Cells(num_str, 24) + (TP.Cells(str_tp, 13))
If num_str >= 79 And num_str <= 100 Then
THm.Cells(num_str + 1, 24) = THm.Cells(num_str + 1, 24) + CDbl(TP.Cells(str_tp, 14))
If num_str + 2 <> 102 Then THm.Cells(num_str + 2, 24) = THm.Cells(num_str + 2, 24) + CDbl(TP.Cells(str_tp, 15))
End If
End If
End Function



Что используется:
MS SQL SP1 + Managment Studio + Report Builder 3.0 (В итоге Shartepoint + Report Builder )

Задача:
Из формы ТР просумировать поля отмеченный отмеченный "***" с номерами 13,14,15.
Условие выборки: поле 2 задаются определённые текстовые значения(40 штук), для 25 bit начение, так же наоходимо сравнивать значаниея столбцов с нулем 21,22,23. В результате выполнения этих условий просумируются соотвествующие столбцы 13,14,15.

На мой взгляд возможное логическое решение:
+

Eventcode=(все 40 вариантов сразу)
{
If Who= true then
if String21<>0 then
'2113'=sum(string13)
'2114'=sum(string14)
'2115'=sum(string15)
if String22<>0 then
'2213'=sum(string13)
'2214'=sum(string14)
'2215'=sum(string15)
if String23<>0 then
'2313'=sum(string13)
'2314'=sum(string14)
'2315'=sum(string15)
end if
}
[/src]


Т.е. в результат, похож на exel таблицу, где в строках EventCode(40 штук), а в столбцах 9 колонок (т.е. 3 раза по "GetAll, GetGood, GetLiquid" для 21<>0, 22<>0, 23<>0)

Будет выглядеть так
+

(EvetCode/Result)
Result 2113 | Result 2114 | Result 2115 | Result 2213 | Result 2214 | Result 2215 | Result 2313 | Result 2314 | Result 2315

А100
А101
В400
С500
С250
...
В120



Для работы в RepotBuilder 3.0 нужны толко поля, дизайн формы моно наприсовать любой.
13 май 11, 13:46    [10647412]     Ответить | Цитировать Сообщить модератору
 Re: Перевод с VBA на SQL  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
о как и думал ето Ексель ... только вот савсем не понятно зачем вам sqlserver для етого то ??? Он то какую роль выполнять будет между репорбилдером и екселем ?????
13 май 11, 13:53    [10647496]     Ответить | Цитировать Сообщить модератору
 Re: Перевод с VBA на SQL  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
а вообще если подумать что ето просто таблица а не ексель форма ..то вписываеться в PIVOT
13 май 11, 13:56    [10647532]     Ответить | Цитировать Сообщить модератору
 Re: Перевод с VBA на SQL  [new]
Stanislav L.
Member

Откуда:
Сообщений: 34
Maxx,

Вы можете себе представить базу данных на exel, где около 400 таблиц в каждой из которых по неколько тысяч сток. Где есть около 100 форм отчётности собирающих данные из этих 400 взаяимосвязанных форм?
А оно сейчас работает 8) как? не спрашивайте %)

Может быть по этому и вопросы такие, так что не серчайте.
13 май 11, 14:17    [10647748]     Ответить | Цитировать Сообщить модератору
 Re: Перевод с VBA на SQL  [new]
Stanislav L.
Member

Откуда:
Сообщений: 34
Maxx
а вообще если подумать что ето просто таблица а не ексель форма ..то вписываеться в PIVOT


По подробнее можно?
13 май 11, 14:18    [10647760]     Ответить | Цитировать Сообщить модератору
 Re: Перевод с VBA на SQL  [new]
Glory
Member

Откуда:
Сообщений: 104751
Stanislav L.
Glory,

Есть Exel форма 120 на 40 ячеек. В неё встоен скрипт, VBA который из дугой формы TP, выбирает и суммирует колонки, записывая результат в одну из ячеек.

А причем тут тогда MSSQL ? Как он будет участвовать в формировании вашего Exсel файла ?
13 май 11, 14:21    [10647801]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить