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

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

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

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

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

  1. Кирилл

    Можно сделать отдельную тему про ширмер (Schirmer BAZ-1000)?

    С выгрузкой данных для ширмера в xml проблема

  2. Дмитрий

    Кирилл, для этого не требуется никаких методов, т.к. это штатный элемент. Возможно, он у вас просто скрыт. Для настройки элементов жмите под админом правой кнопкой мышки между элементами:

    take.ms/i4FSA

    и ищите/вытаскивайте нужную таблицу. Если что, можете писать мне на почту: an.host[a]ya.ru

  3. Кирилл

    Дмитрий, у меня к Вам вопрос:

    какой метод используется (и как) у Вас, чтобы пользователь видел вот такую табличку с данными (вроде, называется лайаут, поправьте, если ошибаюсь)

    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 не будет опубликован. Обязательные поля помечены *

*