powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Нужна помощь в создании VBS скрипта
25 сообщений из 68, страница 1 из 3
Нужна помощь в создании VBS скрипта
    #37893835
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.
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
Нужна помощь в создании VBS скрипта
    #37893902
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
База не в аксессе ли?
...
Рейтинг: 0 / 0
Нужна помощь в создании VBS скрипта
    #37893943
NecroTYN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
база в аксессе, но используется через другую программу http://www.simple-soft.ru/ProductsCount.htm
...
Рейтинг: 0 / 0
Нужна помощь в создании VBS скрипта
    #37894063
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NecroTYN...
Есть код для вычисления даты выдачи заказа по количеству рабочих дней
...

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

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

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

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



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

ЗЫ: не думали над тем, чтобы в tblHolidays вносить ВСЕ выходные, включая "обычные" субботы и воскресенья?
...
Рейтинг: 0 / 0
Нужна помощь в создании VBS скрипта
    #37894342
NecroTYN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
скукотищаЗЫ: не думали над тем, чтобы в tblHolidays вносить ВСЕ выходные, включая "обычные" субботы и воскресенья?
...ага, именно об этом я и говорю...
...
Рейтинг: 0 / 0
Нужна помощь в создании VBS скрипта
    #37896292
NecroTYN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может все таки кто нибудь поможет ???!!!
...
Рейтинг: 0 / 0
Нужна помощь в создании VBS скрипта
    #37896504
Скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Нужна помощь в создании VBS скрипта
    #37896598
NecroTYN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СкукотищаПробуйте.
Спасибо огромное !!!
... но к сожалению не сработало...
...может нужно прописывать путь к Б/Д ???

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

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

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

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

> ...может нужно прописывать путь к Б/Д ???
путь к базе, как и в Вашем скрипте, передается первым параметром...
...
Рейтинг: 0 / 0
Нужна помощь в создании VBS скрипта
    #37896697
NecroTYN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
скукотищаКак именно "не сработало"? Run-time error, не обновило DoneDate в qdfOrders, неверно рассчитало DoneDate, что-то ещё?
поле просто остается пустым
...
Рейтинг: 0 / 0
Нужна помощь в создании VBS скрипта
    #37896700
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скукотища
Код: 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
Нужна помощь в создании VBS скрипта
    #37896711
NecroTYN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwerty112,

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

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

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

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

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

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


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