Newcomposers.ru

IT Мир
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Ошибка переменная документа не указана

ИТ-записки Чорнага кашака

Язык программирования самого высокого уровня содержит всего несколько команд для управления программистами

15 мар. 2010 г.

Использование полей и закладок при работе с MS Word из Delphi

В предыдущей заметке «Поиск и замена текста в документе MS Word из Delphi» я рассказывал, как дорабатывал старый модуль, который генерирует клиентам компании письма в формате MS Word с помощью поиска и замены текста. Сдав модуль заказчикам, я в свободное от работы время, переделал его. Вместо поиска и замены использовал поля с переменными (DocVariable).
В шаблон письма с помощью макроса добавил переменные

Sub AddFields()
ThisDocument.Variables.Add «FIO», «FIO»
ThisDocument.Variables.Add «ADDRESS», «ADDRESS»
.
End Sub

и расставил поля по тексту шаблона. В макросе у метода Add первый параметр – название переменной, а второй – ее значение. Я специально сделал их одинаковыми, чтобы пользователям было проще и нагляднее редактировать шаблоны.
Затем внес изменения в методы модуля работающие с MS Word. Если опустить все детали и различную логику, то упрощенно работа с MS Word выглядит так:

Var
wa: WordApplication;
ovDotName, ovFileName: OleVariant;
i: Integer;
q: TSDQuery;
.
begin
.
wa := CreateComObject(CLASS_WordApplication) as _Application;
ovDotName := ‘какой то шаблон.dot’;
wa.Documents.Add(ovDotName, EmptyParam, EmptyParam, EmptyParam);

For i := 0 to q.FieldCount-1 do
MSWordSetVariable(q.Fields[i].FieldName, q.Fields[i].AsString);
.
ovFileName := ‘письмо любимому клиенту.doc’;
wa.ActiveDocument.SaveAs(ovFileName, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
.

Вот такая логика у индусов, писавших этот кусок MS Word.

После присвоения значений всем переменным, осталось только дать команду полям обновиться новыми значениями переменных. Для этого в VBA у коллекции объектов полей (Fields) есть метод Update:

А для того, чтобы избежать дальнейшего обновления полей, избавимся от их связи с переменными:

У каждого структурного элемента документа (заметки, колонтитула, сноски и т.д.) своя коллекция объектов полей, поэтому, если документ, как у меня, состоит из разных структурных элементов, то методы Update и Unlink необходимо вызвать для каждого из этих элементов. Для этого перебираем все элементы коллекции StoryRanges.

procedure MSWordUpdateStoryRanges;
Var
StoryRanges: Word2000.StoryRanges;
StoryRange: Word2000.Range;
iStoryIndex: integer;
Begin
StoryRanges := wa.ActiveDocument.StoryRanges;
For iStoryIndex := wdMainTextStory to wdFirstPageFooterStory do
Try
StoryRange := StoryRanges.Item(iStoryIndex);
If StoryRange <> nil then
begin
StoryRange.Fields.Update;
StoryRange.Fields.Unlink;

While (StoryRange.NextStoryRange <> nil) do
begin
StoryRange := StoryRange.NextStoryRange;
StoryRange.Fields.Update;
StoryRange.Fields.Unlink;
end;
end;
Except
StoryRange := nil;
End;
End;

И вызываю ее перед сохранением документа.

Все бы ничего, но часть текста передаваемого из программы в MS Word необходимо было выводить жирным шрифтом. А это через переменные не сделать 🙁 В подобном случае «поиск и замену текста» можно заменить на «переход к закладке и вывод текста». Например, в шаблон вставляем закладку с именем ‘писать текст сюда’, а в программе пишем:

Вот и все 🙂
Раннее связывание и использование полей/закладок дало существенный рост скорости генерации писем. Если на 500-х различных документах этого было почти не заметно, то при генерации 15 000 документов, прирост скорости составил 30% (специально проверил несколько раз на одних и тех же исходных данных).

Устранение неполадок с закладками

Если вы добавили в документ закладки и с ними возникают проблемы, в первую очередь убедитесь, что закладки видны. По умолчанию Word их не отображает.

Чтобы показать закладки в документе, выполните следующее:

выберите Файл > Параметры > Дополнительно;

в разделе Показывать содержимое документа выберите Показывать закладки и нажмите кнопку ОК.

Если вы добавите закладку к блоку текста или изображению (или другому элементу), закладка отобразится в
квадратных скобках:

Если при добавлении закладки вы ничего не выделили (это означает, что вы только что поместили курсор в область), она будет выглядеть как I-
образный: .

Также в этой статье

Вместо текста появляется сообщение об ошибке

Word выведет сообщение об ошибке «ошибка! Закладка не определена. » или «ошибка! Источник ссылки не найден». Когда вы обновляете поле с разорванной ссылкой на закладку. Вы можете восстановить исходный текст, нажав клавиши CTRL + Z сразу после получения сообщения об ошибке. Вы можете нажать клавиши CTRL + SHIFT + F9, чтобы преобразовать текст в поле в обычный текст.

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

Убедитесь, что закладка все еще существует. Иногда закладки случайно удаляются при удалении другого текста. Чтобы проверить это, убедитесь, что закладки отображаются в документе.

Убедитесь, что имена полей указаны правильно. Многие элементы, в которых используются закладки, например перекрестные ссылки и индексы, вставляются как поля. Если имя поля указано неправильно, вы можете получить сообщение об ошибке. Дополнительные сведения о кодах полей см. в статье Коды полей в Word.

Читать еще:  Ошибка при запуске 0x0000142

Элемент, на который ссылается закладка, не обновляется должным образом

Word вставляет перекрестные ссылки в виде полей. Если перекрестная ссылка не отображает изменения, вносимые в закладку, на которую она ссылается, обновите поле. Щелкните правой кнопкой мыши код поля и выберите в контекстном меню пункт Обновить поле.

Закладка отсутствует в элементе автотекста

Создавая элемент автотекста с закладкой, обязательно выделите весь текст закладки, в том числе ее открывающие и закрывающие скобки.

При сохранении текста, содержащего закладку, в виде записи автотекста Word сохранит закладку в записи. Если вы вставите запись автотекста в документ несколько раз, Word удалит закладку из предыдущей записи и свяжет ее с самой последней записью.

Дополнительные сведения об автотексте см. в статье Автоматическая вставка текста.

Неожиданные результаты при изменении закладки

Элементы, помеченные закладками, можно вырезать, копировать и вставлять. Можно также добавлять и удалять текст в помеченных элементах. Ниже описаны изменения, которые можно вносить в закладки, и результаты таких изменений.

Копирование закладок

Если вы частично или полностью скопируете блок текста или изображение, помеченное закладкой, в другое место того же документа, закладка останется связанной с исходным элементом, а копия не будет помечена закладкой.

Если вы скопируете весь помеченный элемент в другой документ, оба документа будут содержать одинаковые элементы с одинаковыми закладками.

Вырезание и удаление закладок

Если вы вырежете весь помеченный элемент и вставите его в тот же документ, элемент с закладкой будет перемещен в новое место.

Если вы удалите часть помеченного элемента, закладка останется с оставшейся частью текста.

Добавление в закладки

Если между любыми двумя символами в закладке добавить текст, он будет добавлен в закладку.

Если вы установите курсор сразу после открывающей скобки закладки, а затем добавите текст или графический элемент , он будет включен в закладку.

Если вы установите курсор сразу после закрывающей скобки закладки, а затем добавите в элемент какое-либо содержимое , оно не будет включено в закладку.

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

Ошибки в 1С, связанные с контекстным методом

Ошибки при использовании той или другой программы встречаются самого разного рода. Из них есть целая серия — которые возникают по нашей вине. Рассмотрим, как исправить ошибку при выводе метода контекста в 1С, возникающую в результате несоблюдения правил и методов контекста.

Понимание принципов функционирования метода контекста поможет избежать ошибок при работе в 1С.

Контекстные правила и методы

Любой программный продукт архитектурно состоит из модулей (module, англ.), частей. Модульные части программы 1С и их местоположение показаны на рисунке:

Программные модули, в свою очередь, состоят из разделов:

Контекст (context, англ.) — это одно из важнейших понятий в программировании. В 1С под ним понимается окружение модуля и его разделов, — какие именно переменные, свойства, объекты, метод (method) и события могут быть ему доступны в каждой конкретной точке. В разных точках context, как правило, уже другой.

Разработчик (доработчик) должен понимать — какие контекстные свойства имеет точка и какой method является доступным для использования в ней.

В восьмёрке выделены контекстные виды:

  • В любой точке конфигурации доступен Глобальный context. Отдельная ветка синтаксис-помощника показывает доступные для вызова функции:
  • Локальный context (более низкого уровня) доступен в точках каждой модульной части;
  • Ещё ниже уровень — локальный context процедуры и так далее.

Базовыми являются основные четыре правила для доступа процедур, переменных, и ф-ций в модулях:

  • В общих модульных частях не будут доступными для экспорта переменные, процедуры и ф-ции модульных приложений;
  • В модульных приложениях есть доступ для экспорта процедур и ф-ций общих модулей;
  • Для общих мод. частей открыт доступ к экспорту процедур и ф-ций прочих общих модулей;
  • Для модульных прикладных объектов и для модульных форм являются доступными переменные, функции и процедуры модулей приложений для экспорта и общих модулей.

Если какой-либо форме присвоен основной реквизит, то в контексте этой формы будут содержаться свойство и method, отвечающие этому основному реквизиту. К примеру, в модуле формы для элемента справочника Номенклатура доступен method и свойства объекта СправочникОбъект.Номенклатура.

Иллюстрация приведённых правил на схеме:

Стрелками обозначено что одной из модульных частей предоставляется возможность другим по обращению к своим переменным, функциям и процедурам для экспорта. Напоминаем, — в общем модуле не существует объявления переменных.

Читать еще:  Произошла ошибка конвертации

Несоблюдение правил и методов программного контекста

Все программисты встречались с уведомлением об ошибке 1С при вызове метода контекста. Ситуации бывают самыми разными, и также разными будут методы решения этой проблемы. Поэтому разберём лишь общие причины, так как все варианты, когда может появиться такая ошибка, даже перечислить нереально. Зная, куда смотреть и на что обратить внимание, вы сможете найти решение для своей конкретной ситуации самостоятельно. Рассмотрим такой пример:

Ошибки команд

При создании запроса в справочнике в его параметре «текст» был внесён фрагмент:

В конструкции «ГДЕ» было внесено «И», но само условие осталось непрописанным.

Реакция программы была такой:

<МОДСеанса(21)>: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();

Как узнать правильный метод?

Для того чтобы получить подсказку платформы 1С о том, как использовать какой-либо method, поставьте курсор на нужную функцию и нажмите «Ctrl + F1». При возникновении ошибок нужно проверить параметры, которые передаются в функцию, а также правильность использования функции.

Что полезно знать об ошибках

Напоследок проведём общий анализ ошибок в 1С. Любая из них может быть причиной тех, которым посвящена тема статьи:

  • Нарушение как логической, так физической целостности информационной базы;
  • Ошибки пользователей при обращении с платформой;
  • Ошибочно введённый разработчиком (доработчиком) код;
  • Человеческий фактор — например, забывчивость;
  • Чрезвычайные ситуации (отсутствие света, метель, дождь, град, ураган, наводнение).

Провести анализ ошибки:

  • Сравнить релизы платформы и конфигурации;
  • Прочитать полный текст сообщения до конца, некоторое время подумать и понять то, что написала машина. Очень часто люди не читают такие сообщения целиком. Но бывает, что именно в конце его содержатся рекомендации к её устранению;
  • Проанализировать насколько давней она является и обстоятельства её появления;
  • Можно ли её воспроизвести;
  • Невоспроизводимые ранее не встречавшиеся ошибки, как правило, не исправляются;
  • Повторяется ли ошибка с другого компьютера или другим пользователем. В этом случае рассмотреть очистку кэша, настройку прав, очистку пользовательских настроек.

Дополнительно о причинах ошибок:

  • Часть ошибок — это результат использования нелицензионного программного обеспечения (и windows тоже);
  • Повреждённая платформа — это самый распространённый пример. Всего один патч способен взломать версию платформы. После чего можно не обнаружить базу (или лицензию);
  • При первичном столкновении с ошибкой стоит поискать решение в поисковике — возможно решение её уже кем-то найдено;
  • Следите за актуальностью релиза конфигурации (особенно если из них сдаётся регламентированная отчётность);
  • Актуальность релиза платформы — для каждой конфигурации рекомендован свой релиз;
    Все события, происходящие в 1С, протоколируются в технологическом журнале!
  • Перед началом каких-то действий с базой необходимо делать архивную копию!

Теперь вы знаете что такое context, почему возникают связанные с ним ошибки, как анализировать ошибки в 1С и как их решать.

Ошибка переменная документа не указана

После завершения формирования отчета, на третьем шаге, при нажатии кнопки «Передать на подпись» система выполняет форматно-логическую проверку файла и, в случае обнаружения ошибок, предлагает просмотреть протокол ошибок.

Нажатие на кнопку «Просмотреть протокол» открывает окно «Протокол проверки файла». Окне поделено на несколько частей. Для поиска ошибочного реквизита важны таблицы «Исходный файл» и «Список ошибок» и блоки данных «Подробное описание» и «Информация о формате».

Приведем несколько способов понимания/чтения протокола ошибок.

ВНИМАНИЕ! Начиная со сборки СБиС 2.4.369, перед началом ознакомления со способами по выявлению ошибок необходимо переключить «Режим отображения исходного файла» с «Ошибочные блоки» на «Файл целиком».

В таблице «Список ошибок» нажмем на строку с ошибкой. Под данной таблицей в подразделах «Подробное описание» и «Информация о формате» внимательно читаем описание ошибки. В представленном примере мы видим что ошибка в атрибуте «ДатаРожд», название реквизита «Дата рождения», раздела «Данные о физическом лице — получателя дохода». По указанным данным можно сделать вывод о том, что в данном разделе отчета отсутствует дата рождения физ. лица, либо она присутствует, но не соответствует требованиям предъявляемым к данному реквизиту. Далее ищем раздел с ошибчным реквизитом в отчете и исправляем.

Ниже пример определения местонахождения реквизита с ошибкой в самом отчете.

Нажатием в таблице «Список ошибок» на строку с ошибкой, автоматически выделяется строка в таблице «Исходный файл». Внимательно прочитав автоматически выделившуюся строку мы видим что в реквизите «ДатаРожд» после знака равно между кавычками отсутствует какой-либо показатель (цифры/буквы), хотя в реквизите «Статус» указано «1», а в реквизите «Гражд» указано «643». Найдя известные нам реквизиты («1» и «643») в отчете, между ними обнаружим реквизит с ошибкой.

Ниже пример определения местонахождения реквизита с ошибкой в самом отчете.

Встречаются ситуации когда способом №2 сложно определить местонахождение реквизита с ошибкой в отчете. В таких случаях мы ищем по строкам, расположенным выше или ниже автоматически выделившейся строки в таблице «Исходный файл», показатели уже известные нам (обычно это суммы, ставки, наименование чего-либо и другие).

Читать еще:  Что за ошибка 0xc0000142

Для перемещения по таблице «Исходный файл» используйте полосу прокрутки справа от таблицы.

Ниже пример определения местонахождения реквизита с ошибкой в самом отчете.

Устранение ошибки Microsoft Word: закладка не определена

MS Word позволяет создавать закладки в документах, но иногда при работе с ними можно столкнуться с определенными ошибками. Самые распространенные из них имеют следующее обозначение: “Закладка не определена” или “Источник ссылки не найден”. Появляются такие сообщения при попытке обновить поле с неработающей ссылкой.

Исходный текст, который и является закладкой, всегда можно восстановить. Достаточно просто нажать “CTRL+Z” непосредственно после того, как на экране появится сообщение об ошибке. Если же закладка вам не нужна, а текст, который ее обозначает, нужен, нажмите “CTRL+SHIFT+F9” — это преобразует расположенный в поле неработающей закладки текст в обычный.

Для того же, чтобы устранить ошибку “Закладка не определена”, как и схожую с ней “Источник ссылки не найден”, необходимо сначала разобраться с причиной ее возникновения. Именно о том, почему возникают подобные ошибки и как их устранить, мы расскажем в данной статье.

Причины возникновения ошибок с закладками

Есть всего две возможных причины, по которым закладка или закладки в документе Word могут не работать.

Закладка не отображается в документе или больше не существует

Возможно, закладка просто не отображается в документе, но может быть и так, что она больше не существует. Последнее вполне возможно в случаях, если вы или кто-либо другой уже удалял какой-либо текст в документе, с которым вы сейчас работаете. Вместе с этим текстом случайно могла быть удалена и закладка. О том, как это проверить, мы расскажем немного позже.

Неверно указанные имена полей

Большая часть элементов, в которых применяются закладки, вставляются в текстовый документ в качестве полей. Таковыми могут быть перекрестные ссылки или индексы. В случае, если имена этих самых полей в документе указаны некорректно, Microsoft Word выдаст сообщение об ошибке.

Устранение ошибки: “Закладка не определена”

Раз уж мы определились с тем, что ошибка определения закладки в документе Word может возникать лишь по двум причинам, то и способов ее устранения тоже существует всего два. О каждом из них по порядку.

Закладка не отображается

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

1. Откройте меню “Файл” и перейдите в раздел “Параметры”.

2. В открывшемся окне выберите пункт “Дополнительно”.

3. В разделе “Показывать содержимое документа” установите галочку напротив пункта “Показывать содержимое документа”.

4. Нажмите “ОК” для закрытия окна “Параметры”.

Если закладки есть в документе, они будут отображены. Если же закладки были удалены с документа, вы их не только не увидите, но и не сможете восстановить.

Неверные имена полей

Как было сказано выше, неверно указанные имена полей тоже могут быть причиной возникновения ошибки “Закладка не определена”. Поля в Ворде применяются в качестве заполнителей для данных, которые могут быть изменены. Также их используют для создания бланков, наклеек.

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

В последних версиях MS Word вставлять поля вручную приходится крайне редко. Дело в том, что большой набор встроенных команд и элементов управления содержимым предоставляют широкие возможности для автоматизации процесса. Поля, как и их неверные имена, чаще всего встречаются в ранних версиях программы. Следовательно, ошибки с закладками в таких документах тоже могут возникать значительно чаще.

Кодов полей существует огромное множество, их, конечно, можно уместить в одну статью, вот только пояснение к каждому из полей, тоже растянется на отдельную статью. Чтобы убедиться или опровергнуть тот факт, что неверные имена (кода) полей — это причина ошибки “Закладка не определена”, посетите официальную страницу со справкой по этому вопросу.

Вот, собственно, и все, из этой статьи вы узнали о причинах, по которым в Ворде возникает ошибка “Закладка не определена”, а также о способах ее устранения. Как вы могли понять из вышеизложенного материала, восстановить неопределяемую закладку можно не во всех случаях.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Ссылка на основную публикацию
Adblock
detector