Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Нужна помощь в создании VBS скрипта / 25 сообщений из 68, страница 1 из 3
26.07.2012, 14:16
    #37893835
NecroTYN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в создании VBS скрипта
Здравствуйте господа форумчане !!!
Помогите пожалуйста с решением следующей задачи -
Есть код для вычисления даты выдачи заказа по количеству рабочих дней (см. под спойлером)


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
Option Explicit

Const adOpenStatic     = 3
Const adLockOptimistic = 3

Dim strDatabase
Dim lngID

Dim objFSO
Dim objConnection
Dim objRecordset

Dim dtStartDate
Dim dtEndDate
Dim lngCount

Dim prevLocale


If WScript.Arguments.Count = 2 Then
    strDatabase = Mid(WScript.Arguments.Item(0), 2)
    lngID = Mid(WScript.Arguments.Item(1), 2)
    
    Set objFSO        = WScript.CreateObject("Scripting.FileSystemObject")
    Set objConnection = WScript.CreateObject("ADODB.Connection")
    Set objRecordset  = WScript.CreateObject("ADODB.Recordset")
    
    If objFSO.FileExists(strDatabase) Then
        objConnection.Open "Provider = Microsoft.Jet.OLEDB.4.0; " & _
            "Data Source = '" & strDatabase & "'"
        
        With objRecordset
            .Open "SELECT * FROM qdfOrders WHERE ID = " & CStr(lngID) & "", objConnection, adOpenStatic, adLockOptimistic
            dtStartDate = CDate(.Fields.Item("OrderDate").Value)
            .Close
            
            .Open "SELECT * FROM tblHolidays", objConnection, adOpenStatic, adLockOptimistic
            
            dtEndDate = dtStartDate
            lngCount = 0
            
            Do Until lngCount >= 21
                dtEndDate = DateAdd("d", 1, dtEndDate)
                
                Select Case WeekdayName(Weekday(dtEndDate))
                    Case "суббота", "воскресенье"
                    
                    Case Else
                        prevLocale = SetLocale("en-us")
                        .Filter = "HolidayDate = #" & dtEndDate & "#"
                        SetLocale(prevLocale)
                        
                        If .RecordCount = 0 Then
                            lngCount = lngCount + 1
                        End If
                End Select
            Loop
            
            .Close
        End With
        
        prevLocale = SetLocale("en-us")
        objConnection.Execute "UPDATE qdfOrders SET DoneDate = #" & dtEndDate & "# WHERE ID = " & CStr(lngID) & ""
        SetLocale(prevLocale)
        
        objConnection.Close
    Else
        WScript.Echo "Database file [" & strDatabase & "] not found"
    End If
    
    Set objRecordset  = Nothing
    Set objConnection = Nothing
    Set objFSO        = Nothing
Else
    WScript.Echo "Usage from toolbar on [Склад и торговля]:"
    WScript.Echo "" & WScript.ScriptName & " /[CurrentDB] /[ID]"
End If

WScript.Quit 0



Что в нем не так ???

1.Нужно сделать чтобы количество рабочих дней (в данном случае 21) можно было менять в таблице Б/Д - qdfOrders поле "Time"
2.Расчет выходных дней надо сделать следующим образом :
а) Заполняем «tblHolidays» списком суббот, воскресений, известных праздников N-ного года.
б) Посему из алгоритма выкидываем проверку на субботы и воскресенья.
в) Выправление заполненного списка до реальности (перенос выходных дней с субботы и воскресенья на будние дни) оставляем на совести оператора.
...
Рейтинг: 0 / 0
26.07.2012, 14:55
    #37893902
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в создании VBS скрипта
База не в аксессе ли?
...
Рейтинг: 0 / 0
26.07.2012, 15:16
    #37893943
NecroTYN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в создании VBS скрипта
база в аксессе, но используется через другую программу http://www.simple-soft.ru/ProductsCount.htm
...
Рейтинг: 0 / 0
26.07.2012, 16:24
    #37894063
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в создании VBS скрипта
NecroTYN...
Есть код для вычисления даты выдачи заказа по количеству рабочих дней
...

Что в нем не так ???
...

Да всё "так". Неужели неправильно считает?
...
Рейтинг: 0 / 0
26.07.2012, 16:44
    #37894103
