Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];

Вниз

Печать ценников из своей программы   Найти похожие ветки 

 
Layner ©   (2005-02-01 15:48) [0]

Приветствую всех!

Есть потребность в генерации и посл. печать на принтере A4, ценников. С написанием проблем в принципе нет, не известено, как бы это реализовать.
Т.е. есть способ такой, генерю Image подложку, рисую на ней ценники, сохраняю BMP файл. Потом эти файлы надо вручную открыть и распечатать.

Ещё есть способ, воспользоваться компонентом EMS Excel Report, но он вроде бы не даст проехаться по одному рекордсету, и при этом вставить на один лист 4 колонки. Т.е. там ОДНА стока = ОДНОЙ и более строк в Excel. (Ценники должны получатся по 4 колонки на лист, может 3 или 4 ряда.)

Другие компаненты отчетов использовать не хотелось бы, хотя если кто то реализовал это с помощью компанентов, напишите, с помощью каких, и много ли работы для его "подключения". Если есть бесплатные компаненты, тоже хотелось бы их тоже узнать.
Заранее спасибо.


 
Digitman ©   (2005-02-01 15:52) [1]


> С написанием проблем в принципе нет


с написанием ЧЕГО ??!!


 
Kerk ©   (2005-02-01 15:53) [2]

Layner ©   (01.02.05 15:48)
печать на принтере A4, ценников.


нифига себе ценники.. А4 !!!


 
Prohodil Mimo ©   (2005-02-01 16:04) [3]

Я делаю это дело так:
генерю RTF, в котором создаю TextBox-ы, или как там они называются, в каждый из них записываю нужный текст. Затем это дело открываю вордом.

Kerk ©   (01.02.05 15:53) [2]
Есть такие листы с наклейками порезаными по определённым размерам. Думаю о подобном идёт речь. Ну или просто бумага, а потом порезать.


 
Alx2 ©   (2005-02-01 16:07) [4]

>Layner ©   (01.02.05 15:48)

А сразу на канве принтера рисовать почему нельзя?


 
Мазут Береговой ©   (2005-02-02 02:13) [5]

Я недавно обращался здесь с таким вопросом. Только это были наклейки. Пришел к следующему решению:
Сделал doc файл для MS Word. Разбил и отформатировал его на две колонки (можно и на больше). Набрал текст и поустанавливал метки. Вот пример наклейки:

Наименование: #1
Продукт: #2
Производитель: #3

Таких наклеек (ценников) может быть несколько на одном листе. И все поля под "Наименованием" имеют метку #1 и так далее.

Открываю этот doc файл объектом word в свой проге, нахожу все метки #1 и заменяю на данные, например, "Молоко" и так далее.

Самый простой и удобный способ:
1. Можно сделать несколько дизайнов для одной наклейки (ценника)
2. Можно автоматизировать это все дело внеся метки, поля, названия файлов в реляционную базу данных
3. В случае изменения дизайна не надо перекомпилировать и переустанавливать прогу...

и т.д.

