1с как узнать откуда вызвана процедура

Обновлено: 30.06.2024

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

Основные возможности отладки

Точки останова

Отладчик позволяет установить на конкретную строку модуля специальный маркер — точку останова, — при достижении которой исполнение программного модуля останавливается и управление передается отладчику. Точки останова могут быть безусловными или с условием. При достижении безусловной точки останова исполнение программного модуля останавливается в любом случае:

Отладчик

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

Отладчик

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

Отладчик

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

Отладчик

Пошаговое выполнение

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

Отладчик

Просмотр выражений

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

Отладчик

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

Отладчик

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

Табло и локальные переменные

Результаты вычислений, которые требуется просматривать на протяжении выполнения некоторой части модуля, можно вывести в отдельное окно — табло, — в котором есть возможность распределить все просматриваемые выражения по четырем страницам:

Отладчик

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

Изменение значений переменных

Значения примитивных типов можно изменить прямо в ячейке Значение.

Отладчик

В этом окне полностью функционирует контекстная подсказка.

Отладчик

Стек вызовов

Отладчик позволяет использовать стек вызовов, который показывает последовательность вызовов процедур и функций, приведшую к строке модуля, которая отлаживается в данный момент:

Отладчик

Двойным щелчком мыши на имени процедуры в стеке вызова можно перейти в соответствующую строку процедуры.

Остановка по ошибке

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

Отладчик

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

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

Внимание! Если Вы используете клиент-серверный режим работы (на сервере), Вам необходимо включить отладку на сервере 1С Предприятия.

список точек останова

Запуск отладки в 1С

запуск отладки

Отладка фоновых заданий 1С

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

Включение отладки фоновых заданий и внешних соединений

В этом окне Вы можете установить соответствующий флаг.

Установка точки останова (брейкпойнта)

открытие обработчика

Для того чтобы установить точку останова, необходимо найти нужный программный код и кликнуть дважды на поле, слева от поля ввода кода (или нажать кнопку F9):

установка точки остановки

спиоск активных точек останова

Точка останова 1С с условием (синяя)

Например, остановим цикл на строке с номером 25:

точка останова с условием 1с

Неактивная точка останова (серая)

серая точка останова

Точка останова по ошибке

остановка по ошибке

Пошаговое перемещение по программному коду 1С

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

активация отладки

Чтобы перейти с текущего положения курсора к нужному, минуя промежуточные строчки кода, необходимо установить курсор на нужной строке и нажать shift + F10 (Идти до курсора).

Анализ значений в режиме отладки 1С

Посмотреть значения определенных значений можно разными способами:

Отображение значения при наведении курсора

отображение значения переменной курсором

вычисление выражения

Очень полезно использовать вычисление выражения и выполнить запрос, выгрузить в таблицу значений и посмотреть её.

С помощью него Вы можете подробно узнать, откуда была вызвана процедура и с какими параметрами:

стек вызовов

Смотрите также обзорное видео по отладке в 1С:

Другие статьи по 1С:



skype: live:di-sem

@programmist_1C

Советы программистам 1с при работе с конфигуратором

conf

Подсветка текущего идентификатора

1tekId

Позволяет подсвечивать текущий идентификатор выбранным цветом.

Выделяются все идентикаторы у которых такое же имя.

Очень удобно для поиска идентификатора по тексту кода.

Отладка под определенным пользователем

2otladkaPodPolz

Позволяет запускать отладку под определенным пользователем.

Незаменимо когда ошибка появляетося только у определенного пользователя или когда пользователю не хватает прав, но неизвестно каких.

Работа с открытыми окнами в конфигураторе

3okna

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

Выделить их все и закрыть.

Форматирование текста кода

Выделить нужный фрагмент кода и нажать Alt+Shift+F

либо через меню:

4format p2

4format do

4format p

Предположим, вы дорабатываете незнакомую конфигурацию и в каком-то модуле вам попался неотформатированный текст. Вам трудно в нем разобраться и вы хотите улучшить его читаемость, да и вообще сделать более «приличным».
В этом случае вам не нужно вручную двигать строки текста с помощью клавиши Tab, так как это гораздо удобнее и быстрее сделать с помощью форматирования блока текста.
Для этого выделите этот фрагмент текста (или сразу весь модуль – Ctrl + A) и нажмите кнопку Форматировать (Alt + Shift + F) в командной панели Текст.

Вывод списка всех процедур модуля + заготовки предопределенных процедур

5proc

Вернуться в исходное место после команды "Перейти к определению".

Во время анализа кода мы хотим посмотреть что за процедура или функция вызывается. Жмем ПКМ и выбираем перейти к определению и переходим к нужной процедуре/функции.

6perehod1 1

Но после просмотра функции мы хотим вернуться обратно. Для этого жмем "CTRL" + "-":

6perehod2 2

Посмотреть где используется выделенная процедура/функция

6perehod3

Откуда была вызвана процедура/функция? Стек вызовов.

Допустим что в этой процедуре у нас ошибка мы ставим точку останова, но видим что в процедуру уже поступают неверные параметры.

7steck1

Нужно узнать откуда была вызвана данная процедура. Вызываем стек вызовов:

7steck2

Видим все процедуры из которорых мы перешли к текущей:

7steck3

Вырезать часть кода в отдельную процедуру/функцию

Мы хотим часть кода вывести в отдельную процедуру чтобы использовать ее в других процедурах.

Для этого выделим нужную часть, вызовем контекстное меню и сделаем так:

Закладки и перейти к строке.

Бывает что код достаточно большой и нужно "прыгать" от одного места к другому.

Искать место глазами совсем неудобно.

Лучше воспользоваться следующими инструментами.

1 Переход к строке.

Запоминаем номер строки, он написан в правой нижней части экрана

9 0

Жмем в любом месте этого модуля кнопку или сочетание клавиш

9

В нужной строке жмем Alt+F2 либо через меню

9 1

Переход по закладкам горячие клавиши:

F2 - Следующая закладка

Shift+F2 - Предыдущая закладка

Остановить отладчик до наступления ошибки.

Отладчик будет остановлен на строке на которой будет ошибка.

10 1

10 2

10

Проверим что скажет отладчик.

10 3

и остановит процедуру на нужной строке

10 4

Вычислять выражение не меняя код.

В контекстном меню при остановке отладчика есть команда "Вычислить выражение". Shift+F9

11 1

11 2

В поле "Выражение" мы можем написать любой код и тут же получить ответ. Например:

11 3

Контекстная подсказка по параметрам

podskParam

Принудительно вызвать обычную контекстную подсказку: CTRL+Пробел

При изменении объекта метаданных отключить автоматический поиск ссылок на него.

Инструмент безусловно полезный, но нужен он не всегда.

refact 1

Отключается в Сервис-Параметры. Убрать галочки в группе "Рефакторинг при изменениях в метаданных и формах":

С появлением управляемых форм в модулях форм 1С 8.3 стали активно использоваться директивы компиляции в модулях форм и объектов:

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

Архитектура управляемого приложения 1С 8


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

Обратите внимание! Если директива не указана, то по умолчанию она выполняется на сервере.

Особенности компиляции этих директив управляемого приложения

&НаКлиенте

На клиенте есть доступ к следующим объектам:

  • методы глобального контекста, у которых есть доступ на клиент (доступные директивы можно увидеть в синтаксис-помощнике); , которые скомпилированы на сервере;
  • локальный контекст модуля;
  • свойства и методы расширения формы, определяемого основным реквизитом;
  • свойства и методы объекта встроенного языка УправляемаяФорма;
  • реквизиты формы.

&НаСервере

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

&НаСервереБезКонтекста

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

Это процедура выполняется на сервере, вне контекста формы. Т.е. процедура не имеет доступа к реквизитам формы, выполняется на сервере и возвращает желаемый результат. Хорошо подходит для получения статичных данных. Крайне рекомендуется к использованию для оптимизации клиент-серверного взаимодействия.

&НаКлиентеНаСервереБезКонтекста

Используется, когда к процедуре нужно обращаться и с клиента, и с сервера. В остальном аналог &НаСервереБезКонтекста.

Оптимизация клиент-серверного взаимодействия

При разработке функционала необходимо учитывать следующие нехитрые правила:

  • в первую очередь минимизировать количество северных вызовов 1С с клиента;
  • производить все объемные вычисления на сервере;
  • там, где можно, использовать НаСервереБезКонтекста вместо НаСервере.

Читайте также: