0 / 0 / 0
Регистрация: 27.10.2010
Сообщений: 10
1

Заполнение документа в Word из нескольких таблиц

27.10.2010, 12:34. Показов 5063. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня такая проблема.
Есть 4 таблицы. 3 из который справочники (Область, Город, Улица) и одна Заказчик:
ТЗаказчик
Код Зак
ФИО
Код Обл
Код Гор
Код Ул

ТОбласть
Код Обл
Область

ТГород
Код Гор
Город
Код Обл

Код Ул
Улица
Код Гор

Реализовала заполнение шаблона в Word из некой формы, где содержится информация из всех 4 таблиц. Но почему то в текстовых полях шаблона из выпадающих зависимых списков областей, городов и улиц формы печатаются только их Коды, а не названия.

В свойствах выпадающих списков Формы я указала:
Данные -ничего не писала (на форме в Конструкторе отображается Свободное поле со списком)
Источник строк - Select запрос состоящий из Таблиц-справочников

Как мне заставить печатать Названия из справочников, а не коды?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2010, 12:34
Ответы с готовыми решениями:

Заполнение документа Word несколько раз данными из другого документа
есть некий документ Word(test.docx). Нужно создать новый документ(test1.docx), и заполнить его...

Заполнение документа Word
Здравствуйте форумчане. Макросами занимаюсь мало и не часто, но вот столкнулся с проблемой,...

Заполнение документа Word
Вообщем есть такая задача... Сделать программу в которой будет туча текстбоксов подписанных в них...

Заполнение шаблона документа Word
Помогите пожалуйста, нужно создать программу, которая будет заполнять шаблон документа.

6
2454 / 797 / 24
Регистрация: 18.08.2009
Сообщений: 1,697
27.10.2010, 12:53 2
ничего сильно умного не надумала: работы много. Но можно попробовать сделать так: создать на форме скрытые поля и им присвоить текст из полей с данными из справочника по событию После обновления
PureBasic
1
Me.ПолеСкрытое = Me.ПолеИзСправочника.Column(1)
Потом в шаблон документа Ворд брать значения из скрытых полей
0
1180 / 631 / 39
Регистрация: 30.05.2010
Сообщений: 715
28.10.2010, 12:43 3
Здравствуйте irishka_25-01.
"..Реализовала заполнение шаблона в Word из некой формы, где содержится информация из всех 4 таблиц...", Вы заблуждаетесь у формы данные только одной таблицы - ТЗаказчик.
Остальная информация (Область, Город, Улица) отображается контролами - самостоятельными объектами расположенными на форме, источниками строк для которых являются три остальные таблицы (ТОбласть, ТГород, ТУлица(не была указана)). Между источниками строк контролов и данными формы установлена связь по ключевым полям, потому они и отображают текст соответствующий значению поля идентификатора родительской формы.
Для решения проблемы подключите к форме в качестве источника подобный запрос:
SQL
1
2
SELECT ТЗаказчик.*, ТОбласть.Область, ТГород.Город, ТУлица.Улица
FROM ((ТЗаказчик INNER JOIN ТГород ON ТЗаказчик.[Код Гор] = ТГород.[Код Гор]) INNER JOIN ТОбласть ON ТЗаказчик.[Код Обл] = ТОбласть.[Код Обл]) INNER JOIN ТУлица ON ТЗаказчик.[Код Ул] = ТУлица.[Код Ул]
или предавайте в WORD данные из подобной SQL конструкции:
SQL
1
2
3
4
5
6
SELECT Код Зак, ФИО, 
(SELECT Область FROM ТОбласть  WHERE ТОбласть.[Код Обл] =T.[Код Обл]), 
 (SELECT Город FROM  ТГород  WHERE ТГород.[Код Гор] =T.[Код Гор]), 
(SELECT Улица FROM  ТУлица  WHERE ТУлица.[Код Ул] =T. [Код Ул]) 
FROM ТЗаказчик T
WHERE Код = <ID текущей записи формы>
надеюсь объяснение понятно.
Успехов Вам.
Евгений.
1
0 / 0 / 0
Регистрация: 27.10.2010
Сообщений: 10
28.10.2010, 13:13  [ТС] 4
спасибо большое за помощь!
Мне подсказали сделать вот так:
Visual Basic
1
2
3
4
wordDoc.Bookmarks("Область").Select
dataRecord.Open "SELECT Область FROM Область WHERE Код_области=" + CStr(Me.ОбластьР.Value), CurrentProject.Connection, adOpenKeyset, adLockReadOnly
wordApp.Selection.Text = dataRecord.Fields(0).Value
dataRecord.Close
Вроде все работает.