NecroTYN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в создании VBS скрипта
скукотищаДа всё "так". Неужели неправильно считает?
считает то правильно, но как я описАл выше нужно реализовать следующее:
нужно сделать чтобы количество дней могло меняться оператором, и реализовать выборку выходных дней из отдельной таблицы «tblHolidays», которую в свою очередь заполняет оператор...
...
Рейтинг: 0 / 0
26.07.2012, 17:15
    #37894162
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в создании VBS скрипта
NecroTYN,

> нужно сделать чтобы количество дней могло меняться оператором,
добавьте ещё один параметр в скрипт

> и реализовать выборку выходных дней из отдельной таблицы «tblHolidays»
вроде оно у Вас уже есть
Код: vbnet
1.
                .Open "SELECT * FROM tblHolidays", objConnection, adOpenStatic, adLockOptimistic



> которую в свою очередь заполняет оператор...
заполнять тоже в скрипте надо ?
...
Рейтинг: 0 / 0
26.07.2012, 17:34
    #37894200
NecroTYN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в создании VBS скрипта
скукотищазаполнять тоже в скрипте надо ?
Нет конечно, заполнять в таблице Б/Д - qdfOrders поле "Time",
...
Рейтинг: 0 / 0
26.07.2012, 17:39
    #37894213
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в создании VBS скрипта
NecroTYN,
тогда у Вас почти всё есть. Надеюсь, добавить параметр скрипту не проблема.

ЗЫ: не думали над тем, чтобы в tblHolidays вносить ВСЕ выходные, включая "обычные" субботы и воскресенья?
...
Рейтинг: 0 / 0
26.07.2012, 19:15
    #37894342
NecroTYN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в создании VBS скрипта
скукотищаЗЫ: не думали над тем, чтобы в tblHolidays вносить ВСЕ выходные, включая "обычные" субботы и воскресенья?
...ага, именно об этом я и говорю...
...
Рейтинг: 0 / 0
28.07.2012, 06:29
    #37896292
NecroTYN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в создании VBS скрипта
Может все таки кто нибудь поможет ???!!!
...
Рейтинг: 0 / 0
28.07.2012, 20:07
    #37896504
Скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в создании VBS скрипта
NecroTYN,
это не помощь...
Пробуйте.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
' 1) количество рабочих дней читается из таблицы Б/Д - qdfOrders поле "Time", тип целое.
' 2) выходные и праздничные дни - в таблице tblHolidays, заполение на совести оператора.

Option Explicit

Const adOpenStatic     = 3
Const adLockOptimistic = 3

Dim strDatabase
Dim lngID

Dim objFSO
Dim objConnection
Dim objRecordset

Dim dtStartDate
Dim dtEndDate
Dim lngCount

Dim prevLocale


If WScript.Arguments.Count = 2 Then
    strDatabase = Mid(WScript.Arguments(0), 2)
    lngID = Mid(WScript.Arguments(1), 2)
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    
    If objFSO.FileExists(strDatabase) Then
        prevLocale = SetLocale("en-us")
        Set objConnection = CreateObject("ADODB.Connection")
        Set objRecordset  = CreateObject("ADODB.Recordset")
        objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& strDatabase &";"
        
        With objRecordset
            .Open "SELECT * FROM qdfOrders WHERE ID = " & lngID & "", objConnection, adOpenStatic, adLockOptimistic
            dtStartDate = .Fields("OrderDate").Value
	    lngCount    = .Fields("Time").Value 
	    .Close
			
            .Open _
                "SELECT * FROM tblHolidays"& _
                " WHERE HolidayDate BETWEEN #"& dtStartDate &"#"& _
                " AND #"& DateAdd("d", lngCount*2+1, dtStartDate) &"#", _
                objConnection, adOpenStatic, adLockOptimistic
            
            dtEndDate = DateAdd("d", lngCount, dtStartDate)
			
            .Filter  = "HolidayDate>=#"& dtStartDate &"# AND HolidayDate<=#"& dtEndDate &"#" 
            lngCount = .RecordCount
            
            Do While lngCount>0
                dtStartDate = DateAdd("d", 1, dtEndDate)
                dtEndDate   = DateAdd("d", lngCount, dtEndDate)
                .Filter  = "HolidayDate>=#"& dtStartDate &"# AND HolidayDate<=#"& dtEndDate &"#"
                lngCount = .RecordCount
            Loop
			
            .Close
        End With
        
        objConnection.Execute "UPDATE qdfOrders SET DoneDate=#" & dtEndDate & "# WHERE ID=" & lngID
        
        objConnection.Close
        Set objRecordset  = Nothing
        Set objConnection = Nothing
        SetLocale(prevLocale)
    Else
        WScript.Echo "Database file [" & strDatabase & "] not found"
    End If
    
    Set objFSO = Nothing
