| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS Access > Печать текущей записи |
| Автор: Dmitrimel 23.10.2006, 14:42 |
| Есть форма, в которой отображаются записи из нескольких таблиц, подскажите как сделать такую волшебную кнопочку, чтобы она выводила на печать текущую запись из формы в читаемом ввиде (что-то вроде отчета). Заранее спасибо. Пожалуйста, описывайте свои действия более побробно, т.к. я пока новичок в этом деле. |
| Автор: Юдифь 24.10.2006, 01:02 |
| Создать отчёт, основанный на тех же таблицах. Объединяющее поле для всех этих таблиц у тебя наверняка есть? В условии поставить в запросе на это поле: form![название формы]![название поля формы]. |
| Автор: Akina 24.10.2006, 08:16 |
| Если на форме отображаются те данные, которые надо напечатать - выводи на печать не записи таблиц, а содержимое контролов формы. |
| Автор: Dmitrimel 24.10.2006, 09:20 | ||||
Спасибо тебе огромное, все получилось. Добавлено @ 09:21
а вот тут можно подробнее??? |
| Автор: Karam_S 22.4.2009, 11:27 |
| У меня для решения проблемы "Печать текущей записи из формы" в моей базе маленько не хватает тяму. 1. Есть сложная форма, объединяющая 3 таблицы. 2. Есть отчёт, выводящий всю совокупность записей. Он основан не на самостоятельном (отдельном) запросе, а на встроенном в отчёт. 3. Необходимо через кнопку из формы выводить на печать через оформление отчёта текущую запись формы. Что делаю: 1. Создал в отчёте условие " WHERE ([Для отзыва по всем].Фамилия=form![Проверка работ]![Фамилия]) " В итоге при открытии отчёта появляется окно "form!Проверка работ!Фамилия" с полем для введения значения. Пояснение: Отчёт выполнить на самостоятельном (отдельном) запросе не получилось, т.к. при передаче текстового значения через запрос в отчёте отображались только первые 5-6 строк, а остальной текст не отображался. Чтобы обойти эту проблему, построил отчёт через непосредственное обращение к полям таблицы и необходимым полям из другого запроса. Прошу помочь. |
| Автор: Karam_S 22.4.2009, 16:58 |
| Решение частично найдено. Дело в том, что если делается указание на открытую форму, то надо использовать слово "Forms". Поэтому использование условия "WHERE ([Для отзыва по всем].Фамилия=forms![Проверка работ]![Фамилия])" помогло! Но проблема всё-таки до конца не решена. Дело в том, что требуется вывести запись, удовлетворяющую одновременно нескольким условиям, часть из которых указаны в подчинённой форме. И здесь уже указанная ссылка не срабатывает. Так условия "WHERE ПредстРаботы.Проверена=Forms![Работа с замечаниями]!Проверена" (где "Forms![Работа с замечаниями]!Проверена" - поле в подчинённой форме) выдаёт при вызове окно-запрос с полем на значение, куда требуется вручную вводить дату. Если это значение ввести, то отчёт отображается с соответствующей записью. Возникает вопрос, как задавать условия в отношении подчинёных форм? |
| Автор: Karam_S 25.4.2009, 15:45 | ||||||||
| Для решения проблемы делаю первые шаги в VBA. Вот так:
срабатывает. "Проверка работ" - главная форма. Вот так:
тоже срабатывает. ("ПрРаб" - это поле типа "числовой" из подчинённой формы "Работа с замечаниями"). Но вот так (когда требуется вывести запись, удовлетворяющую двум условиям):
не срабатывает. И ещё один вопрос. Плохо, конечно, что значение поля "ПрРаб" явно указано. Как задать условие полю "ПрРаб" равное тому, что выводится в форме "Работа с замечаниями"? Вот такая запись:
приводит к пустому результату в отчёте. Может я не по тому пути пошёл? Цель одна - через кнопку из формы выводить на печать через оформление отчёта текущую запись формы. |
| Автор: Karam_S 26.4.2009, 07:55 | ||||||
| Проблема решена. Благодаря подробному faq-разъяснению Geo, Владимир Саныч http://www.sql.ru/faq/faq_topic.aspx?fid=156 1. Использую отчёт со встроенным запросом, где условием указываем поле главной формы и поле подчинённой формы. Например,
Здесь ссылка на подчинённую форму имеет специальный синтакси: Forms![Форма1].Controls![Форма2].Form.Controls![Поле1].Value 2. В главной форме на событие кнопки указываю команду vba для открытия отчёта
Т.е. простая команда без условий. В общем-то всё. К сожалению, с условиями vba разобраться до конца так и не смог. Не знаю правильно это или нет, но работает. Может кто подскажет решение по-лучше? Только что, нашел ещё одну особенность (здесь http://www.askit.ru/custom/vba_office/m12/12_07_access_report_object.htm), если не указывать аргумент acViewPreview, то отчёт будет отправлен сразу на печать без отображения окна просмотра.
Так изложение будет полнее. |
| Автор: bopoha 29.4.2009, 11:02 | ||
| Karam_S, зря вы использовали "Forms![Проверка работ].Controls![Работа с замечаниями].Form.Controls!ПР" в самой строке. На мой взгляд передавать условие поиска лучше отчету извне, чтобы он ничего об этом не знал: Например (Код должен быть реализован в модуле формы "Проверка работ"):
Если этот код повтоярется, то выделите его в отдельную функцию, и передавайте в нее только значения параметров. Тут про формы можно почитать подробнее http://5codelines.net/povyshenie-soprovozhdaemosti-chast-1-formy/ |
| Автор: Karam_S 29.4.2009, 17:31 | ||||||
| bopoha спасибо за поправку и наводку! Я убрал условия из отчёта и опробовал предложенный код
Но vb выдал ошибку. Я заменил способ записи:
Тогда после нажатия кнопки стал появляться запрос фамилии (хотя форма открыта). Я ещё раз заменил способ записи:
И тогда всё заработало! Возможно, предложенный первоначально синтаксис не сработал потому, что в разных версиях access правила его составления несколько меняются. У меня стоит версия 2007. |
| Автор: Karam_S 30.4.2009, 11:45 | ||||||||
Странно, последняя версия вашего кода
выводит окно с запросом введения фамилии. После следующей правки
вновь всё заработало! (без запросов). Таким образом, запись
вызывает запрос. Вместо того, чтобы взять данные из поля формы. Пробую так
тогда появляется ошибка 2465 - "Приложению акцесс не удаётся найти поле "Проверка работ", указанное в выражении". Хотя я думаю, почему поле "Проверка работ", ведь указываю поле "Фамилия". |
| Автор: bopoha 30.4.2009, 12:09 | ||
| Я походу понял. Как называется форма, на которой выполняется код? Я предполагал, что это форма - "Проверка работ". Замените на
|
| Автор: Karam_S 30.4.2009, 13:30 | ||
| Исходное предположение правильное: главная форма - "Проверка работ"; в ней же кнопка, т.е. выполняется код. Последний предложенный вариант кода
также вызывает окно запроса "Введите значение параметра" для ввода фамилии. Если фамилию вручную ввести, то задание благополучно уходит на принтер. |
| Автор: bopoha 30.4.2009, 14:23 | ||
Это выражение содержит строку? Тогда нужно так:
Т.е. обрамить значение Me.Фамилия в одинарные ковычки. Вы зачем взяли в ковычки выражение Me(..... ? Этого делать не нужно. |
| Автор: Karam_S 30.4.2009, 15:53 |
| Всё получилось! Заработало! Большое спасибо!!! Хорошо, когда есть люди, которые готовы помочь. |