Есть пользовательский отчет в формате word. Основа этого документа - договор.
Данные берутся из реестра "Контакты", но мне также необходимо посылать туда дополнительные данные из детали "Договоры".
Т.е. для начала мне нужно выделить контакт, затем выделить определенный договор и только потом вызвать построение отчета.
Александр Сергеевич, базовая логика предусматривает построение отчета только по выделенным записям реестра. Выделенные записи детали в рассмотрение не берутся.
Реализация описанной Вами задачи достаточно сложная.
Алгоритм такой:
1. В момент вызова отчета помимо получения записей реестра раздела (см.функцию ReportMenuItemExecute сервиса scr_ReportUtils) нужно реализовать получение выделенных записей активной детали.
Если Вы будете реализовывать не универсальный механизм, следует учесть проверку на вызываемый отчет.
2. При построении отчета накладывать фильтр на детали пользовательского запроса.
Изменения нужно вносить в функцию ProcessWordReportDataFill сервиса scr_UserReportCommon
Добрый день. Возникли следующие вопросы
1. Как вставить прописью число в отчет Word?
2. Как сделать выборку в отчете по определенному полю (в случае если в таблице указано "1" то вставлять, иначе вставлять другое)
1. Значит без дополнительного поля не обойтись ? А как перевести просто число в пропись ? (изменять скрипт который преобразует сумму в пропись денежную ?)
2. Там большой договор порядка 10 листов ... И желательно чтобы в Word все было
Если критично формировать отчёт Word, можно поступить следующим образом: при создании запроса в название колонки, которая должна выводиться прописью, добавлять какой-либо признак (например, слово "(прописью)"). Далее на этапе определения значений для подстановки вместо макросов в шаблон отчёта (функции GetDataFieldValueByFieldType и GetFieldValueByCaption) проверять, имеет ли поле тип целое/дробное число, и содержит ли его свойство Caption строку "(прописью)". Если условия выполняются, возвращать в качестве значения сумму прописью, полученную с помощью функции AmountToStr скрипта scr_ConvertUtils.
Да, это в скрипте 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;}elseif(((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]> ...
данные должны нормально перенестись. Естественно, структура и порядок колонок в таблицах обеих баз должны полностью совпадать. Сначала необходимо переносить пользовательские запросы, потом - отчёты, шаблоны сообщений и т.д.