Здравствуйте, я хотела бы создать отчет по "рекламным материалам" и выводить его среди других отчетов. Хотелось бы узнать как это реализовать. Поделитесь пожалуйста какими-нибудь инструкциями или ссылками на материалы.спасибо!

Нравится

14 комментариев

Здравствуйте, Татьяна!

В Terrasoft есть возможность реализовать отчеты трёх типов:
1) Word
2) Excel
3) FastReport

Инструкции по созданию отчетов Вы сможете найти во вложении. Руководствуясь примерами, Вы сможете реализовать необходимый Вам отчет. Также данная тема описана в Руководстве администратора,параграф 5.1.

Приятного дня!

При создании отчета FastReport возникает следующая ошибка.

Здравствуйте, Татьяна!

Эта не ошибка FastReport, а ошибка SQL.

Она говорит о том, что вложенный запрос, используемый в отчете, возвращает больше одного значения.

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

После того, как Вы определите колонку, в сервисе sq необходимо модифицировать подзапрос по этой колонке, для которого возвращается более одного значения.

Подскажите где в FastReport можно передать определенный параметр, который позволит выбирать данные по определенному скажем выходу, он ,по всей видимости, хочет выдать всю информацию, но это неверно..спасибо.

"Жаворонкова Татьяна Сергеевна" написал:где в FastReport можно передать определенный параметр, который позволит выбирать данные по определенному скажем выходу

Татьяна, детализируйте, пожалуйста, задачу.

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

Создайте фильтр в запросе (sq) и оставьте его включенным.
Таким образом отчет будет строиться по определенному выходу.

Пример можно посмотреть в sq_ReportInvoiceTasks (включен фильтр, который накладывает условие по конечному состоянию задачи).

Спасибо. Нашла дополнительно такую инструкцию. возможно у неё есть 1я часть. не совсем понятно как создавались-настраивались TSDataset в данном примере. В моем случае приходят не все данные в отчет и складывается впечатление, что мои TSDataset's теряют связь мд собой по пути где-то.

Здравствуйте, Татьяна.

Вы можете посмотреть примеры датасетов в Terrasoft Administrator в модуле Invoices, подраздел Reports, например, Invoice with NDS.

Эти отчеты входят в базовую поставку.

Здравствуйте при создании отчета появилась необходимость отдельно выводить рубрику. Сейчас отчет выглядит так Рис.1. выбирается 1 рубрика, а дальнейшая информация выводится по всем рубрикам. необходимо разграничить и получить примерно такой результат как на Рис.2. Как можно это реализовать? спасибо.

Здравствуйте, Татьяна.

Вам необходимо использовать элемент GroupHeader, где в качестве свойства Condition указать колонку с рубрикой.

Пример есть в этой теме:
http://www.community.terrasoft.ua/forum/topic/8512

Также можете посмотреть пример реализации в базовом отчете Accounts by Territory.

Андрей,Спасибо большое. у меня имеется ещё один вопрос. На рисунке на том месте где должно быть описание к выходу информации нет (помечено галочкой).Появляется некрасивое пустое место.Как сделать так, чтобы в случае отсутствия информации колоночки просто шли дальше, без пробелов?

этот вопрос снялся. спасибо

Здравствуйте, Татьяна.

Возможно, Вам поможет свойство HideZeros объекта "Текст":

http://www.fast-report.com/documentation/UserManFrNET-ru/index.html?hid…

Показать все комментарии

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

Как в таблице счетов сделать "вычисляемое" поле "Общий вес продуктов", чтобы это поле можно было выбирать в построителе запросов для формирования Word отчета?

Сложности: часть счетов приходит из процедур загрузки сторонних систем (Бух, ERP). То есть просто в карточку редактирования или датасет повесить onDataChange не получится!

Придумал триггеры After Insert, Update, Delete, но мне кажется должно быть что-то красивее...

Нравится

6 комментариев

Спасибо за Ваше обращение. Мы зарегистрировали его в Службе технической поддержки и назначили специалиста, который сможет Вас компетентно проконсультировать по данному вопросу.

Если данные из сторонних систем приходят сразу в БД, минуя датасеты Террасофта, то ничего красивей триггеров на таблицы Вы, боюсь, не придумаете.

"Maxim Gritsenko" написал:

Если данные из сторонних систем приходят сразу в БД, минуя датасеты Террасофта, то ничего красивей триггеров на таблицы Вы, боюсь, не придумаете.