Сейчас столкнулась с такой проблемой, что при заполнении шаблона выскакивает ошибка, если в каком-либо поле формы не введеныы никакие данные. Вывожу на печать я так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim wordApp As Word.Application
Dim wordDoc As Word.Document
 
Dim dataRecord As New ADODB.Recordset
 
'Открываем шаблон (заранее подготовленный):
Set wordApp = CreateObject("Word.Application")
wordApp.Visible = True
wordApp.Documents.Add Template:="C:\projects\Заявление.docm"
Set wordDoc = wordApp.ActiveDocument
 
'заполнение закладок в Word
wordDoc.Bookmarks("Фам").Select
wordApp.Selection.Text = Form![Фамилия]
и так по каждой закладке соответствующей полю в форме....

Я так понимаю нужно написать условие, что если поле формы не заполнено, то и выводить на печать его не надо или как пустое значение. Но вот как это сделать...
0
1180 / 631 / 39
Регистрация: 30.05.2010
Сообщений: 715
28.10.2010, 14:26 5
irishka_25-01, если у Вас имена закладок соответствуют именам полей,
попробуйте использовать подобную конструкцию:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Sub toDOC()
Const sQ = "SELECT ФИО, (SELECT Область FROM ТОбласть  WHERE ТОбласть.[Код Обл] =T.[Код Обл]), " + _
"(SELECT Город FROM  ТГород  WHERE ТГород.[Код Гор] =T.[Код Гор]), " + _
"(SELECT Улица FROM  ТУлица  WHERE ТУлица.[Код Ул] =T.[Код Ул]) FROM ТЗаказчик T WHERE [Код Зак] =" 
Const sP = "C:\projects\Заявление.docm"
Dim WA As Word.Application, WD As Word.Document
Dim cn As ADODB.Connection, rs As ADODB.Recordset
Dim s$, o As Object
'на форме скорее всего приситствует поле [Код Зак]
'из которого получаем идентификатор текущей записи
s = Nz(Me.[Код Зак], 0) 'текстовый эквивалент идентификатора
If Val(s) = 0 Then Exit Sub 'не выбрана(новая) запись
Set cn = CurrentProject.Connection
Set rs = New ADODB.Recordset
rs.Open sQ + s, cn
If Not rs.EOF Then
    Set WA = CreateObject("Word.Application")
    WA.Visible = True
    WA.Documents.Add Template:=sP
    Set WD = WA.ActiveDocument
    For Each o In rs.Fields
        s = o.Name
        If Not Len(rs(s) & "") = 0 Then _
            WD.Bookmarks.Item(s).Range.Text = rs(s)
    Next
    rs.Close
    WA.Visible = True
End If
Set rs = Nothing: Set cn = Nothing
End Sub
Евгений.
0
0 / 0 / 0
Регистрация: 27.10.2010
Сообщений: 10
03.11.2010, 10:41  [ТС] 6
спасибо!
а что делает этот SQL- запрос? Просто если честно я его не очень поняла....у меня в ТЗаказчик еще есть куча полей (Дата рождения, серия паспорта, номер паспорта, коды областей городов улиц по месту рождения и по месту жительства отдельно, также индекс, телефон....). Мне кажется запрос изменится с учетом этих даных...их нужно добавлять?
так у меня ничего не получилось.
И еще, у меня нет КодаЗаказчика на форме, он счетчик. Его добавить и просто можно сделать невидимым?

Добавлено через 1 час 0 минут
и еще у меня ругается на строчку
WD.Bookmarks.Item(s).Range.Text = rs(s)
0
2454 / 797 / 24
Регистрация: 18.08.2009
Сообщений: 1,697
03.11.2010, 11:12 7
Цитата Сообщение от irishka_25-01 Посмотреть сообщение
у меня нет КодаЗаказчика на форме, он счетчик. Его добавить и просто можно сделать невидимым?
- правильно
0
03.11.2010, 11:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.11.2010, 11:12
Помогаю со студенческими работами здесь

Заполнение документа word с формы
Собственно, задача следующая Составить программу, позволяющую заполнять стандартные заявления...

Заполнение документа Word по меткам
Здравствуйте... Нужно заполнить созданный документ Word'a по меткам. Использую вот такой код: ...

Импорт таблиц из документа Word в StringGrid
Доброго времени суток. Если у кого есть исходник программы которая импортирует таблицу из Word...

Заполнение информации Word документа по шаблону
Здравствуйте, знатоки Access. Помогите разрешить проблему. Цель: сделать так, чтобы при нажатии на...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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