Отчеты (World) пользовательские

Добрый день.
Возникли следующие вопросы
1. Как вставить прописью число в отчет Word?
2. Как сделать выборку в отчете по определенному полю (в случае если в таблице указано "1" то вставлять, иначе вставлять другое)

Заранее ОГРОМНОЕ СПАСИБО за помощь ...

Нравится

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

1. Обсуждение
2. Может Вам стоит такой отчет реализовать с помощью FastReport?

1. Значит без дополнительного поля не обойтись ? А как перевести просто число в пропись ? (изменять скрипт который преобразует сумму в пропись денежную ?)
2. Там большой договор порядка 10 листов ... И желательно чтобы в Word все было

Если критично формировать отчёт Word, можно поступить следующим образом: при создании запроса в название колонки, которая должна выводиться прописью, добавлять какой-либо признак (например, слово "(прописью)"). Далее на этапе определения значений для подстановки вместо макросов в шаблон отчёта (функции GetDataFieldValueByFieldType и GetFieldValueByCaption) проверять, имеет ли поле тип целое/дробное число, и содержит ли его свойство Caption строку "(прописью)". Если условия выполняются, возвращать в качестве значения сумму прописью, полученную с помощью функции AmountToStr скрипта scr_ConvertUtils.

можете пояснить
"Далее на этапе определения значений для подстановки вместо макросов в шаблон отчёта"

это в пользовательском word отчете ?

Да, это в скрипте scr_UserReportCommon, функции GetDataFieldValueByFieldType и GetFieldValueByCaption. Если нужно выводить прописью итоги, необходимо также внести изменения в функцию GetSummaryValueByDataField.

Например:

function GetFieldValueByCaption(Dataset, FieldCaption) {
	var DataField = GetDataFieldByCaption(Dataset, FieldCaption);
    if (!Assigned(DataField)) {
        return;
    }
    if (!DataField.IsEnabled) {
        return;
    }
    if (DataField.FieldType == dftEnum) {
        return DataField.DisplayValue;
    } else
	if (((DataField.FieldType == dftFloat) || (DataField.FieldType == dftInteger)) && (FieldCaption.indexOf("(прописью)") != -1)) {
		return AmountToStr(String(DataField.Value), 'ru', 'RUB');
	} else {
        return DataField.Value;
    }
}

А как перенести в другую конфигурацию все пользовательские отчеты и запросы?

Максим, я уже ответил на Ваш вопрос в этом комментарии. Продублирую ответ здесь:

Что касается пользовательских запросов и отчётов, они не относятся к сервисам системы, а к наполнению базы данных. Так же, как и данные из справочников, разделов, системных настроек, их нужно переносить скриптами. Обычно сложность в том, что настройки пользовательских запросов содержатся в полях типа BLOB, но с помощью примерно такого запроса

INSERT INTO <DB1>..[tbl_Query]
SELECT * FROM <DB2>..[tbl_Query]
WHERE <DB2>..[tbl_Query].[CreatedOn] > ...

данные должны нормально перенестись. Естественно, структура и порядок колонок в таблицах обеих баз должны полностью совпадать. Сначала необходимо переносить пользовательские запросы, потом - отчёты, шаблоны сообщений и т.д.

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