А вот и код, правда, написанный в Visual Basic.NET.



   Private Function changeValue(ByVal W As Word.Application, ByVal Mark As String, ByVal cValue As String)
       With W.Selection.Find
           .ClearFormatting()
           .Text = Mark
           With .Replacement
               .ClearFormatting()
               .Text = cValue
           End With
           .Execute(Replace:=Word.WdReplace.wdReplaceAll)
       End With
   End Function

   Private Function Numbering(ByVal W As Word.Application, ByVal Mark As String, ByVal vStart As Integer, ByVal vEnd As Integer) As Integer
       Dim i As Integer = vStart
       Dim cnt As Integer = vStart
       Dim rng As Word.Range = W.Selection.Range

       While W.Selection.Find.Execute(FindText:=Mark, Wrap:=Word.WdFindWrap.wdFindContinue)
           rng.Select()

           W.Selection.Find.Execute(FindText:=Mark, ReplaceWith:=cnt, Replace:=Word.WdReplace.wdReplaceOne)
           rng.Select()

           If i < vEnd Then
               i += 1
               cnt = i
           Else
               cnt = 0
           End If

       End While

   End Function

   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGo.Click
       Dim PageCount As Int16 = 1
       Dim QtyPerPage As Int16 = 6
       Dim Pages As Double = CInt(Me.txtCartons.Text) / QtyPerPage
       Dim F As String = "../labelsheet.doc"
       Dim appPath As String = System.AppDomain.CurrentDomain.BaseDirectory
       F = appPath & "/labelsheet.doc"

       PBar.Value = 0

       Try
           If W Is Nothing Then
               W = New Word.Application
               W.Visible = False
           Else
               W.Quit(Word.WdSaveOptions.wdDoNotSaveChanges)
               W = Nothing

               W = New Word.Application
               W.Visible = False
           End If

           PBar.Value = 10

           "open label file
           W.Visible = False
           W.Documents.Open(FileName:=F, ReadOnly:=True)
           W.Visible = False

           PBar.Value = 20
           "make copy in memory
           W.Documents.Item(1).Range.Select()
           W.Selection.Range.Copy()

           "get the end of document
           Dim DocEnd As Int32 = W.Documents.Item(1).Content.End

           PBar.Value = 25

           "correct the number of pages
           If Math.Floor(Pages) < Pages Then Pages = Math.Floor(Pages) + 1

           While PageCount <= Pages - 1
               W.Selection.Move(Word.WdUnits.wdCharacter, DocEnd)
               W.Selection.Paste()
               DocEnd = W.Documents.Item(1).Content.End
               PageCount += 1
           End While

           PBar.Value = 35

           "reset range of document
           W.Documents.Item(1).Range.SetRange(Start:=0, End:=DocEnd)
           W.Documents.Item(1).Range.Select()
           W.Selection.Move(Word.WdUnits.wdCharacter, 0)

           "go insert label fields into $Marks
           changeValue(W, "$PO", Me.txtPO.Text)
           changeValue(W, "$Country", Me.txtCountry.Text)
           changeValue(W, "$LA", Me.txtLA.Text)
           changeValue(W, "$Qty", Me.txtQty.Text)
           changeValue(W, "$Desc", Me.txtDescr.Text)
           changeValue(W, "$NN", Me.txtCartons.Text)
           changeValue(W, "$CNT", Me.txtCnt.Text)

           PBar.Value = 55

           Numbering(W, "$N0", 1, CInt(Me.txtCartons.Text))

           PBar.Value = 70

           "remove selection
           W.Selection.Move(Word.WdUnits.wdCharacter, DocEnd)

           "send to printer
           Dim printPages As String
           If Pages = 1 Then
               printPages = "1"
           Else
               printPages = "1 - " & Pages
           End If

           PBar.Value = 80

           W.PrintOut(Background:=False, Append:=False, _
                   Range:=Word.WdPrintOutRange.wdPrintRangeOfPages, _
                   Item:=Word.WdPrintOutItem.wdPrintDocumentContent, _
                   Copies:="1", Pages:=printPages, _
                   PageType:=Word.WdPrintOutPages.wdPrintAllPages, _
                   PrintToFile:=False, Collate:=True, ManualDuplexPrint:=False)

       Finally
           "do nothing
       End Try
       PBar.Value = 100
   End Sub


 
Мазут Береговой ©   (2005-02-02 02:17) [6]

PBar - ProgressBar, показывающий выполнение...
И еще... Задаю кол-во наклеек. Если их больше чем на один лист, то добавляю к документу word еще одну страницу...


 
Petr V. Abramov ©   (2005-02-02 02:44) [7]

Так вроде в FR3 это нормально делается


 
Ozone ©   (2005-02-02 06:37) [8]

Подобного рода программа писалась мной как первый коммерческий продукт в 10 классе :) Продал помню за 500 р. и бутылку коньяка (сказали родителей угостишь) :)) Решение проблемы пришло во сне - сделал шаблон для каждого вида ценника в QReport и проблем не было... и оч даже удобно по-моему.


 
Digitman ©   (2005-02-02 08:34) [9]

использовать Ёхель для таких целей - крайняя мера ... слишком уж шаткая програмная конструкция получается - всем известны капризы Ёхеля ..

