Stimulsoft Reports — Проблема с переносом при печати

Автор: | 21 октября 2010

Вопрос: При про­смот­ре отче­та все поля DataBand вид­ны, при печа­ти в этих же полях про­ис­хо­дят пере­но­сы и часть инфор­ма­ции не вид­но. Как это испра­вить?

Ответ: Для текст бок­са необ­хо­ди­мо уста­но­вить свой­ство TextQuality в зна­че­ние WYSIWYG или Typographic.

Stimulsoft Reports — Проблема с переносом при печати: 26 комментариев

  1. Кирилл

    Мож­но сде­лать отдель­ную тему про шир­мер (Schirmer BAZ-1000)?
    С выгруз­кой дан­ных для шир­ме­ра в xml про­бле­ма

  2. Дмитрий

    Кирилл, для это­го не тре­бу­ет­ся ника­ких мето­дов, т.к. это штат­ный эле­мент. Воз­мож­но, он у вас про­сто скрыт. Для настрой­ки эле­мен­тов жми­те под адми­ном пра­вой кноп­кой мыш­ки меж­ду эле­мен­та­ми:
    http://take.ms/i4FSA
    и ищите/вытаскивайте нуж­ную таб­ли­цу. Если что, може­те писать мне на почту: an.host[a]ya.ru

  3. Кирилл

    Дмит­рий, у меня к Вам вопрос:
    какой метод исполь­зу­ет­ся (и как) у Вас, что­бы поль­зо­ва­тель видел вот такую таб­лич­ку с дан­ны­ми (вро­де, назы­ва­ет­ся лай­а­ут, поправь­те, если оши­ба­юсь)
    http://yadi.sk/d/QVAfj08z4cn8P
    У меня подо­зре­ние, что у меня такая таб­лич­ка не выво­дит­ся из-за того, что при­вел в самом нача­ле (метод search) вход­ную пере­мен­ную к LeafForm, а не к AssemblyForm (что пра­виль­но, вро­де, но име­ет послед­ствия), а потом заком­мен­ти­ро­вал 1 метод.

  4. Кирилл

    Да, воз­мож­но раз­ные
    я посмот­рел бар­ко­ды в таб­ли­це equipmentprofile, там содер­жат­ся бар­ко­ды не те, кото­рые вижу на эти­кет­ках(
    Но idorderitem у меня есть, под­ход рабо­та­ет, спа­си­бо)

  5. Дмитрий

    У меня в optimdocpos вооб­ще нет поля barcode ) Все бар­ко­ды и про­чее лежат в equipmentprofile. Далее я там беру idorderitem и нахо­жу все, что мне нуж­но по изде­лия.
    Воз­мож­но, у нас была дру­гая модель внед­ре­ния.

  6. Кирилл

    Всем при­вет)
    Столк­нул­ся с оче­ред­ной про­бле­мой, поста­вив­шей меня в тупик:

    В без­бу­маж­ке сре­ди кода есть запрос, выдер­ги­ва­ю­щий инфор­ма­цию по изде­лию по бар­ко­ду: срав­ни­ва­ет вве­ден­ный бар­код с содер­жа­щи­ми­ся номе­ра­ми таб­ли­цы optimdocpos столб­ца barcode. Про­бле­ма в том, что все поля это­го столб­ца таб­ли­цы = NULL.
    Запрос
    select *
    from optimdocpos
    where not barcode = NULL
    выво­дит пустую таб­ли­цу.
    Я в жопе)

  7. Кирилл

    вот еще:
    пере­пи­сал усло­вие цик­ла (огра­ни­че­ние по коли­че­ству эле­мен­тов):
    foreach(DataRow drMC in profileTable.Select())
    {
    /code
    if (globalid != ‑1 && ModelPart.Contains(“С-”) && (globalid <= con.Imposts.Count — 1)) // выде­ля­ем бал­ку
    con.Imposts[globalid].Selected=true;
    }

    Теперь ошиб­ки нет, но не знаю, на сколь­ко это пра­виль­но

    Смот­рел мето­ды в con, искал метод досту­па до эле­мен­та по ID, не нашел пока.

  8. Кирилл

    С pbModelPicture про­бле­ма реши­лась, есть ана­ло­гич­ный (наде­юсь) метод ModelPicture

  9. Кирилл

    Да, отдель­но про­ве­рил MessageBox’ом этот метод при обра­ще­нии к кон­крет­но­му эле­мен­ту, выле­та­ет ошиб­ка имен­но на нем.
    Вот толь­ко опре­де­ле­ния для GetImpostByID() нет в clsModel (тип экзем­пля­ра con)

    Есть какой-нибудь аль­тер­на­тив­ный спо­соб досту­па до эле­мен­тов мас­си­ва?
    С чем срав­ни­вать свой­ства, при­ве­ден­ные выше?

    Меня вот еще что инте­ре­су­ет:
    я при­вел object sender к LeafControl (LeafControl c = (LeafControl sender))
    В LeafControl нет опре­де­ле­ния для pbModelPicture, исполь­зу­ет­ся вот как:
    //Получить рису­нок
    if (c.ModelPictureDrawOptions != null)
    c.pbModelPicture.Image = con.GetPictureForMetafile(c.ModelPictureDrawOptions);

    что­бы ком­пи­ли­ро­ва­лось, я его заком­мен­тил, навер­ня­ка, это не очень хоро­шо. Это (полу­че­ние рисун­ка) кусок кода из bool Search, кото­рый вызы­ва­ет­ся в стар­то­вом мето­де public void Run(DBConnections2.dbconn _db, DataRow [] _dr, bool _isDelete, object _form)

    здесь _form содер­жит в себе тип LeafForm.
    Меня инте­ре­су­ет, где вызы­ва­ет­ся метод Run, что­бы попро­бо­вать там изме­нить тип на AssemblyForm, что­бы в след вызы­ва­е­мых мето­дах не было запар. Это реаль­но, или место, где метод вызы­ва­ет­ся, недо­ступ­но рукам про­сто­го про­грам­ми­ста?)

    Но если нет, помо­ги­те, пожа­луй­ста решить про­бле­му с досту­пом до эле­мен­тов мас­си­ва и с мето­дом с рисун­ком.

  10. Внедренец Автор записи

    Ошиб­ка “System.ArgumentOutOfRangeExeption” воз­ни­ка­ет в цик­ле foreach, но не в момент обхо­да строк таб­ли­цы profileTable, а, ско­рее все­го, в мето­де: con.Imposts[globalid].Selected=true;
    Т.е. Вы пыта­е­тесь обра­тить­ся к эле­мен­ту мас­си­ва con.Imposts по индек­су globalid. Это непра­виль­но, посколь­ку нет гаран­тии, что мас­сив con.Imposts име­ет индек­сы, сов­па­да­ю­щие с globalid . Для полу­че­ния кон­крет­но­го импо­ста в рас­чёт­ной моде­ли по извест­но­му globalid нуж­но вос­поль­зо­вать­ся мето­дом con.GetImpostByID(). Для натив­ной моде­ли надёж­нее опре­де­лять импост пере­бо­ром в цик­ле и срав­ни­вать свой­ства, типа: Key, Name, VisibleID (пото­му что для импо­стов свой­ства GlobalID раз­ра­бот­чи­ки поче­му-то не преду­смот­ре­ли 🙂 )

  11. Кирилл

    в моей слу­чае (с моим штрих­ко­дом) выле­та­ет на тре­тьей ите­ра­ции

    вот, что в цик­лах:
    было:
    foreach(DataRow drMC in profileTable.Select()) { ModelPart=drMC[“modelpart”].ToString(); globalid=Useful.GetInt32(drMC[“addint3”],-1);
    (globalid != ‑1 && ModelPart.Contains(“С-”)) // выде­ля­ем бал­ку con.Imposts[globalid].Selected=true;
    }

    мой вари­ант:
    for (int i = 0; i<drMC2.Length; i++) {
    ModelPart=drMC2[i][“modelpart”].ToString();
    globalid=Useful.GetInt32(drMC2[i][“addint3”],-1);
    if (globalid != ‑1 && ModelPart.Contains(“С-”)) // выде­ля­ем бал­ку
    con.Imposts[globalid].Selected=true; }

  12. Кирилл

    Я все с той же про­бле­мой)

    Тип sender — LeafControl

    При­вел к это­му типу. Выпа­ла ошиб­ка на эта­пе ком­пи­ля­ции, что нет опре­де­ле­ния для pbModelPikture. Заком­мен­тил до луч­ших вре­мен, ском­пи­ли­ро­вал, все кру­то, каза­лось бы.

    Захо­жу в сам модуль, где про­ис­хо­дит вся рабо­та, вво­жу штрих­код, про­хо­дит поиск, сооб­ра­зи­ли таб­ли­цу profileTable, далее про­грам­ма выво­дит ошиб­ку:

    System.ArgumentOutOfRangeExeption. Индекс за пре­де­ла­ми диа­па­зо­на. Индекс дол­жен быть поло­жи­тель­ным чис­лом, а его раз­мер не дол­жен пре­вы­шать раз­мер кол­лек­ции.

    смот­рю кон­троль­ную точ­ку, где про­изо­шла ошиб­ка. Цикл foreach (DataRow drMC in profileTable.Select())
    Меня к тако­му не гото­ви­ли) Как мож­но сде­лать так, что­бы цикл foreach не выле­тал за пре­де­лы?

    пере­пи­сал цикл, вот, что полу­чи­лось:

    DataRow [] drMC2 = profileTable.Select();
    for (int i = 0; i<drMC2.Length; i++)
    {
    //код
    }

    Обра­ща­юсь к столб­цам, есте­ствен­но, уже по 2 индек­сам, а не по 1 (i — номер столб­ца в мас­си­ве, + иден­ти­фи­ка­тор, кото­рый был в ста­ром мето­де (назва­ние столб­ца)). Ском­пи­ли­ро­вал, вклю­чаю при­ло­же­ние, про­ве­ряю, ошиб­ка все та же.

    Как тут быть?

  13. Кирилл

    Про­бо­вал еще в стар­то­вом мето­де объ­яв­лять formCurrent, как Assemblyform. Ниче­го не полу­чи­лось: метод Run пре­кра­ща­ет рабо­ту на про­вер­ке при­ве­де­ния formCurrent:
    if (formCurrent == null)return;

    formCurrent не при­во­дит­ся к AssemvlyControl т.к. _form пере­да­ва­е­мый в Run, из кото­ро­го рас­па­ко­вы­ва­ет­ся firmCurrent, име­ет тип LeafForm

  14. Кирилл

    »На край­ний слу­чай мож­но все­гда попро­бо­вать при­ве­сти к AtUserControl, Form, Control

    Эти типы не содер­жат опре­де­ле­ний для чле­нов, исполь­зу­е­мых в функ­ции (кото­рые есть в AssemblyControl)

    В без­бу­маж­ке есть дру­гие интер­фей­сы (рабо­та­ют с дру­ги­ми фурнитурами/изделиями), в них есть метод Search, выпол­ня­ет те же функ­ции, и ссыл­ка на объ­ект интер­фей­са, кото­рым вызван метод, при­во­дит­ся там тоже к AssemblyControl. Логич­но пред­по­ло­жить, что этот тип не про­сто так.

    Нет таких про­блем с при­ве­де­ни­я­ми там по при­чине того, что объ­ект, вызы­ва­ю­щий метод име­ет тип не LeafControl (в отли­чие от обсуж­да­е­мо­го слу­чая).

  15. Кирилл

    Дмит­рий, нет, к сожа­ле­нию, не про­яс­ни­ло.
    У меня такой же тип пере­ме­ной formCurrent, в этом и про­бле­ма)
    Ее не уда­ет­ся при­ве­сти к типу AssemblyControl

    »В резуль­та­те выпол­не­ния отоб­ра­зит­ся тек­сто­вое окно с наиме­но­ва­ни­ем клас­са экзем­пля­ра пере­мен­ной sender
    Вот к нему и нуж­но при­во­дить!

    Про­бо­вал при­во­дить к типу LeafControl, кото­рый и был упо­ко­ван, но при ком­пил­ля­ции выда­ет ошиб­ку, что этот тип не содер­жит опре­де­ле­ния для pbVodelPicture, с помо­щью кото­ро­го полу­ча­ет­ся рису­нок (ниже в при­ме­ре 2 пока­зал, как он исполь­зу­ет­ся).

    Тип пере­мен­ной, упа­ко­ван­ной в sender LeafControl, писал выше)
    (узна­вал имен­но этим спо­со­бом)

    вот, как он вызы­ва­ет­ся метод search:
    ((LeafControl)formCurrent).evSearch+=Search;

    formCurrent име­ет тип ILeafForm

    (Atechnology.winDraw.NoPaper.Interfaces.ILeafForm formCurrent = (_form as Atechnology.winDraw.NoPaper.Interfaces.ILeafForm);)

    »Встреч­ный вопрос: для чего в даль­ней­шем Вы исполь­зу­е­те:

    1)Получение таб­ли­цы с иско­мой сущ­но­стью:
    profileTable = c.db.GetDataTable(sqlSearchOrderItem);
    где profileTable — таб­ли­ца, sqlSearchOrderItem — пере­мен­ная, содер­жа­щая текст запро­са

    2)Конфигурирование/получение рисун­ка:

    //Конфигурировать рису­нок
    c.ConfigureModelPictureDrawOptions();
    c.InvokeOnModelDrawOptionsConfigure(this, new OnModelDrawOptionsConfigureEventArg(c.ModelPictureDrawOptions, con));

    //Получить рису­нок
    if (c.ModelPictureDrawOptions != null)
    c.pbModelPicture.Image = con.GetPictureForMetafile(c.ModelPictureDrawOptions);

    Что такое пере­мен­ная con:
    //Получаем натив­ную модель
    Atechnology.winDraw.Classes.clsModel con = DbUtis.GetModelByIdOrderItem(idorderitem);
    где idorderitem — номер изде­лия в зака­зе

    Вот, соб­ствен­но, все
    Про­бле­ма оста­ет­ся в силе
    Объ­яс­ни­те мне, пожа­луй­ста, что такое натив­ная модель в дан­ной тер­ми­но­ло­гии?

  16. Внедренец Автор записи

    » Мож­но ли где-нибудь посмот­реть и испра­вить типы IAssemblyForm, ILeafForm, AssemblyControl, LeafControl?
    Посмот­реть мож­но толь­ко в исход­ни­ках кода самой про­грам­мы (если они у Вас есть, хотя вряд ли)!
    Нет, испра­вить уж точ­но нель­зя (для это­го нуж­но как мини­мум пере­со­би­рать про­грам­му, что доступ­но толь­ко раз­ра­бот­чи­кам)!

    Встреч­ный вопрос: для чего в даль­ней­шем Вы исполь­зу­е­те:
    AssemblyControl c=(AssemblyControl) sender;
    ???
    Если он нигде не исполь­зу­ет­ся, то мож­но про­сто заком­мен­ти­ро­вать эту стро­ку и всё!
    Если исполь­зу­ет­ся — то нуж­но смот­реть, какие имен­но свой­ства исполь­зу­ют­ся.

    Обыч­но, в каче­стве пара­мет­ра sender пере­да­ёт­ся ссыл­ка на эле­мент управ­ле­ния или интер­фей­са, отку­да была вызва­на функ­ция.
    В нашем слу­чае в bool Search (object sender, string barcode) ско­рее все­го пере­да­ёт­ся ссыл­ка на интер­фейс без­бу­маж­ки, с помо­щью кото­ро­го отска­ни­ро­ва­ли бар­код.
    При­ве­де­ние sender осу­ществ­ля­ет­ся с помо­щью опе­ра­то­ра as, как Вы вер­но про­бо­ва­ли. Что­бы узнать, что имен­но пере­да­лось в функ­цию в каче­стве sender, мож­но вос­поль­зо­вать­ся кодом:
    MessageBox.Show(sender.ToString());
    В резуль­та­те выпол­не­ния отоб­ра­зит­ся тек­сто­вое окно с наиме­но­ва­ни­ем клас­са экзем­пля­ра пере­мен­ной sender
    Вот к нему и нуж­но при­во­дить!
    На край­ний слу­чай мож­но все­гда попро­бо­вать при­ве­сти к AtUserControl, Form, Control

  17. Дмитрий

    Воз­мож­но вот так будет понят­нее:

    // Без­бу­маж­ка. Собы­тия форм. Стенд сбор­ки.
    public void Run( DBConnections2.dbconn _db, DataRow [] _dr, bool _isDelete, object _formNoPaper )
    {
    // Полу­че­ние ссыл­ки на общий объ­ект интер­фей­са
    Atechnology.winDraw.NoPaper.Interfaces.IBaseNopaperForm formBase = (_formNoPaper as Atechnology.winDraw.NoPaper.Interfaces.IBaseNopaperForm);

    // Полу­че­ние ссыл­ки на теку­щий объ­ект интер­фей­са
    Atechnology.winDraw.NoPaper.Interfaces.IAssemblyForm formCurrent = (_formNoPaper as Atechnology.winDraw.NoPaper.Interfaces.IAssemblyForm);
    }

    // Без­бу­маж­ка. Собы­тия форм. Фур­ни­тур­ный стол.
    public void Run( DBConnections2.dbconn _db, DataRow [] _dr, bool _isDelete, object _formNoPaper )
    {
    // Полу­че­ние ссыл­ки на общий объ­ект интер­фей­са
    Atechnology.winDraw.NoPaper.Interfaces.IBaseNopaperForm formBase = (_formNoPaper as Atechnology.winDraw.NoPaper.Interfaces.IBaseNopaperForm);

    // Полу­че­ние ссыл­ки на теку­щий объ­ект интер­фей­са
    Atechnology.winDraw.NoPaper.Interfaces.ILeafForm formCurrent = (_formNoPaper as Atechnology.winDraw.NoPaper.Interfaces.ILeafForm);
    }

  18. Кирилл

    Внед­ря­ет­ся без­бу­маж­ное про­из­вод­ство.
    Есть отдель­ный модуль про­грам­мы, в кото­ром долж­но все про­ис­хо­дить.
    Писал­ся задол­го до меня, есте­ствен­но, не рабо­та­ет)

    Суть моей про­бле­мы:
    есть метод Search, кото­рый осу­ществ­ля­ет поиск по бар­ко­ду.
    Его декла­ра­ция:
    bool Search (object sender, string barcode)
    В пере­мен­ную sender упа­ко­ва­но что-то с типом LeafControl

    Далее долж­на идти обра­бот­ка след. пере­мен­ной:
    AssemblyControl c=(AssemblyControl)sender;

    Есте­ствен­но, при­ве­де­ние типов не про­хо­дит.

    Что про­бо­вал я:
    ‑при­ве­де­ния типов с помо­щью as, упаковку/распаковку через новую пере­мен­ную типа object (резуль­тат 0);
    ‑Объ­яв­ле­ние пере­мен­ной, пере­да­ва­е­мой в каче­стве пара­мет­ра в Search как IAssemblyForm (интер­фейс, пре­док AssemblyControl),приводимый к AssemblyControl (в ито­ге в поис­ке что-то выво­ди­лось но не то и не так, а стар­то­вый метод Run пере­ста­вал пол­но­стью рабо­тать)

    Соб­ствен­но, вопрос:
    Что мож­но сде­лать?
    Мож­но ли где-нибудь посмот­реть и испра­вить типы IAssemblyForm, ILeafForm, AssemblyControl, LeafControl?
    Хоте­лось бы доба­вить опе­ра­тор при­ве­де­ния, ну или услы­шать, что мож­но попро­бо­вать сде­лать.

    Кто-нибудь из про­чи­тав­ших уже стал­ки­вал­ся с поис­ком по бар­ко­ду? Или с без­бу­маж­кой

  19. Кирилл

    Спасибо,помогло!
    Уста­но­вил 2ой .Net Framework, т.к. 4ый не содер­жит преды­ду­щие вер­сии

  20. Дмитрий

    Кирилл, для нача­ла, я бы попро­бо­вал пере­на­ка­тить Framework и запу­стить WinDraw локаль­но.

  21. Кирилл

    У меня вот такая про­бле­ма:
    про­грам­ма WinDraw запус­ка­ет­ся из рас­ша­рен­ной сете­вой пап­ки.
    Реши­ли запус­кать без­бу­маж­ное про­из­вод­ство, заку­пи­ли ком­пы, ска­не­ры штрих­ко­дов и тп, есте­ствен­но, до того, как я стал рабо­тать в этой ком­па­нии.
    Безу­маж­ка запц­ще­на не была и теперь ее все-таки реши­ли запу­стить. Про­ве­рял ком­пы на рабо­честь: рабо­та­ют, с сетью связь есть, но на 1 из ком­пов не запус­ка­ет­ся про­грам­ма (на дру­гом все рабо­та­ет), выда­ет ошиб­ку (отпра­вить отчет и все такое)

    Источ­ник .NET Runtime 2.0
    Код: 1000

    С чем может быть свя­за­но и как мож­но попра­вить?

  22. Кирилл

    На сай­те мож­но толь­ко писать ком­мен­та­рии или мож­но как-то созда­вать руб­ри­ки или писать в суще­ству­ю­щих?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*