Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
1

Изменение цветом поля в подчиненной форме в зависимости от значения в форме

18.06.2016, 14:38. Показов 4201. Ответов 53
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.

Есть такой вопрос. Есть БД, где в поле под Статусом печати выбирается номер List ID из подчиненной формы, выбирается статус печати (точечкой наверху), выбирается зона д/аудита (по умолчанию Балкон) и печатаются листы для аудита с проставлением галочки по факту печати в строчках.

Идея такая: добавлено наверху поле № Трансп Заказа. Задумано введение значения из подчиненной формы - колонки № ТрЗкз. По факту ввода и нажатия клавиши Enter введенный номер транспортного заказа сверялся бы с номером из подчиненной табличной формы:

- если совпадает - то в подчиненной табл форме поле с этим номером отмечается другим цветом
- если не совпадает - то появляется ругательное сообщение (MSBX)

Еще было бы здорово, если б курсор после ввода не уходил с этого поля)))

Скажите, такое возможно?? Очень буду благодарен за помощь)))
Вложения
Тип файла: zip Aud-Cntrl client Balkony.zip (1.18 Мб, 15 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.06.2016, 14:38
Ответы с готовыми решениями:

Запрет на создание записи в подчиненной форме при отсутствии значения в поле главной формы( или в этой же подчиненной форме) Аксесс 2003
Доброго времени суток ! Помогите , пожалуйста, решить проблему! шаг 1. В форме "frmТОиР_2"...

Поиск записей в подчиненной форме по значению поля со списком в главной форме
Доброго времени суток уважаемые Форумчане! Очередной раз необходима Ваша помощь!!! Суть...

Автоматическое изменение поля со списком в подчиненной форме для новой строки
Здравствуйте, уважаемые форумчане! Прошу Вас помочь в решении следующей задачи: Имеется форма...

Как задать в подчиненной форме значения второго столбца в зависимости от выбора в первом
Есть две таблицы Первая - группа патологии 1- живот 2 - сосуды 3 - ЖКК и т.д. Вторая -...

53
547 / 274 / 50
Регистрация: 03.04.2015
Сообщений: 926
18.06.2016, 14:44 2
возвращайте курсор куда хотите, это не запрещено. поле.SetFocus

Для сообщения, выделения идея такая:
Visual Basic
1
2
3
4
5
6
sub поле_AfterUpdate
if DCount("поле","таблица","поле=" & поле) then
' функция для автоформатирования
Else
 MsgBox "совпадений нет."
end sub
1
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
18.06.2016, 21:30  [ТС] 3
В какое поле это мне надо прописывать??? Которое наверху в форме или которое в подчиненной форме??)))

Просто много слов "поле" и я запутался)))

Добавлено через 3 часа 43 минуты
Visual Basic
1
2
3
4
5
6
7
Sub Tz1_AfterUpdate()
If DCount("[№ ТрЗкз]", "Created TO", "[№ ТрЗкз]=" & Tz1) Then
Me.[№ ТрЗкз].BackColor = vbGreen
Else
 MsgBox "совпадений нет."
 End If
End Sub
Попробовал так. Но... ничего не вышло(((
0
Эксперт MS Access
26817 / 14496 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
18.06.2016, 23:21 4
Не понял идею. Сначала копируете номер из подформы в свободное поле и тут же проверяете совпадает или нет? Ну именно в той записи откуда скопировано конечно совпадет, а в остальных нет. Или Вы о чем-то ином? О чем?

На всякий: цвет поля в табличной форме можно менять в условном форматировании.
1
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
19.06.2016, 00:00  [ТС] 5
Идея в том, чтобы происходила проверка физически готового транспортного заказа с тем, что находится внутри List Id в базе данных)) извините, если непонятно.

Да и с фокусом так и не разобрался. Нужно, чтобы курсор постоянно находился в поле наверху. Происходит сканирование штрих-кода номера транспортного заказа (равносильно вводу и нажатию Enter) - внизу отмечается цветом #ТрЗкз, следующее сканирование - отмечается следующий цветом. Если трансп заказа нет внутри List id, появляется сообщение-ругалка.

Ещё подумал: когда все трансп заказы в подформе уже отмечены цветом, появляется сообщение, что "ура, проверка завершена")))

Добавлено через 1 минуту
Это теория, я не могу знать, возможно ли это))
0
547 / 274 / 50
Регистрация: 03.04.2015
Сообщений: 926
19.06.2016, 00:08 6
Я так понял, что вводится номер в поле и надо проверить есть ли совпадения с этим номером в подчинённой форме.
Ну, и проверить запросом.
Если 0, то сообщение.
Не дописал только в прошлый раз
Visual Basic
1
If Nz(DCount("[№ ТрЗкз]", "Created TO", "[№ ТрЗкз]=" & Tz1),0) > 0 Then
Для условного форматирования:
в подчинённой форме создать скрытое(или не скрытое, по желанию) поле с id

Visual Basic
1
2
3
4
5
6
7
8
9
10
Dim Key As Long
 
