Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/30: Рейтинг темы: голосов - 30, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 07.06.2020
Сообщений: 8
1
.NET 3.x

Создание макета коммерческого приложения с выгрузкой данных из DGV

23.06.2021, 09:11. Показов 5648. Ответов 22

Author24 — интернет-сервис помощи студентам
Уважаемые форумчане, доброго времени суток! В рамках создания мини-crm для упрощения своей работы столкнулся со следующей трудностью:
Есть БД, DGV в условии и макет коммерческого (см. скриншот) в решении. Задачу поставил для себя следующую: создать готовое КП в формате .pdf без использования дополнительного ПО от мелкомягких. По своим умозаключеним пришел к XML, но тут у меня и случился затык, потому что для меня XML сродни темному лесу.
Не прошу готовых решений, мне нужно направление для понимания концепции. Либо же альтернативные варианты решения подобного вопроса. Заранее благодарю за помощь!
Миниатюры
Создание макета коммерческого приложения с выгрузкой данных из DGV  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.06.2021, 09:11
Ответы с готовыми решениями:

Перенос данных из одного DGV в другой DGV
Нужно перенести данные из одного dgv в другой(в идеале ещё прибавить к столбцам выбранные значения...

Создание коммерческого веб-сайта на лотусе
Начал делать коммерческий каталог услуг в интернете, используя в качестве веб-сервера и среды...

проблема с выгрузкой данных
Если в бухгалтерии для бюджетных организаций произвести выгрузку платежного поручения (сервис обмен...

База данных коммерческого банка
информационная система отдела кредитования коммерческого банка Правила, п.4.7.

22
258 / 199 / 49
Регистрация: 18.12.2015
Сообщений: 416
23.06.2021, 14:59 2
Добрый день.
Цитата Сообщение от Cryphon Посмотреть сообщение
создать готовое КП в формате .pdf без использования дополнительного ПО
А каким образом вы собирались переносить данные из xml в pdf? Pdf это не просто текстовый\табличный файл, там своеобразная структура.
0
0 / 0 / 0
Регистрация: 07.06.2020
Сообщений: 8
23.06.2021, 15:20  [ТС] 3
Согласен, ваша правда, не подумал об этом... Из доступных (читай: бесплатных) пакетов я не знаю ни одного. А если XML сменить на HTML? Подозреваю, что его будет и конвертировать в PDF легче.
Самая большая сложность для меня сейчас - это понять как или с помощью чего делать разметку будущему документу. Я перерыл уже огромное количество форумов, но везде либо все ограничивается выводов одной лишь DGV в итоговый отчет в качестве примера, либо делают все на базе шаблонов/документов в MSOffice. На работе ограничен LibreOffice, что автоматом отсеивает второй вариант.
0
2099 / 1510 / 391
Регистрация: 26.06.2017
Сообщений: 4,329
23.06.2021, 16:12 4
Цитата Сообщение от Cryphon Посмотреть сообщение
На работе ограничен LibreOffice, что автоматом отсеивает второй вариант
Да вроде бы нет, для LibreOffice есть SDK с поддержкой VB.Net.
Ещё как вариант сделайте приложение с формой КП и перчайте форму на PDF-принтер. Как печатать саму форму были темы на форуме поищите, ну а чтобы не возиться с форматом самого PDF документа используйте любой доступный PDF-принтер.

Добавлено через 9 минут
Печать формы.
1
0 / 0 / 0
Регистрация: 07.06.2020
Сообщений: 8
24.06.2021, 17:56  [ТС] 5
Uswer, спасибо за идею с формой, сегодня попробовал ее рассмотреть, но возникают сложность с размещением таблицы. Так как она может иметь размер на несколько страниц, то победить ее формой я не смог. Этот вариант рассматриваю, как совсем на костылях.
Цитата Сообщение от Uswer Посмотреть сообщение
Да вроде бы нет, для LibreOffice есть SDK с поддержкой VB.Net
Это да, видел, пытался, но за раз слишком муторно, если честно, особенно после vba) Да и саму задачу себе поставил воплотить полностью независимый проект от внешних программ. По итогу, на сегодняшний день пытаюсь разобраться в коде
ovva, где он выводил dgv в html.
Кстати, уважаемые мастера, помогите с ошибкой. Ниже привожу код автора ovva:

VB.NET
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 ''' <summary>
    ''' возвращает двумерный массив представляющий данные DataGridView
    ''' </summary>
    ''' <param name="DGV">DataGridView</param>
    ''' <param name="allData"> копировать всю таблицу (TRUE) или выделенный диапазон (FALSE)</param>
    ''' <param name="withoutC0">без поля заголовков строк (TRUE)</param>
    ''' <param name="withoutRN">без последней (пустой) строки (TRUE) [использовать для варианта allData=TRUE]</param>
    Private Function getDataDGV(ByVal DGV As DataGridView, ByVal allData As Boolean, ByVal withoutC0 As Boolean, ByVal withoutRN As Boolean) As String(,)
        If allData Then DGV.SelectAll()
        If DataGridView1.GetCellCount(DataGridViewElementStates.Selected) > 0 Then
            Try
                Clipboard.SetDataObject(DataGridView1.GetClipboardContent(), False)
                Application.DoEvents()
                Dim data_object As IDataObject = Clipboard.GetDataObject()
                Dim ss As String = data_object.GetData(DataFormats.Text)
                Dim rr() As String = ss.Split(vbCrLf)
                Dim tt() As String = rr(0).Split(vbTab)
                Dim n As Integer = rr.Length
                If withoutRN Then n -= 1
                Dim m As Integer = tt.Length
                Dim cc(n - 1, m - 1) As String
                Dim k As Integer = 0
                If withoutC0 Then
                    ReDim cc(n - 1, m - 2)
                    k = 1
                End If
                For i = 0 To n - 1
                    tt = rr(i).Split(vbTab)
                    For j = k To m - 1
                        cc(i, j - k) = tt(j)
                    Next
                Next
                Return cc
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        End If
        Return Nothing
    End Function
    Private Sub toHtml_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
        Dim dd(,) As String = getDataDGV(DataGridView1, allDGV, withoutC0, withoutRN)
        Dim wCol(dd.GetLength(1) - 1) As Integer
        For i = 0 To wCol.Length - 1
            wCol(i) = DataGridView1.Columns(dd(0, i)).Width
        Next
        Form2.Tag = dd
        Form2.wCol = wCol
        Form2.ShowDialog()
    End Sub
Вот в этом моменте:

VB.NET
1
2
3
 For i = 0 To wCol.Length - 1
            wCol(i) = DataGridView1.Columns(dd(0, i)).Width
        Next
получаю ошибку:

System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."

System.Windows.Forms.DataGridViewColumnCollection.this[string].get вернул Nothing.

Куда смотреть?
Миниатюры
Создание макета коммерческого приложения с выгрузкой данных из DGV  
0
2099 / 1510 / 391
Регистрация: 26.06.2017
Сообщений: 4,329
24.06.2021, 19:22 6
Лучший ответ Сообщение было отмечено Cryphon как решение

Решение

Cryphon, мне думается сочетать HTML и приложение WinForms не самый лучший, хотя и возможный, вариант. Мне кажется Вам стоит разобраться с классом PrintDocument. В целом, мне видится такой подход: в некоторой форме есть DGV, там он заполняется правится и всё такое; как только DGV готов, то нажимается кнопка, по которой формируется печатаемый документ (PrintDocument), затем это добро пуляется на принтер. При желании можно добавить предпросмотр.
1
4665 / 3620 / 856
Регистрация: 02.02.2013
Сообщений: 3,490
Записей в блоге: 2
24.06.2021, 20:40 7
Лучший ответ Сообщение было отмечено Cryphon как решение

Решение

Цитата Сообщение от Cryphon Посмотреть сообщение
Ниже привожу код автора ovva
Лучше бы вы дали ссылку, откуда этот код взят.
Но полагаю, что вам стоит воспользоваться предложением Uswer. Вы формируете документ, далее выводите его на PDF-принтер и имеете готовый документ в формате PDF. Прикладываю небольшую тестовую программу, которая думаю, будет полезна, если вы выберете этот вариант подготовки документа.
Вложения
Тип файла: rar tstDgvPrint.rar (19.3 Кб, 13 просмотров)
1
0 / 0 / 0
Регистрация: 07.06.2020
Сообщений: 8
24.06.2021, 21:03  [ТС] 8
Цитата Сообщение от ovva Посмотреть сообщение
Лучше бы вы дали ссылку, откуда этот код взят.
Извиняюсь, исправлюсь)

Цитата Сообщение от Uswer Посмотреть сообщение
В целом, мне видится такой подход: в некоторой форме есть DGV, там он заполняется правится и всё такое; как только DGV готов, то нажимается кнопка, по которой формируется печатаемый документ (PrintDocument), затем это добро пуляется на принтер.
Цитата Сообщение от ovva Посмотреть сообщение
Вы формируете документ, далее выводите его на PDF-принтер и имеете готовый документ в формате PDF.
Огромное спасибо за советы, пошел учить матчасть.

Цитата Сообщение от ovva Посмотреть сообщение
Прикладываю небольшую тестовую программу
За это вообще низкий поклон, особенно с учетом описанного функционала в ней.

В процессе изучения PrintDocument у меня появился вопрос: а какой итоговый размер у виртуального листа а4 в точках, которые объект e просит ввести при формировании текста для вывода в документ?

Добавлено через 6 минут
Цитата Сообщение от ovva Посмотреть сообщение
дали ссылку, откуда этот код взят
вот, нашел:
PrintDocument, PrintPreviewDialog - вывод содержимого формы на печать
0
4665 / 3620 / 856
Регистрация: 02.02.2013
Сообщений: 3,490
Записей в блоге: 2
29.06.2021, 17:32 9
Цитата Сообщение от Cryphon Посмотреть сообщение
Не прошу готовых решений, мне нужно направление для понимания концепции. Либо же альтернативные варианты решения подобного вопроса.
Для формирования отчета можно использовать элемент управления ReportViewer (https://docs.microsoft.com/en-... 1(v=vs.140)) и там имеется экспорт в форматах Excel, Word, PDF. Но сразу скажу, вещь довольно путанная, и чтобы разобраться придется потратить время. Предполагается активный поиск в сети. И все же разобраться имеет смысл.
Прикладываю проект использующий ReportViewer.
Вложения
Тип файла: rar repFromTable.rar (135.3 Кб, 11 просмотров)
Тип файла: rar tstReport.rar (307.5 Кб, 11 просмотров)
1
2099 / 1510 / 391
Регистрация: 26.06.2017
Сообщений: 4,329
29.06.2021, 18:12 10
ovva, ссылка битая.
0
4665 / 3620 / 856
Регистрация: 02.02.2013
Сообщений: 3,490
Записей в блоге: 2
29.06.2021, 18:42 11
Цитата Сообщение от Uswer Посмотреть сообщение
ссылка битая
Она не битая просто там залипла последняя скобка
https://docs.microsoft.com/en-... (v=vs.140)
https://docs.microsoft.com/en-... (v=vs.140)
0
4665 / 3620 / 856
Регистрация: 02.02.2013
Сообщений: 3,490
Записей в блоге: 2
29.06.2021, 19:05 12
Еще вариант с xml представлением таблицы
VB.NET
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
Private Sub Button6_Click(sender As System.Object, e As System.EventArgs) Handles Button6.Click
    'from table 2
    ds = New DataSet
    Dim pthDB As String = IO.Path.Combine(Application.StartupPath, "data", "Medicines.mdb")
    'назначение класса dbMethods здесь формирование DataSet
    Dim bd As New dbMethods(pthDB)
    bd.addTable("Аптеки", ds, "Название,Адрес,Телефон,ЧасыРаботы")
    Dim tb As DataTable = ds.Tables(0)
    Dim pthXSL As String = IO.Path.Combine(Application.StartupPath, "test002tb2.xsl")
    Dim pthHTML As String = IO.Path.Combine(Application.StartupPath, "test002tb2.html")
    Dim xslt As New XslCompiledTransform
    xslt.Load(pthXSL)
    Dim settingsW As New XmlWriterSettings()
    settingsW.Indent = True
    settingsW.Encoding = Encoding.UTF8
    Dim sb As New StringBuilder
    Dim writer As XmlWriter = XmlWriter.Create(sb, settingsW)
    tb.WriteXml(writer, True)
    writer.Close()
    Dim doc As XmlDocument = New XmlDocument
    doc.LoadXml(sb.ToString)
    Dim writerX As XmlWriter = XmlWriter.Create(pthHTML, settingsW)
    xslt.Transform(doc, writerX)
    writerX.Close()
    DataGridView1.DataSource = tb
    WebBrowser1.DocumentText = IO.File.ReadAllText(pthHTML)
    'непосредственно из WebBrowser1 можно распечатать на PDF-принтер
End Sub
Здесь будет вопрос, куда и как вставлять заданные в процессе работы тексты. На мой взгляд, возможны два варианта непосредственно в Html или в Xml, но тогда соответствующим образом нужно менять Xslt.
Вложения
Тип файла: rar files.rar (267.5 Кб, 6 просмотров)
1
0 / 0 / 0
Регистрация: 07.06.2020
Сообщений: 8
01.07.2021, 17:21  [ТС] 13
Цитата Сообщение от ovva Посмотреть сообщение
Для формирования отчета можно использовать элемент управления ReportViewer
Спасибо за наводку, тоже долго в нем ковырялся, но понять не смог. В итоге, нашел на просторах Nuget пакет Bunifu.Reports, который оказался достаточно простым для моего понимания и позволил на лету формировать HTML-документы по заданным параметрам. На сегодняшний день удалось реализовать вопрос из сабжа (скриншот 1), правда столкнулся с проблемой в кодировке при сохранении файла в pdf непосредственно через код (скриншот 2), которую понять пока не удалось. Если есть знающие, то буду благодарен за объяснения этой кракозябры.

Для тех, кто хочет с помощью пакета Bunifu.Report создавать документы, но не шарит в HTML (как я, например ), могу порекомендовать HTML редактор номер раз и редактор номер два. Они очень выручили меня и позволили подтянуть как базовое понимание структуры языка, так и ускорили процесс работы.

Ниже пример кода:
VB.NET
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim br As Bunifu.Reports.BunifuReports = BunifuReports1
        Dim ish, vh, uv, nomenkl, srok, vhdate, ishdate As String
        Dim kol, Cena, Summ, summC, summS, nds As Decimal
        summC = dt.Compute("Sum(Количество)", "")
        summS = Format(dt.Compute("Sum(Сумма)", ""), "c2")
        If CheckBox7.Checked = True Then
            nds = Format(0, "c")
        Else
            nds = Format(summS / 6, "c")
        End If
        Dim summa As String = SummaString_Val(summS)
        uv = ""
        If gend = 1 Then uv = "Уважаемый "
        If gend = 2 Then uv = "Уважаемая "
        ish = TextBox8.Text
        vh = TextBox9.Text
        ishdate = Format(DateTimePicker1.Value, "Long Date")
        If vh = "" Then
            vh = "__"
            vhdate = "__________ 2021 г."
        Else
            vhdate = Format(DateTimePicker2.Value, "Long Date")
        End If
        br.Clear()
        br.AddString("<h2 style='font-style:italic; text-align:right'><span style='font-size:12px'>Коммерческое предложение актуально в течение пяти рабочих дней!&nbsp;</span></h2>")
        br.AddImage(My.Resources.логотипКП, "width = 100%")
        br.AddString("<table border='0' cellpadding='0' cellspacing='0' style='border-collapse:collapse; width: 100%'>
    <tbody>
        <tr>
            <td style='width: 50%; border-color:#ffffff'>
            <div style='text-align:center'><span style='font-size:14px'>Адрес организации</span></div>
            <div style='text-align:center'><span style='font-size:14px'><strong>Тел./Факс</strong>: номертелефона</span></div>
            <div style='text-align:center'><span style='font-size:14px'><a href='mailto:mail@mail.ru' target='_blank'>mail@mail.ru</a>&nbsp;<a href='https://siteofparty.net' target='_blank'>www.siteofparty.net.ru</a></span></div>
            <div style='text-align:center'><span style='font-size:14px'><strong>ИНН</strong>: 770000000/ <strong>КПП</strong>: 770000001</span></div>
            <div style='text-align:center'><span style='font-size:14px'><strong>ОГРН</strong>: НомерОГРН</span></div>")
        If CheckBox1.Checked = True Then
            br.AddString("<div style='text-align:center'>
            <div><span style='font-size:14px'>Исх.&nbsp;<strong>№&nbsp;<u>&nbsp;" & ish & "&nbsp;</u></strong> от&nbsp;<u>" & ishdate & "</u></span></div>
            <div><span style='font-size:14px'>на вх.&nbsp;<strong>№&nbsp;<u>&nbsp;" & vh & "&nbsp;</u></strong> от&nbsp;<u>" & vhdate & "</u></span></div>
            </div>")
        End If
        If opf = "ИП" Then
            br.AddString("</td>
            <td style='width: 50%; border-color:#ffffff'>
            <div style='text-align:center'><em><span style='font-size:16px'><strong>Руководителю " & opf & " " & naim & "</strong></span></em></div>
            <div style='text-align:center'><em><span style='font-size:16px'><strong>" & RukFIO & "</strong></span></em></div>
            <div style='text-align:center'><span style='font-size:14px'><strong>тел/факс:&nbsp;</strong>" & phone & "</span></div>
            <div style='text-align:center'><span style='font-size:14px'><strong>e-mail:&nbsp;<a href='" & mail & "' target='_blank'>" & mail & "</a></strong></span></div>
        </tr>
    </tbody>
</table>
            <div>&nbsp;</div>")
        Else
            br.AddString("</td>
            <td style='width: 50%; border-color:#ffffff'>
            <div style='text-align:center'><em><span style='font-size:16px'><strong>Руководителю " & opf & " &quot;" & naim & "&quot;</strong></span></em></div>
            <div style='text-align:center'><em><span style='font-size:16px'><strong>" & RukFIO & "</strong></span></em></div>
            <div style='text-align:center'><span style='font-size:14px'><strong>тел/факс:&nbsp;</strong>" & phone & "</span></div>
            <div style='text-align:center'><span style='font-size:14px'><strong>e-mail:&nbsp;<a href='" & mail & "' target='_blank'>" & mail & "</a></strong></span></div>
        </tr>
    </tbody>
</table>
            <div>&nbsp;</div>")
        End If
        If CheckBox5.Checked = True Then
            br.AddString("<h4 style='text-align:center'><span style='font-size:18px'><em>" & uv & RukIO & "!</em></span></h4>")
        Else
            br.AddString("<div style ='text-align:center'><strong><span style='font-size:15px'>Коммерческое предложение №&nbsp;" & nkp & "</span></strong></div>")
        End If
        br.AddString("<p style='margin-left:40px'><span style='font-size:14px'>Согласно Вашему запросу готовы поставить следующее оборудование на условиях:</span></p>
            <table align='center' border='2' cellpadding='0' cellspacing='0' style='border-collapse:collapse; width:100%'>
    <tbody>
        <tr>
            <td style='background-color:#fab1a0; text-align:center; width:30px'><strong><span style='font-family:Times New Roman,Times,serif'><span style='font-size:14px'>№</span></span></strong></td>
            <td style='background-color:#fab1a0; text-align:center'><strong><span style='font-family:Times New Roman,Times,serif'><span style='font-size:14px'>Наименование</span></span></strong></td>
            <td style='background-color:#fab1a0; text-align:center; width:80px'><strong><span style='font-family:Times New Roman,Times,serif'><span style='font-size:14px'>Количество</span></span></strong></td>
            <td style='background-color:#fab1a0; text-align:center; width:100px'><strong><span style='font-family:Times New Roman,Times,serif'><span style='font-size:14px'>Цена</span></span></strong></td>
            <td style='background-color:#fab1a0; text-align:center; width:100px'><strong><span style='font-family:Times New Roman,Times,serif'><span style='font-size:14px'>Сумма</span></span></strong></td>
            <td style='background-color:#fab1a0; text-align:center; width:80px'><strong><span style='font-family:Times New Roman,Times,serif'><span style='font-size:14px'>Срок поставки</span></span></strong></td>
        </tr>")
        For i = 0 To dt.Rows.Count - 1
            nomenkl = dt.Rows(i)("Наименование")
            kol = dt.Rows(i)("Количество")
            Cena = Format(dt.Rows(i)("Цена"), "c")
            Summ = Format(dt.Rows(i)("Сумма"), "c")
            srok = dt.Rows(i)("Срок поставки")
            br.AddString("
        <tr>
            <td style='text-align:center'><span style='font-family:Times New Roman,Times,serif'><span style='font-size:13px'>" & i + 1 & "</span></span></td>
            <td><span style='font-family:Times New Roman,Times,serif'><span style='font-size:14px'>" & nomenkl & "</span></span></td>
            <td style='text-align:center'><span style='font-family:Times New Roman,Times,serif'><span style='font-size:13px'>" & kol & "</span></span></td>
            <td style='text-align:right'><span style='font-family:Times New Roman,Times,serif'><span style='font-size:13px'>" & Cena & "&nbsp;</span></span></td>
            <td style='text-align:right'><span style='font-family:Times New Roman,Times,serif'><span style='font-size:13px'><strong>" & Summ & "&nbsp;</strong></span></span></td>
            <td style='text-align:center'><span style='font-family:Times New Roman,Times,serif'><span style='font-size:13px'><strong>" & srok & "</strong></span></span></td>
        </tr>")
        Next
        br.AddString("
            <td colspan='2' rowspan='1' style='background-color:#dfe6e9'><span style='font-family:Times New Roman,Times,serif'><span style='font-size:14px'><strong>Итого:</strong></span></span></td>
            <td style='background-color:#dfe6e9; text-align:center'><span style='font-family:Times New Roman,Times,serif'><span style='font-size:13px'><strong>" & summC & "</strong></span></span></td>
            <td style='background-color:#dfe6e9'>&nbsp;</td>
            <td style='background-color:#dfe6e9; text-align:right'><span style='font-family:Times New Roman,Times,serif'><span style='font-size:13px'><strong>" & summS & "&nbsp;</strong></span></span></td>
            <td style='background-color:#dfe6e9'>&nbsp;</td>
        </tr>
    </tbody>
</table>
            <div>&nbsp;</div>
<table align='right' border='0' cellpadding='0' cellspacing='0' style='border-collapse:collapse; width:300px'>
    <tbody>
        <tr>
            <td style='border-color:#ffffff; text-align:right; width:50%'>
            <div><strong><span style='font-size:13px'>В том числе НДС:</span></strong></div>
            </td>
            <td style='border-color:#ffffff; text-align:right; width:50%'>
            <div><strong><span style='font-size:13px'>" & nds & " руб.</span></strong></div>
            </td>
        </tr>
    </tbody>
</table>
            <div>&nbsp;</div>
            <div>&nbsp;</div>
            <div>&nbsp;</div>
            <div><span style='font-size:13px'>Всего наименований: " & summC & ", на сумму " & summS & " руб.</span></div>
<div><span style='font-size:13px'><strong>" & summa & "</strong></span></div>
            <div>&nbsp;</div>
            <div>&nbsp;</div>
<div><span style='font-size:13px'><strong>Стоимость включает доставку до терминала транспортных компаний города отправителя.</strong></span></div>")
        If CheckBox2.Checked = True Then
            br.AddImage(My.Resources.Faximile_cut, "span style='float:right; width:70%'")
            br.AddString("
            <div>&nbsp;</div>
            <div>&nbsp;</div>
            <div>&nbsp;</div>
            <div>&nbsp;</div>
            <div>&nbsp;</div>
            <div>&nbsp;</div>
            <div>&nbsp;</div>
            <div>&nbsp;</div>
            <div>&nbsp;</div>
            <div>&nbsp;</div>
            <div><span style='font-size:12px'>Исп. " & Mfio & ": " & Mphone & ", <a href='mailto:" & Mmail & "' target='_blank'>" & Mmail & "</a></span></div>")
        ElseIf CheckBox3.Checked = True Then
            br.AddString("
            <div>&nbsp;</div>
            <div>&nbsp;</div>
            <div>&nbsp;</div>
            <div>&nbsp;</div>
<div style='text-align:right'><span style='font-family:Jikharev, Regular;font-size:20px'>Директор ООО &quot;Названиеорганизации&quot; __________ ФИОдиректора</span></div>
            <div>&nbsp;</div>
            <div>&nbsp;</div>
            <div>&nbsp;</div>
            <div><span style='font-size:12px'>Исп. " & Mfio & ": " & Mphone & ", <a href='mailto:" & Mmail & "' target='_blank'>" & Mmail & "</a></span></div>")
        ElseIf CheckBox4.Checked = True Then
            br.AddString("
            <div>&nbsp;</div>
            <div>&nbsp;</div><table border='0' style='border-collapse: collapse; width: 100%;'>
            <tbody>
            <tr>
            <td style='width: 50%; border-color:#ffffff';'>
            <div style='margin-left: 7cm;'><span style='font-family:Jikharev, Regular;font-size:20px''>Председатель совета директоров</span></span></div>
            <div style='margin-left: 7cm;'><span style='font-family:Jikharev, Regular;font-size:20px'>организации &laquo;название&raquo;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _________ ещеодиндиректорФИО</span></span></div>
            </td>
            </tr>
            </tbody>
            </table>
            <div>&nbsp;</div>
            <div>&nbsp;</div>
            <div>&nbsp;</div>
            <div><span style='font-size:12px'>Исп. " & Mfio & ": " & Mphone & ", <a href='mailto:" & Mmail & "' target='_blank'>" & Mmail & "</a></span></div>")
        End If
        br.ShowPrintPreviewDialog()
    End Sub
Конструктивная критика приветствуется
Миниатюры
Создание макета коммерческого приложения с выгрузкой данных из DGV   Создание макета коммерческого приложения с выгрузкой данных из DGV  
0
4665 / 3620 / 856
Регистрация: 02.02.2013
Сообщений: 3,490
Записей в блоге: 2
01.07.2021, 21:03 14
Цитата Сообщение от Cryphon Посмотреть сообщение
Конструктивная критика приветствуется
Никакой критики просто мысли вслух.
Требуется подключение двух библиотек общим объемом 50 Мб, причем одна из них бета-версия. И, несмотря на имеющиеся библиотеки, в коде приличное количество гипертекста, что наводит на мысль что м.б. проще просто создать HTML с нуля. На мой взгляд, более перспективно XML+XSLT, правда XSLT требует изучения.
Теперь по коду.
VB.NET
1
br.ShowPrintPreviewDialog()
покажет вполне читаемый русский текст (правда без некоторых частностей в оформлении). А вот то, что у вас на картинке это результат
VB.NET
1
br.ShowPDFPreviewDialog()
Можно посмотреть, какой HTML сформирован
VB.NET
1
Dim hStr = br.GetHTML
Если посмотреть этот HTML в браузере увидим тот самый нечитаемый текст.
Найдем строку
HTML5
1
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
И выполним замену
VB.NET
1
hStr = hStr.Replace("windows-1252", "charset=UTF-8")
Теперь в браузере то, что планировалось и можно выполнить печать на PDF-принтер и получим требуемый файл.
К сожалению я не нашел способа внести описанные исправления в объекты используемых библиотек.
1
0 / 0 / 0
Регистрация: 07.06.2020
Сообщений: 8
01.07.2021, 21:47  [ТС] 15
Цитата Сообщение от ovva Посмотреть сообщение
br.ShowPrintPreviewDialog() покажет вполне читаемый русский текст (правда без некоторых частностей в оформлении).
На нем пока и остановился, выдаю через принтер или на печать, или в pdf. Первый скрин как раз именно с этой команды.

Цитата Сообщение от ovva Посмотреть сообщение
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
Да, я так же пришел к этой злополучной кодировке, оставил это пока до лучших времен, сейчас в первую очередь функционал, у меня сотрудники в отделе КП по полтора часа составляют.

Ранее вы писали:

Цитата Сообщение от ovva Посмотреть сообщение
Для формирования отчета можно использовать элемент управления ReportViewer
Я, признаюсь, крайне поверхностно по нему прошел, поэтому прошу уточнить: функционал похожий с тем, что у меня сейчас? Как я понял, необходимо создать шаблон отчета в формате .rdlc и уже в него добавлять необходимые данные?
0
4665 / 3620 / 856
Регистрация: 02.02.2013
Сообщений: 3,490
Записей в блоге: 2
01.07.2021, 22:35 16
Цитата Сообщение от Cryphon Посмотреть сообщение
На нем пока и остановился
А почему бы не сохранять исправленный HTML файл. Затем вы загружаете его в браузер и оттуда печатаете в требуемом виде (в том числе в виде PDF файла).
Цитата Сообщение от Cryphon Посмотреть сообщение
функционал похожий с тем, что у меня сейчас?
Нет.
0
2099 / 1510 / 391
Регистрация: 26.06.2017
Сообщений: 4,329
02.07.2021, 00:13 17
Что-то как-то всё сумбурненько Вам не кажется? Я подумал вот что: а что если вообще всё делать в браузере? То есть вообще всё, и наполнение самого КП, и если надо сохранение, и печать. Браузеры есть везде, поэтому никакие сторонние приложения не потребуются вообще. Вместо приложения нужно будет написать корпоративный сайт. Некоторые сотрудники вообще по удалёнке и с телефона смогут КП-шик мастырить. Как идейка?
0
0 / 0 / 0
Регистрация: 07.06.2020
Сообщений: 8
02.07.2021, 11:06  [ТС] 18
Цитата Сообщение от Uswer Посмотреть сообщение
всё сумбурненько

Не по теме:

Лучше и не скажешь, Uswer, все именно сумбурненько) Бухгалтерия предприятия работает в своей 1С, бухгалтер коммерческой организации при предприятии работает в своей 1С, сам коммерческий отдел не имеет доступа ни к одно из баз - работает вообще кто как: кто в блокноте, кто в экселе, кто в голове. В итоге полный сумбур по отгрузкам, производству и контролю) Такова реальность частного производственного предприятия, где руководству не до проблем сотрудников, им лишь бы все были заняты. На этом сформировались устои и традиции. Приходится все портить и брать инициативу в свои руки. Нанимать программистов - дорого, делать корпоративный сайт - дорого. Вам надо? вы и е**тесь)
Извиняюсь за поток сознания


Цитата Сообщение от Uswer Посмотреть сообщение
Браузеры есть везде, поэтому никакие сторонние приложения не потребуются вообще. Вместо приложения нужно будет написать корпоративный сайт.
Да, вы категорически правы, но реальность - она не всегда адекватная) У меня была наработка в экселе на vba, где все было здорово, пока экономия не пересадила меня на LibreOffice. Поняв, что vba и vb.net не так уж сильно отличаются, я начал постигать темные кулуары программирования) Благо сегодня это гораздо проще, чем 15 лет назад.

ovva, подскажите, пожалуйста, есть ли на памяти что-то более наглядное, чем справка Майкрософт по ReportViewer? Уж больно там тернисто все описано.
Цитата Сообщение от ovva Посмотреть сообщение
Прикладываю проект использующий ReportViewer
Я посмотрел ваш пример, но логику так и не уловил.
0
1159 / 945 / 154
Регистрация: 25.07.2015
Сообщений: 2,102
02.07.2021, 11:46 19
Цитата Сообщение от Cryphon Посмотреть сообщение
есть ли на памяти что-то более наглядное, чем справка Майкрософт по ReportViewer?
Здесь например с картинками .
Примитив конечно, но для первичного понимания самое то . Правда на С# , но там всё понятно.
Вообще поисковики творят чудеса, если вбить что-то типа "ReportViewer доступно" )))
1
261 / 213 / 53
Регистрация: 01.08.2016
Сообщений: 825
02.07.2021, 11:59 20
Kulma, А если для ReportViewer в качестве источника данных использовать просто какую то дт? Необязателно выборку из бд так же можно?
0
02.07.2021, 11:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.07.2021, 11:59
Помогаю со студенческими работами здесь

Проблема с выгрузкой из базы данных
Доброго времени суток. Помогите разобраться с выгрузкой текста из бд в Лейбл. Я хотел сделать...

Проблема с выгрузкой данных через ADO
Всем привет Такая проблема: У меня есть процедура В EXEL на VBA(код ниже) Через неё я хотел бы...

Проблема с выгрузкой данных во внешнюю печатную форму
Здравствуйте. Подскажите пожалуйста, где может быть ошибка? Не выгружает данные в печатную форму...

Создание Макета в 1с
Как посчитать Итоговую Сумму? Процедура Печать(ТабДок, Ссылка) Экспорт...

Создание макета
Помогите изменить код макета чтоб он был в таком виде как на картинке. Вот код который у меня...


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

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