Проблема с отчетами!
Все время возникает три копии master data, header и detail data в счете в отчете FR. Признак количества копий = 1. Свойство distinct не помогает.
И в конце, при подсчете 'всего' считает сумму за три одинаковых продукта, вместо суммы за один.

Нравится

1 комментарий

Здравствуйте, Наталья!

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

Вероятно, проблема в некорректно построенном запросе.

Посмотрите в SQL Profiler, какой запрос идет в базу данных в момент формирования отчета.

Этот же запрос выполнение вручную в SQL Management Studio.

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

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

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

var DatasetUSIList = ReportPreviewer.Report.Attributes('DatasetUSIList');
       
        for (var i = 0; i DatasetUSIList.length; i++) {
            var ReportDatasetUSI = DatasetUSIList[i];
            var ReportDataset = ReportPreviewer.DatasetByUSI(ReportDatasetUSI);
            ReportDataset.Close();
               
                ApplyDatasetFilter(ReportDataset, 'FromDate', FromDate, FromDateFilterEnabled);
                ApplyDatasetFilter(ReportDataset, 'ToDate', ToDate, ToDateFilterEnabled);
                                                                               
        var BranchIDs = edtBranchIDs.Tag.split(',');
                ApplyDatasetIncludeFilter(ReportDataset, 'BranchIDs', BranchIDs, BranchFilterEnabled);         
               
                var OwnerIDs = edtOwnerIDs.Tag.split(',');
                ApplyDatasetIncludeFilter(ReportDataset, 'OwnerIDs', OwnerIDs, OwnerFilterEnabled);              
               
                //Включение доп параметров
                if(Fields.IsChecked != false){
                        EnableDatasetFilters(ReportDataset, true, 'FieldsIDin');
        }
                //             
        }

Но в скрипте я его немогу включить. Подскажите что я делаю не так?

Нравится

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

Не понятно, т.е. код в скрипте отрабатывает, но фильтры в запрос не добавляются?

"Олейник Дмитрий" написал:

Не понятно, т.е. код в скрипте отрабатывает, но фильтры в запрос не добавляются?

С уважением,

Олейник Дмитрий


Совершенно верно, так как параметры находятся в подзапросе, и как к ним добраться я не знаю!

Ну, значение параметра можно установить так:

SetParameterValue(myDataset.SelectQuery.Parameters, 'myParamName', 'myParamValue');

А включить фильтр в подзапросе можно либо сразу же в сервисе, либо вручную:

myDataset.SelectQuery.Items(0).Filters.ItemsByName('myFilter').IsEnabled = true;
Показать все комментарии

Добрый день! При импорте отчета в excell числовое значение поля (19 символов) отображается некорректно (1 во вложении). При попытке поменять формат ячейки в готовом отчете число отображается полностью, но снова некорректно (последние цифры числа - нули, а должны быть отличными от нуля) 2. во вложении. Помогите исправить эту ошибку=(

Нравится

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

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

Номер договора - это текстовое поле. В Excel Вы, скорее всего, переводили формат колонки в числовой (Number). Но максимальное значение, которое может хранить этот тип данных - 2 147 483 647. Переводите в текст.

Здравствуйте, Максим! Если переводить формат ячейки в текст, то поле остается некорректным, 3,163E+17=(

Грубо говоря, значение ячейки импортируется неверно, 316300027614000000, нули вместо последних цифр, по-умолчанию.

Олеся, а уточните, пожалуйста версию и сборку, которую используете.

Максим, Версия: 3.3.2.252

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

Спасибо, Максим, очень жду!

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

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

Нравится

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…

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

Добрый день,друзья!
Мне необходимо добавить в печатную форму отчёта факсимиле, т.е. картинку с подписями разных организаций. Как это можно реализовать в 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: Обращайтесь всегда буду рад помочь и подсказать путь решения.

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

Хочу сделать так, чтобы в отчете на нажатие, например, какой-то галочки, скрывались определенные элементы отчета, в частности, DetailData.
Я добавил CheckBox на страницу
чекбокс

и на событие OnPreviewClick реализовал следующий код:

  ShowMessage('Hello!');
  CheckBox1.Checked := false;
  DetailData1.Visible := false;

событие

То есть, этот код, по идее, должн вывести сообщение, снять отметку с CheckBox и сделать невидимой деталь DetailData1.
В итоге, сообщение выводиться, а вот сам компонент CheckBox не изменяется и деталь не становиться невидимой.

Подскажите, как это можно сделать?

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

Нравится

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

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

Андрей, когда отчет отображается на экране в окне предпросмотра, точнее когда работает OnPreviewClick уже поздно менять свойство Visible, так как отчет прорисовался. Чтобы скрыть DetailData потребуется перестроить отчет.
Не нашла готового решения, но возможно Вам помогут обсуждения подобных вопросов на форуме FastReport:
http://www.fast-report.com/ru/forum/index.php?showtopic=8183&hl=OnPreviewClick
http://www.fast-report.com/ru/forum/index.php?showtopic=5915&hl=OnPreviewClick

Самый простой вариант - решить вашу задачу в обработчике события OnBeforePrint бенда (но в таком случае не будет привлекаться клик на CheckBox).

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

Добрый день всем, возникло два вопроса по отчетам в 7-ке (на примере раздела Воздействия):
1. В разделе есть отчет "Эффективность воздействий". В него нужно добавить фильтр по ответственному. Как это правильно сделать? (дизайнер отчетов запустил, отчет в него загрузил, параметр отчета добавил, но как дальше это подключить в BPM ?)
2. Как вообще добавить свой отчет для раздела (не печатную форму, именно отчет в раздел Аналитика)

Нравится

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

Спасибо за Ваше обращение.

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

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

Рекомендую Вам ознакомиться с нашим видео-уроком по построению отчетов - http://www.youtube.com/watch?v=81g0HDZxKWU.
В видео показан процесс создания отчета и его добавление в рабочие места.

Добрый день,

Видео я уже смотрел, но там показано подключение к BPM 5 (в 7-ке нет рабочих столов), и вообще ничего не рассказано про окно фильтрации.

Валерий, добрый день!

https://www.youtube.com/watch?v=4MpjbeCErzs

ознакомьтесь с этим видео начиная приблизительно с 3:00:00, там как раз об отчетах идет речь.

--------------------------------------------
Айти-Сфера

Здравтсвуйте, Валерий!
Прикрепляю инструкцию по изменению базовых отчетов в BPMonline 7x.
По поводу фильтрации, необходимо делать по аналогии с существующими отчетами. То есть, нужно
заместить страницу с фильтрацией и добавить на нее контрол-справочник с указанием имени соответствующего параметра отчета (свойство "parameterName"), а затем по значению параметра накладывать соответсвующие фильтры (это делается в скрипте отчета).

Владимир, Андрей, спасибо! Посмотрим...

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

Здравствуйте, меня интересует или есть возможность создавать excel отчеты в BPMOnline 5.4 ?
(Печатные формы и последующую конвертацию в excel не предлагать, в силу того что там изначально нарушено форматирование).
Имееться в виду возможность в скрипте описать файл или какимто другим способом.
Пробывал использовать csv файлы, но в них нельзя применять форматирование и обьеденение строк.

Нравится

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

Здравствуйте, Игорь!
Да, есть возможность сделать такую доработку.
Вам нужно использовать Open XML SDK.
Для использования нужно просто подключить namespace DocumentFormat.OpenXml:

Вот конкретный пример использования:
здесь формируется .xlsx файл с колонками объекта, выбранного в lookup-поле

Page.BaseMessagePanel.Clear();
if (string.IsNullOrEmpty(SchemaName)) {
	Page.BaseMessagePanel.AddMessage(WarrningMessage, UnableSelectObjectMessage, MessageType.Warning, true);
	return true;
}
Page.Response.ClearHeaders();
Page.Response.ClearContent();
string fileName = SchemaName;
var instance = UserConnection.EntitySchemaManager.GetInstanceByUId(SchemaId);
if (instance != null) {
	fileName = instance.Caption.ToString();
}
Page.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Page.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName + ".xlsx");
 
List<double> columnWidthsList = new List<double>();
using (MemoryStream stream = new MemoryStream()) {
	using(SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook)) {
		// Add a WorkbookPart to the document.
        var workbookpart = spreadsheetDocument.AddWorkbookPart();
        workbookpart.Workbook = new OpenXmlSpreadsheet.Workbook();
 
        // Add a WorksheetPart to the WorkbookPart.
        var worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
        var workbookStylesPart = workbookpart.AddNewPart<WorkbookStylesPart>(); 
		worksheetPart.Worksheet = new OpenXmlSpreadsheet.Worksheet(new OpenXmlSpreadsheet.SheetData());
 
        // Add Sheets to the Workbook.
        OpenXmlSpreadsheet.Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild<OpenXmlSpreadsheet.Sheets>(new OpenXmlSpreadsheet.Sheets());
 
        // Append a new worksheet and associate it with the workbook.
		string relationshipId = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart);
		string sheetName = fileName;
        OpenXmlSpreadsheet.Sheet sheet = new OpenXmlSpreadsheet.Sheet() {
			Id = relationshipId,
            SheetId = 1, 
			Name = sheetName
        };
        sheets.Append(sheet);
 
        OpenXmlSpreadsheet.Worksheet worksheet = new OpenXmlSpreadsheet.Worksheet();
        OpenXmlSpreadsheet.SheetData sheetData = new OpenXmlSpreadsheet.SheetData();
        OpenXmlSpreadsheet.Row row = new OpenXmlSpreadsheet.Row();
 
		OpenXmlSpreadsheet.Cell currentCell;
		int columnCount = 0;
		var entitySchema = UserConnection.EntitySchemaManager.GetInstanceByName(SchemaName);
		foreach (var column in entitySchema.Columns) {
			if (!column.DefValue.IsSystemValue && !column.Name.Equals("ProcessListeners")) {
				currentCell = new OpenXmlSpreadsheet.Cell();
				currentCell.DataType =  OpenXmlSpreadsheet.CellValues.String;
				if (column.RequirementType == EntitySchemaColumnRequirementType.ApplicationLevel || column.RequirementType == EntitySchemaColumnRequirementType.DBLevel) {
					currentCell.StyleIndex = 3;
				} else {
					currentCell.StyleIndex = 4;
				}
				columnWidthsList.Add(CalculateWidth(column.Caption.Value));
	            currentCell.CellValue = new OpenXmlSpreadsheet.CellValue(column.Caption.Value);
				row.AppendChild(currentCell);
			}
		}
		sheetData.Append(row);
		row = new OpenXmlSpreadsheet.Row();
		for (int i=0;i<columnWidthsList.Count; i++) {
			currentCell = new OpenXmlSpreadsheet.Cell();
			currentCell.DataType =  OpenXmlSpreadsheet.CellValues.String;
			currentCell.StyleIndex = 5;
			row.AppendChild(currentCell);
		}
		sheetData.Append(row);
		//Adding columns and specifeing width
		OpenXmlSpreadsheet.Columns columns = new OpenXmlSpreadsheet.Columns();
		uint j = 1;
		foreach (var w in columnWidthsList) {
			columns.Append(CreateColumnData(j, w));
			j++;
		}
		worksheet.Append(columns);
		//--
        worksheet.Append(sheetData);
 
		workbookStylesPart.Stylesheet = CreateStyleSheet();
        worksheetPart.Worksheet = worksheet;
		spreadsheetDocument.Close();
 
		stream.Seek(0, SeekOrigin.Begin);
		byte[] dataArray = stream.ToArray();
 
		Page.Response.BinaryWrite(dataArray);
		Page.Response.End();
	}
}
return true;

Андрей, большое спасибо !

Андрей, Добрый день!
Пытаюсь реализовать создание Excel отчета по вашему примеру. Не компилируется из-за ошибки с функцией CreateStyleSheet()
Не могли бы Вы привести пример данной функции, т.к. вероятно данная функция добавлена в methods, или ответить, что необходимо написать вместо данной функции.

Код без данной строки

workbookStylesPart.Stylesheet = CreateStyleSheet();

компилируется и отрабатывает(видно в Visual Studio), но файл на сохранение не выдается. Пишет ошибку "Время ожидания выполнения запроса истекло." Может ли быть проблема в данной строке?

Здравствуйте, Эмин!
Этот пример из страницы "ImportSettingsPage". Метод CreateStyleSheet() определен там же. На всякий случай прикладываю исходный код.

Добрый день!
Почти та же проблема, что и у Эмина, только у меня код отрабатывает без ошибок, но в конце файл не выдается на сохранение с ошибкой:
Время ожидания выполнения запроса истекло.
Action: Click
ControlId: PageContainer_btnOk
SubmitAjaxEventConfig: {"config":{"viewStateMode":"include","extraParams":{}}}

            Page.Response.ClearHeaders();
            Page.Response.ClearContent();
            Page.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            Page.Response.AddHeader("Content-Disposition", "attachment; filename=TurnoverReport.xlsx");
 
            using (DB.DBExecutor dbExecutor = UserConnection.EnsureDBConnection())
            {
                using (MemoryStream stream = new MemoryStream())
                {
                    #region openxml
                    using (OpenXmlPackaging.SpreadsheetDocument spreadsheetDocument = OpenXmlPackaging.SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook, true))
                    {
//...тут все без ошибок
                    }//using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create
                    #endregion
 
                    stream.Seek(0, SeekOrigin.Begin);
                    byte[] dataArray = stream.ToArray();
 
                    Page.Response.BinaryWrite(dataArray);
                    Page.Response.End();
 
                } //using (MemoryStream stream = new MemoryStream())
            } //using dbExecutor

версия 5.4
схемы из примера Андрея у меня в конфигурации нет

Здравствуйте, Лариса!
Вам нужно импортировать схему, которую я предоставлял, вызвать

workbookStylesPart.Stylesheet = CreateStyleSheet();

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

Андрей, я вырезала свой очень длинный рабочий код :)

если я сохраняю stream в файл на диск, то получаю корректный отчет, т.е. проблема не в OpenXML, а в отдаче файла на сохранение

если я убираю весь код, связанный с

Page.Response

то ошибок нет

Спасибо за помощь :twisted:

Проблему решила. Если кому-то будет интересно - пишите.

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

В некоторых случаях, например, если Вы строите модель PowerPivot по БД BPMonline, полезно получить имена объектов на русском языке.

Поскольку большинство таблиц созданы Террасофт-ом через дизайнер Entity Framework, у таблиц есть расширенные свойства, в которых хранятся русские имена. Вот несколько запросов:

-- Имена таблиц с перечислением колонок на русском из расширенных свойств таблицы (EntitySchema)
SELECT t.name, capt.value,
        STUFF((
                SELECT ',' + [ColumnName] + '=' + SUBSTRING(xx.left_cutted_ColumnCaption, 0, CHARINDEX(',',xx.left_cutted_ColumnCaption))
                FROM (
                        SELECT x.major_id, x.minor_id, [ColumnName],
                                SUBSTRING(x.[ColumnCaption], CHARINDEX('ru-RU|',x.[ColumnCaption]) + 6, LEN(x.[ColumnCaption])) AS left_cutted_ColumnCaption
                        FROM (
                                SELECT DISTINCT p.major_id, p.minor_id,
                                        CONVERT(VARCHAR(255), FIRST_VALUE([ColumnName]) OVER (PARTITION BY p.major_id, p.minor_id ORDER BY p.major_id, p.minor_id)) AS [ColumnName],
                                        CONVERT(VARCHAR(255), FIRST_VALUE([ColumnCaption]) OVER (PARTITION BY p.major_id, p.minor_id ORDER BY p.major_id, p.minor_id)) AS [ColumnCaption]
                                FROM (
                                        SELECT pv.major_id, pv.minor_id, pv.[TS.ColumnName] AS [ColumnName], pv.[TS.EntitySchemaColumn.Caption] AS [ColumnCaption]
                                        FROM (
                                                SELECT p.major_id, p.minor_id, p.name, p.value
                                                FROM sys.extended_properties p
                                                WHERE p.name IN ( 'TS.EntitySchemaColumn.Caption' , 'TS.ColumnName' )
                                        ) x
                                        PIVOT (
                                                MIN(value) FOR name IN ( [TS.EntitySchemaColumn.Caption] , [TS.ColumnName] )
                                        ) AS pv
                                ) p
                        ) x
                ) xx
                WHERE xx.major_id = t.[object_id]
                ORDER BY xx.minor_id
                FOR XML PATH ('')
        ), 1, 1, '') AS [ColumnCaptions]
FROM sys.TABLES t
LEFT JOIN (
        SELECT xx.major_id,
                SUBSTRING(xx.left_cutted_value, 0, CHARINDEX(',',xx.left_cutted_value)) AS value
        FROM (
                SELECT x.major_id,
                        SUBSTRING(x.value, CHARINDEX('ru-RU|',x.value) + 6, LEN(x.value)) AS left_cutted_value
                FROM (
                        SELECT DISTINCT p.major_id,
                                CONVERT(VARCHAR(255), FIRST_VALUE(p.value) OVER (PARTITION BY p.major_id ORDER BY p.major_id)) AS value
                        FROM sys.extended_properties p
                        WHERE p.name = 'TS.EntitySchema.Caption'
                ) x
        ) xx
) capt ON t.[object_id] = capt.major_id
ORDER BY t.name

Нравится

Поделиться

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

Ёлки, как эту фигню поправить..!? Качайте прикреплённый файл лучше.

Спасибо, полезная информация!

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

Требуется передать значения фильтров в отчет. Хотелось не перебирать операторы сравнения с помощью отладчика. В SDK нашел перечисление, вроде подходящее - Перечисление _DateTimeOperatorTypeEnum. Дай думаю проверю на нескольких данных. Поставил оператор сравнения в фильтре «Прошлый год». Получил в отладчике fbcMain.DataFieldsList.Items(0).CompareOperator = 17. И что имеем в SDK dotLastYear = 17, и dotLastYear = «В течение года до текущей даты». В связи с этим вопрос – а можно ли доверять так рекламируемому SDK. Кстати точный перевод Last Year это Прошлый год. Остальные значения можно определить только тупым перебором? (типы поля сравнения и к нему операторы сравнения).
Дальше оказалось еще интереснее. При исследовании (тупым перебором) установки для поля типа Справочник выяснилось, что при установке «Пусто», «Не пусто» и «Текущий контакт» окно выбора фильтров само сбрасывает установку на «Пусто» после формирования отчета и выяснить CompareOperator не представляется возможным! Уже боюсь копать дальше.

Пытаемся Строить отчет:

После нажатия ОК имеем:

Это нормально?

Нравится

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

Владимир, как устанавливаете значения для условий фильтрации окна?

Щелкаю левой кнопкой мышки по знаку и в низпадающем списке по "Не пусто". Поле этого по кнопке ОК. Есть другие варианты?

Другие варианты есть - на уровне скриптовой логики.
Проверяла на версиях 3.3.2 - 3.4.1, работает корректно.
На какой версии и сборке у Вас воспроизводится такое поведение (и уточните, пожалуйста, доп. информацию для воспроизведения)?

Версия 3.2.0.81

Уважаемая, Наталия, поделитесь как можно "на уровне скриптовой логики" узнать какой оператор установлен пользователем в фильтре. Буду очень признателен. (и конечно очень хочется узнать как можно этот самый оператор установить)

Попробовал на версии 3.4.0.50
fbcMain.DataFieldsList.Items(i).CompareOperator кроме "<>" все остальные ноль. Но хоть не сбрасывает. Хотя это мне не поможет, так как работаем на старой версии.

"Прищепа Владимир" написал:Уважаемая, Наталия, поделитесь как можно "на уровне скриптовой логики" узнать какой оператор установлен пользователем в фильтре. Буду очень признателен. (и конечно очень хочется узнать как можно этот самый оператор установить)

Владимир, смотрите в сторону скрипта wnd_ReportFiltersScript, функция LoadFilters (может быть полезной статья http://www.community.terrasoft.ru/forum/topic/7477)

Воспроизвела на версии 3.2.0 сбрасывание оператора сравнения - вопрос передан в департамент разработки.

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

Владимир, а Наталья дала вам ссылку с примером
А я добавлю ссылку на SDK
http://terrasoft.ru/sdk/index.html?frmname=topic&frmfile=MEMBEROVERVIEW…

"Бондарь Наталия" написал:Воспроизвела на версии 3.2.0 сбрасывание оператора сравнения - вопрос передан в департамент разработки.

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

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