Вопросы про нумерацию и обработку дубликатов.

Обсуждение Stimulsoft Reports.NET
4it
Сообщения: 78
Зарегистрирован: 29 июн 2010, 04:46
Откуда: Moscow

Вопросы про нумерацию и обработку дубликатов.

Сообщение 4it »

1)Здравствуйте, простите за навязчивость. Обнаружилась новая проблема с нумерацией. Проиллюстрирована во вложении. Если содержимое строки не умещается на одной странице, то значение ячейки повторяется на следующей странице. При этом нумерация которую предложили вы изменяется на единицу. Как можно избежать таких повторений на след. странице?

2) Было обнаружено что при экспорте в rtf с опцией использовать колонтитулы страницы, функция based on Tag не работает, т.к. при экспорте данные заменяются значениями прописанными в Tag'е. (см пример во вложении) .
Вложения
Экспорт с колонтитулами.rtf
(41.55 КБ) 191 скачивание
Нумерация3 перенос текста.mrt
(19.36 КБ) 162 скачивания
med-01.accdb
(740 КБ) 434 скачивания
Ivan
Сообщения: 641
Зарегистрирован: 10 авг 2006, 05:40
Откуда: Stimulsoft Office

Вопросы про нумерацию и обработку дубликатов.

Сообщение Ivan »

Здравствуйте.
4it писал(а):Чтобы не открывать новую тему:
1) При экспорте в формат rtf (у текстовых компонент установлено свойство rtfpаragraph) 1-2 символа сначала текста удаляются, также удаляются все пробелы которые стоят сначала абзаца.
Проблема решена.
Патч будет включен в следующий предрелизный билд.
4it писал(а):2) В базе данных есть поля типа дата/время. Прописаны они в виде исключительно даты, например 23.07.2010. При генерации отчета, эти данные отображаются в виде 23.07.2010 0:00:00. Как сделать так, чтобы выводилась лишь дата без времени?
По умолчанию формат всех текстовых ячеек установлен в General. Установите формат нужной ячейки "Date".
4it писал(а):1)Обнаружилась новая проблема с нумерацией. Проиллюстрирована во вложении. Если содержимое строки не умещается на одной странице, то значение ячейки повторяется на следующей странице. При этом нумерация которую предложили вы изменяется на единицу. Как можно избежать таких повторений на след. странице?
Перенесите скрипт из Rendering event датабэнда в BeforePrint event датабэнда, в событии BeginRender бэнда GroupHeaderBand30 замените в скрипте номер линии 1 на 0.
4it писал(а):2) Было обнаружено что при экспорте в rtf с опцией использовать колонтитулы страницы, функция based on Tag не работает, т.к. при экспорте данные заменяются значениями прописанными в Tag'е. (см пример во вложении).
Проблема есть. Из документации: "Если поле Tag не пустое, то экспортируется не поле Text, а содержимое поля Tag. При этом внутри строки могут находиться следующие выражения, которые заменяются на команды MS-Word: .... ". Это было сделано задолго до того, как появилась BasedOnTagMerge. Вариантов решения проблемы пока нет.

Спасибо.
4it
Сообщения: 78
Зарегистрирован: 29 июн 2010, 04:46
Откуда: Moscow

Вопросы про нумерацию и обработку дубликатов.

Сообщение 4it »

Спасибо. Работает.
1)Обнаружилась новая проблема с нумерацией. Проиллюстрирована во вложении. Если содержимое строки не умещается на одной странице, то значение ячейки повторяется на следующей странице. При этом нумерация которую предложили вы изменяется на единицу. Как можно избежать таких повторений на след. странице?

Перенесите скрипт из Rendering event датабэнда в BeforePrint event датабэнда, в событии BeginRender бэнда GroupHeaderBand30 замените в скрипте номер линии 1 на 0.
А возможно ли сделать чтобы содержимое, вместе с нумерацией вовсе не отображалось повторно, на следующей странице?

Edit: В этом простом отчете все отлично заработало. Однако в более сложных отчетах, которые я выслать вам не могу, в ряде случаев происходит сбой и нумерация начинается с нуля. Закономерность проследить не удалось: то несколько значений подряд, то через один. Возможно что чтобы понять проблему необходимо обладать способностями телепатии, но не могли бы вы предположить причину этого?
Ivan
Сообщения: 641
Зарегистрирован: 10 авг 2006, 05:40
Откуда: Stimulsoft Office

Вопросы про нумерацию и обработку дубликатов.

Сообщение Ivan »

Здравствуйте.
4it писал(а):А возможно ли сделать чтобы содержимое, вместе с нумерацией вовсе не отображалось повторно, на следующей странице?
Смотрите прикрепленный пример отчета.
4it писал(а):В этом простом отчете все отлично заработало. Однако в более сложных отчетах, которые я выслать вам не могу, в ряде случаев происходит сбой и нумерация начинается с нуля. Закономерность проследить не удалось: то несколько значений подряд, то через один. Возможно что чтобы понять проблему необходимо обладать способностями телепатии, но не могли бы вы предположить причину этого?
Попробуйте вместе с обнулением номера линии очищать и переменную lastValue.

Спасибо.
Вложения
Нумерация3 перенос текста 3.zip
(3.6 КБ) 199 скачиваний
4it
Сообщения: 78
Зарегистрирован: 29 июн 2010, 04:46
Откуда: Moscow

Вопросы про нумерацию и обработку дубликатов.

Сообщение 4it »

Здравствуйте, Спасибо Вам за помощь которую вы оказываете.

1) Все что вы предложили - заработало. Есть только такая задача: в присланном вами примере, можно избавиться от повторяющейся нумерации и повторения значений первого столбца на разных страницах. А как убрать повторения для каждого столбца. Попытался сделать по аналогии, в принципе практически работает, но не совсем корректно. Вопрос на каком этапе обнулять значение lastValue для остальных столбцов? Кроме того в определенных случаях остается лишняя пустая строка.

И может быть можно обойтись какой-нибудь встроенной функцией (свойством). Что-то вроде разрывать при переходе на следующую страницу, либо наоборот отображать только целиком без разрывов. Есть что-нибудь похожее?

2) Необходимо чтобы все элементы таблицы отображались "как минимум". Можете в один из отчетов который вам высылался вставить для примера код, реализующий настройку экспорта LineHeightExactly = false. Либо как сделать чтобы в предварительном просмотре данные таблицы отображались "как минимум".

3) Скажите пожалуйста в каких единицах задаются поля объектов?
Ivan
Сообщения: 641
Зарегистрирован: 10 авг 2006, 05:40
Откуда: Stimulsoft Office

Вопросы про нумерацию и обработку дубликатов.

Сообщение Ivan »

Здравствуйте.
4it писал(а):1) Все что вы предложили - заработало. Есть только такая задача: в присланном вами примере, можно избавиться от повторяющейся нумерации и повторения значений первого столбца на разных страницах. А как убрать повторения для каждого столбца. Попытался сделать по аналогии, в принципе практически работает, но не совсем корректно. Вопрос на каком этапе обнулять значение lastValue для остальных столбцов? Кроме того в определенных случаях остается лишняя пустая строка.
Для каждого столбца должна быть своя переменная (lastValue2, lastValue3 и т.д.). В каком месте обнулять - зависит от нужной вам структуры отчета.
4it писал(а):И может быть можно обойтись какой-нибудь встроенной функцией (свойством). Что-то вроде разрывать при переходе на следующую страницу, либо наоборот отображать только целиком без разрывов. Есть что-нибудь похожее?
На данный момент ничего похожего нет.
4it писал(а):2) Необходимо чтобы все элементы таблицы отображались "как минимум". Можете в один из отчетов который вам высылался вставить для примера код, реализующий настройку экспорта LineHeightExactly = false.
Вставьте следующий код в событие BeginRender отчета:

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

StiOptions.Export.Rtf.LineHeightExactly = false;
4it писал(а):Либо как сделать чтобы в предварительном просмотре данные таблицы отображались "как минимум".
Установите у всех ячеек таблицы свойства CanShrink и CanGrow в true, у самой таблицы свойство CanShrink в true.
4it писал(а):3) Скажите пожалуйста в каких единицах задаются поля объектов?
Поля Margins текстбоксов задаются в сотых дюйма. Все остальные размеры в текущих единицах измерения.

Спасибо.
4it
Сообщения: 78
Зарегистрирован: 29 июн 2010, 04:46
Откуда: Moscow

Вопросы про нумерацию и обработку дубликатов.

Сообщение 4it »

Ivan писал(а):Здравствуйте.
4it писал(а):1) Все что вы предложили - заработало. Есть только такая задача: в присланном вами примере, можно избавиться от повторяющейся нумерации и повторения значений первого столбца на разных страницах. А как убрать повторения для каждого столбца. Попытался сделать по аналогии, в принципе практически работает, но не совсем корректно. Вопрос на каком этапе обнулять значение lastValue для остальных столбцов? Кроме того в определенных случаях остается лишняя пустая строка.
Для каждого столбца должна быть своя переменная (lastValue2, lastValue3 и т.д.). В каком месте обнулять - зависит от нужной вам структуры отчета.
То что для каждого столбца должна быть своя переменная это ясно. Данное обнуление необходимо для решения той же проблемы что и для первого столбца. Чтобы данные не отображались повторно при переносе на другую страницу. Обнуление судя по всему необходимо после того как выводится 1-я ячейка данных столбца №1. так как остальные столбцы должны осуществлять обработку дубликатов в рамках одного значения этого столбца. Сейчас же либо остаются пустые ячейки, либо объединение получается вне зависимости от значения 1-го столбца.
2) Необходимо чтобы все элементы таблицы отображались "как минимум". Можете в один из отчетов который вам высылался вставить для примера код, реализующий настройку экспорта LineHeightExactly = false.

Вставьте следующий код в событие BeginRender отчета:
Code:
StiOptions.Export.Rtf.LineHeightExactly = false;


4it wrote:
Либо как сделать чтобы в предварительном просмотре данные таблицы отображались "как минимум".

Установите у всех ячеек таблицы свойства CanShrink и CanGrow в true, у самой таблицы свойство CanShrink в true.
Спасибо все это работает. Только после экспорта в rtf войти в свойства таблицы и еще нажать высота строк : "как минимум", то высота столбцов еще уменьшится. Я так понимаю что настолько сжать по высоте таблицу в редакторе не возможно.
4it wrote:
3) Скажите пожалуйста в каких единицах задаются поля объектов?

Поля Margins текстбоксов задаются в сотых дюйма. Все остальные размеры в текущих единицах измерения.
Нет возможности задавать поля Margins в сантиметрах (в метрической системе)?
Ivan
Сообщения: 641
Зарегистрирован: 10 авг 2006, 05:40
Откуда: Stimulsoft Office

Вопросы про нумерацию и обработку дубликатов.

Сообщение Ivan »

Здравствуйте.
4it писал(а):То что для каждого столбца должна быть своя переменная это ясно. Данное обнуление необходимо для решения той же проблемы что и для первого столбца. Чтобы данные не отображались повторно при переносе на другую страницу. Обнуление судя по всему необходимо после того как выводится 1-я ячейка данных столбца №1. так как остальные столбцы должны осуществлять обработку дубликатов в рамках одного значения этого столбца. Сейчас же либо остаются пустые ячейки, либо объединение получается вне зависимости от значения 1-го столбца.
Чтобы данные не отображались повторно при переносе на другую страницу, в первом столбце используется еще одна переменная lineNumber2, во втором столбце переменная varDoctorName. Они обеспечивают вывод только первого из повторяющихся значений ячейки.
4it писал(а):Спасибо все это работает. Только после экспорта в rtf войти в свойства таблицы и еще нажать высота строк : "как минимум", то высота столбцов еще уменьшится. Я так понимаю что настолько сжать по высоте таблицу в редакторе не возможно.
Да, в MS-Office используются собственные методы отображения текста (довольно глючные кстати), и невозможно заранее просчитать как будет выглядеть текст.
4it писал(а):Нет возможности задавать поля Margins в сантиметрах (в метрической системе)?
К сожалению, этот момент был упущен из виду уже очень давно. Если сейчас что-нибудь поменять, это вызовет проблемы с совместимостью у многих пользователей.

Спасибо.
4it
Сообщения: 78
Зарегистрирован: 29 июн 2010, 04:46
Откуда: Moscow

Вопросы про нумерацию и обработку дубликатов.

Сообщение 4it »

Ivan писал(а):Здравствуйте.
4it писал(а):То что для каждого столбца должна быть своя переменная это ясно. Данное обнуление необходимо для решения той же проблемы что и для первого столбца. Чтобы данные не отображались повторно при переносе на другую страницу. Обнуление судя по всему необходимо после того как выводится 1-я ячейка данных столбца №1. так как остальные столбцы должны осуществлять обработку дубликатов в рамках одного значения этого столбца. Сейчас же либо остаются пустые ячейки, либо объединение получается вне зависимости от значения 1-го столбца.
Чтобы данные не отображались повторно при переносе на другую страницу, в первом столбце используется еще одна переменная lineNumber2, во втором столбце переменная varDoctorName. Они обеспечивают вывод только первого из повторяющихся значений ячейки.
Мне кажется Вы не совсем понимаете мой вопрос попробую на примере. Как можно видеть теперь повторяются и содержимое других столбцов (с пациентами и комментариями). Нужно сделать то же что и со столбцом с докторами. Пробовал вставлять следующий дурацкий код, но не корректно получается, и непонятно после какого момента обновлять LastValue2 и LastValue3 (по идее после того как отпечатается 1-е значение предыдущего столбца, но я такой возможности не нашел).

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

if (ИсточникДанных1.doctorName != lastValue)
{
	lastValue = ИсточникДанных1.doctorName;
	lineNumber++;
	lineNumber2 = lineNumber.ToString();
	varDoctorName = ИсточникДанных1.doctorName;
}
else
{
	lineNumber2 = "";
	varDoctorName = "";
}

if (ИсточникДанных1.patientName != lastValue2)
{
	lastValue2 = ИсточникДанных1.patientName;
	varPatientName = ИсточникДанных1.patientName;
}
else
{
	varPatientName = "";
}

if (ИсточникДанных1.visitComment != lastValue3)
{
	lastValue3 = ИсточникДанных1.visitComment;
	varVisitComments = ИсточникДанных1.visitComment;
}
else
{
	varVisitComments = "";
}
Как с этим справиться?
Вложения
Повторение значений на следующей странице.mrt
(20.52 КБ) 183 скачивания
med-01.accdb
(772 КБ) 409 скачиваний
Ivan
Сообщения: 641
Зарегистрирован: 10 авг 2006, 05:40
Откуда: Stimulsoft Office

Вопросы про нумерацию и обработку дубликатов.

Сообщение Ivan »

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

Ваш код правильный, необходимо только вставить очистку переменной lastValue2 в первом условии и lastValue3 во втором условии.
Также заменить в таблице значение ячейки {ИсточникДанных1.patientName} на {varPatientName} и значение ячейки {ИсточникДанных1.visitComment} на {varVisitComments}.

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

if (ИсточникДанных1.doctorName != lastValue)
{
    lastValue = ИсточникДанных1.doctorName;
    lineNumber++;
    lineNumber2 = lineNumber.ToString();
    varDoctorName = ИсточникДанных1.doctorName;
    lastValue2 = "";
}
else
{
    lineNumber2 = "";
    varDoctorName = "";
}

if (ИсточникДанных1.patientName != lastValue2)
{
    lastValue2 = ИсточникДанных1.patientName;
    varPatientName = ИсточникДанных1.patientName;
    lastValue3 = "";
}
else
{
    varPatientName = "";
}

if (ИсточникДанных1.visitComment != lastValue3)
{
    lastValue3 = ИсточникДанных1.visitComment;
    varVisitComments = ИсточникДанных1.visitComment;
}
else
{
    varVisitComments = "";
}
Спасибо.
Вложения
Повторение значений на следующей странице 2.zip
(3.81 КБ) 192 скачивания
Ответить