Else
    WScript.Echo "Usage from toolbar on [Склад и торговля]:"
    WScript.Echo "" & WScript.ScriptName & " /[CurrentDB] /[ID]"
End If

WScript.Quit 0


...
Рейтинг: 0 / 0
28.07.2012, 23:31
    #37896598
NecroTYN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в создании VBS скрипта
СкукотищаПробуйте.
Спасибо огромное !!!
... но к сожалению не сработало...
...может нужно прописывать путь к Б/Д ???

Скукотищаэто не помощь...
???
...
Рейтинг: 0 / 0
28.07.2012, 23:39
    #37896601
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в создании VBS скрипта
NecroTYNСкукотищаэто не помощь...
???

тут по ссылочке - 12381461
разъясняется значение термИна "помощь"

зы
там, правда, для "школьников",
но жителей ЧЕЛЯБИНСКа, видимо, можно к ним отнести ... :))
...
Рейтинг: 0 / 0
29.07.2012, 00:15
    #37896615
NecroTYN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в создании VBS скрипта
off topic
qwerty112
qwerty112тут по ссылочке разъясняется значение термИна "помощь"

Спасибо, прочитал - понял...
qwerty112но жителей ЧЕЛЯБИНСКа, видимо, можно к ним отнести ... :))
видимо некоторых и можно, возможно включая и меня...
...но тем не менее давайте не будем заострять внимание на личностях и их месте жительства
...
Рейтинг: 0 / 0
29.07.2012, 02:58
    #37896652
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в создании VBS скрипта
> NecroTYN
> ... но к сожалению не сработало...
Как именно "не сработало"? Run-time error, не обновило DoneDate в qdfOrders, неверно рассчитало DoneDate, что-то ещё?

> ...может нужно прописывать путь к Б/Д ???
путь к базе, как и в Вашем скрипте, передается первым параметром...
...
Рейтинг: 0 / 0
29.07.2012, 10:45
    #37896697
NecroTYN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в создании VBS скрипта
скукотищаКак именно "не сработало"? Run-time error, не обновило DoneDate в qdfOrders, неверно рассчитало DoneDate, что-то ещё?
поле просто остается пустым
...
Рейтинг: 0 / 0
29.07.2012, 11:03
    #37896700
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в создании VBS скрипта
Скукотища
Код: vbnet
1.
2.
3.
4.
5.
    
...
    If objFSO.FileExists(strDatabase) Then
        prevLocale = SetLocale("en-us")
...



имхо, тут что-то "не то"
так наверное
Код: vbnet
1.
2.
3.
4.
5.
6.
    
...
    If objFSO.FileExists(strDatabase) Then
        prevLocale = GetLocale()
        SetLocale("en-us")
...
...
Рейтинг: 0 / 0
29.07.2012, 11:47
    #37896711
NecroTYN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в создании VBS скрипта
qwerty112,

попробовал по вашему совету - тоже не сработало...
...
Рейтинг: 0 / 0
29.07.2012, 11:49
    #37896712
NecroTYN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в создании VBS скрипта
NecroTYN,

пробовал вешать исполнение как на отдельную кнопку, так и на условие для поля таблицы...
...
Рейтинг: 0 / 0
29.07.2012, 16:30
    #37896867
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в создании VBS скрипта
qwerty112,
полуофф
с SetLocale всё то
...
Рейтинг: 0 / 0
29.07.2012, 16:45
    #37896873
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в создании VBS скрипта
скукотищаqwerty112,
+
полуофф
с SetLocale всё то

да, сори, виноват ...
смотрел на этих ихних МСДН-ах - http://support.microsoft.com/default.aspx?scid=kb;EN-US;232158
там, чё-то про это ничего не сказано ... ))

спасибо !
...
Рейтинг: 0 / 0
29.07.2012, 17:18
    #37896884
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в создании VBS скрипта
qwerty112,
полуофф
описание функций лучше искать не на саппорте, а именно на МСДН
Пример там такой-же хреновый, как и не саппорте, зато в описании упомянуто про возвращаемое функцией значение.
...
Рейтинг: 0 / 0
29.07.2012, 17:34
    #37896892
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в создании VBS скрипта
> NecroTYN,
> поле просто остается пустым

И никаких сообщений об ошибке? Не верю.
Учимся отлаживать скрипты:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
Option Explicit

Const adOpenStatic     = 3
Const adLockOptimistic = 3

Dim strDatabase
Dim lngID

Dim objFSO
Dim objConnection
Dim objRecordset

Dim dtStartDate
Dim dtEndDate
Dim lngCount

Dim prevLocale

'### for debug
dim s, k


If WScript.Arguments.Count = 2 Then
    strDatabase = Mid(WScript.Arguments(0), 2)
    lngID = Mid(WScript.Arguments(1), 2)
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    
    If objFSO.FileExists(strDatabase) Then
        prevLocale = SetLocale("en-us")
        Set objConnection = CreateObject("ADODB.Connection")
        Set objRecordset  = CreateObject("ADODB.Recordset")
        objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& strDatabase &";"
        
        With objRecordset
            .Open "SELECT * FROM qdfOrders WHERE ID = " & lngID & "", objConnection, adOpenStatic, adLockOptimistic
            dtStartDate = .Fields("OrderDate").Value
	    lngCount    = .Fields("Time").Value 
	    .Close

'rem дата должна бы быть в формате m/d/yyyy
wscript.echo "start date: "& dtStartDate & vbtab &"days to deadline:  "& lngcount
			
'            .Open _
'                "SELECT * FROM tblHolidays"& _
'                " WHERE HolidayDate BETWEEN #"& dtStartDate &"#"& _
'                " AND #"& DateAdd("d", lngCount*2+1, dtStartDate) &"#", _
'                objConnection, adOpenStatic, adLockOptimistic

s="SELECT * FROM tblHolidays"& _
" WHERE HolidayDate BETWEEN #"& dtStartDate &"#"& _
" AND #"& DateAdd("d", lngCount*2+1, dtStartDate) &"#"

'rem в сторке запроса даты также должны бы быть в формате m/d/yyyy
wscript.echo s
.open s, objConnection, adOpenStatic, adLockOptimistic

            
            dtEndDate = DateAdd("d", lngCount, dtStartDate)

wscript.echo "deadline zero approximation: "& dtEndDate
			
            .Filter  = "HolidayDate>=#"& dtStartDate &"# AND HolidayDate<=#"& dtEndDate &"#" 
            lngCount = .RecordCount

k=0            
            Do While lngCount>0
                dtStartDate = DateAdd("d", 1, dtEndDate)
                dtEndDate   = DateAdd("d", lngCount, dtEndDate)
                .Filter  = "HolidayDate>=#"& dtStartDate &"# AND HolidayDate<=#"& dtEndDate &"#"
                lngCount = .RecordCount
k=k+1
wscript.echo "loop "& k
            Loop
			
            .Close
        End With
        
        'objConnection.Execute "UPDATE qdfOrders SET DoneDate=#" & dtEndDate & "# WHERE ID=" & lngID

s = "UPDATE qdfOrders SET DoneDate=#" & dtEndDate & "# WHERE ID=" & lngID
'rem дата должна бы быть в формате m/d/yyyy
wscript.echo s
objConnection.Execute s
        
        objConnection.Close
        Set objRecordset  = Nothing
        Set objConnection = Nothing
        SetLocale(prevLocale)
    Else
        WScript.Echo "Database file [" & strDatabase & "] not found"
    End If
    
    Set objFSO = Nothing
Else
    WScript.Echo "Usage from toolbar on [Склад и торговля]:"
    WScript.Echo "" & WScript.ScriptName & " /[CurrentDB] /[ID]"
End If

WScript.Quit 0


ЗЫ: сдаётся мне где-то таки спрятался On Error Resume Next ...
...
Рейтинг: 0 / 0
29.07.2012, 18:20
    #37896906
NecroTYN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в создании VBS скрипта
скукотища,
скрипт срабатывает, только вот не передает полю данных

выводится два сообщения
---------------------------
Windows Script Host
---------------------------
Usage from toolbar on [Склад и торговля]:
---------------------------
ОК
---------------------------
и

---------------------------
Windows Script Host
---------------------------
DateSearch.vbs /[CurrentDB] /[ID]
---------------------------
ОК
---------------------------
...
Рейтинг: 0 / 0
29.07.2012, 18:24
    #37896908
NecroTYN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в создании VBS скрипта
за которые как я понимаю отвечают строки с 95 по 98, вот только не знаю - нужны они или их можно удалить ???
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Нужна помощь в создании VBS скрипта / 25 сообщений из 68, страница 1 из 3
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]