Где находится код во внешней обработке (epf) и как исправить ошибки в динамических запросах

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При переходе с платформы 1С 7.7 на 1С 8.3 начинающие разработчики часто сталкиваются с трудностями при поиске программного кода во внешних файлах .epf. В отличие от "семерки", где структура была более линейной, в управляемом приложении 1С 8.3 код распределен по разным типам модулей. Рассмотрим подробно, как ориентироваться во внешней обработке, находить скрытые ошибки в запросах и обходить ограничения интерфейса управляемых форм.

Структура внешней обработки: где искать модули

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

  1. Модуль объекта: Здесь описывается основная логика обработки, экспортные процедуры и функции, которые могут вызываться извне, а также обработчики событий самой обработки (например, ПередЗаписью). Чтобы открыть его, необходимо в окне конфигуратора нажать кнопку "Действия" и выбрать "Открыть модуль объекта".
  2. Модули форм: У одной обработки может быть несколько форм. В каждой форме есть свой модуль. Код в нем отвечает за интерактивное взаимодействие с пользователем. Чтобы попасть туда, нужно открыть конкретную форму и в нижней части окна переключиться на закладку "Модуль".
  3. Модули команд: Если в обработке созданы отдельные команды в ветке "Команды", у каждой из них может быть свой модуль команды, где описывается действие при нажатии на кнопку.

Разберем типичную ситуацию: если глобальный поиск по конфигурации не дает результатов, скорее всего, код формируется динамически или используется поиск по строке внутри модулей конкретного внешнего файла. Попробуем использовать сочетание клавиш Ctrl + Shift + F, выбрав в области поиска "Во всех открытых документах" или предварительно открыв все модули обработки.

Отладка ошибки запроса: что значит "Строка 1770"

Часто при запуске универсальных журналов или отчетов возникает ошибка синтаксиса запроса с указанием конкретной строки (например, 1770). Важно понимать: это не строка в вашем программном коде в конфигураторе. Это номер строки в финальном текстовом блоке, который был сформирован программой и передан на выполнение SQL-серверу или локальному движку БД.

Выясним причину появления такой ошибки на примере проблемы с документом "Отчет оператора системы Платон". Проблема заключается в том, что разработчики часто используют в запросах автоматическую подстановку синонимов метаданных:


ТекстЗапроса = "ВЫБРАТЬ Ссылка КАК Документ, """ + МетаданныеДокумента.Синоним + """ КАК ТипДокумента ИЗ ...";

Если в синониме документа содержатся кавычки (как в случае с Платоном), итоговая строка запроса "ломается", так как лишняя кавычка интерпретируется как преждевременное окончание строки. Чтобы найти точное место, выполним следующие шаги:

  1. Включим в конфигураторе режим "Остановка по ошибке" (Меню Отладка -> Настройка строки отладки -> Останавливаться по ошибке).
  2. Запустим выполнение и дождемся момента возникновения исключения.
  3. В окне "Вычислить выражение" (Shift + F9) проанализируем переменную, содержащую текст запроса (обычно это свойство Запрос.Текст).
  4. Скопируем содержимое в текстовый редактор с нумерацией строк, чтобы найти ту самую строку 1770.

Для исправления подобных ошибок рекомендуется использовать функцию СтрЗаменить, чтобы экранировать кавычки или вовсе удалять их из текста запроса:


ОчищенныйСиноним = СтрЗаменить(МетаданныеДокумента.Синоним, """", "");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяТипа", ОчищенныйСиноним);

Размещение элементов на управляемой форме

Рассмотрим ситуацию, когда требуется разместить поле ввода (например, период или дату) в верхней части формы, где обычно находится командная панель. В 1С 8.3 "Управляемые формы" накладывают жесткие ограничения: в стандартную Командную панель нельзя напрямую добавить поле ввода — она предназначена только для кнопок.

Посмотрим на пример обхода этого ограничения:

  1. Создадим новую группу на форме с видом Обычная группа.
  2. Установим свойство этой группы "Группировка" в значение Горизонтальная всегда.
  3. Перенесем в эту группу как нужные нам кнопки, так и поля ввода (например, поле выбора периода).
  4. Для того чтобы визуально группа не отличалась от командной панели, установим свойство "Отображение" в значение Нет (убираем заголовок и рамку).

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

Как внести изменения в типовую конфигурацию (если это необходимо)

Иногда ошибка кроется не во внешней обработке, а в самих метаданных конфигурации (например, нужно убрать кавычки из синонима документа, чтобы не переписывать десятки запросов). По умолчанию типовые конфигурации (БП 3.0, УНФ) стоят на поддержке ("на замочке").

Важно: Не спешите снимать конфигурацию с поддержки полностью. Рассмотрим более современный и безопасный метод — Расширения.

  1. Создайте новое Расширение конфигурации.
  2. Добавьте в расширение нужный объект (документ).
  3. Измените синоним или добавьте процедуру-исправление в расширении.

Это позволит сохранить основную конфигурацию на замке, что значительно упростит последующие обновления программы через интернет или обновлятором. Если же вы решили пойти по пути изменения основной конфигурации, путь лежит через меню "Конфигурация" -> "Поддержка" -> "Настройка поддержки" -> "Включить возможность изменений". Но помните, что это крайняя мера, часто свидетельствующая о "тяп-ляп" подходе к разработке.

Изучение 1С 8.3 после 7.7 требует времени на понимание объектной модели и работы с управляемым интерфейсом. Главное — активно использовать отладчик и не пытаться решать задачи "в лоб" методами старых платформ.

← На главную