Private Sub Form_Current()
    Key = Nz(Me.tbId, 0)
    tbId.ControlSource = tbId.ControlSource
End Sub
 
Function GetKey()
    GetKey = Key
End Function
в условном форматировании для поля, которое нужно выделить, создать выражение:
Visual Basic
1
[tbId]=GetKey()
Добавлено через 1 минуту
Если нужно выделить постепенно все заказы, то предложенный метод не подходит.
1
Эксперт MS Access
26817 / 14496 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
19.06.2016, 02:03 7
Dimasterfrom4e, я предлагаю другой вариант. Условное форматирование на больших выборках дело медленное. Да и ненужное в данном случае. Вам ведь надо убедиться, что такой номер есть. Для этого достаточно например покрасить само поле Tz1 со штрихкодом. Вот такое я и сделал. Если сканированный номер есть в форме поле введенного штрихкода окрасится в зеленый, если нет - в красный. Без условного форматирования. Быстро и понятно. В ветке НЕ найдено в процедуре FindValue можно также задать звук. Тогда и мсгбокс наверное не нужен (?)

И еще я задал выполнение FindValue на двух событиях: После обновления (AfterUpdate) и на Изменении (Change). Обычно для работы со штрихкодом достаточно Change. Тогда, если подойдет, удалите или закомментируйте событие AfterUpdate для Tz1.
Вложения
Тип файла: rar Aud-Cntrl client Balkony.rar (672.1 Кб, 28 просмотров)
1
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
19.06.2016, 13:55  [ТС] 8
Цитата Сообщение от corbis Посмотреть сообщение
то предложенный метод не подходит.
Я в любом случае попробую))) спасибо)))

Добавлено через 5 минут
Цитата Сообщение от mobile Посмотреть сообщение
я предлагаю другой вариант
Ваш вариант очень интересный, огромное спасибо вам, возможно подойдет))) Я не думал, что так возможно в access)))

Но тут маленький вопрос/подвох: а как убедиться, все ли транспортные заказы собраны и отсканированны? На больших количествах все таки наверно нужна какая-то отметка в подформе, чтобы была уверенность, что List ID полносью исполнен, что все ТЗ внутри него подобраны, а человеческий глаз может и ошибиться)))

И еще такой момент: после нажатия Enter курсор уходит из поля....(((
0
547 / 274 / 50
Регистрация: 03.04.2015
Сообщений: 926
19.06.2016, 16:51 9
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Dim flg as Boolean
 
Private Sub Поле_Exit(Cancel As Integer)
    Cancel = flg
End Sub
 
Private Sub Поле_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = 13 Then
        flg = True
    Else
        flg = False
    End If
End Sub
Добавлено через 1 минуту
Я так понял, что недостаточно просто узнать есть совпадения или нет. Нужно чтобы совпадения прошли по всем заказам?

Добавлено через 9 минут
Забыл добавить:
Visual Basic
1
2
3
4
Private Sub Поле_Exit(Cancel As Integer)
    Cancel = flg
    flg = False
End Sub
1
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
20.06.2016, 09:47  [ТС] 10
Цитата Сообщение от corbis Посмотреть сообщение
Dim flg as Boolean Private Sub Поле_Exit(Cancel As Integer) Cancel = flg End Sub Private Sub Поле_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then flg = True Else flg = False End If End Sub
Спасибо за код, правда не совсем понятно куда и на какое событие его вешать))) подскажете??