Ну я надеялся что тут много умных людей и кто-то может посоветовать решение а-ля Террасофт :-)
Потому что триггеры нагружают сервер, а отчетом пользуются может раз в неделю и красивее было б запросить эту сумму прям в отчете, чем при каждом запросе к продуктам пересчитывать данные!!!

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

"Maxim Gritsenko" написал:Если данные не нужны все время и актуализировать их необходимо только для аналитики время от времени, то можно рассмотреть вариант с запуском действия перед построением отчета.

Во-первых да. Можно сделать действие, которое сначала собирает нужную аналитику, а затем формирует отчет. Но тут есть элемент ухода от "коробочного" отчета, формируемого через запрос... лишний код...
Во-вторых вариант такой - просто сделать View со всеми нужными данными для отчета, зарегистрировать ее как таблицу в TS (технологии описаны тут на форуме давным давно) и далее пользуемся стандартным построителем запросов (таблица=наша вьюшка) и стандартными средствами отчета на основе запроса. Я бы так и сделал:smile:

"Maxim Gritsenko" написал:вариант с запуском действия перед построением отчета.

вариант неплохой, но для реализации лучше думаю

"Александр Кудряшов" написал: просто сделать View

.

Спасибо всем за ответы!

Показать все комментарии

Доброго времени суток!
Интересует вопрос, как добавить дополнительное поле в окно фильтрации в fastreport и реализовать распечатку сообщения из этого поля в отчете? И реализуемо ли это вообще?

Нравится

10 комментариев

Здравствуйте, Илья.

Если Вы имеете в виду базовую фильтрацию отчета, то Вы можете использовать в качестве фильтра любое поле, которое есть в датасетах, привязанных к отчету.

Если же для отчета было создано пользовательское окно фильтрации, то алгоритм добавления поля аналогичен любым другим сервисам окна в системе.

Что Вы подразумеваете под распечаткой сообщения из этого поля?

Требуется именно, взять значение поля из карточки фильтрации и распечатать его в отчете.
Это возможно сделать?

Посмотрите прикрепленный файл (взято из этого блога)
sozdat_svoe_okno_filtracii_dlya_otcheta_2.doc

Илья, подробный пример есть в файле, который предоставил Александр.

Спасибо!
Еще такой вопрос:
как в этом же окошке использовать стандартные фильтры для отчета?

Илья, в случае использования пользовательского окна фильтрации все фильтры в новом окне Вам необходимо создавать вручную в дополнение к созданным Вами.

Ага, а есть пример реализации такого окна?

Есть пример реализации, описанный Александром выше. По аналогии Вы создаете и остальные поля.

Там нет стандартного фильтра.
Требуется добавить именно стандартный фильтр для отчета.
Который формируется в конструкторе отчетов.

Илья, здравствуйте.

Опишу еще раз.

Есть стандартное окно фильтрации. Вы можете добавить в него дополнительные условия фильтрации в самом отчете:

[URL=http://fastpic.ru/][IMG]http://i66.fastpic.ru/big/2014/0715/35/5d69282b…]

Есть возможность создать свое окно фильтрации и привязать его к отчету. В этом случае Вы собственноручно добавляете в него нужные фильтры. В приложенном Александром файле есть пример добавления одного из фильтров (не базовых). На основе этого примера Вы можете добавить и другие поля, например, те, которые присутствуют в базовом окне фильтрации.
Если у Вас есть конкретные вопросы по процессу добавления полей, мы будем рады на них ответить.

Показать все комментарии

Доброго времени суток!

Столкнулся с проблемой: заказчику необходим Excel-отчет. Отчет готов, но в его шапке необходимо разместить логотип компании. Само изображение считывается из БД, записывается в stream примерно вот так:

var ImageStream = new ActiveXObject('ADODB.Stream');
ImageStream.Open();
Image.SaveToStream(ImageStream);

И теперь самое главное, каким образом поместить изображение в WorkBook.ActiveSheet? Находил способы считывания файла с ФС, но это накладывает свои неудобства - не у всех есть какая либо папка, или может быть закрыт доступ к ней.

Нравится

2 комментария

Спасибо за Ваше обращение. Мы зарегистрировали его в Службе технической поддержки и назначили специалиста, который сможет Вас компетентно проконсультировать по данному вопросу.

Здравствуйте, напрямую поместить изображение в WorkBook.ActiveSheet из БД возможности нет. Вариант решения - сохранять файл изображения во временную папку, а затем, использовать его.

Показать все комментарии

Можно ли cохранить отчет в doc., docx формате в TS PSF 3.3.3.171?

Нравится

4 комментария

Спасибо за Ваше обращение. Мы зарегистрировали его в Службе технической поддержки и назначили специалиста, который сможет Вас компетентно проконсультировать по данному вопросу

Здравствуйте, Виталий!

Если Вы имеете в виду отчеты формата Fast Report, то при их выгрузке, данные можно экспортировать только в следующие форматы:

В общем в Word можно экспортировать в других версиях Terrasoft???

Виталий! Если отчеты формата Fast Report, то сразу экспортировать в doc или docx не получится. Это применимо и к более новым версиям Terrasoft. Но можно экспортировать в RTF формат, после чего открыть файл с помощью MS Word.

Показать все комментарии

Добрый день,друзья!
Мне необходимо добавить в печатную форму отчёта факсимиле, т.е. картинку с подписями разных организаций. Как это можно реализовать в TS? спасибо

Нравится

11 комментариев

Для начала надо в отчете добавить Picture Object.
Если картинка стандартная, то открыть поле и загрузить картинку с диска.
Если же у вас для каждой организации своя подпись и она хранится в датасете, то выделите Picture Object, слева есть Object Inspector, в нем свойства объекта, в свойствах объекта Dataset и DataField выделите нужный вам датасет и поле.

для каждой организации своя подпись. в карточке клиента надо заводить новый реквизит наверное,да?

Да, нужно создать новое поле.
В качестве примера можно посмотреть как организовано фото у контакта.

Александр, Спасибо! а где можно посмотреть данный пример?

А какой версии Terrasoft? В карточке контакта есть страничка "Фото"?

3.4.1.153. да, нашла, вижу

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

Вам в любом случаи надо добавлять поле, которое должно хранить подписи (в отчете картинка из воздуха не возникнет). Оно делается по аналогии с фото. Абсолютно скрытым для всех оно не может быть, ибо кто-то же должен добавить подписи в систему.
Его скрытие или открытие уже является другой задачей, а именно разграничения прав. В разделе администрирования есть страница "Права доступа к полям", выбрав нужную сущность и группу пользователей вы можете запретить видеть и/или редактировать данное поле. Еще как вариант вы можете запретить видеть саму страницу с фото в скрипте, например, не администраторам системы:

if (Connector.CurrentUser.IsAdmin) pPhoto.IsVisible = true;
else pPhoto.IsVisible = false;

Можно все проще сделать.

В Таблице tbl_Invoice создаем новое Булевское поле. К примеру IsVisibleStamp. Данное поле размещаем в SQL запросе, Датасете и на форме Редактирования Счета. Далее...

Все что сейчас будет описано требуется делать в Отчете FastReport. На форме отчета в определенном месте где должны располагаться печати Разместить N-ное количество картинок с печатями (ранее подруженных в отчет). по умолчанию в Свойствах картинок, Свойство Visible установить = false. Т.е в реальности это получиться как Бутерброд картинка на картинке. Каждой Картинки размещенной на форме отчета присвоить Имя. Далее Включение/Отключение картинок выполняем с помощью внутреннего языка Fastreport. к примеру на Паскале. К примеру на последней картинки размещенной на форме отчета по Событию "OnBeforePrint" создаем на языке паскаль процедуру. Язык конечно можно выбрать и C++ и другие из предложенных, на каком будет удобно кодить. Ниже привожу пример Процедуры события "OnBeforePrint" как я включал и отключал картинки. Пример приведен на PascalScript:

procedure Picture2OnBeforePrint(Sender: TfrxComponent);
begin
 
  //если на форме Счета Вкл. реквизит "Отображать печати и подписи", тогда в зависимости от выбранной организации включаем видимость правильной картинки, у остальных картинок видимость отключаем.
  if (<ds_TestDataset."IsVisibleStamp"> = 1) then
  Begin
       case (<ds_TestDataset."SupplierID">) of               
       '{7DCD5B5C-4BA8-4F84-A7D0-50118D75C36C}': - ID Организации Тест1
               begin                   
               Picture1.Visible := false;
               Picture2.Visible := true;
               end;                            
       '{A34D79E9-2D87-4955-8C67-736FFAC309BE}':  - ID Организации Тест2
               begin                   
               Picture1.Visible := true;
               Picture2.Visible := false;
               end;     
       end;
 
  end;

Спасибо,Михаил. так и поступила:smile:

Всегда пожалуйста Татьяна :smile: Обращайтесь всегда буду рад помочь и подсказать путь решения.

Показать все комментарии

Доброго всем времени суток. Обращаюсь за помощью к специалистам.
Не знаю куда писать: программа сама написана на делфи, а скрипт на паскале - решил сюда.
Проблема в следующем: есть один DBCrosstab, справа от него я питаюсь рисовать Crosstаb с такою же высотою строк - все вроде получаеться, но когда я пытаюсь изменить высоту заглавия Crosstаb, то высота строк выщитывается от прежней высоты заглавия. Пример этого 1я картинка. 2я картинка - без изменения высоты заглавия.

Вот сам код скрипта на паскале - подскажите, пожалуйста, как сделать, что бы строки отображались нужным образом - высоту строк DBCrosstab я записываю в массив, а потом из него задаю высоту строк Crosstаb.

var Sum0, Sum1, Sum2, i: Integer;
       b: array of Integer;
       HeightArr: array of Extended;
       HeightHead:Extended;                
 
procedure DBCross1OnPrintCell(Memo: TfrxMemoView; RowIndex, ColumnIndex, CellIndex: Integer; RowValues, ColumnValues, Value: Variant);
var s, numRow, numCol:Integer;
var a: array of integer;    
begin        
       SetLength(a,DBCross1.RowCount);
       SetLength(b,DBCross1.RowCount);          
         
       numRow:=DBCross1.RowCount;
       numCol:=DBCross1.ColCount;
         
       if ColumnIndex = DBCross1.ColCount-1 then
       begin                  
               a[RowIndex]:=Value;
               b[RowIndex]:=Value;                  
               Sum0:=Sum0+Value;                                        
               //ShowMessage('a['+vartostr(RowIndex)+']='+ vartostr(a[RowIndex]));                  
       end;          
                 
       if (RowIndex = DBCross1.RowCount-1) AND (ColumnIndex = DBCross1.ColCount-1) then
       begin                  
               //ShowMessage('OK='+ vartostr(RowIndex));
               s:=0;
               for i:=0 to DBCross1.RowCount-1 do
               begin
                       s:=s+a[i];                                                                          
               end;
               //ShowMessage('sum='+ vartostr(sum));
               Memo2.Text:='Загальна кількість: '+vartostr(s);
               Memo4.Text:=vartostr(s);                                    
       end;                                  
end;
                             
procedure DBCross1OnPrintColumnHeader(Memo: TfrxMemoView; HeaderIndexes, HeaderValues, Value: Variant);
begin
       //ShowMessage('Value='+ vartostr(Value));
       //ShowMessage('Memo='+ vartostr(Memo.Height));
       HeightHead:=Memo.Height;          
end;
//Обчислення ваги кожного рядка                                                                    
procedure Cross1OnBeforePrint(Sender: TfrxComponent);
begin
  for i:=0 to DBCross1.RowCount-1 do
  begin              
       with Cross1 do
       begin
               AddValue([i+1], ['Вага, %'], [(b[i]/Sum0)*100]);
               //AddValue([i+1], ['№, п/п'], [i+1]);                  
       end;
  end;          
end;
//Обчислення висоти рядків DBCross1        
procedure DBCross1OnCalcHeight(RowIndex: Integer; RowValues: Variant; var Height: Extended);
begin
       SetLength(HeightArr,DBCross1.RowCount);            
       HeightArr[RowIndex]:=Height;          
end;
//Обчислення висоти рядків "Вага"                                                                          
procedure Cross1OnCalcHeight(RowIndex: Integer; RowValues: Variant; var Height: Extended);
begin
  Height:=HeightArr[RowIndex];                      
end;
 
procedure Memo3OnBeforePrint(Sender: TfrxComponent);
begin
  Memo3.Text:= ;          
end;
 
procedure Cross1OnPrintColumnHeader(Memo: TfrxMemoView; HeaderIndexes, HeaderValues, Value: Variant);
begin
  Memo.Height:=HeightHead;            
end;
 
procedure DBCross1OnAfterData(Sender: TfrxComponent);
begin
  //ShowMessage('DBCross1.RowCount2=');
  SetLength(HeightArr,DBCross1.RowCount);      
  //ShowMessage('DBCross1.RowCount3='+vartostr(DBCross1.RowCount));      
end;
 
begin
      Sum0 := 0;
      Sum1 := 0;
      Sum2 := 0;
      SetLength(HeightArr,1);      
      //ShowMessage('DBCross1.RowCount1='+vartostr(DBCross1.RowCount));  
end.

А вот еще одна проблема: если количество строк небольшое, то все отображается нормально - DBCross возле Cross, а если строк больше чем может уместиться на одной странице, то на следущей странице отображается только DBCross, а после ее окончания на следущей странице Cross. Пример виден у пдф-файле.
Буду очень благодарен за советы.
Забыл написать, что делаю это все в Fast Report 4.

Нравится

2 комментария

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

Показать все комментарии

Добрый день!
Подскажите, пожалуйста, можно ли в Fast Report расположить 2 бэнда рядом (слева и справа)?
Хочется сделать отчет, в котором слева отображается продажа, а справа от нее продукты в продаже.

Нравится

3 комментария

Я делал это в рамках одной записи. Т.е. в вашем случаи, если вы хотите видеть отчет-карточку только выделенной продажи, то прикрепленный файл должен вам помочь (там я делал через subreports). Если у вас список продаж, то тут я не знаю как, но может опять же пригодится.
Посмотрите пример (войдите в администрирование, потом ПКМ на дереве каталогов, загрузить из файла)
fr_tz.rar

Александр, спасибо. Посмотрю сегодня.

Дмитрий, поместите рядом 2 SubReport-a (один левее, другой правее). В каждом SubReport-е используй нужный источник данных.

Показать все комментарии

Структура отчета такая:
MasterData: датасет "Продукт"
DetailData: датасет "Продукт в документе" (фильтруется по полю "Продукт")
SubdetailData: датасет "Продукт в документе 2" (это вообще другая таблица, чем "Продукт в документе")

Датасет "Продукт в документе 2" нужно отфильтровать не по одному полю, а по двум:
1) по полю "Документ", значение которого берется из поля "Документ" датасета из DetailData
2) по полю "Продукт", значение которого берется из поля "ID" датасета MasterData.

Как сделать так, чтобы датасет SubdetailData фильтровался по продукту и по документу?
Одним указанием MasterDataset у датасета SubdetailData эту проблему решить не получается.

Нравится

2 комментария

"Кошкаров Андрей" написал:Одним указанием MasterDataset у датасета SubdetailData эту проблему решить не получается.

А если одним указанием DetailDataset у датасета SubdetailData?

Получилось! :lol: Спасибо за подсказку. Добавил вывод колонки "Продукт" в датасете DetailData, а фильтр датасета SubdetailData подхватил ID продукта и подставил его в одноименный параметр. Разумеется, что в датасете SubdetailData были добавлены два включенных фильтра на сравнение - DocumentID и OfferingID.

Показать все комментарии

Добрый день!
Пытаюсь тут сделать очень хитрую штучку и никак не получается пока что
Очень нужно сформировать Word-отчет, в который нужно передать переменные и параметры, которые нужно вывести в отчете
Как бы это сделать?
Сам запрос, к сожалению, в виде XML передается в отчет
Движок уже сам разбирает его и формирует результирующий какой-то набор для отчета

Подскажите, пожалуйста, если кто сталкивался

Нравится

4 комментария

Иван, здравствуйте.

Можете попробовать вклиниться в метод ShowWordReport() в сервисе scr_UserReportCommon, там вызывается ProcessWordReportDataFill() в который передаются значения колонок для макросов, можете добавить необходимые значения и использовать их в качестве макросов в шаблоне отчета.

К сожалению, подобного опыта в поддержке не было, поэтому и примеров предоставить не сможем.

Иван, здравствуйте.

Можете попробовать вклиниться в метод ShowWordReport() в сервисе scr_UserReportCommon, там вызывается ProcessWordReportDataFill() в который передаются значения колонок для макросов, можете добавить необходимые значения и использовать их в качестве макросов в шаблоне отчета.

К сожалению, подобного опыта в поддержке не было, поэтому и примеров предоставить не сможем.

Передать параметры действительно получилось через ProcessWordReportDataFill
Там была написана еще процедура, которая подменяла определенные макросы в тексте на переданные элементы из массива

А не подскажите еще? хотелось бы попробовать как-то нарисовать таблицу в Word из террасофта
Но пока не получается
Может кто-то пробовал рисовать в ворде из террасофта ?

Заранее благодарен за ответы

Иван, посмотрите здесь.

Показать все комментарии