Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Печать текущей записи, вопрос по Access 
:(
    Опции темы
Dmitrimel
Дата 23.10.2006, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 23.10.2006

Репутация: нет
Всего: нет



Есть форма, в которой отображаются записи из нескольких таблиц, подскажите как сделать такую волшебную кнопочку, чтобы она выводила на печать текущую запись из формы в читаемом ввиде (что-то вроде отчета).
Заранее спасибо.
Пожалуйста, описывайте свои действия более побробно, т.к. я пока новичок в этом деле.
PM MAIL   Вверх
Юдифь
Дата 24.10.2006, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 15.10.2006
Где: Монголия, Эрдэнэт

Репутация: нет
Всего: нет



Создать отчёт, основанный на тех же таблицах. Объединяющее поле для всех этих таблиц у тебя наверняка есть? В условии поставить в запросе на это поле: form![название формы]![название поля формы].
PM ICQ   Вверх
Akina
Дата 24.10.2006, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Если на форме отображаются те данные, которые надо напечатать - выводи на печать не записи таблиц, а содержимое контролов формы.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Dmitrimel
Дата 24.10.2006, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 23.10.2006

Репутация: нет
Всего: нет



Цитата(Юдифь @ 24.10.2006,  01:02)
Создать отчёт, основанный на тех же таблицах. Объединяющее поле для всех этих таблиц у тебя наверняка есть? В условии поставить в запросе на это поле: form![название формы]![название поля формы].

Спасибо тебе огромное, все получилось.

Добавлено @ 09:21 
Цитата(Akina @ 24.10.2006,  08:16)
Если на форме отображаются те данные, которые надо напечатать - выводи на печать не записи таблиц, а содержимое контролов формы.

а вот тут можно подробнее???
PM MAIL   Вверх
Karam_S
  Дата 22.4.2009, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 11.2.2008
Где: г. Новокузнецк

Репутация: нет
Всего: нет



У меня для решения проблемы "Печать текущей записи из формы" в моей базе маленько не хватает тяму.

1. Есть сложная форма, объединяющая 3 таблицы.
2. Есть отчёт, выводящий всю совокупность записей. Он основан не на самостоятельном (отдельном) запросе, а на встроенном в отчёт. 
3. Необходимо через кнопку из формы выводить на печать через оформление отчёта текущую запись формы.

Что делаю: 1. Создал в отчёте условие " WHERE ([Для отзыва по всем].Фамилия=form![Проверка работ]![Фамилия]) "  

                                   В итоге при открытии отчёта появляется окно "form!Проверка работ!Фамилия" с полем для введения значения.

Пояснение:    Отчёт выполнить на самостоятельном (отдельном) запросе не получилось, т.к. при передаче текстового значения через запрос в отчёте отображались только первые 5-6 строк, а остальной текст не отображался. 
Чтобы обойти эту проблему, построил отчёт через непосредственное обращение к полям таблицы и необходимым полям из другого запроса.

Прошу помочь.
PM MAIL ICQ   Вверх
Karam_S
Дата 22.4.2009, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 11.2.2008
Где: г. Новокузнецк

Репутация: нет
Всего: нет



Решение частично найдено.
Дело в том, что если делается указание на открытую форму, то надо использовать слово "Forms".
Поэтому использование условия "WHERE ([Для отзыва по всем].Фамилия=forms![Проверка работ]![Фамилия])" помогло! smile 

Но проблема всё-таки до конца не решена.
Дело в том, что требуется вывести запись, удовлетворяющую одновременно нескольким условиям, часть из которых указаны в подчинённой форме. И здесь уже указанная ссылка не срабатывает.
Так условия "WHERE ПредстРаботы.Проверена=Forms![Работа с замечаниями]!Проверена" (где "Forms![Работа с замечаниями]!Проверена" - поле в подчинённой форме) выдаёт при вызове окно-запрос с полем на значение, куда требуется вручную вводить дату. Если это значение ввести, то отчёт отображается с соответствующей записью.
Возникает вопрос, как задавать условия в отношении подчинёных форм?
PM MAIL ICQ   Вверх
Karam_S
Дата 25.4.2009, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 11.2.2008
Где: г. Новокузнецк

Репутация: нет
Всего: нет



Для решения проблемы делаю первые шаги в VBA.
Вот так: 
Код

Option Compare Database
Private Sub ПечТекЗап_Click()
Dim stFilter As String
stFilter = "[Фамилия]=Forms![Проверка работ]![Фамилия]"
    DoCmd.OpenReport "01_0 Отзыв", acViewPreview, , stFilter
End Sub

                       срабатывает. "Проверка работ" - главная форма.

Вот так: 
Код

Private Sub ПечТекЗап_Click()
Dim stFilter As String
stFilter = "ПрРаб=3"
    DoCmd.OpenReport "01_0 Отзыв", acViewPreview, , stFilter
End Sub

                         тоже срабатывает. ("ПрРаб" - это поле типа "числовой" из подчинённой формы "Работа с замечаниями").

Но вот так (когда требуется вывести запись, удовлетворяющую двум условиям):
Код

Private Sub ПечТекЗап_Click()
Dim stFilter As String
stFilter = "[Фамилия]=Forms![Проверка работ]![Фамилия] And ПрРаб=3"
    DoCmd.OpenReport "01_0 Отзыв", acViewPreview, , stFilter
End Sub

                          не срабатывает.

И ещё один вопрос.
Плохо, конечно, что значение поля "ПрРаб" явно указано.
Как задать условие полю "ПрРаб"  равное тому, что выводится в форме "Работа с замечаниями"? Вот такая запись:
Код

stFilter = "[ПрРаб]=Forms![Работа с замечаниями]![ПрРаб]" 

                         приводит к пустому результату в отчёте.

Может я не по тому пути пошёл?
Цель одна - через кнопку из формы выводить на печать через оформление отчёта текущую запись формы.

Это сообщение отредактировал(а) Akina - 25.4.2009, 20:56
PM MAIL ICQ   Вверх
Karam_S
  Дата 26.4.2009, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 11.2.2008
Где: г. Новокузнецк

Репутация: нет
Всего: нет



Проблема решена.

Благодаря подробному faq-разъяснению Geo, Владимир Саныч http://www.sql.ru/faq/faq_topic.aspx?fid=156

1. Использую отчёт со встроенным запросом, где условием указываем поле главной формы и поле подчинённой формы. Например,
Код

WHERE ([Для отзыва по всем].Фамилия=Forms![Проверка работ].Controls!Фамилия And ПредстРаботы.ПрРаб=Forms![Проверка работ].Controls![Работа с замечаниями].Form.Controls!ПР);
 
Здесь ссылка на подчинённую форму имеет специальный синтакси: Forms![Форма1].Controls![Форма2].Form.Controls![Поле1].Value

2. В главной форме на событие кнопки указываю команду vba для открытия отчёта
Код

Private Sub ПечТекЗап_Click()
    DoCmd.OpenReport "01_0 Отзыв по фильтру", acViewPreview
End Sub

Т.е. простая команда без условий.

В общем-то всё. smile 
К сожалению, с условиями vba разобраться до конца так и не смог.
Не знаю правильно это или нет, но работает. Может кто подскажет решение по-лучше?

Только что, нашел ещё одну особенность (здесь http://www.askit.ru/custom/vba_office/m12/...ort_object.htm), если не указывать аргумент acViewPreview, то отчёт будет отправлен сразу на печать без отображения окна просмотра.
Код

     DoCmd.OpenReport "01_0 Отзыв по фильтру"

Так изложение будет полнее.  smile 

Это сообщение отредактировал(а) Karam_S - 26.4.2009, 09:23
PM MAIL ICQ   Вверх
bopoha
Дата 29.4.2009, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Karam_S, зря вы использовали "Forms![Проверка работ].Controls![Работа с замечаниями].Form.Controls!ПР" в самой строке.
На мой взгляд передавать условие поиска лучше отчету извне, чтобы он ничего об этом не знал:

Например (Код должен быть реализован в модуле формы "Проверка работ"):
Код

Private Sub ПечТекЗап_Click()
    Dim stFilter As String
    
    stFilter = "[Фамилия]= " & Me.Фамилия & " And ПрРаб = " & Me("Работа с замечаниями").Form.Controls("ПР")

    DoCmd.OpenReport "01_0 Отзыв по фильтру", acViewPreview, , stFilter
End Sub


Если этот код повтоярется, то выделите его в отдельную функцию, и передавайте в нее только значения параметров.

Тут про формы можно почитать подробнее http://5codelines.net/povyshenie-soprovozh...-chast-1-formy/

Это сообщение отредактировал(а) bopoha - 29.4.2009, 17:47
PM MAIL WWW ICQ Skype GTalk   Вверх
Karam_S
Дата 29.4.2009, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 11.2.2008
Где: г. Новокузнецк

Репутация: нет
Всего: нет



bopoha спасибо за поправку и наводку! 

Я убрал условия из отчёта и опробовал предложенный код  smile 
Код

Dim stFilter As String
    stFilter = "[Фамилия]= " & Me.Фамилия & " And ПрРаб = " Me("Работа с замечаниями").Form.Controls("ПР")

Но vb выдал ошибку.

Я заменил способ записи:
Код

stFilter = "[Фамилия]= " & Me.Фамилия & " And ПрРаб = Forms![Проверка работ].Controls![Работа с замечаниями].Form.Controls!ПР"

Тогда после нажатия кнопки стал появляться запрос фамилии (хотя форма открыта).

Я ещё раз заменил способ записи:
Код

"[Фамилия]= Forms![Проверка работ].Controls!Фамилия" & " And ПрРаб = Forms![Проверка работ].Controls![Работа с замечаниями].Form.Controls!ПР"

И тогда всё заработало!  smile 
Возможно, предложенный первоначально синтаксис не сработал потому, что в разных версиях access правила его составления несколько меняются. 
У меня стоит версия 2007.

Это сообщение отредактировал(а) Karam_S - 29.4.2009, 17:33
PM MAIL ICQ   Вверх
bopoha
Дата 29.4.2009, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Цитата(Karam_S @  29.4.2009,  17:31 Найти цитируемый пост)
Тогда после нажатия кнопки стал появляться запрос фамилии (хотя форма открыта).

Хм. Запрос фамили у вас не мог отрыться, если поля бы не существовало, произошла бы ошибка. 

Цитата(Karam_S @  29.4.2009,  17:31 Найти цитируемый пост)
У меня стоит версия 2007.

Это не важно.

Кстати, в моем коде ошибка:
Цитата(bopoha @  29.4.2009,  11:02 Найти цитируемый пост)
stFilter = "[Фамилия]= " & Me.Фамилия & " And ПрРаб = " Me("Работа с замечаниями").Form.Controls("ПР")


Нужно так:
Код

stFilter = "[Фамилия]= " & Me.Фамилия & " And ПрРаб = " & Me("Работа с замечаниями").Form.Controls("ПР")

PM MAIL WWW ICQ Skype GTalk   Вверх
Karam_S
Дата 30.4.2009, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 11.2.2008
Где: г. Новокузнецк

Репутация: нет
Всего: нет



Странно, последняя версия вашего кода 
Код

stFilter = "[Фамилия]= " & Me.Фамилия & " And ПрРаб = " & Me("Работа с замечаниями").Form.Controls("ПР")

выводит окно с запросом введения фамилии.

После следующей правки
Код

stFilter = "[Фамилия]= Forms![Проверка работ].Controls!Фамилия" & " And ПрРаб = " & Me("Работа с замечаниями").Form.Controls("ПР")

вновь всё заработало! (без запросов).

Таким образом, запись
Код

"[Фамилия]= " & Me.Фамилия 

вызывает запрос. Вместо того, чтобы взять данные из поля формы.

Пробую так
Код

"[Фамилия]= " & Me("Проверка работ").Form.Controls("Фамилия")

тогда появляется ошибка 2465 - "Приложению акцесс не удаётся найти поле "Проверка работ", указанное в выражении".
Хотя я думаю, почему поле "Проверка работ", ведь указываю поле "Фамилия".
PM MAIL ICQ   Вверх
bopoha
Дата 30.4.2009, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Я походу понял. Как называется форма, на которой выполняется код? Я предполагал, что это форма - "Проверка работ".

Замените 
Цитата(Karam_S @  30.4.2009,  11:45 Найти цитируемый пост)
Me("Проверка работ").Form.Controls("Фамилия")


на 

Код

Forms("Проверка работ").Controls("Фамилия")


Это сообщение отредактировал(а) bopoha - 30.4.2009, 12:16
PM MAIL WWW ICQ Skype GTalk   Вверх
Karam_S
Дата 30.4.2009, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 11.2.2008
Где: г. Новокузнецк

Репутация: нет
Всего: нет



Исходное предположение правильное: главная форма - "Проверка работ"; в ней же кнопка, т.е. выполняется код.
Последний предложенный вариант кода 
Код

Forms("Проверка работ").Controls("Фамилия")

также вызывает окно запроса "Введите значение параметра" для ввода фамилии.
Если фамилию вручную ввести, то задание благополучно уходит на принтер.

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  vbcode.jpg 134,29 Kb
PM MAIL ICQ   Вверх
bopoha
Дата 30.4.2009, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Цитата(Karam_S @  30.4.2009,  13:30 Найти цитируемый пост)
Forms("Проверка работ").Controls("Фамилия")

Это выражение содержит строку?

Тогда нужно так:
Код

stFilter = "[Фамилия]= '" & Me.Фамилия & "' And ПрРаб = " & Me("Работа с замечаниями").Form.Controls("ПР")

Т.е. обрамить значение Me.Фамилия в одинарные ковычки.

Цитата(Karam_S @  30.4.2009,  13:30 Найти цитируемый пост)
Присоединённый файл  vbcode.jpg 134,29 Kb

Вы зачем взяли в ковычки выражение Me(..... ? Этого делать не нужно.
PM MAIL WWW ICQ Skype GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0592 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.