Добавлено через 1 минуту
Цитата Сообщение от corbis Посмотреть сообщение
Dim flg as Boolean Private Sub Поле_Exit(Cancel As Integer) Cancel = flg End Sub Private Sub Поле_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then flg = True Else flg = False End If End Sub
Спасибо за код. Правда не совсем понятно куда и на какое событие его вешать))) подскажете??
0
Эксперт MS Access
26817 / 14496 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
20.06.2016, 09:58 11
Цитата Сообщение от Dimasterfrom4e Посмотреть сообщение
а как убедиться, все ли транспортные заказы собраны и отсканированны?
Единственная возможность это хранить отметку о сканировании в таблице. В какой Вам решать, но предположительно [Created TO]. Это может быть логическое поле, где True отсканировано, а False еще нет. При успешном сканировании ставить полю значение True.
В подформе FFReqCreatedTO сделать 2 сумовых поля, подсчитывающих количество True и False этого поля и Вы всегда будете знать текущую ситуацию
1
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
20.06.2016, 11:06  [ТС] 12
Цитата Сообщение от mobile Посмотреть сообщение
Единственная возможность это хранить отметку о сканировании в таблице
Спасибо, я подумаю, как это получше организовать))) А с Enter как мне разобраться?? Сканирование в поле наверху равносильно вводу и нажатию Enter. Если ввести сейчас и нажать Enter, курсор уходит оттуда.(((
0
Эксперт MS Access
26817 / 14496 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
20.06.2016, 11:08 13
Цитата Сообщение от Dimasterfrom4e Посмотреть сообщение
И еще такой момент: после нажатия Enter курсор уходит из поля....(((
Не надо нажимать Enter. На событии Change (Изменение) форма поймает вставку значения из сканера штрихкодов и выполнит нужные действия. Этого достаточно. К тому же поле не потеряет фокус.
1
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
20.06.2016, 12:12  [ТС] 14
Хорошо, спасибо. Я попробую и отпишусь)))

Нет, все таки уходит курсор из этого поля... Это уже на реальном сканере испытано...(((

Добавлено через 23 минуты
Еще вопрос, как сделать так, чтобы при сканировании читались бы первые 8 цифр штрих-кода? Например есть ТрЗкз 254607100001. Из него необходимы только первые 8 символов)))
0
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
20.06.2016, 12:58  [ТС] 15
Все таки добавил в подформу поле Scanned. Прописывание True ведь можно посадить на событие, после нажатия Enter, правильно???
Вложения
Тип файла: rar Aud-Cntrl client Balkony.rar (710.8 Кб, 11 просмотров)
0
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
20.06.2016, 14:52  [ТС] 16
Что-то не получается сделать событие, чтобы после сканирования в поле Scanned проставлялось True((((
0
Эксперт MS Access
26817 / 14496 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
20.06.2016, 21:16 17
Лучший ответ Сообщение было отмечено Dimasterfrom4e как решение

Решение

Поле Scanned преобразованно в логическое. На главную форму FRecCreatedTO помещены поля с надписями Scan и NotScan. В первом количество сканированных для заданного набора данных, во втором количество еще не отсканированных. В связи с тем, что рекордсет формы необновляемый, изменить поле Scanned прямо в форме невозможно. Поэтому сделано так:
- в коде обновляется поле Scanned в таблице
- на форму вставлена кнопка с надписью Обновить. Если нужно посмотреть сколько уже сканировано, нажать эту кнопку. Рекордсет формы мало того, что необновляемый, так еще и очень тяжелый, на нескольких запросах. И если обновлять форму при каждом сканировании, то это будет мучение. Сплошное ожидание.

Если сканирование успешно, то после нажатия Обновить, поле [№ ТрЗкз] станет светло-зелееым (условное форматирование).

Насчет перехода фокуса при сканировании. Видимо в Вашем сканере посылается Enter, поэтому фокус уходит с поля Tz1. Я сделал попытку, но испытать ее не могу, нет сканера. Идея в том, что на событии Change поля Tz1 переменной уровня модуля updateTz1 присваивается True. А на событии получения фокуса полем Scan (количество сканированных) анализируется эта переменная и если она True, то фокус возвращается на Tz1. Если будете как-то переделывать форму, то обратите внимание, чтобы по Enter фокус с Tz1 переходил на Scan. Или меняйте код.
Вложения
Тип файла: rar Aud-Cntrl client Balkony2.rar (675.6 Кб, 8 просмотров)
1
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
21.06.2016, 00:32  [ТС] 18
Огромнейшее вам спасибо))) кажется это даже лучше, чем я задумывал))) Обновление формы решил перевесить на кнопку Print Aud. Логика такая - сперва сканирование, потом распечатка.

На эту кнопку также вначале повесил такой код на обновление и проверку, все ли отсканировано перед печатью:

Visual Basic
1
2
3
4
5
6
7
 Me.FFReqCreatedTO.Form.Requery
    With Me.FReqCreatedTO.Form.Recordset
            If Scanned = False Then
                 MsgBox "Не все отсканировано. Проверьте!"
                 Exit Sub
            End If
    End With
Но сообщение все равно выходит даже когда все отсканировано...((( что я упустил в синтаксисе??? Подскажите пожалуйста)))
0
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
21.06.2016, 00:35  [ТС] 19
На всякий случай и файл вложил))
Вложения
Тип файла: rar Aud-Cntrl client Balkony3.rar (1,017.5 Кб, 20 просмотров)
0
Эксперт MS Access
26817 / 14496 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
21.06.2016, 01:19 20
Вот так надо
Visual Basic
1
2
3
4
5
6
7
    With Me.FFReqCreatedTO.Form.Recordset
        .FindFirst "Scanned=False"
        If Not .NoMatch Then
            MsgBox "Не все отсканировано. Проверьте!"
            Exit Sub
        End If
    End With
1
21.06.2016, 01:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.06.2016, 01:19
Помогаю со студенческими работами здесь

Поиск в подчиненной форме, ввод значения для поиска из поля главной
Здравствуйте! Решил организовать поиск по списку значений из поля на главной форме по записям в...

Цвет ячейки в форме в зависимости от значения поля
Есть форма "Отпуск". Необходимо следующее: если поле "Кол-воДней" меньше 20-ти, то цвет ячейки...

Изменение таблицы в форме в зависимости от состояния поля со списком Access 2007
Доброго времени суток. Подскажите, как изменить содержимое получаемое формой из таблицы в...

Изменить цвет строки в табличной форме в зависимости от значения 1 поля
Изменить цвет строки в табличной форме в зависимости от значения 1 поля. ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru