Вывод фотографии в отчёт.

Приемы и подходы, обмен опытом

Модераторы: Screw, larin

Ответить
cautur
заказчик
Сообщения: 3
Зарегистрирован: Пт, 01/10/2010 09:16
Имя Фамилия: Шмаков Иван
Откуда: СтройУниверсал

Вывод фотографии в отчёт.

Сообщение cautur »

Здравствуйте,

подскажите кто знает, задача следующая.

Необходимо реализовать печать пропусков сотрудников. (ФОТО, ФИО, должность)
Набросал исходный текст в rtf-формате, скомпилив получаю данные о сотруднике в том виде котором мне нужно,
проблема с выводом фотографии сотрудника, если выводить просто appendix.contents то на выходе получается надпись тип данных jpg.
Вопрос как вывести фото?
m0p3e
заказчик
Сообщения: 46
Зарегистрирован: Вт, 13/01/2009 10:52
Имя Фамилия: Сергей Головчак
Откуда: Гипротрубопровод

Re: Вывод фотографии в отчёт.

Сообщение m0p3e »

Для вставки фото в форму T2 формата rtf есть библиотека InsFoto.dll. Содержит процедуру
procedure InsFoto(string, string, longInt, longInt, longInt); external 'InsFoto.dll';
//вывод картинки в rtf документ: путь к rtf файлу, имя rtf файла, высота картинки, два параметра положение на листе
cautur
заказчик
Сообщения: 3
Зарегистрирован: Пт, 01/10/2010 09:16
Имя Фамилия: Шмаков Иван
Откуда: СтройУниверсал

Re: Вывод фотографии в отчёт.

Сообщение cautur »

а как её правильно объявлять и вызывать?
вставил
procedure InsFoto(string, string, longInt, longInt, longInt); external 'InsFoto.dll';

потом пытаюсь вызвать

.begin
InsFoto(‘’, ‘Propusk_Person.rtf’, 1, 1, 1);

получаю ошибку нет такой функции, поля или метода
m0p3e
заказчик
Сообщения: 46
Зарегистрирован: Вт, 13/01/2009 10:52
Имя Фамилия: Сергей Головчак
Откуда: Гипротрубопровод

Re: Вывод фотографии в отчёт.

Сообщение m0p3e »

Должно работать.
Может описание функции не в том месте?
Проще проинклюдить C_ExtFun\Vip\external.inc
cautur
заказчик
Сообщения: 3
Зарегистрирован: Пт, 01/10/2010 09:16
Имя Фамилия: Шмаков Иван
Откуда: СтройУниверсал

Re: Вывод фотографии в отчёт.

Сообщение cautur »

Точно в формах можно так делать? или только компилятором интерфейсов?
m0p3e
заказчик
Сообщения: 46
Зарегистрирован: Вт, 13/01/2009 10:52
Имя Фамилия: Сергей Головчак
Откуда: Гипротрубопровод

Re: Вывод фотографии в отчёт.

Сообщение m0p3e »

Насчет формы не уверен. Делал из интерфейса.
Аватара пользователя
larin
топ-софт
Сообщения: 228
Зарегистрирован: Пн, 10/09/2007 12:13
Имя Фамилия: Михаил Ларин
Откуда: ТопCофт
Контактная информация:

Re: Вывод фотографии в отчёт.

Сообщение larin »

Коллеги забудьте про FCOM. Намного практичнее печатать фотографии с помощью FastReport. Никаких ухищрений с промежуточной выгрузкой в файлы делать не нужно. Поле таблицы с фотографией можно выдать прямо в поток данных, а в FastReport есть специальный объект "Картинка".

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

Фрагмент исходного кода - реализация потока данных

Код: Выделить всё

Interface PrintPersonPass;

  var marker : longint;

  create view View2
  var
    CurNrec : comp;
  as select * from
    Persons,
    Appendix Photo
  where
  ((
    CurNrec  == Persons.Nrec       and
    1        == Photo.ObjBlock  and
    CurNrec  == Photo.Person    and
    200      == Photo.ObjType
  ));

  var CurIndex : integer;

  datastream Stream1
    (
      // программный источник данных - список сотрудников по маркеру
      dataset MarkedPersons
      (
        [fio] if(IsValid(tnPersons), Persons.FIO, '');
      );

      // табличный источник данных - фотографии
      table Photo
      (
        [prefix] GetMemoPrefix(tnPhoto);
        [data]   Photo.Contents;
      );
    )

    handleevent dataset MarkedPersons
    cmPreProcess:
    {
      CurIndex := 0;
    }

    cmOnProcess:
    {
      if( CurIndex < GetMarkerCount(marker) )
      {
        GetMarker(marker, CurIndex, CurNrec);

        CurIndex++;

        if( getfirst Persons = tsOk )
          ContinueDataset;
      }
    }
    end;
  end;


  constructor Init;
  {
    result := true;
  }

  destructor Done;
  {
  }

  procedure RunReport(AMarker : longint);
  {
    if( AMarker = 0)
      exit;

    if( GetMarkerCount(AMarker) = 0 )
      exit;

    marker := AMarker;

    RunFReport(Stream1, '', false);
  }
End.
Полный исходный код примера можно скачать здесь:
http://laalaa.googlecode.com/files/Prin ... rc_rus.zip

Видео демонстрация процесса создания отчета на YouTube:

[youtube=640,385]http://www.youtube.com/watch?v=CO9ik_cQ_4g[/youtube]

Видео файл высокой четкости для offline-просмотра можно скачать здесь:
http://laalaa.googlecode.com/files/PrintPictures.mp4
Аватара пользователя
larin
топ-софт
Сообщения: 228
Зарегистрирован: Пн, 10/09/2007 12:13
Имя Фамилия: Михаил Ларин
Откуда: ТопCофт
Контактная информация:

Re: Вывод фотографии в отчёт.

Сообщение larin »

Подправил архив с исходниками примера PrintPictures_src_rus.zip - сбились русские названия файлов.
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Re: Вывод фотографии в отчёт.

Сообщение cruger »

Есть ещё интересная, не до конца отлаженная и недокументированная, но выпущенная возможность делать присоединённые формы к FCOM-прототипу в формате FastReport.
Если есть энтузиазм и не поджимает время реализации (ибо в случае ошибок мы, конечно, не моментально их исправлять будем), можно попробовать.
stix
заказчик
Сообщения: 95
Зарегистрирован: Чт, 25/09/2008 07:45
Имя Фамилия: Марат Ахметзянов
Откуда: ОАО "Северо-Западные Магистральные Нефтепроводы"

Re: Вывод фотографии в отчёт.

Сообщение stix »

Почему фотки Лукашенко нет? Ему доступ не разрешОн?
Аватара пользователя
larin
топ-софт
Сообщения: 228
Зарегистрирован: Пн, 10/09/2007 12:13
Имя Фамилия: Михаил Ларин
Откуда: ТопCофт
Контактная информация:

Re: Вывод фотографии в отчёт.

Сообщение larin »

:-)
Ответить