Разработка и Конфигурация · 9 мин
Как определить область в 1С
Как определить область в 1С: именованные области табличного документа, области кода в модуле, методы ПолучитьОбласть и НайтиОбласть, типичные ошибки и проверка результата.
Термин «область» в 1С используется в двух разных контекстах, и путаница между ними — частая причина ошибок у начинающих разработчиков. Первый контекст — область табличного документа: именованный диапазон ячеек, который используется при формировании печатных форм и отчётов. Второй — область кода в модуле: блок инструкций препроцессора #Область ... #КонецОбласти, который помогает структурировать программный модуль.
Под «определить область» обычно понимают одну из трёх задач: найти именованную область в макете или готовом табличном документе, выяснить, в какую область попадает конкретная ячейка, или разобраться с областями кода при чтении чужого модуля. Ниже разобраны все три сценария с конкретными методами встроенного языка.
Большинство операций выполняется в конфигураторе и не требует изменения конфигурации, поэтому работать можно на копии базы или даже в режиме предприятия через консоль кода. Изменения макетов и модулей делайте только после резервного копирования.
Что такое область в 1С и какие виды существуют
В табличном документе область — это одна ячейка или прямоугольный диапазон ячеек, которому присвоено имя. Именованные области лежат в основе механизма печатных форм: макет документа состоит из областей «Шапка», «Строка», «Подвал», и программный код последовательно получает их и выводит в результирующий документ.
Области бывают горизонтальными (несколько строк на всю ширину макета), вертикальными (диапазон колонок) и произвольными прямоугольными. Для вывода в печатную форму чаще всего используют горизонтальные области, потому что метод Вывести() работает именно с ними.
Отдельный вид — области кода в модулях. Конструкции #Область Проведение ... #КонецОбласти не влияют на выполнение программы: это инструмент навигации и сворачивания кода в конфигураторе. Определить их можно визуально по структуре модуля или поиском по тексту.
Как определить область в макете табличного документа
Откройте макет в конфигураторе: найдите нужный объект (документ, справочник, отчёт), перейдите на вкладку «Макеты» и откройте макет типа «Табличный документ». Именованные области отображаются в левой части окна макета в виде выделенных полос с именами.
Чтобы увидеть имя конкретной области, выделите интересующие строки или ячейки — имя области отобразится в поле имени рядом с панелью инструментов (аналог поля «Имя» в Excel). Также можно открыть свойства ячейки правой кнопкой и посмотреть, входит ли она в именованный диапазон.
- 1Откройте конфигуратор и найдите объект с нужным макетом
- 2Откройте макет типа «Табличный документ»
- 3Выделите строки или ячейки — имя области появится в поле имени
- 4Для просмотра всех областей раскройте список в поле имени или используйте меню «Таблица — Имена»
- 5Проверьте границы области: выделите её имя в списке, и диапазон подсветится
Полный список имён доступен через меню «Таблица — Имена — Именованные диапазоны» (в разных версиях платформы пункт может называться немного иначе). Там же можно создать новую область или изменить границы существующей.
Как программно найти область в табличном документе
Для поиска области в уже сформированном табличном документе используется метод НайтиОбласть(). Он принимает имя области и возвращает объект области или Неопределено, если область с таким именем не найдена. Всегда проверяйте результат перед обращением к свойствам области.
Метод ПолучитьОбласть() применяется к макету и возвращает область для последующего вывода. Если области с указанным именем нет, будет вызвано исключение, поэтому имя должно точно совпадать с именем в макете, включая регистр букв.
Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("Печать");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ТабДок.Вывести(ОбластьШапка);
ОбластьНайденная = ТабДок.НайтиОбласть("Подвал");
Если ОбластьНайденная <> Неопределено Тогда
Сообщить("Область найдена, строки: " + ОбластьНайденная.Верх + " - " + ОбластьНайденная.Низ);
Иначе
Сообщить("Область не найдена");
КонецЕсли;Если нужно определить, в какую область попадает конкретная ячейка результирующего документа, получите область по адресу через Область(Верх, Лево, Низ, Право) и проверьте её свойство Имя. Для ячейки внутри именованного диапазона имя вернёт имя области, для обычной ячейки — адрес вида «R5C3».
Как определить область кода в модуле
В модуле объекта или общем модуле области кода видны через кнопку «Структура модуля» на панели конфигуратора — откроется дерево с процедурами, функциями и областями. Двойной щелчок по области переносит курсор к её началу.
Быстрый способ найти конкретную область — поиск по тексту модуля (Ctrl+F) по строке #Область. Это полезно в больших модулях форм, где областей могут быть десятки: обработчики событий, служебные процедуры, программный интерфейс.
При чтении чужого кода обращайте внимание на стандартные имена областей из стандартов разработки: «ПрограммныйИнтерфейс», «СлужебныйПрограммныйИнтерфейс», «СлужебныеПроцедурыИФункции». Это помогает быстро понять, какие процедуры предназначены для вызова извне, а какие — внутренние.
Типичные ошибки при работе с областями
Самая частая проблема — исключение «Область не найдена» при вызове ПолучитьОбласть(). Причины: опечатка в имени, другой регистр букв, область удалена из макета при доработке или код обращается не к тому макету. Проверяйте имя непосредственно в макете, а не по памяти.
Вторая типичная ошибка — попытка вывести вертикальную или произвольную область методом Вывести(). Для вертикальных областей используется Присоединить(), а смешивание методов приводит к искажению печатной формы.
Как проверить результат и границы самостоятельной работы
После получения области программно убедитесь, что границы соответствуют ожиданиям: свойства Верх, Низ, Лево, Право показывают координаты диапазона. Выведите их в сообщение и сравните с макетом — это быстрый способ отловить обращение не к той области.
Как проверить результат
Имена совпадают посимвольно, включая регистр
Отличается регистр или есть опечатка — будет исключение
Возвращён объект области с корректными координатами
Возвращено Неопределено — области нет в документе
Области выведены в правильном порядке, данные на месте
Пустые строки, сдвиг колонок, пропавшие секции
Безопасная граница самостоятельной работы — поиск и чтение областей, тестовый вывод печатных форм на копии базы. Изменение типовых макетов и модулей в рабочей базе без резервной копии и понимания механизма обновления конфигурации — зона риска: при обновлении доработки могут быть потеряны.
Что важно запомнить
Область табличного документа определяется по имени в макете или методами ПолучитьОбласть() и НайтиОбласть() в коде, область модуля — блоками #Область/#КонецОбласти через структуру модуля. Всегда проверяйте результат поиска на Неопределено и точность имён.
Частые вопросы
Чем НайтиОбласть() отличается от ПолучитьОбласть()?
НайтиОбласть() ищет область в уже сформированном табличном документе и возвращает Неопределено, если её нет. ПолучитьОбласть() вызывается у макета и извлекает область для вывода; при отсутствии области вызывается исключение.
Как узнать имя области, если макет чужой и большой?
Откройте макет и выделите нужные строки — имя появится в поле имени над таблицей. Альтернатива — меню «Таблица — Имена», где перечислены все именованные диапазоны макета с их границами.
Почему НайтиОбласть() возвращает Неопределено, хотя область есть в макете?
Метод ищет область в результирующем табличном документе, а не в макете. Если область ещё не была выведена в документ методом Вывести() или Присоединить(), найти её невозможно.
Влияют ли области кода на производительность модуля?
Нет. Конструкции #Область и #КонецОбласти обрабатываются только редактором конфигуратора для сворачивания и навигации. На скорость выполнения и компиляцию кода они не влияют.
Можно ли создать область табличного документа программно, без макета?
Да. Получите диапазон методом Область() с координатами и присвойте свойству Имя нужное значение. После этого к диапазону можно обращаться по имени, как к области из макета.
Что делать, если после обновления конфигурации пропала доработанная область макета?
Типовые макеты при обновлении замещаются полностью. Восстановите область из резервной копии или архивной версии базы, а на будущее выносите доработки в собственный макет или расширение конфигурации.