а вот Access (если уж речь об офисе идет как о готовом инструменте для рендеринга) для этой цели как нельзя кстати ..

механизм отчетов Access"а с удивительной легкостью и достаточной надежностью позволяют решать такие задачи


 
Vlad Oshin ©   (2005-02-02 08:59) [10]


>  сделал шаблон для каждого вида ценника

дать юзеру их делать
использую, работает


 
Layner ©   (2005-02-02 20:37) [11]

Здравствуйте!
Проблема была у меня с выходом в инет, только что выбрался, хотел сказать всем большое спасибо за ответы, особенно Мазуту за код, хотя на бейсике ни когда не писал, посмотрю, но главное идея.
И на счет Excel тоже понял, не буду и пробовать :)


 
Мазут Береговой ©   (2005-02-02 21:53) [12]


> Layner ©   (02.02.05 20:37) [11]

Всегда пожалуйста...


 
GanibalLector ©   (2005-02-03 02:11) [13]

Кстати,а если нужно в ценник штрих-код запуздырить...Что теперь скажете?Как бы Вы поступили?

2 Digitman ©   (02.02.05 08:34) [9]
> всем известны капризы Ёхеля
Ну-ну...и какие же?Пока ничего не было(через ОЛЕ работаю).


 
kaif ©   (2005-02-03 02:21) [14]

Я совсем недавно реализовывал точно такую задачу с ценниками при помощи генератора отчетов FastReport. Я вообще впервые работаю с этим генераторов отчетов и ценники в три вертикальных ряда - первый отчет, который я на нем сделал. Времени ушло ровно полчаса, в основном разбирался с размерами при печати, так как на наклейки печатать надо было (попадать четко).
 Очень рекомендую этот генератор. Я не надеялся так быстро и лихо его освоить даже для такой простой задачи.


 
Vlad Oshin ©   (2005-02-03 08:41) [15]


> FastReport.

Удобная штука, только с ним иногда приходится отключать расширенные возможности печати принтера и оптимизацию печати - крякозябы получаются. Причем, почему - непонятно. Ходил к ним(FR ) на страницу, почитал - ничего путного не пишут.


 
Digitman ©   (2005-02-03 09:16) [16]


> GanibalLector ©   (03.02.05 02:11) [13]
> Пока ничего не было


"- У вас на стройке несчастные случаи были ? .. Будут !" (с)


 
Шишкин Илья ©   (2005-02-03 10:40) [17]

2GanibalLector
Не знаю как с цениками, но сделать прогу генерирующую изображение штрих-кода по конкретному коду можно ИМХО за час...
http://mgul-vt.fatal.ru/download/index.php?p=freeware/barcode/


 
Prohodil Mimo ©   (2005-02-03 12:46) [18]

GanibalLector ©   (03.02.05 2:11) [13]
Кстати,а если нужно в ценник штрих-код запуздырить...Что теперь скажете?Как бы Вы поступили?


Я запуздыриваю. Способ тот же. [3]
Для генерации штрих кода использую ЕАН-фонты


 
kaif ©   (2005-02-03 16:19) [19]

Я запуздыриваю. Способ тот же. [3]
Для генерации штрих кода использую ЕАН-фонты


ЕАН стандарт это тот, который число Зверя? Который именно поэтому Государство так любит юзать?


 
Prohodil Mimo ©   (2005-02-03 16:50) [20]

kaif ©   (03.02.05 16:19) [19]
Моя твоя не понимать



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.038 c
14-1107840759
nes
2005-02-08 08:32
2005.02.27
Опять портатип диска


1-1108021065
KingDog
2005-02-10 10:37
2005.02.27
вот знаете что то при n = 31 не считает


14-1107504610
Тульский
2005-02-04 11:10
2005.02.27
Хасавьюрт-2


1-1107875556
Dmitry_04
2005-02-08 18:12
2005.02.27
Как вернуть прямоугольную форму из непрямоугольной?


14-1107237517
Vlad Oshin
2005-02-01 08:58
2005.02.27
Досуг, свободное время, хобби и т.п.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский