При разработке внешних обработок на управляемых формах программисты часто сталкиваются с досадной проблемой: после создания и настройки справки в конфигураторе, при запуске обработки в пользовательском режиме вместо ожидаемого текста открывается стандартная системная справка "Работа с формами". Ситуация осложняется тем, что на компьютере разработчика всё может работать корректно, а при переносе на сервер или компьютер клиента функционал "ломается".
В этой статье мы подробно разберем причины такого поведения платформы 1С:Предприятие 8.3 и рассмотрим несколько эффективных способов решения: от простой очистки кэша до создания надежной системы вывода справки через HTML-макеты.
Прежде чем приступать к исправлению, проанализируем ситуацию и поймем, почему платформа игнорирует вашу справку. Основные факторы включают в себя:
Справка у формы или самого объекта.Первым делом проверим самые очевидные моменты. Рассмотрим алгоритм действий:
Если обработка зарегистрирована через справочник «Дополнительные отчеты и обработки», необходимо полностью перезагрузить файл в справочнике. Проанализируем нюанс: платформа кэширует эти файлы в папке AppData\Local\1C\1cv8\.... Если стандартное обновление не помогает, удалите запись из справочника, запишите изменения и создайте её заново.
Если стандартный вызов по клавише F1 работает нестабильно, мы можем реализовать собственную кнопку вызова справки. Разберем, как это сделать программно. Важно понимать, что для внешних обработок путь к справке формируется специфическим образом.
Посмотрим на пример реализации команды на форме:
&НаКлиенте
Процедура ОткрытьСправкуОбъекта(Элемент)
ИмяПути = ПолучитьИмяДляСправки();
ОткрытьСправку(ИмяПути);
КонецПроцедуры
&НаСервере
Функция ПолучитьИмяДляСправки()
// Преобразуем объект в строку для получения типа
ИмяОбъекта = Строка(РеквизитФормыВЗначение("Объект"));
// Заменяем внутренние имена на понятные платформе пути
ИмяОбъекта = СтрЗаменить(ИмяОбъекта, "ВнешняяОбработкаОбъект", "ВнешняяОбработка");
// Формируем путь: ВнешняяОбработка.[Имя].Форма.[ИмяФормы].Справка
Возврат ИмяОбъекта + ".Форма.ФормаОтчета.Справка";
КонецФункции
Этот метод более надежен, но он также может страдать от проблем кэширования, если платформа не успевает обновить внутренние индексы после загрузки новой версии обработки.
Когда стандартные механизмы справки 1С подводят (особенно в сложных сетевых окружениях или при работе через терминальные серверы), рекомендуется использовать метод хранения справки в Макетe. Этот способ гарантирует, что пользователь всегда увидит актуальный текст, так как данные берутся напрямую из тела обработки.
Разберем реализацию по шагам:
МакетСправки.ТекстСправки с типом ФорматированныйДокумент или Строка (для отображения в поле HTML-документа).Теперь напишем код для вывода этой справки:
&НаКлиенте
Процедура ПоказатьСвоюСправку(Команда)
ЗаполнитьСправкуНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСправкуНаСервере()
// Получаем объект обработки для доступа к макетам
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
// Извлекаем текст из HTML-макета
Макет = ОбработкаОбъект.ПолучитьМакет("МакетСправки");
ТекстHTML = Макет.ПолучитьТекст();
// Если используем Поле HTML документа напрямую (строковый реквизит)
ЭтаФорма.ПолеHTML = ТекстHTML;
// Если используем ФорматированныйДокумент для более сложного вывода
// Вложения = Новый Структура;
// Объект.РеквизитФорматированныйДокумент.УстановитьHTML(ТекстHTML, Вложения);
КонецПроцедуры
Важное преимущество этого метода: вы полностью контролируете визуальное представление. Если в справке нужны картинки, их можно хранить в дополнительных макетах типа Картинка и программно подставлять в HTML-код через навигационные ссылки 1С (e1cib/tempstorage/...).
Проанализируем еще несколько технических моментов, которые могут влиять на результат:
Таким образом, мы рассмотрели все основные способы борьбы с "невидимой" справкой. Начните с проверки свойств метаданных и очистки кэша, а если задача требует 100% гарантии отображения на любом компьютере — используйте вариант с HTML-макетом и программным выводом.