| |
|
|
| | Уже голову всю сломал, не пойму почему не работает.
Есть форма "ОтчетыПоЗаказам", в ней Список "ВыборВодителя", источник строк:
SELECT Водители.Водитель
FROM Водители
ORDER BY Водители.Водитель;
При выборе одной из записей жмем кнопку "Просмотр" или кнопку "Печать" - должен открыться отчет по Водителю. Если ни одной из строк не выбрано должен открыться отчет по всем Водителям.
Вот код закрепленный за формой.
Option Compare Database
Option Explicit
Sub ПечатьОтчетов(PrintMode As Integer)
On Error GoTo Err_Просмотр_Click
Dim strWhereCategory As String
strWhereCategory = "Водитель = [forms]![ОтчетыПоЗаказам]![ВыборВодителя]"
If IsNull([Data1]) Or IsNull([Data1]) Then
MsgBox "Необходимо ввести начальную и конечную даты."
DoCmd.GoToControl "Data1"
Exit Sub
Else
If [Data1] > [Data2] Then
MsgBox "Конечная дата должна превосходить начальную дату."
DoCmd.GoToControl "Data2"
Exit Sub
Else
Me.Visible = False
End If
End If
Select Case Me!ВыборТипа
Case 1
If IsNull(Forms![ОтчетыПоЗаказам]!ВыборВодителя) Then
DoCmd.OpenReport "ОтчетВодители", PrintMode
Else
DoCmd.OpenReport "ОтчетВодители", PrintMode, , strWhereCategory
End If
Case 2
DoCmd.OpenReport "ОтчетДиспетчера", PrintMode
Case 3
DoCmd.OpenReport "СлужебныеОтчеты", PrintMode
End Select
DoCmd.Close acForm, "ОтчетыПоЗаказам"
Exit_Просмотр_Click:
Exit Sub
Err_Просмотр_Click:
Resume Exit_Просмотр_Click
Private Sub Отмена_Click()
On Error GoTo Err_Отмена_Click
DoCmd.Close
Exit_Отмена_Click:
Exit Sub
Err_Отмена_Click:
MsgBox Err.Description
Resume Exit_Отмена_Click
End Sub
Private Sub Просмотр_Click()
ПечатьОтчетов acPreview
End Sub
Private Sub Печать_Click()
ПечатьОтчетов acNormal
End Sub
Private Sub ВыборТипа_AfterUpdate()
Const conSalesByCategory = 1
If Me!ВыборТипа.Value = conSalesByCategory Then
Me!ВыборВодителя.Enabled = True
Else
Me!ВыборВодителя.Enabled = False
End If
End Sub
Отчет открывается на основании запроса
SELECT Водители.Водитель, Заказы.ДатаПринятияЗак, [ГородОткудаЗак]+" "+[УлицаОткудаЗак]+" "+[ДомПодъездОткудаЗак] AS Откуда, [ГородКудаЗак]+" "+[РайонКудаЗак] AS Куда, Заказы.КоличПассЗак AS Чел, Заказы.ФормаНачЗак AS Форма, Заказы.ДиспетчерЗак AS Диспетчер
FROM Водители INNER JOIN Заказы ON Водители.Позывной = Заказы.ВодительЗак
WHERE (((Заказы.ДатаПринятияЗак)>=[forms]![ОтчетыПоЗаказам]![Data1] And (Заказы.ДатаПринятияЗак)<[forms]![ОтчетыПоЗаказам]![Data2]) AND ((Заказы.ПринятиеЗаказаЗак)=True) AND ((Заказы.ВыполнениеЗаказаЗак)=True))
ORDER BY Водители.Водитель, Заказы.ДатаПринятияЗак;
И при открытии запроса Водитель не передается из Формы в Отчет.
То ли здесь
DoCmd.OpenReport "ОтчетВодители", PrintMode, , strWhereCategory
что не так, то ли еще где. | |
| |
| |
| |
|
|
| | Если [ВыборВодителя] - число, то
strWhereCategory = "Водитель = " & [forms]![ОтчетыПоЗаказам]![ВыборВодителя]
|
Если текст то в кавычки:
strWhereCategory = "Водитель = '" & [forms]![ОтчетыПоЗаказам]![ВыборВодителя] & "'"
|
| |
| |
| |
| |
|
|
| | Что-то не работает.
[ВыборВодителя] список где источником сторок является
SELECT Водители.Водитель
FROM Водители
ORDER BY Водители.Водитель;
Водитель - текстовые данные (типа ФИО). | |
| |
| |
| |
|
|
| | У меня получается что и при выведении отчета и при отсутствии отсутствия выбора ВыборВодителя в списке, то есть когда должен печатать отчет по всему списку -
DoCmd.OpenReport "ОтчетВодители", PrintMode
формирование отчета идет неверно, то есть Водитель в отчете не выводится - на этом месте пишет ошибка.
Если же просто отчет "ОтчетВодители" открывать, то нормально открывается.
Еще заметил, ести сначала Форму открыть, а затем не из Формы, а просто из Access отчет открывать, то тоже Водитель не выводится.
Тут какой-то прикол может с одновременным обращением к одной и той же Таблице Водители, в формке для отображения списка и выбора, а в Отчете в качестве одного из данных отчета. | |
| |
| |
| |
|
|
| | Что-то с отчетом не то скорее всего | |
| |
| |
| |
|
|
| | так сложно судить.
Отчет без формы по идее выводиться не должен, должен спрашивать даты. | |
| |
| |
| |
|
|
| | Даты спрашивает. Я сам вбиваю, после этогго выводится, но все равно где даты выводятся поля с ошибкой. Даты ради эксперименнта можно и выкинуть временно из отчета. Уже и так пробовал. В датах все нормально идет. Но там все просто Даты из формы не выбираются из списка, а заносятся вручную (по умолчанию стоит сегодняшняя дата) и далее передаются в отчет. Потом, эти даты ни в каких Таблицах не фигурируют. | |
| |
| |
| |
|
|
| | для начала нужно добиться что бы отчет открывался сам по себе. И выводил все данные.
ПОтом добавляем в источник строк условие по датам из формы и проверяем как отрывается.
добиваемся нормальной работы отчета.
затем добавляем открытие с фильтром по водителю | |
| |
| |
| |
|
|
| | Все срослось.
Начал поэтапно делать, все шло. Ну и отчет автоматически заново сформировал. Все работало. Предыдущий вариант попробовал, который не шел - тоже работает!!! Так что просто похоже помогло создание аналогичного отчета с теми же полями, а затем его удаление. Но отчет который не работал корректно из формы - заработал. Похоже что создалась какая-то связь, которой не хватало или неверно работала до этого. | |
| |
| |