Возник вопрос, можно ли вывести поля вордовского отчета в колонтитул? Или может я что-то не так делаю, потому-что в самом документе данные подставляются, а в колонтитуле остается просто название поля.
На данный момент функционал вывода данных в колонтитул не реализован. По Вашему обращению зарегистрирован запрос на изменение №61233.
Мы обязательно сообщим Вам, как только получим результаты.
Для реализации задачи нужно (полужирным выделен текст, который нужно добавить):
1) В скрипте scr_UserReportCommon изменить функцию ProcessWordReportDataFill, после вызова функции ProcessOneRootRecordWordReportDataField добавить обработку колонтитулов:
Олег,
Мы воплотили предложенное Вами решение. При этом возникает проблема, которую я опишу ниже.
Нам необходимо в колонтитуле иметь надпись наподобие такой "Договор об оказании услуг № 101/ФТ/11 от 13.01.2011". Для этого в шаблон отчета мы вставляем два поля и получаем следующее "Договор об оказании услуг № <#Деталь 1.Номер> от <#Деталь 1.Дата начала>". Оба поля (номер и дата начала) встречаются в этом же отчете в другом месте (не в колонтитуле) и прекрасно работают. В колонтитуле же при формировании отчета первое поле работает, а второе - нет (получается "Договор об оказании услуг № 94/ФТ/10 от <#Деталь 1.Дата начала>"). Мы пробовали для интереса использовать другие поля, но нам не удалось заставить правильно отображать одновременно 2 поля.
Также почему-то при формировании отчета Word открывается в режиме отображения "Черновик" с отдельным полем для колонтитула снизу - см. приложенный скриншот. Это конечно легко решается ручным выбором режима "Разметка страницы", однако было бы удобнее, если бы он сразу открывался в этом режиме, как при формировании других отчетов.
Да, предоставленное решение не является универсальным.
Попробуйте следующим образом:
1) Создать по образцу функции GetFieldValueByCaption скрипта scr_UserReportCommon новую функцию, которая даёт возможность получить отображаемое значение поля датасета. Данное изменение связано с тем, что для отображения в отчёте нам нужны строковые значения. Итого, получаем:
function GetFieldValueByCaptionEx(Dataset, FieldCaption, ReturnText){
var DataField = GetDataFieldByCaption(Dataset, FieldCaption);if(!Assigned(DataField)){return;}if(!DataField.IsEnabled){return;}if((DataField.FieldType== dftEnum)|| ReturnText){return DataField.DisplayValue;}else{return DataField.Value;}}
2) Функцию ProcessRange переписать так (добъёмся замены всех макросов, а не только первого):
function ProcessRange(Element){
var Range = Element.Range;
InitializeTagFindObject(Range.Find);while(Range.Find.Execute()){
Range.Select();
var ExpressionObject = GetExpressionObject(Range.Text);
Range.Text= GetFieldValueByCaptionEx(MSWordUserReport.RootDataset,
ExpressionObject.FieldName, true)||'';
Range = Element.Range;
InitializeTagFindObject(Range.Find);}}
3) Изменить сам вызов замены колонтитулов в функции ProcessWordReportDataFill:
function ProcessWordReportDataFill(Document, RootSection, Sections, IsPreview,
…
ProcessOneRootRecordWordReportDataField(DocumentRange, Selection,
RootSection, Sections, RecordsCountObject, WorkspaceWindow);if(RootDataset.RecordNumber==1){for(var i =1; i <= Document.Sections.Count; i++){for(var j =1; j <= Document.Sections(i).Headers.Count; j++){
ProcessRange(Document.Sections(i).Headers(j));}for(var k =1; k <= Document.Sections(i).Footers.Count; k++){
ProcessRange(Document.Sections(i).Footers(k));}}}
Document.Windows.Item(1).View.Type=3;
…
}
Последняя строчка в приведённом выше коде изменяет режим окна документа на "Разметка страницы".
На счет последней строчки Document.Windows.Item(1).View.Type = 3, если оставить все так то тогда если выбираем несколько записей - система валится.
Сделал так: Document.Windows.Item(1).View.Type = 4 - режим предварительного просмотра. Так работает и возможно удобней, поскольку сразу готово к печати.
Чтобы после формирования отчета с колонтитулами вид документа возвращался с состояние «Разметка страницы», необходимо в сервисе scr_UserReportCommon изменить метод ProcessWordReportDataFill следующим образом: