При работе с внешними печатными формами (ВПФ) в конфигурациях на базе БСП (Библиотека стандартных подсистем), таких как 1С:Розница 2.3 или 3.0, часто возникает ситуация, когда ранее работавшая обработка внезапно выдает ошибку: Ошибка при вызове метода контекста (ПолучитьОбласть): Область не найдена: КонецСтроки. Рассмотрим подробнее, почему это происходит и как реанимировать печатную форму.
Проанализируем ситуацию, описанную в коде внешней обработки. Основная проблема кроется в строке инициализации макета. Разберем этот фрагмент кода:
Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.ПеремещениеТоваров.ПФ_MXL_НакладнаяНаПеремещение");
Используя метод УправлениеПечатью.МакетПечатнойФормы(), программист дает системе команду: «Возьми макет, который встроен в саму конфигурацию (в метаданные документа)». В этом и заключается ловушка. Если вы скачали внешнюю обработку или написали её сами, подразумевается, что макет находится внутри файла .epf. Однако код игнорирует внутренний макет и обращается к типовому.
Выясним причину поломки: скорее всего, база данных была обновлена. В новых релизах 1С:Розница разработчики часто меняют структуру типовых макетов. Область, которая раньше называлась КонецСтроки (обычно это вертикальная область для отрисовки правой границы таблицы), могла быть переименована или удалена вовсе. Поскольку ваша внешняя обработка продолжает искать эту область в системном макете по старому имени, возникает критическая ошибка.
Это самый правильный и надежный способ. Мы должны заставить программу брать макет не из конфигурации, а из самой внешней обработки. Для этого заменим вызов функции БСП на стандартный метод получения макета объекта.
Найдем в модуле объекта обработки (обычно это функция ПечатьНакладная) строку, где определяется переменная Макет, и заменим её:
// Было (обращение к конфигурации):
// Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.ПеремещениеТоваров.ПФ_MXL_НакладнаяНаПеремещение");
// Стало (обращение к макету внутри обработки):
Макет = ЭтотОбъект.ПолучитьМакет("НакладнаяНаПеремещение");
Важно: Проверьте во вкладке «Макеты» вашей внешней обработки точное имя макета. Если он называется иначе (например, ПФ_MXL_Накладная), укажите именно это имя в кавычках.
Если по какой-то причине вам необходимо использовать именно системный макет, нам придется привести его в соответствие с ожиданиями кода. Рассмотрим, как это сделать через пользовательский интерфейс, не прибегая к конфигуратору (если у вас есть права администратора).
Накладная на перемещение (Перемещение товаров).КонецСтроки.Однако помните: если в коде используется конструкция Макет.ПолучитьОбласть("ШапкаТаблицы|КонецСтроки"), это означает, что программа ищет пересечение горизонтальной строки ШапкаТаблицы и вертикальной колонки КонецСтроки. Если одна из этих именованных областей отсутствует, ошибка сохранится.
В ходе обсуждения часто всплывает и другая проблема, связанная с обновлением — сбой при обмене с ЕГАИС. Ошибка {ОбщийМодуль.РаботаСФайлами.Модуль(56)}: Преобразование значения к типу Булево не может быть выполнено говорит о логической ошибке в коде типовой конфигурации или повреждении данных.
Проанализируем ситуацию: программа пытается выполнить проверку Если ФайлОбъект.ПометкаУдаления Тогда. Ошибка возникает, когда ФайлОбъект не является ссылкой на элемент справочника (например, там содержится Неопределено). Это случается, если в регистре обмена ЕГАИС зафиксирована ссылка на входящую ТТН, но присоединенный файл к этой накладной был удален физически или не создался из-за сбоя связи.
Для решения этой проблемы рекомендуем следующие шаги:
Присоединенные файлы (ТТН Входящие ЕГАИС) на наличие «битых» записей.ПометкаУдаления:
Если ФайлОбъект <> Неопределено И НЕ ФайлОбъект.Пустая() Тогда
Если ФайлОбъект.ПометкаУдаления Тогда
// логика обработки
КонецЕсли;
КонецЕсли;
Мы проанализировали две разные, но часто сопутствующие друг другу ошибки в 1С:Розница. Основной вывод: при использовании внешних печатных форм всегда следите за тем, чтобы объект Макет инициализировался из локального ресурса обработки ЭтотОбъект.ПолучитьМакет(). Это гарантирует независимость вашей печатной формы от обновлений конфигурации и изменений в типовых макетах 1С.