Dimdim SoftWare
Мастерская Dr.dimdim
ГлавнаяПоискНаписать письмо
ГлавнаяМоделированиеПроектированиеТЗРазработкаИнтерфейсСтатьиСсылкиАвтор
Главная > ЧаВО

FAQ: Использование Crystal Reports

Автор: НПО "Компьютер", http://www.comp.udmnet.ru/

Вопрос:
При создании отчета требуется просуммировать значения поля, находящегося не в секции "Details", а в секции   группы, причем, по стандарту, суммовые значения нужно поместить в заголовоки охватывающих групп. Используя обычный подход - Insert/Summary..., получаем некорректный результат, т.к. это поле учитывается столько раз, сколько есть детальных строк в группе. Как можно добиться желаемого результата?

Ответ:
Получить суммовые значения для полей, нахоящихся в секции группы, можно с помощью механизма "running total". Однако, в этом случае суммы можно расположить только в подножии группы. Способа разместить их в заголовке на данный момент нет. Есть обходной вариант: перестроить отчет таким образом, чтобы суммируемое поле оказалось в детальной строке, а все остальное (находящееся на более низких уровнях группировки) вынести в подотчет и тоже поместить в детальной строке. Тогда суммировать можно будет обычным способом.


Вопрос:
Как использовать переменную типа дата, переданную из расчета для сравнения с датой? Как вообще сравнить две даты?

Ответ:
Переменная типа дата воспринимается   Crystal-ом как символьная, поэтому ее нужно преобразовать в переменную типа дата. Для этого нужно сначала воспользоваться функциями Mid, Left, Right и выделить день, месяц, год, а затем использовать функцию Date(y,m,d).
ПРИМЕР:
В формуле Crystal:
    numberVar d :=ToNumber(Left ({@Дата=}, 2) );
    numberVar m :=ToNumber(Mid ({@Дата=}, 4,2)) ;
    numberVar g :=Val(Mid ({@Дата=}, 7,4));
    Date (g,m,d)
Есть другой способ с использованием одной функции для преобразования из строки в дату DTSToDate(). Но параметром для этой функции должна быть строка в формате ("гггг/мм/дд"), поэтому и дата, передаваемая из расчета должна быть в таком же формате, для чего нужно воспользоваться в расчете функцией ФмтДат().
ПРИМЕР:
В расчете:
    !Дата=ФмтДат('гг/м/д';!Дата)
В формуле Crystal:
    DTSToDate({@Дата=})
После этого даты сравниваются обычным способом (>, <, =, >=, <=). Так же сравниваются две даты, если они являются полями таблицы.


Вопрос:
Можно ли в Crystal сделать отчет c Cross Table (подобный Журнал-ордеру), где наряду с колонками, содержащими суммовые обороты, будут количественные обороты?

Ответ:
1. В отчете с использованием Cross Table стандартными средствами можно это реализовать только в виде, когда сумма и количество находятся друг под другом (в разных строках), для этого в суммируемых полях нужно указать два поля - сумма и количество.
2.Чаще требуется форма, когда сумма и количество должны находиться рядом, а не друг под другом. Это можно сделать, заполнив таблицу для отчета специальным образом. Для Crystal версии 6 это можно сделать, используя способ, описанный в ответе на вопрос 281 о Cross Table от 08.12.2000, но шапка будет в виде:
КорСч1 кол.| КорСч1 сумма| КорСч2 кол.| КорСч2 сумма ....
3. Для Crystal версии 8 это можно реализовать проще, кроме того шапка будет в более наглядном виде:
КорСч1 | КорСч2 |
кол-во | сумма |кол-во | сумма | ....
Для этого нужно подготовить таблицу, в которой используется одно и то же поле и для суммы и для количества, и есть еще поле-признак суммы и количества (например, "кол-во" и "сумма" ), которое будет использоваться для группы. Остальные поля - как для стандартного журнала-ордера (дата, кор. счет). Также нужно добавить в эту таблицу две записи для итоговых оборотов (кол. и суммовых) с соответствующими значениями поля-признака, и со значением "Всего" в поле кор. счета. В шаблоне в формате Cross Table в поле Rows указать поле с датой операции, в поле Columns - два поля - кор. счет и поле-признак суммы и количества, в суммируемых полях указать одно поле, содержащее количественные и суммовые обороты. Чтобы по второй группе не было итогов, отказываемся от вывода итогов по строке (ставим галочку в Suppres row Grand Total). Используя форматирование столбцов Cross Table, можно для количества установить точность 4 знака в дробной части, а для суммы 2 (или сделать разный цвет и т.д.).


Вопрос:
Есть вопрос №371 о создании содержания (оглавления) в отчете Crystal Reports, где в конце отчета выводятся наименования групп и номера страниц. Там все описано правильно, работает, но есть одна проблема - в содержании остается шапка таблицы. Т.е. сначала страницы идет шапка таблицы, а ниже - содержание. Как можно избавиться от шапки в содержании?

Ответ:
Для начала в основном отчете нужно создать формулу, в которой в некоторой переменной будет запоминаться текущая запись самого нижнего уровня группировки. Для этого нужно поместить формулу в секцию Group Footer#N, где N - номер последней группы (например, если в отчете используется три группы, то в секцию Group Footer#3). Текст формулы будет выглядеть следующим образом:
Global NumberVar n:=recordnumber;
Далее нужно записать в формулу Suppress для секции, где находится шапка отчета (Page Header), следующее выражение:
WhilePrintingRecords;
Global NumberVar n;
Count({MBAnalit.NameAn})=n


Вопрос:
Есть два отчета, сделанные в Crystal Reports 6.0, отчеты практически одинаковы. Но при просмотре одного из них дерево работает, а при просмотре другого - нет. Для просмотра отчетов использую один просмоторщик. Почему такое может быть и как исправить?

Ответ:
При создании отчета, в котором не работает дерево, в Report Options редактора Crystal Reports Designer была отключена опция Create Group Tree. Нужно включить эту опцию и сохранить отчет - дерево в этом отчете будет работать.


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

Ответ:
Нужно растянуть поле с наименованием уровня на желаемую длину, в формате поля (Format Field) включить в закладке Border опцию Background и выбрать белый цвет (цвет фона отчета). В результате наименование будет располагаться по всей длине строки, а вертиальные линии не нем видны не будут.


Вопрос:
По какому принципу сортируются колонки в Cross-Tab и как добиться нужной сортировки?

Ответ:
Названия колонок сортируются по алфавиту. Для сортировки в нужном порядке можно воспользоваться ведущими пробелами, и/или использовать латинские буквы.
Например, нужен порядок колонок "Остатки на начало", "Обороты по К", "Обороты по Д", "Остатки на конец". Crystal отсортирует так: "Обороты по Д", "Обороты по К", "Остатки на конец", "Остатки на начало".
Варианты решения:
1. Названия могут быть сформированы как: "   Остатки на начало", " Обороты по К", "Обороты по Д", "Остатки на конец"
2. В названии "Остатки на начало" использовать первую букву - латинскую "О"


Вопрос:
Есть отчет с шапкой в PageFooter, конец отчета отчерчен и заканчивается в ReportFooter и далее есть еще что-то, например, "Итого", подписи. При просмотре отчета, если данные отчета заканчивается точно на конце страницы, то на следующей странице все, что было в ReportFooter перечеркнуто разлиновкой таблицы, которая заканчивает в конце страницы, а не до ReportFooter. Как это исправить?

Ответ:
В этом отчете ReportFooter был разбит на несколько секций, нужно их объединить в одну с секцией, содержащей последнюю отчеркивающую линию таблицы.


Вопрос:
Мне нужно вывести в отчет Crystal Reports значение текстового реквизита (т. е. поле Tekst из MBText). Но Crystal Reports не показывает значение. Почему?

Ответ:
Поле Tekst таблицы MBText имеет тип image. Чтобы Crystal Reports вывел корректное значение, нужно перевести значение типа image в значение типа text в расчете. Но с помощью SQL-запроса это сделать не получится. Поэтому сначала значение поля типа image достается в строковую переменную, потом полученное значение заносится в поле типа text временной таблицы, и потом в отчете используется именно это поле временной таблицы.


Вопрос:
Как объединить в отчете Crystal (версия 6) два строковых поля из таблицы, длина каждого из которых достаточно большая (до 255 символов)? Дело в том, что Crystal 6 не понимает строки длиной больше 254 символов и в формуле типа MBDoc.Soder + “ “ + MBDoc.Dop возникает ошибка.

Ответ:
Нужно добавить в отчет простое текстовое поле и перенести на него поля MBDoc.Soder и MBDoc.Dop так, чтобы они оказались «внутри» текста текстового поля. В итоге поля окажутся «сцепленными» (с пробелом между ними). Единственный недостаток (но это относится к любому режиму отображения любой строки) – каждая строка обрежется до 254 символов.


Вопрос:
Как в отчете Crystal сделать так, чтобы, если в группе второго уровня присутствует только одна запись, подавлять вывод группы второго уровня, а если - несколько, то выводить группу второго уровня? Механизм, описанный в вопросе "Вывод итогов по группе" (404) не дает нужного результата (операция Count определяет количество записей в группе, а не количество групп нижнего уровня в группе верхнего уровня).

Ответ:
Для этого делаем по какому-либо полю записи суммовое поле по группе с операцией DistinctCount (т.е. определяем количество записей в группе), это поле можно скрыть, если оно не требуется в отчете. Далее в формате секции GroupFooter (в секции, где располагаются итоги по группе) в формуле Supress пишем формулу по условию скрытия секции, когда количество записей в группе не превышает одной.
Например, для подавления строки итогов в случае, если за одну дату поступил только один   документ, нужно написать: DistinctCount ({MBDoc.XRecID}, {MBDoc.DatOper})<2


Вопрос:
При добавлении новой таблицы в шаблон отчета в Designer, Crystal Reports автоматически устанавливает связи между таблицами. Как правило, эти связи приходиться удалять и потом устанавливать свои. Как запретить Crystal Reports автоматически устанавливать свзяи между таблицами ?

Ответ:
Нужно в меню File выбрать пункт Options... и в появившемся окне перейти на закладку Database и убрать галочку у параметра Auto-SmartLinking.


Вопрос:
При разработке отчета, пока плохо знакома структура таблиц, уходит много времени на определение имен полей, в которых хранятся нужные реквизиты. Как можно быстро определить имя поля по наименованию реквизита, а так же виды аналитики, используемые для заполнения реквизитов типа "Аналитика"?

Ответ:
Исчерпывающую информацию можно получить с помощью отчетов "Реквизиты одной (всех, нескольких) аналитик (документов)".


Вопрос:
В подотчете Crystal нет секции PageHeader, можно ли как-то сделать шапку таблицы, которая бы повторялась на каждой странице подотчета?

Ответ:
Можно сделать так:
1. Сделать группу таким образом, чтобы она была единственная и включала все записи подотчета ( например, в подотчете с использованием таблицы MBAnAccRptM по одному счету можно сделать группу по полю Acc).
2. В GroupHeader этой группы нарисовать шапку таблицы.
3. Далее в свойствах группы задать повторение заголовка на каждой странице, для чего в меню Report|ChangeGroupExpert для этой группы по кнопке Options установить Repead group header on each new page.


Вопрос:
Каким образом в отчете Crystal можно вывести число без округления? Попытка задать в формате числового поля свойство Rounding с большим числом дробных знаков, чем в свойстве Decimals не приносит успеха (в Decimals число дробных знаков становится равным заданному в Rounding, даже если использовать формулы по условию).

Ответ:
Используйте преобразование числового поля в текстовое по нужному формату, например при использовании формулы: ToText({MBDoc.Summa},'#.#').


Вопрос:
Как в отчете Crystal сделать так, чтобы, если в группе присутствует только одна запись, не выводить итог по группе, а если - несколько, то выводить?

Ответ:
Для этого делаем по какому-либо полю записи суммовое поле по группе с операцией Count (т.е. определяем количество записей в группе), это поле можно скрыть, если оно не требуется в отчете. Далее в формате секции GroupFooter (в секции, где располагаются итоги по группе) в формуле Supress пишем формулу по условию скрытия секции, когда количество записей в группе не превышает одной.
Например, для подавления строки итогов в случае, если за одну дату поступил только один   документ, нужно написать: Count ({MBDoc.XRecID}, {MBDoc.DatOper})<2


Вопрос:
Как скрыть шапку в отчете, которая находится в Page Header, на второй и последующих страницах очередной группировки?

Ответ:
Исходя из вопроса можно сделать вывод, что в этом отчете новая группировка начинается с новой страницы и только на первой странице нужна шапка. Для такого случая проще всего не использовать Page Header, а шапку сделать в первой подсекции GroupHeader.
   Можно использовать такой вариант (предположение, что новая группа начинается с новой страницы остется в силе). Шапка располагается в   Page Header. В GroupHeader делаем формулу, где запоминаем номер страницы с началом очередной группы с таким текстом:
numberVar n:=PageNumber;
В формуле Supress секции Page Header записываем следующий текст:
numberVar n;
n<PageNumber


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

Ответ:
Это возможно, для этого нужно:
1. Сделать итог суммового поля по нужной группе.
2. В меню Report|TopN/SortGroupExpert выбрать закладку с наименованием поля, по которому сделана группа (число закладок   равно количеству групп с итогами).
3. Задать сортировку для всех значений группы "SortAll", а в поле "of"   выбрать это суммовое поле. Есть также возможность выбрать вывод первых (или последних) N групп, для чего нужно выбрать не "SortAll",   а TopN (BottomN) и указать желаемое число видимых групп и выбрать (или отказаться) возможность объединения результатов оставшихся групп в одну с наименованием "Прочие".


Вопрос:
В напечатанных отчетах, содержащих большое количество листов (например, справочник по номенклатуре или какие-то данные по организациям), хотелось бы иметь содержание (перечень групп с указанием страниц). Можно ли это сделать в Crystal Reports?

Ответ:
Это можно сделать в Crystal Reports 8.0 следующим образом. В отчете имеется одна или несколько групп, содержание делаем по первой группе, при этом в основном отчете создаем массив, в который заносим номера страниц, а в подотчете (который располагаем в секции Footer Report и начинаем ее с новой страницы) этот массив распечатываем. В формулах используем синтаксис Бэйсика, т.к. только в нем есть возможность сделать массив динамическим. В основном отчете делаем две формулы, обе скрытые. Первую располагаем в начале отчета (в Header Reports), в ней обнуляем переменную, которую будем использовать в качестве увеличивающегося индекса для массива. Вторую формулу располагаем в секции Group1, в ней объявляем массив как Shared переменную (будем использовать в подотчете) и переменную для индекса, которую инкременируем. Для увеличения массива используем функцию Redim Preserve. Весь текст формулы должен выглядеть так:
Shared x() As Number
Global n As Number
n=n+1
Redim Preserve x(n)
x(n)=PageNumber
formula=x(n)
Далее делаем подотчет, в котором используем ту таблицу из подотчета, по которой строится первая группа, и тоже делаем группировку, помимо наименования группы в Group1 вставляем формулу, в которой выводится страница начала данной группы в основном отчете. Текст формулы должен выглядеть так:
Shared x() As Number
formula=x(GroupNumber)
Для того, чтобы шапка отчета не показывалась на страницах с Содержанием, нужно В Supress секции PageHeader написать формулу:
OnLastRecord
Для того, чтобы не нумеровались страницы с Содержанием, нужно В Supress секции PageFooter написать формулу:
Shared numberVar array x;
Global numberVar n;
x[n]<PageNumber


Вопрос:
В таблице есть поле типа "datetime". В отчете необходимо вывести не только дату, но и время, которое содержится в поле. Как это можно сделать ?

Ответ:
Необходимо выполнить следующее:
   1. В меню File/Report_Options в поле Convert Date-Time_Field выбрать "to Date-Time".
   2. Вставить поле из базы типа Date-Time и в свойствах поля (по правой кнопке мыши)   в Format в поле Order выбрать "Time".
Но имеется следующая особенность: при использовании библиотеки P2ssql.dll версии 8.0.0.21 и 7.0.0.44 преобразование поля типа Datetime в Date-Time происходит без проблем, а при использовании меньшей версии происходит преобразование в строку. При просмотре поля из отчета, сделанного с   P2ssql.dll версии 8.0.0.21 и 7.0.0.44, в меньшей версии происходит неправильное преобразование в Date-Time (например дата 28.08.2000 представляется в виде DateTime(-4713,01,01,00,00) , а правильно д.б. DateTime(2000,08,28,00,00))


Вопрос:
В отчете присутствует sub-report, в котором определена переменная shared numbervar x := 1; В самом отчете в REPORT_HEADER'е определена эта же переменная для печати shared numbervar x;x Почему значение переменной зависит от ее расположения в отчете: REPORT_FOOTER:1, REPORT_HEADER (ниже sub-report):0?

Ответ:
Значение переменной зависит от расположения, потому что Crystal Report - многопроходный генератор и подотчет выполняется на последнем этапе. Значение переменной, присваиваемое в подотчете, будет определено только в секциях ниже той, в которой размещен подотчет, и то при условии использования функции WhilePrintingRecords


Вопрос:
Как преобразовать число в формат строки со стандартным представлением как телефонного номера?

Ответ:
Используйте функцию Picture из набора дополнительных функций.


Вопрос:
Как в Crystal Report 7 или 8 вызвать хранимую процедуру из SQL Server 7?

Ответ:
1.Необходимо чтобы процедура имела возвращаемые параметры
2.В закладке SQL диалога Options следует включить опцию Stored Procedures, после этого в CR имя процедуры будет восприниматься как имя таблицы, а возвращаемый параметр как колонка


Вопрос:
Как отобразить в отчете все значения параметра, принимающего множественные значения(Crystal8)?

Ответ:
Необходимо создать формулу, в которой к каждому значению параметра можно обратиться как к элементу массива (только для множественных параметров!), например: {?param}[1]+' '+ {?param}[2]+' '+ {?param}[3]


Вопрос:
В Detail секции главного отчета сидит подотчет, и когда содержимое этого подотчета не вмещается в свободное пространство листа, программа начинает печать подотчета с нового листа. В результате остается достаточно свободного места на предыдущем листе. Как побороть эту проблему?

Ответ:
Для экономии места кликните по подотчету правой кнопочкой, выберите Format Subreports и в закладочке Common отключите опцию Keep Object Together


Вопрос:
Как сделать, чтобы заголовок группы был раньше шапки на странице?

Ответ:
1. Делаем две секции одинакового размера: PageHeader и GroupHeader#1, где шапку в Page делаем в нижней части, а заголовок группы в верхней части соответствующей секции.
2. PageHeader делаем Underlay с формулой:
    NumberVar PG;
    PG<>GroupNumber;
Формулу делаем для того, чтобы секция наезжала только тогда, когда начало группы, т.е. имеется заголовок группы, а когда просто начало страницы - не нужно наезжать. Для этого в Details в Supress делаем формулу:
         NumberVar PG;
    PG:=GroupNumber;
    no;
Другой вариант
1. Делаем секцию PageHeader с шапкой (без линий) и в Supress для нее делаем формулу, как в п.2 из предыдущего способа.
2. Делаем еще одну подсекцию в GroupHeader(после остальных подсекций) с копией шапки и с линиями.
3. В Details в Supress пишем формулу, как в предыдущем методе.
Или может быть в данном случае подойдет следующий, третий вариант: в Option для группы задаем -повторять заголовок на каждой странице и шапку помещаем в GroupHeader.


Вопрос:
Как в Crystal сделать Cross Table, в которой помимо оборотов по счетам присутствовали бы сальдо начальное и конечное и итоги по оборотам? Причем хочется, чтобы порядок колонок был следующим:сальдо начальное, обороты по счетам, итоги по оборотам, сальдо конечное.

Ответ:
Cross Table строится только по однородным данным   (в пределах одной группы) с итогами по ним (например, только по оборотам). Для построения Cross Table с неоднородными данными нужно использовать временную таблицу, подготовленную особым образом. В этой таблице должно быть поле (символьное), содержание которого будет использоваться для группировки данных по колонкам (или рядам). Заполнять это поле нужно с учетом того, чтобы в результате сортировки данные в Cross Table были расположены нужным нам образом, для чего можно использовать русские буквы, латинские буквы одинаковые по начертанию с русскими, пробелы, цифры (при сортировке сначала идет пробел, затем латинские буквы и далее русские). Например, для построения Cross Table из вопроса (для   примера, строки - аналитика по счету, колонки - обороты по Д корсчета) таблица будет иметь такие поля: Analit, Сolumn, Summa, где Analit будет использоваться для строк, Сolumn - для колонок,   Summa - для суммируемых данных. Поле Сolumn должно иметь такие значения: "Cальдо начальное", "Д корсч1", "Д корсч2",..., "Итого по Д", "Cальдо конечное" (их может быть несколько - для каждой из аналитик). Чтобы порядок был именно таким в названии "Cальдо начальное" первую букву надо сделать латинской, остальные поля сортируются естественным образом. Поле Summa должно быть заполнено соответствующими данными (сальдо, обороты, итоги). Поскольку итоги в такой таблице уже подсчитаны,   нужно будет в Cross Table скрыть стандартные итоги. Иногда приходится использовать несколько пробелов для обеспечения нужной сортировки, когда это используется для строк, то для того, чтобы не было явно заметной лесенки, можно поле выровнять по правому краю, а в некоторые названия (например, слишком короткие) справа добавить нужное количество пробелов.


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

Ответ:
В Crystal Reports такой установки нет, но там используются региональные установки Windows. Для того чтобы использовались сантиметры, необходимо в Настройке Панели_управления запустить Язык_и_стандарты и выбрать закладку "Числа", в поле "Система единиц" установить "Метрическая" (Metric).


Вопрос:
Как получить итог по странице ?

Ответ:
В FormatSection->Supress для Detail-секции пишется текст (или в эту же секцию вставляется и скрывается формула аналогичного содержания):
       NumberVar PageTotal;
       NumberVar PN;
         If PN<PageNumber then
            ( PN:=PageNumber; PageTotal:=0; );
         If not IsNull({...}) then
            PageTotal:={...}+PageTotal;
         no;
в PageFooter вставляется FormulaFiled следующего содержания:
         WhilePrintingRecords;
         NumberVar PageTotal;
         PageTotal;


Вопрос:
Как сделать нумерацию записей внутри группы?

Ответ:
Нужно сделать переменную (например, NumberVar n;), которая обнуляется в GroupHeader и увеличивается на 1 в Detail. Для этого использовать формулы в соответствующих секциях (переменная должна быть объявлена в обеих формулах). Не забыть поставить WhilePrintingRecords.


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

Ответ:
В формате числового поля (Format Editor по правой кнопке мыши) имеются атрибуты: Decimals-задает число знаков в дробной части для отображения и Rounding-задает число знаков для округления. В данном конкретном случае в этих атрибутах было установлено соответственно "1.000" и "0.01", т.е. происходит округление дробной части до 2 знака, а отображается три знака. Для исправления ситуации нужно в атрибуте Rounding установить значение с тем же числом знаков после точки, что и в   Decimals, т.е. "0.001"


Вопрос:
Можно ли в формуле при использовании конструкции "If...   Then" использовать в предложении Then несколько операторов?

Ответ:
Да, можно. При этом операторы в предложении Then (это справедливо и для Else) должны быть заключены в круглые скобки и разделены точкой с запятой (после последнего оператора, перед закрывающей скобкой, точки с запятой не должно быть!).
Пример:
numberVar s ;
numberVar k ;
If {MBAnAccRptM.Prizn}='Д'
   Then
      ( s:=s+{MBAnAccRptM.Summa};
         k:=k+{MBAnAccRptM.Kol} )
   Else
      ( s:=s-{MBAnAccRptM.Summa};
         k:=k-{MBAnAccRptM.Kol} )


Вопрос:
Установил Crystal Reports 6.0. Что необходимо задать в его конфигурациях?

Ответ:
· отключить SmartLinks (File\Options\DataBase-закладка);
· отключить сохранение данных в отчете (File\Save Data With Report);
· установить русский шрифт по умолчанию для полей (File\Options\Fonts-закладка);
· настроить форматы полей (File\Options\FIelds-закладка);
· установить параметры для подключения к серверу (File\Options\SQL-закладка).


Вопрос:
Почему просмотрщик отчетов не коннектится к SQL серверу под Windows NT?

Ответ:
Такое происходит, если коннект к SQL-серверу производится без указания имени сервера (параметр SERVERNAME в настройке BDE пуст, этот способ соединения используется в случаях, когда NT-Server установлен StandAlone, и компьютер не подключен к локальной сети). В этом случае для соединения с сервером используются параметры соединения, сохраненные в отчете на момент последнего сохранения, а эти параметры не соответствуют истине, если отчет настраивался на другом компьютере с использованием удаленного (не локального) SQL-cервера.


Вопрос:
Почему при подсоединении к ODBC-источнику из таблиц Excel не видно таблиц (листов Excel)?

Ответ:
Нужно установить флажок File\Options\SQL\System tables. В других средствах, например, MS Query или Borland Database Explorer тоже нужно ставить аналогичную опцию.


Вопрос:
Что такое CRRT?

Ответ:
CRRT - это Crystal Reports RunTime, т.е. эта та самая программа, с помощью которой пользователи просматривают отчеты, настроенные с помощью Crystal Reports. CRRT устанавливается на компьютере пользователя вместе с клиентской частью IS-Builder.


Вопрос:
Как сделать, чтобы Cross-Tab переносился на следующую страницу, если он не входит по ширине?

Ответ:
Если Cross-Tab не в подотчете, то Crystal делает это автоматически


Вопрос:
Какие проблемы со шрифтами есть в Crystal?

Ответ:
1. При вставке элементов TextField одинакового размера шрифта могут смотреться как элементы с разным размером шрифта.    Проблемы получившиеся при настройке с разным размером шрифта не исчезают.
2. Часть символов строки съедаются. От типа шрифта слабо зависит. По-видимому, это происходит из-за настройки и просмотра отчета на    машинах с разными установками экрана "крупный шрифт" / "мелкий шрифт".    Рекомендуется настраивать отчет при установке "крупный шрифт" или    проверять при zoom=120%.
3. Надписи шрифтом Times New Roman выглядят как иероглифы.   Это не влияет на переменные типа FormulaField с этим шрифтом.   Это чаще происходит на машинах где не установлен Crystal Reports.   Причиной является неправильное преобразование Crystalом шрифтов типа   "Times New Roman (Кириллица)" в шрифты типа "Times New Roman Cyr".   Чтобы избежать этого, нужно добавить в файл win.ini в раздел   [Font Substitutes] строку
   Times New Roman, 0=Times New Roman,204
Рекомендуется ограничить использование в тексте шрифта Times,   заголовки документов создавать как Formula Field.
4. Строки с курсивом при просмотре переносятся нормально, а при печати часть строки съедается. Рекомендуется не использовать курсив для строк с автоматическим переносом, а для остальных строк оставлять запас.


Вопрос:
Как выровнять поля в отчете?

Ответ:
Во-первых, есть привязка объектов к сетке (File/FileOptions/Layout закладка поле SnapToGrid). Во-вторых, есть горизонтальные и вертикальные GuideLines, к которым можно выровнять объект. (Размеры объектов, привязанных к таким линиям можно изменить одновременно перемещением линии). Лучше эти линии сделать видимыми в Disign и невидимыми в Preview (меню View или в File/FileOptions/Layout).


Вопрос:
Почему формула, выводящая переменную, которая рассчитывается ранее в другой формуле ничего не выводит?

Ответ:
Нужно обязательно при вставке переменной использовать функцию WhilePrintingRecords:
Пример:
       WhilePrintingRecords;
numberVar kol;
   kol


Вопрос:
В графике даты показываются в формате "Date(01.11.1999)". Как сделать, чтобы они показывались просто "01.11.1999".

Ответ:
Нужно в отчете сделать группу по полю типа Дата, по которому строится график, например, "on each day" и скрыть эту группу.


Вопрос:
Почему не работает связь с подотчетом, хотя она и указана в Subreport Links ?

Ответ:
При изменении SQL-выражения в подотчете вручную, связь отчета с подотчетом может нарушиться, чтобы восстановить связь нужно удалить ее, а затем сделать снова (пункт Edit Subreport Links контекстного меню подотчета)


Вопрос:
Какие правила нужно соблюдать, чтобы сделать отчеты переносимыми?

Ответ:
Ответ.   Нельзя оставлять флажок File/Save report with data! Иначе отчет будет не переносимым. Даже если изменить в настройке отчета Database/Set Location, данные будут пытаться взяться из старого места.
Для ODBC-источников если отчет будет сохранен без данных, то он будет нормально   просматриваться через crrt, но не будет через Preview. чтобы просмотреть его через Preview нужно изменить установки Database/Set Location кнопкой Logon Server, если он это не предложит автоматически.
В отчете зашивается для ODBC:
Server Type ОDBC - <имя источника>
Database - <путь> <имя базы>
для MS SQL:
Microsoft SQL Server Server Name - <имя источника> <имя сервера>
UserID - <имя пользователя>


Вопрос:
Как передать значения переменных из основного отчета в подотчет и наоборот?

Ответ:
Нужно использовать функции Store и Fetch. Этих функций имеется несколько - по типу переменной: StoreNumberVar, StoreStringVar и т.д. Для сохранения значения переменной используется Store...Var('имя переменной', значение из поля/формулы), для восстановления - Fetch('имя переменной'). Имя переменной пишется в кавычках, объявлять ее не нужно ни при сохранении, ни при восстановлении. Надо помнить, что формула для восстановления должна располагаться в секции ниже той, где сохраняется переменная.
Пример:В подотчете:
Formula1:=StoreNumberVar("post", {MBAnalit.Kod})
В основном отчете:
Formula2:=FetchNumberVar("post")
Из основного отчета в подотчет можно передать значение с помощью LinksSubreport, указав это поле и связав его с параметром в подотчете.
Для Crystal V.8 нужно для этой цели использовать разделяемые(Shared) переменные.
Пример:В подотчете:
Shared numberVar OstN:=sum(...);
В основном отчете:
Shared numberVar OstN;
OstN


Вопрос:
Как гарантировать, что переменная будет вычислена после другой?

Ответ:
Использовать функцию EvaluateAfter(x).


Вопрос:
Почему в структуре таблицы в Link Expert или в окне вставки поля в отчет некоторых полей, которые физически есть в таблице, не видно?

Ответ:
Скорее всего, эти поля были добавлены в таблицу уже после того, как был настроен отчет. Crystal опрашивает структуру таблицы один раз при ее добавлении. Обновить сведения о структуре таблицы можно через пункт Database/Verify Database.


Вопрос:
Какие есть проблемы с экспортом в Word и Excel из Office 97?

Ответ:
При экспорте из Crystal в формат Excel 5.0, Excel 97 открывает такой файл нормально и выглядит он в нем нормально (хотя эксперимент не был чистым, т.к. на машине были установлены Office 95 и Office 97).
При экспорте из Crystal в формат Word, Word 97 не может прочитать русские шрифты. Что интересно, если экспортированный файл сначала открыть и сохранить с помощью Word 7.0, то после этого Word 97 читает его нормально. Поиск более свежих dll для экспорта ничего не дал, экспорт из Crystal 7.0 в формат Word имеет те же результаты.
Вариант решения проблемы: экспортировать в файл формата rtf, который затем открывать с помощью Word 97, тут даже есть некоторые плюсы, в том смысле, что видны рамки (правда тоже не без особенностей).


Вопрос:
Как использовать переменные?

Ответ:
Переменные должны быть объявлены (для каждого типа переменной имеется свой оператор объявления NumberVar, StringVar и т.д.).   Можно сразу при объявлении присвоить начальное значение переменной, например, numberVar kol:=0; При использовании этой же переменной в других формулах она опять должна быть объявлена. Располагать формулы нужно в той секции, где должно происходить вычисление, например, для подсчета количества групп - в HeaderGroup (или FooterGroup), для подсчета количества записей - в Details. Если значение формулы не нужно видеть в отчете, ее можно сделать скрытой (Supress). Можно для вычисления переменной не делать специальную формулу, а расположить ее в формате секции в формуле Supress (обязательно поставить в конце Yes или No в зависимости от того секция должна быть скрытая или нет).


Вопрос:
Как проверить значение поля на Null?

Ответ:
Можно использовать функцию isnull(). Но надо иметь ввиду, что в File/Report Options   в поле Convert NULL Field to Default не должно быть галочки, иначе значения Null будут преобразованы в 0 или "" в зависимости от типа поля.


Вопрос:
Почему при сложении значений двух полей значение результирующей формулы не печатается.

Ответ:
Скорее всего, дело в том, что в File/Report Options в поле Convert NULL Field to Default не стоит галочки, т.е. Null значения не преобразуются по умолчанию в 0 (или в "" для символьных значений).   Поэтому любое действие Null-поля со значащими полями дает результат - Null. Решение вопроса - задать преобразование Null значений по умолчанию (в File/Report Options   в поле Convert NULL Field to Default поставить галочку).

Вопрос:
При попытке просмотра Crystal-отчета просмотрщик ругается на неверный формат файла. Пробую исправить путь к crrt.exe. Перенаправляю в отдельную папку dll80, в которой вместе с dll-ми лежит crrt.exe. Полной уверенности, что это для просмотрщика 8-го кристала - нет. При попытке просмотреть с учетом перенаправления - все равно ругается. В чем тут дело?

Ответ:
Crrt.exe для версий Crystal Reports 6 и 8 используется один и тот же, отличаются по версиям динамические библиотеки (.dll). Совместимость соблюдается снизу вверх, т.е. отчеты, настроенные в CR6 просматриваются в CRRT6 и в CRRT8, А отчеты, настроенные в CR8 просматриваются только в CRRT8 (при попытке посмотреть такой отчет в CRRT6 возникает ошибка 525).
Отчет "Расхождение аналит. и синт. бухг. учета материалов" работает с приложением Crystal Reports RunTime 8.0.   Определить какая версия CRRT находится в папке можно, например, посмотрев версию (в свойствах ярлыка) Crpe32.dll, для версии CRRT6 она будет 6.0.1.135, для CRRT8 -8.0.0.371


Вопрос:
Отчет выполнен в Crystal 6.0, размер листа - А4, отчет формируется правильно. Почему на одном из ПК при просмотре отчета и в шаблоне размер листа автоматически устанавливается Letter и изменение этого размера на A4 не сохраняются? В результате выводимые в отчете данные не помещаются на листе. Что делать?

Ответ:
Была неправильная установка принтера по умолчанию (Пуск\Настройка\Панель управления\Принтеры). По умолчанию был установлен несуществующий принтер.


Вопрос:
При просмотре отчета созданного в Crystal Reports 8.0 даты отображаются неправильно. Переустанавливали заново просмотрщик 8 версии, проверяли пути в КАС не помогло. В чем может быть причина?

Ответ:
Все дело в библиотеке P2SSQL.DLL, вернее в ее версии и месте расположении. Версия у нее должна быть от 06.01.2000. А месторасположение зависит от установленных на данной машине приложений. Дело в том, что DLL ищутся в следующем порядке:
   1. Каталог C:\WINNT\Crystal (если на машине установлен редактор отчетов)
   2. Каталог просмотрщика (в данном случае: C:\Program Files\Computer\Crystal Reports Preview 8.0)
   3. Системный каталог (C:\WINNT\system32).
Так как в данном случае на машине был установлен редактор 6 версии, соответственно существовал каталог C:\WINNT\Crystal в котором лежала DLL старой версии. Следовательно, обращение шло к ней, что и приводило к неверному отображению дат в отчетах даже после переустановки просмотрщика.


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

Ответ:
Проблема в том, что при разном масштабе (100%, 150%, 75% и т.д.) один и тот же отчет отоборажается немного по разному. И то, что хорошо выглядит на 100%, может дать ошибку при 150%. И наоборот. Причем при выводе отчета на принтер ошибки тоже проявляются. Поэтому при разработке отчета рекомендуется проверять внешний вид на разных масштабах изображения, а в самом конце выполнять контрольный вывод отчета на принтер.


Вопрос:
При просмотре отчета возникает сообщение типа Неверная операция с вещественным числом. Причем сам Crystal этот отчет просматривает нормально. В чем причина возникновения ошибки?

Ответ:
Подобная ошибка возникает при наличии в отборе записей (Edit Selection Formula->Record) текста с константой '0' (например, в отчете нужны записи с ненулевыми остатками), видимо Crystal генерирует запрос с "0.". Такая ситуация возникает в версиях CR7 и CR8, где используется CRW32.exe версии 8.0.0.371. Для устранения таких ошибок нужно установить Обновление SCR 8 Shared Variables Patch.
Обновление инсталирует:
crw32.exe v8.0.0.395   в папку ...\Seagate Software\Crystal Reports,
craxdrt.dll v8.0.0.441   в папку ...\Seagate Software\Report Designer Component,
crpe32.dll v8.0.0.395   в папку ...\winnt\system32.
Поэтому для машин пользователей, где установлен только просмотрщик CRRT без установленного Crystal, возможно (не проверено), нужно переписать перечисленные dll.


Вопрос:
Во время выполнения отчета возникла серверная ошибка, просмотрщик выдал английское сообщение с упомянанием DLL . Как узнать какое сообщение в действительности пришло от SQL сервера.

Ответ:
В каталоге <WinDir>\Crystal есть файл SQLSrv.err в который сам Crystal Reports и наш просмоторщик CRRT складывают все сообщения об ошибках в том виде, в котором получают от сервера.


Вопрос:
Разработанный на Crystal Reports отчет при запуске выдает ошибку Print Engine 534. В чем может быть причина?

Ответ:
Самая распространенная причина такой ошибки - при разработке отчета не убрали имя базы данных и имя владельца таблицы в пункте меню SetLocation.
Еще одна часто встречающаяся причина - в базе данных нет одной или несколько таблиц, использующихся в отчете. Или в отчете используются поля, которых нет в таблицах.
Для получения более детальной информации о причинах ошибки в конкретном случае рекомендуется через SQL Trace (или Profiler в MS SQL 7.0) получить проблемный запрос и выполнить его через ISQL/w (Query Analyzer) под тем пользователя, от имени которого выполняется отчет. Еще один путь получения дополнительной информации - в каталоге CRYSTAL формируется файл SQLSVR.ERR, где содержится текст этой ошибки.


Вопрос:
Где получить расшифровку ошибок, которые выдает Crystal Reports ?

Ответ:
CRYSTAL REPORT ENGINE ERROR CODES
The Crystal Report Engine DLL generates the following error codes when necessary:
Error Code Error                         Explanation
Error code 500 PE_ERR_NOTENOUGHMEMORY There is not enough memory available to complete the call or an incorrect ODBC handle was specified.
Error code 501 PE_ERR_INVALIDJOBNO You have specified a job number that does not exist.
Error code 502 PE_ERR_INVALIDHANDLE You have specified a handle that does not exist.
Error code 503 PE_ERR_STRINGTOOLONG The string you are calling with PEGetHandleString is too long for the buffer allocated. If returned by other routines, it means that the string does not end with a null byte.
Error code 504 PE_ERR_NOSUCHREPORT You have specified a report that does not exist in the path.
Error code 505 PE_ERR_NODESTINATION You have made the PEStartPrintJob call without first specifying a print destination.
Error code 506 PE_ERR_BADFILENUMBER You have tried to set an Nth file name and the file number you specified is out of the existing range. 0<= fileN < N files.
Error code 507 PE_ERR_BADFILENAME There is an error in the file name you specified.
Error code 508 PE_ERR_BADFIELDNUMBER The field number you specified is out of the existing range. 0<=fieldN<= N fields.
Error code 509 PE_ERR_BADFIELDNAME The program can not add the field name you specified.Error code 510 PE_ERR_
BADFORMULANAME The program can not add the formula name you specified.
Error code 511 PE_ERR_BADSORTDIRECTION Sort direction must be either PE_SF_DESCENDING or PE_SF_ASCENDING. You have specified a sort direction other than those allowed.
Error code 512 PE_ERR_ENGINENOTOPEN The Report Engine must be open in order for the call to be successful. Your code is lacking a PEOpenEngine call.
Error code 513 PE_ERR_INVALIDPRINTER The printer driver for the printer you specified is missing or there is no default printer installed.
Error code 514 PE_ERR_PRINTFILEEXISTS The name you have specified for the export file already exists. You must delete the file and export again or specify a different file.
Error code 515 PE_ERR_BADFORMULATEXT There is a formula error in the replacement formula text. Review the formula syntax and retry. This also returns the formula name and a formula message indicating the source of the error.
Error code 516 PE_ERR_BADGROUPSECTION The group section you specified is now invalid in the report, i.e., a group is based on a formula field and the formula has changed so it is no longer suitable for basing a group on.
Error code 517 PE_ERR_ENGINEBUSY Only one application can access the Report Engine at one time. There is currently another application using the engine.
Error code 518 PE_ERR_BADSECTION You have given a bad value as the section code for some function like PESetGroupCondition.
Error code 519 PE_ERR_NOPRINTWINDOW There is no print window available to make your call successful (for any call that depends on a print window already existing: PEGetWindowHandle, PECloseWindow, PEPrintWindow).
Error code 520 PE_ERR_JOBALREADYSTARTED You are trying to start a print job that has already been started. This can happen if you start a print job and then try to start printing again before the previous printing has finished.
Error code 521 PE_ERR_BADSUMMARYFIELD The summary field specified as a group sort field is invalid or non-existent.
Error code 522 PE_ERR_NOTENOUGHSYSRES There are not enough Windows system resources to process the function.
Error code 523 PE_ERR_BADGROUPCONDITION You have specified an invalid group condition.
Error code 524 PE_ERR_JOBBUSY You tried to initiate printing while Crystal Reports was already printing a job.
Error code 525 PE_ERR_BADREPORTFILE There is something wrong with the report you are trying to open.
Error code 526 PE_ERR_NODEFAULTPRINTER You have not specified a default printer. Specify a default printer via the Windows Control Panel.
Error code 527 PE_ERR_SQLSERVERERROR Unable to connect to the Server or unable to successfully run the SQL query.   Some of the most common reasons for the error to occur are:n Database Driver DLLs can not be found.n LogOnInfo Parameters are not NULL terminated.n Incorrect Logon Parameters.   Ensure that the ServerName, DatabaseName, UserId, and Password are all valid for the server that you are trying to logon to.n Incorrect structSize given for LogOnInfo Structure.   If an incorrect value is given here, a SQL Server error may result.   The correct value for the structSize is 514.n Incorrect SQL Query or the query generated an ODBC error or server error.
Error code 528 PE_ERR_BADLINENUMBER You have specified an invalid line number.
Error code 529 PE_ERR_DISKFULL When printing to file or when sorting, the program requires more room than is available on the disk.
Error code 530 PE_ERR_FILEERROR In trying to print to file, the program is encountering another file problem besides disk full.
Error code 531 PE_ERR_INCORRECTPASSWORD You have specified an incorrect password.
Error code 532 PE_ERR_BADDATABASEDLL The database DLL is corrupt.
Error code 533 PE_ERR_BADDATABASEFILE Something is wrong with the database you have specified. You may need to verify using the Database|Verify Database command.
Error code 534 PE_ERR_ERRORINDATABASEDLL The database DLL is corrupt, missing or out of date.
Error code 535 PE_ERR_DATABASESESSION You have attempted to log on using incomplete or incorrect session parameters.
Error code 536 PE_ERR_DATABASELOGON You have attempted to log on using incomplete or incorrect log on parameters.
Error code 537 PE_ERR_DATABASELOCATION The table you have specified can not be found.
Error code 538 PE_ERR_BADSTRUCTSIZE The structure size of the structure parameter has not been set correctly.
Error code 539 PE_ERR_BADDATE You have specified an invalid date using the PESetPrintDate function.
Error code 540 PE_ERR_BADEXPORTDLL The DLL required by your export call is either missing or out of date. This error can also be caused by an invalid export options parameter.
Error code 541 PE_ERR_ERRORINEXPORTDLL An export DLL has reported an error.
Error code 542 PE_ERR_PREVATFIRSTPAGE You are using the previous page control in the print window when you are already at the first page of the report.
Error code 543 PE_ERR_NEXTATLASTPAGE You are using the next page control in the print window when you are already at the last page of the report.
Error code 544 PE_ERR_CAN NOTACCESSREPORT Access to report file denied. Another program or user may be using it. If an OLE-based report is already open in CRW and you are trying to open it via CRPE, the call will fail.
Error code 545 PE_ERR_USERCANCELLED The user clicked the cancel button.
Error code 546 PE_ERR_OLE2NOTLOADED The program can not open the report (which includes an OLE 2.0 object) because OLE 2.0 can not be loaded.
Error code 547 PE_ERR_BADCROSSTABGROUP You have specified an invalid row or column field in your Cross-Tab report.
Error code 548 PE_ERR_NOCTSUMMARIZEDFIELD You are trying to run a Cross-Tab report without specifying a summarized field.
Error code 549 PE_ERR_DESTINATIONNOTEXPORT You have called PEDecodeExportOptions before first calling PEGetExportOptions.
Error code 550 PE_ERR_INVALIDPAGENUMBER You have used an invalid page number with PEShowNthPage.
Error code 552 PE_ERR_NOTSTOREDPROCEDURE Returned by PESetNthParam when there is no table in the current report that is based on a stored procedure.
Error code 553 PE_ERR_INVALIDPARAMETER The parameter you have specified does not exist in the stored procedure, or the value you have entered is not valid for the specified parameter.
Error code 554 PE_ERR_GRAPHNOTFOUND The graph specified for the section does not exist.
Error code 555 PE_ERR_INVALIDGRAPHTYPE The graph type you have indicated with PESetGraphType is not valid.
Error code 556 PE_ERR_INVALIDGRAPHDATA Returned by PESetGraphData if:n the report is a Cross-Tab, and colGroupN or rowGroupN is > 1, or n the report is not a Cross-Tab, and rowGroupN is something other than PE_GRAPH_DATA_NULL_
SELECTION or colGroupN+1.
Error code 557 PE_ERR_CANNOTMOVEGRAPH Returned by PESetGraphData if the report is not a Cross-Tab, and colGroupN differs from the graph’s current value for colGroupN.
Error code 558 PE_ERR_INVALIDGRAPHTEXT Returned by PESetGraphText. The graph text structure PEGraphTextInfo contains an invalid entry.
Error code 559 PE_ERR_INVALIDGRAPHOPT Returned by PESetGraphOptions. The graph options structure, PEGraphOptions contains an invalid entry.
Error code 560 PE_ERR_BADSECTIONHEIGHT Returned by PESetMinimumSectionHeight. The section height specified is either negative or 0; it must be a value greater than 0..
Error code 561 PE_ERR_BADVALUETYPE Returned by PESetNthParameterField. The valueType specified in the PEParameterFieldInfo structure is invalid for a parameter field. It must be one of the following: number, currency, Boolean, date, or string
Error code 562 PE_ERR_INVALIDSUBREPORTNAME Returned by PEOpenSubreport. The subreport name passed does not exist.
Error code 564 PE_ERR_NOPARENTWINDOW Returned by PESetDialogParentWindow. The parent window handle specified is invalid.
Error code 565 PE_ERR_INVALIDZOOMFACTOR Returned by PEZoomPreviewWindow. The zoom factor passed in the level parameter is invalid. It must be 0, 1, 2   >= 25, <= 400,   or one of the defined constants.
Error code 567 PE_ERR_PAGESIZEOVERFLOW Returned if the total length of the page header and page footer is greater than the length allotted for a page.
Error code 568 PE_ERR_LOWSYSTEMRESOURCES Returned if GDI memory gets down to 10%. The program will give this message rather than GPF.
Error code 570 PE_ERR_BADGROUPNUMBER Returned when the user passes in an invalid group number. This can happen, for example, when the user passes an invalid group number to PEAddGroup.
Error code 572 PE_ERR_INVALIDNEGATIVEVALUE Returned when the user passes in a negative value where a value greater than zero should be passed. This can happen, for example, when the user passes a negative section height to PESetMinimumSectionHeight.
Error code 573 PE_ERR_INVALIDMEMORYPOINTER Returned when the user passes in an invalid pointer, for example, an invalid structure pointer, an invalid string pointer, etc.
Error code 594 PE_ERR_INVALIDPARAMETER
NUMBER Returned when the user passes in an invalid parameter field number, for example, when the user passes an invalid parameter field number to PESetNthParameterField.
Error code 599 PE_ERR_SQLSERVERNOTOPENED Returned when the user passes invalid information to PELogonServer, or PELogOffServer. This can happen, for example, if the user does not specify the server name.
Error code 999 PE_ERR_
NOTIMPLEMENTED Internal error.


Вопрос:
Где можно прочитать расшифровку ошибок Print Engine?

Ответ:
Папка Segate Crystal Reports 6.0->Segate Crystal Reports Developer's Help, далее в Cодержании помощи выбираем книгу Crystal Report Engine и последниий пункт Crystal Report Engine Error Codes. Или от слова далее - в Указателе набираем err и пункт Crystal Report Engine


Вопрос:
Отчет выполняется нормально в просмотрщике CRRT. А при просмотре в Crystal при попытке соединиться с сервером дает ошибку "Невозможно соединиться с сервером", хотя имя сервер, имя пользователя и пароль набираю правильно и с сервером все в порядке. Какая может быть причина?

Ответ:
Одна из причин - настройка отчета делается разработчиком, у которого в компоненте Пользователей задано в поле "Перекодировать пароль" - ДА . При коннекте с сервером он указывает пароль для входа в КАС, а фактический пароль для соединения с сервером он не знает. Для Разработчика нельзя указывать перекодировку пароля !


Вопрос:
Отчет, который раньше работал, при просмотре в CRRT дает ошибку 599 (в Previev в Crystal - все нормально). В чем причина?

Ответ:
Это может быть в такой ситуации: работаем одновременно с двумя КАС с разными базами на разных серверах, сначала вошли в первую и просмотрели отчет - все нормально, зашли во вторую, зарегистрировавшись в другой базе на другом сервере, далее вернулись в первую и снова пытаемся просмотреть отчет - возникает ошибка 599. Нужно выгру

Вверх

<<Назад

Главная| ИС.. | Моделирование | Проектирование |ТД | Разработка | Интерфейс | Статьи | Ссылки | Автор
DimDim SoftWare Мастерская Dr. dimdim Copyright 2003-2004
Администратор info-system@mail.ru
Последнее обновление 26-Дек-2003