Разработка системы автоматизации для малого коммерческого предприятия работающего в сфере информационных услуг
If Forms![Просмотр]![ОсновныеСчета].Form![ВнесениеВАО] = True And Разница =
0 Then
Msg = "Суммы по счету уже внесены в авансовый отчет." ' Сообщение.
Style = vbOKCancel + vbQuestion ' Кнопки.
Title = "Сообщение" ' Заголовок.
Response = MsgBox(Msg, Style, Title) ' Выводит сообщение.
If Response = vbOK Then ' Если нажата кнопка "Да" (Yes).
GoTo labelBegin
Else
Exit Sub
End If
End If
labelBegin:
Цена = 0
Сопровождение = 0
rst.MoveLast
j = rst.RecordCount
rst.MoveFirst
For i = 1 To j
Цена = rst![Цена] * 1.2 + Цена
Сопровождение = rst![Сопровождение] * 1.2 + Сопровождение
rst.MoveNext
Next i
Сумма = Цена + Сопровождение
Forms![Просмотр]![ОсновныеСчета].Form![ПоСчету] = Сумма
rst.Close
strSQL = "SELECT DISTINCTROW ОсновныеСчета.НомерСчета,
Платежки.СуммаПрихода As Цена, Платежки.ДатаВыписки As Дата FROM
[ОсновныеСчета] INNER JOIN Платежки ON ОсновныеСчета.КодСчета =
Платежки.КодСчета WHERE (((ОсновныеСчета.НомерСчета)=" & sing &
Forms![Просмотр]![ОсновныеСчета].Form![НомерСчета] & sing & "));"
Set rst = dbs.OpenRecordset(strSQL)
rst.MoveLast
Дата = rst![Дата]
j = rst.RecordCount
rst.MoveFirst
For i = 1 To j
ЦенаП = rst![Цена] + ЦенаП
rst.MoveNext
Next i
Forms![Просмотр]![ОсновныеСчета].Form![ПоПлатежке] = ЦенаП
rst.Close
If ЦенаП < Сумма Then
Msg = "Cумма по счету" & Chr(13) & "
- " & Сумма & "р." & Chr(13) & "Cуммы по платежкам " & Chr(13) & "
- " & ЦенаП & "р." & Chr(13) & "Cуммы
по платежкам меньше суммы по счета." ' Сообщение.
'Msg = "Cуммы по платежкам меньше суммы по счетам." & Chr(13) &
"Занести в авансовый отчет?" ' Сообщение.
Style = vbCancel + vbCritical ' Кнопки.
Title = "Предупреждение" ' Заголовок.
Response = MsgBox(Msg, Style, Title) ' Выводит сообщение.
Exit Sub
End If
If ЦенаП > Сумма Then
Msg = "Cумма по счету" & Chr(13) & "
- " & Сумма & "р." & Chr(13) & "Cуммы по платежкам " & Chr(13) & "
- " & ЦенаП & "р." & Chr(13) & "Cуммы
по платежкам больше суммы по счета." ' Сообщение.
'Msg = "Cуммы по платежкам больше суммы по счета." & Chr(13) &
"Занести в авансовый отчет?" ' Сообщение.
Style = vbOKCancel + vbCritical ' Кнопки.
Title = "Предупреждение" ' Заголовок.
Response = MsgBox(Msg, Style, Title) ' Выводит сообщение.
If Response = vbOK Then ' Если нажата кнопка "Да" (Yes).
flagБольше = True
Разница = ЦенаП - Сумма
GoTo labelOK
Else
Exit Sub
End If
End If
'ЦенаП_Р = ЦенаП
'Сумма_Р = Сумма
Msg = "Cумма по счету" & Chr(13) & "
- " & Сумма & "р." & Chr(13) & "Cуммы по платежкам " & Chr(13) & "
- " & ЦенаП & "р." & Chr(13) & "Суммы
совпадают." & Chr(13) & "Занести в авансовый отчет?" ' Сообщение.
Style = vbOKCancel + vbInformation ' Кнопки.
Title = "Сообщение" ' Заголовок.
Response = MsgBox(Msg, Style, Title) ' Выводит сообщение.
If Response = vbOK Then ' Если нажата кнопка "Да" (Yes).
Forms![Просмотр]![ОсновныеСчета].Form![Разница] = 0
GoTo labelOK
Else
Exit Sub
End If
labelOK:
Set rst = dbs.OpenRecordset("ДанныеДляАвансОтчета")
strSQL = "SELECT DISTINCTROW ОсновныеСчета.НомерСчета,
Дистрибутивы.КодСистемы, Дистрибутивы.Цена, Дистрибутивы.ТолькоИПС,
Дистрибутивы.Сопровождение, Дистрибутивы.КоличествоМ,
Дистрибутивы.Количество FROM [ОсновныеСчета] INNER JOIN Дистрибутивы ON
ОсновныеСчета.КодСчета = Дистрибутивы.КодСчета WHERE
(((ОсновныеСчета.НомерСчета)=" & sing &
Forms![Просмотр]![ОсновныеСчета].Form![НомерСчета] & sing & "));"
'"SELECT DISTINCTROW ОсновныеСчета.НомерСчета, Дистрибутивы.КодСистемы,
Дистрибутивы.Цена, Дистрибутивы.Сопровождение, Дистрибутивы.КоличествоМ,
Дистрибутивы.Количество FROM [ОсновныеСчета] INNER JOIN Дистрибутивы ON
ОсновныеСчета.НомерСчета = Дистрибутивы.НомерСчета WHERE
(((ОсновныеСчета.НомерСчета)=" &
Forms![Просмотр]![ОсновныеСчета].Form![НомерСчета] & "));"
Set rstПоCчету = dbs.OpenRecordset(strSQL)
Set rstПоАО = dbs.OpenRecordset("АвансовыйОтчет")
rstПоCчету.MoveLast
j = rstПоCчету.RecordCount
ДатаStore = Дата
Select Case Forms![Просмотр]![ОсновныеСчета].Form![Код]
Case 1, 3
Нал = False
Case 2
Нал = True
End Select
rstПоCчету.MoveFirst
'ОСНОВНОЙ ЦИКЛ
flagДата = False
For i = 1 To j
'Проверка для вторичного ИПС
If rstПоCчету![Цена] = 0 Then
If flagДата = False Then
GoTo ДатаОпределение
End If
Дата = ДатаStore
Set dbs = CurrentDb
strSQLTMP = "SELECT DISTINCTROW ДанныеДляАвансОтчета.Код,
ДанныеДляАвансОтчета.КодЗаказчика, ДанныеДляАвансОтчета.КодСистемы,
ДанныеДляАвансОтчета.КоличествоМС, Max(ДанныеДляАвансОтчета.ДатаПМС) AS
ДатаПМС FROM [ДанныеДляАвансОтчета] GROUP BY ДанныеДляАвансОтчета.Код,
ДанныеДляАвансОтчета.КодЗаказчика, ДанныеДляАвансОтчета.КодСистемы,
ДанныеДляАвансОтчета.КоличествоМС HAVING
(((ДанныеДляАвансОтчета.КодЗаказчика)=" & Forms![Просмотр]![КодЗаказчика] &
") AND ((ДанныеДляАвансОтчета.КодСистемы)=" & rstПоCчету![КодСистемы] & ")
AND ((ДанныеДляАвансОтчета.КоличествоМС)<>0));"
Set rstTMP2 = dbs.OpenRecordset(strSQLTMP)
If rstTMP2.RecordCount >= 1 Then
GoTo labelЕстьЗаписи
'Else
'MsgBox ("Записей Нет")
Exit Sub
End If
labelЕстьЗаписи:
rstTMP2.MoveLast
rstTMP2.Close
Дата:
ДатаTMP2 = Format(ДатаStore, "m yy")
If flagГолоеСопр = True Then 'Расписать если сопров голое
rst.AddNew
rst![КодЗаказчика] = Forms![Просмотр]![КодЗаказчика]
rst![КодСчета] = Forms![Просмотр]![ОсновныеСчета].Form![КодСчета]
rst![КодСистемы] = rstПоCчету![КодСистемы]
rst![ДатаПМС] = Format(ДатаTMP2, "m yy")
rst![КоличествоМС] = rstПоCчету![КоличествоМ]
rst![Нал] = Нал
Msg = "Заносим сопровождение " &
НазваниеСистемы(rstПоCчету![КодСистемы]) & " на " &
rstПоCчету![КоличествоМ] & " месяцев"
Style = vbOKCancel + vbInformation ' Кнопки.
Title = "Сообщение" ' Заголовок.
MsgBox Msg, Style, Title
rst.Update
rst.MoveLast
m = rstПоCчету![КоличествоМ]
For k = 1 To m
rstПоАО.AddNew
rstПоАО![ИдентКод] = rst![Код]
ЦенаСоп = rstПоCчету![Сопровождение] / m
rstПоАО![Сумма] = ЦенаСоп * 1.2
rstПоАО![Нал] = Нал
ДатаTMP = Format(ДатаПМС, "m yy")
rstПоАО![Месяц] = ДатаTMP
ДатаTMP = ДатаTMP + 32
ДатаПМС = ДатаTMP
rstПоАО.Update
Next k
GoTo labelnext
End If
'Сравнение с месяцем выписки
ДатаTMP2 = CDate(Format(ДатаStore, "m yy"))
If CDate(ДатаTMP2) 0 Then
rst.AddNew
rst![КодЗаказчика] = Forms![Просмотр]![КодЗаказчика]
rst![КодСчета] = Forms![Просмотр]![ОсновныеСчета].Form![КодСчета]
rst![КодСистемы] = rstПоCчету![КодСистемы]
rst![ДатаПМС] = Дата
rst![КоличествоМС] = 0
rst![Нал] = Нал
rst.Update
rst.MoveLast
rstПоАО.AddNew
rstПоАО![ИдентКод] = rst![Код]
rstПоАО![Сумма] = rstПоCчету![Цена] * 1.2
rstПоАО![Месяц] = Дата
rstПоАО![Нал] = Нал
Msg = "Заносим сумму реализации системы " &
НазваниеСистемы(rstПоCчету![КодСистемы]) & " на " & CurrentMWParam(Дата)
Style = vbOKOnly + vbInformation ' Кнопки.
Title = "Сообщение" ' Заголовок.
MsgBox Msg, Style, Title
rstПоАО.Update
End If
If rstПоCчету![Сопровождение] <> 0 Then
rst.AddNew
rst![КодЗаказчика] = Forms![Просмотр]![КодЗаказчика]
rst![КодСчета] = Forms![Просмотр]![ОсновныеСчета].Form![КодСчета]
rst![КодСистемы] = rstПоCчету![КодСистемы]
rst![ДатаПМС] = Дата
rst![КоличествоМС] = rstПоCчету![КоличествоМ]
rst![Нал] = Нал
Msg = "Заносим сопровождение " &
НазваниеСистемы(rstПоCчету![КодСистемы]) & " на " &
rstПоCчету![КоличествоМ] & " месяцев с " & CurrentMonthWParamWSuf(Дата)
Style = vbOKOnly + vbInformation ' Кнопки.
Title = "Сообщение" ' Заголовок.
MsgBox Msg, Style, Title
rst.Update
rst.MoveLast
m = rstПоCчету![КоличествоМ]
For k = 1 To m
rstПоАО.AddNew
rstПоАО![ИдентКод] = rst![Код]
ЦенаСоп = rstПоCчету![Сопровождение] / m
rstПоАО![Сумма] = ЦенаСоп * 1.2
rstПоАО![Нал] = Нал
If Format(Дата, "dd") < 20 Then
ДатаTMP = Format(Дата, "m yy")
rstПоАО![Месяц] = ДатаTMP
ДатаTMP = ДатаTMP + 32
Дата = ДатаTMP
rstПоАО.Update
Else
ДатаTMP = Format(Дата + 12, "m yy")
rstПоАО![Месяц] = ДатаTMP
ДатаTMP = ДатаTMP + 32
Дата = ДатаTMP
rstПоАО.Update
End If
Next k
End If
End If
labelnext:
rstПоCчету.MoveNext
Next i
Код = rst![КодСистемы]
rst.Close
rstПоCчету.Close
rstПоАО.Close
labelEnd:
Forms![Просмотр]![ОсновныеСчета].Form![ВнесениеВАО] = True
If flagБольше = True Then
Set rst = dbs.OpenRecordset("КредитАванс")
rst.AddNew
rst.[КодЗаказчика] = Forms![Просмотр]![КодЗаказчика]
rst![+или-] = Разница
rst![КодСистемы] = Код
rst![Месяц] = Дата
rst.Update
rst.Close
End If
Exit_Кнопка347_Click:
DoCmd.OpenTable "АвансовыйОтчет"
dbs.Close
Exit Sub
Err_Кнопка347_Click:
If Err.Number = 94 Then
MsgBox ("Задайте дату платежки")
Exit Sub
End If
If Err.Number = 3021 Then
DoCmd.OpenForm "Месяц2", , , , , acDialog
ДатаTMP3 = "01." & Forms![Месяц2]![Месяц] & "." &
Forms![Месяц2]![Год]
ДатаПМС = Format(ДатаTMP3, "m yy")
flagГолоеСопр = True
'ДатаTMP3 = Forms![Месяц2]![Месяц]
'ДатаПМС = Format(ДатаTMP3, "m yy")
Resume Дата
End If
If Err.Number = 424 Then
Resume labelEnd
End If
If Err.Number = 2113 Then
Resume labelBegin
End If
' Вначале, вычитаем константу, добавленную объектом, чтобы получить
' собственный код ошибки объекта.
MyError = Err.Number - vbObjectError
' Если после вычитания константы vbObjectError число по-прежнему
' попадает в диапазон 0 - 65535, то ошибка определена в объекте.
If MyError > 0 And MyError < 65535 Then
Msg = "Адресуемый объект присвоил ошибке следующий код : " _
& MyError & ". Источником ошибки является: " _
& Err.Source & ". Нажмите клавишу F1 для вывода справки."
' В противном случае ошибке соответствует код ошибки Visual Basic.
Else
Msg = "Эта ошибка (# " & Err.Number & ") имеет код ошибки Visual" & _
" Basic. Для вывода раздела справки Visual Basic нажмите" & _
" кнопку 'Справка' или клавишу F1."
End If
MsgBox Msg, , "Ошибка объекта", Err.HelpFile, Err.HelpContext
Err.Number = 0
Resume Exit_Кнопка347_Click
ДатаОпределение:
strSQLДата = "SELECT DISTINCTROW ДанныеДляАвансОтчета.КодЗаказчика,
ДанныеДляАвансОтчета.КодСчета, ДанныеДляАвансОтчета.КодСистемы,
ДанныеДляАвансОтчета.КоличествоМС, Max(АвансовыйОтчет.Месяц) AS Max_Месяц
FROM [ДанныеДляАвансОтчета] INNER JOIN [АвансовыйОтчет] ON
ДанныеДляАвансОтчета.Код = АвансовыйОтчет.ИдентКод GROUP BY
ДанныеДляАвансОтчета.КодЗаказчика, ДанныеДляАвансОтчета.КодСчета,
ДанныеДляАвансОтчета.КодСистемы, ДанныеДляАвансОтчета.КоличествоМС HAVING
(((ДанныеДляАвансОтчета.КодЗаказчика)=" & Forms![Просмотр]![КодЗаказчика] &
") AND ((ДанныеДляАвансОтчета.КодСистемы)=" & rstПоCчету![КодСистемы] & ")
AND ((ДанныеДляАвансОтчета.КоличествоМС)<>0));"
Set rstПоДате = dbs.OpenRecordset(strSQLДата)
rstПоДате.MoveLast
ДатаПМС = rstПоДате![Max_Месяц]
flagДата = True
rstПоДате.Close
GoTo Дата
End Sub
3) Просмотр информации по счетам и системам выбранного заказчика.
Private Sub Счет_Click()
Dim rst, rstTMP As Recordset
Dim dbs As Database
Dim i, j As Integer
Dim strSQL As String
Dim Дата As Date
Set dbs = CurrentDb
strSQL = "SELECT DISTINCTROW Заказчики.КодЗаказчика,
ОсновныеСчета.НомерСчета, ОсновныеСчета.ОплатаСчета,
ОсновныеСчета.ДатаСчета, ОсновныеСчета.СрокДействияСчета,
Дистрибутивы.КодСистемы, Дистрибутивы.Код, Дистрибутивы.КоличествоМ,
Дистрибутивы.Цена, Дистрибутивы.Сопровождение, Дистрибутивы.Скидки,
Дистрибутивы.СкидкиС, Дистрибутивы.СпецвупыскИлиНет FROM ([Заказчики] INNER
JOIN [ОсновныеСчета] ON Заказчики.КодЗаказчика =
ОсновныеСчета.КодЗаказчика) INNER JOIN Дистрибутивы ON
ОсновныеСчета.КодСчета = Дистрибутивы.КодСчета WHERE
(((Заказчики.КодЗаказчика)=" & Me![КодЗаказчика] & "));"
Set rst = dbs.OpenRecordset(strSQL)
Set rstTMP = dbs.OpenRecordset("ИнфоПоСистемамЗаказчика")
Do Until rstTMP.EOF
rstTMP.Delete
rstTMP.MoveNext
Loop
If rst.RecordCount = 0 Then
MsgBox ("Нет счетов на данную организацию")
rstTMP.Close
rst.Close
dbs.Close
Me.Refresh
Exit Sub
End If
rst.MoveLast
j = rst.RecordCount
rst.MoveFirst
For i = 1 To j
rstTMP.AddNew
rstTMP![КодСистемы] = НазваниеСистемы(rst![КодСистемы])
rstTMP![ПоСчету] = rst![НомерСчета]
If rst![Код] = 1 Then
rstTMP![Тип] = "Локальная"
Else
rstTMP![Тип] = "Сетевая"
End If
rstTMP![ДатаС] = CurrentDateWParam(rst![ДатаСчета])
rstTMP![Цена] = rst![Цена]
rstTMP![Сопр] = rst![Сопровождение]
rstTMP![Скид] = rst![Скидки]
rstTMP![СкидС] = rst![СкидкиС]
rstTMP![ДейстПо] = rst![СрокДействияСчета]
rstTMP![Спец] = rst![СпецвупыскИлиНет]
rstTMP![Кво] = rst![КоличествоМ]
rstTMP![Оплата] = rst![ОплатаСчета]
rst.MoveNext
rstTMP.Update
Next i
Me![ИнфоПоОрганСистемы].Form.Visible = -1
Me![ИнфоПоОрганизSub].Form.Visible = 0
rstTMP.Close
rst.Close
dbs.Close
Me.Refresh
End Sub
Private Sub Сист_Click()
On Error GoTo Err_Кнопка6_Click
Dim rst, rstTMP, rstTMP2 As Recordset
Dim rstTMP3 As Recordset
Dim rstTMP4 As Recordset
Dim rstTMP5 As Recordset
Dim dbs As Database
Dim i, j As Integer
Dim strSQL, strSQLTMP, strSQLTMP3 As String
Dim strSQLTMP2 As String
Dim Дата As Date
DoCmd.Hourglass True
Set dbs = CurrentDb
strSQL = "SELECT DISTINCTROW ДанныеДляАвансОтчета.КодЗаказчика,
ДанныеДляАвансОтчета.КодСистемы FROM [ДанныеДляАвансОтчета] WHERE
(((ДанныеДляАвансОтчета.КодЗаказчика)=" & Me![КодЗаказчика] & ") AND
((ДанныеДляАвансОтчета.КоличествоМС)<>0));"
Set rst = dbs.OpenRecordset(strSQL)
Set rstTMP4 = dbs.OpenRecordset("ИнфоПоСистемамЗаказчика")
Do Until rstTMP4.EOF
rstTMP4.Delete
rstTMP4.MoveNext
Loop
If rst.RecordCount = 0 Then
' MsgBox ("Не сопровождается")
rst.Close
Me![ИнфоПоОрганизSub].Form.Visible = -1
Me![ИнфоПоОрганСистемы].Form.Visible = 0
'инфо по 1996 году
strSQLTMP2 = "SELECT DISTINCTROW АвансПоОстаткамС1996Года.Заказчик,
АвансПоОстаткамС1996Года.Месяц, АвансПоОстаткамС1996Года.Сумма FROM
АвансПоОстаткамС1996Года WHERE (((АвансПоОстаткамС1996Года.Заказчик)=" &
Me![КодЗаказчика] & "));"
Set rstTMP5 = dbs.OpenRecordset(strSQLTMP2)
rstTMP4.AddNew
rstTMP5.MoveFirst
rstTMP4![Дата1С1996] = CurrentMWParam(rstTMP5![Месяц])
rstTMP5.MoveLast
rstTMP4![Дата2С1996] = rstTMP5![Месяц]
rstTMP5.Close
rstTMP4.Update
Me.Refresh
rstTMP4.Close
dbs.Close
DoCmd.Hourglass False
Exit Sub
End If
rst.MoveLast
j = rst.RecordCount
rst.MoveFirst
For i = 1 To j
rstTMP4.AddNew
rstTMP4![КодСистемы] = НазваниеСистемы(rst![КодСистемы])
strSQLTMP = "SELECT DISTINCTROW Заказчики.Организация,
ДанныеДляАвансОтчета.КодСистемы, АвансовыйОтчет.Месяц,
ДанныеДляАвансОтчета.КоличествоМС, Заказчики.КодЗаказчика,
ДанныеДляАвансОтчета.КодСчета, ОсновныеСчета.НомерСчета AS НС,
АвансовыйОтчет.ИдентКод, Дистрибутивы.СкидкиС, ОсновныеСчета.ДатаСчета"
strSQLTMP = strSQLTMP & " FROM (([ОсновныеСчета] INNER JOIN
([Заказчики] INNER JOIN [ДанныеДляАвансОтчета] ON (Заказчики.КодЗаказчика =
ДанныеДляАвансОтчета.КодЗаказчика) AND (Заказчики.КодЗаказчика =
ДанныеДляАвансОтчета.КодЗаказчика)) ON (Заказчики.КодЗаказчика =
ОсновныеСчета.КодЗаказчика) AND (ОсновныеСчета.КодСчета =
ДанныеДляАвансОтчета.КодСчета)) INNER JOIN [АвансовыйОтчет] ON
ДанныеДляАвансОтчета.Код = АвансовыйОтчет.ИдентКод) INNER JOIN Дистрибутивы
ON ОсновныеСчета.КодСчета = Дистрибутивы.КодСчета"
strSQLTMP = strSQLTMP & " GROUP BY Заказчики.Организация,
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
|