Ошибка при печати

отредактировано 04:26 Раздел: FastReport 4.0
Появляется окно с сообщением Access violation при попытке распечатать отчет, если по умолчанию в системе стоит принтер Xerox WorkCentre 6015.
Если поставить по умолчанию другой принтер, и в окошке выбора принтеров выбрать Xerox то снова появляется сообщение об ошибке, либо программа самостоятельно закрывается.

Драйвера на принтер установлены самые свежие, с сайта производителя.

FastReport обновлял до самой последней версии, проблема не исчезла.

Тестировал на разных ПК, с разным ПО и разными версиями FastReport - проблема остается.

Комментарии

  • отредактировано 04:26
    Отвечу сам себе:

    Причина:

    ПО "падает" при вызове функции

    DeviceCapabilities(PChar(FName), PChar(FPort), DC_PAPERNAMES, PaperNames, FMode);

    - это получение перечня поддерживаемых названий бумаги для принтера.

    В модуле frxprinter.pas

    Решение:

    Мне помогло комментирование подчеркнутой строчки (в этом же файле):

    procedure TfrxPrinter.Init;
    ...
    begin
    ...
    //FillPapers;
    ...
    end;


    Поскольку перечень размеров бумаги в данном диалоге не используется.

    [сарказм]Всем спасибо за помощь.[/сарказм]
  • gpigpi
    отредактировано 04:26
    А принтер установлен как сетевой?
  • отредактировано 04:26
    Принтер расшарен на ПК и подключен через сеть.

    У принтера есть возможность подключения в сеть как принт-сервер, но ситуация не меняется.
  • gpigpi
    отредактировано 04:26
    А если подключить принтер, как локальный, ситуация не меняется тоже?
  • отредактировано 04:26
    Аналогичная ситуация.
    Только принтер Xerox 3435
    Но есть тонкости:
    1) репортер запускается на сервере приложений Windows (как RAPP)
    2) при таком запуске контент генерируемый репортером сначала конвертируется в формат XPS, затем передается на клиент и только потом уходит на ксерокс. Все эти выкрутасы делает сама винда.
    И именно такая работа выдает не поправимую ошибку.

    Что еще можно сказать....
    3) Я комментировать не стал, я сделал IF
      if copy(FName,1,2)<>'XR' then
        begin
          FillPapers;
          FillBins;
        end;
    

    4) падение происходит на первом вызове функции PaperSizesCount := DeviceCapabilities(PChar(FName1), PChar(FPort1), DC_PAPERS, @PaperSizes, FMode); в процедуре FillPapers и при аналогичном вызове в FillBins
    5) в МСДН написано:
    написал:
    Remarks
    Note This is a blocking or synchronous function and might not return immediately. How quickly this function returns depends on run-time factors such as network status, print server configuration, and printer driver implementation—factors that are difficult to predict when writing an application. Calling this function from a thread that manages interaction with the user interface could make the application appear to be unresponsive.
    Ключевой момент здесь в том, что функцию надо вызывать в отдельном треде, что фаст репорт не делает.
  • отредактировано 04:26
    Разработчики тут бывают?
    Три месяца прошло с моего поста, а ответа нет.

    Или этот форум спецом создан, чтобы народ тут пар выпускал и для создания видимости работы с клиентами?

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.