Контакты

Что такое отладчик в 1с. Встроенный язык

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

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

Или используя контекстное меню

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

Обращаю Ваше внимание, что точку останова необходимо устанавливать на том месте кода, где написан какой-нибудь оператор. Либо объявлены неявно переменные.

Есть несколько вариантов, рассмотрим их все по отдельности.

Первый вариант, можно просто идти по коду, не заходя ни в какие процедуры и функции. Для этого используем кнопку «Шагнуть через» или клавишу F10.

Имейте в виду, что если отладка передает управление какой-нибудь интерактивной функции, где требуется вмешательство пользователя, то либо сразу Вас программа перекинет на 1С Предприятие, либо отладка зависнет, и тогда в 1С Предприятие придется перейти самостоятельно.

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

Если нам необходимо выйти из какой-то процедуры или функции, не дожидаясь её выполнения, то необходимо нажать кнопку «Шагнуть из» или держа клавишу Shift нажать клавишу F11.

Если нам необходимо перепрыгнуть через определенное место программы, и начать отладку уже с новой строки, то сделать это можно двумя способами. Первый способ: установить новую точку останова и нажать кнопку «Продолжить отладку» или клавишу F5. Тогда программа сразу перейдет на нужную строку кода.

Второй способ: установить курсор на нужную и нажать на кнопку «Идти до курсора», либо держа клавишу Shift нажать клавишу F10.

Если работая с кодом Вы заблудились в нём и хотите быстро вернуться к текущей строке отладки, то достаточно нажать кнопку «Текущая строка»

Как двигаться по коду в отладке мы узнали. Теперь самое главное, как узнать значения переменных? В этом нам поможет табло .

Открыть его можно несколькими способами.

Первый: используя главное меню.

Второй: используя панель «Отладка конфигурации».

Третий: используя комбинацию клавиш Ctrl + Alt + W.

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

Кроме переменных примитивных типов у Вас есть возможность вносить в выражение переменные объектных типов, и посмотреть их состав этой переменной (если Вы не отлаживаете выполнение кода на в ).

В табло можно вносить и функции (как собственные, так и глобального контекста), чтобы узнать, что они будут возвращать.

Узнать значение переменной можно и без использования табло. Достаточно выделить эту переменную и нажать на кнопку «Вычислить выражение» (комбинация клавиш Shift + F9).

Посмотрите наглядную работу с отладкой в этом видео.

Изучайте основы конфигурирования в 1С и учитесь программировать в «1С: Предприятии» с помощью моих книг:

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

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu


Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы.

Отладка - это неотъемлемая этап разработки прикладного решения. Умение эффективно использовать имеющиеся инструменты существенно снижает временные затраты на разработку и повышает ее качество. В этой статье я попробую рассказать о том, какие инструменты для отладки предоставляет нам система «1С:Предприятие».

Кроме этого отмечу, что эта статья входит в небольшую серию статей об отладке в 1С:

  • Инструменты отладки в 1С

Имеющиеся в наличии инструменты отладки собраны в меню - «Отладка» можно вызвать соответствующими горячими клавишами или из меню «Отладка».

Меню «Отладка»

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

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


Работе с точками останова посвящена секция меню «Отладка»:

  • Точка останова (F9) - устанавливает/удаляет точку останова в строке на которой стоит курсор;
  • Точка останова с условием - устанавливает точку останова и открывает окно для ввода условия - логического выражения, повторное использование команды в этой же строке откроет окно для редактирования условия. Останов в указанной точке будет выполнен только если условие истинно;
  • Включить/отключить точку останова (Ctrl+Shift+F9) - включает/отключает точку останова;
  • Удалить все точки останова - удаляет все точки останова во всех модулях;
  • Отключить все точки останова - отключает все точки останова во всех модулях;
  • Список точек останова (Alt+F9) - открывает окно для просмотра и управления точками останова, о нем ниже.

Кроме этого пункт меню «Отладка» - «Остановка по ошибке…» также можно отнести к работе с точками останова, так как эта команда позволяет останавливать выполнение кода при возникновении ошибки и переходит к строке которая вызвала ошибку.

Команда «Список точек останова» (Alt+F9) открывает окно для просмотра и управления точками останова:


Окно «Точки останова»

В окне показаны все точки останова во всех модулях, их расположение (модуль и номер строки) и условие (если есть). Имеется возможность включить/отключить/удалить точки останова, перейти к месту установки точек останова, сохранить и загрузить список точек останова.

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

После того как сработает какая-либо точка останова и управление перейдет к отладчику обычно следует пошаговое выполнение кода модуля. Для пошагового выполнения в меню «Отладка» (и на панели отладки) имеется соответствующая группа команд - они появляются в момент подключения первого из предметов отладки.

В режиме пошаговой отладки исполнение кода приостанавливается после каждой команды и ждет инструкций от отладчика. А инструкции бывают следующими:

  • Шагнуть в (F11) - если следующая команда это процедура/функция, то начинается пошаговая отладка этой функции, иначе отладчик просто переходит к следующей команде;
  • Шагнуть через (F10) - если следующая команда это процедура/функция, то она полностью выполняется (не пошагово) и отладчик переходит к следующей команде;
  • Шагнуть из (Shift+F11) - прерывает пошаговое выполнение процедуры/функции и останавливается на первом операторе после выхода из нее;
  • Идти до курсора (Shift+F10) - выполняются все операторы до строки на которой стоит курсор;
  • Текущая строка - перемещает курсор в ту строку, на которой остановился отладчик;
  • Продолжить отладку (F5) - прерывает пошаговую отладку и продолжает свободное исполнение модуля.

Управление отладкой осуществляется при помощи соответствующих команд меню «Отладка»:

  • Перезапустить (Ctrl+Shift+F5) - прекращает выполнение конфигурации и производить повторyый запуск в режиме «1С:Предприятия»;
  • Завершить (Shift+F5) - прекращает выполнение модуля и завершает работу текущего предмета отладки;
  • Остановить - останавливает выполнение модуля на текущем операторе и позволяет начать отладку со следующей исполняемой строки.
  • Остановка по ошибке - открывает окно настройки остановки по ошибке:

Окно «Выражение» (Shift+F9)


Окно «Выражение»

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

Табло (Ctrl+Clt+W)


Специальное окно, которое состоит из четырех страниц (переключение из контекстного меню) и отображает результаты вычисления переменных, арифметических выражений и выражений с использованием встроенного языка.

Окно «Локальные переменные»


Окно «Локальные переменные»

Специальное окно, которое во время отладки показывает список локальных переменных текущего метода. Редактировать таблицу переменных нельзя.


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

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

После нажатия кнопки «Установить» в нижней части появится сообщение, которое проинформирует нас - удалось изменить значение переменной или нет.

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


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

Замер производительности

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

Полученная информация позволяет, например, выбрать наиболее оптимальный (по быстродействию) вариант решения какой-либо задачи или отыскать «узкие», в плане быстродействия, места конфигурации. При этом нужно учитывать, что какие-либо сравнения скорости выполнения нужно проводить в одинаковых условиях.

Включить режим замера производительности можно соответствующей командой из меню «Отладка»:

Команда «Замер производительности»

Включить режим замера производительности можно как до запуска отладки, так и во время. Повторный использование команды прекратит замер и выведет окно с результатами. Включение и выключение замера производительности действует на все подключенные ко отладчику предметы отладки.

Результаты замера

Результаты замера производительности отображаются в виде таблицы со следующими столбцами:

  • Модуль - название модуля;
  • Номер строки - номер строки;
  • Строка - участок кода;
  • Кол. - количество вызовов данного участка кода за все время замера;
  • Врем. - суммарное время выполнения (в секундах) данного участка кода за все время замера;
  • %(Врем.) - процент суммарного времени выполнения данного участка кода к общему времени замера (общее время замера - это суммарное время выполнения кода конфигурации);
  • Клиент - отметка участков кода выполняющихся на клиенте;
  • Сервер - отметка участков кода выполняющихся на сервере;
  • Обр. сервер - отметка участков кода в которых происходит вызов сервера.

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


Если в строке вызывается процедура/функция то система может показывать время выполнения строки как с учетом времени выполнения вызываемой процедуры/функции и без учета этого времени. Флажок «Для вызова процедур и функций включать время выполнения» служит для выбора способа подсчета времени выполнения строки.

Это очередная статья из цикла «Первые шаги в разработке на 1С». Она продолжает тему предыдущей статьи, посвященной особенностям работы в конфигураторе.

В этом материале мы рассмотрим специальный инструмент, облегчающий разработку и отладку программного кода на платформе «1С:Предприятие», который получил название Отладчик. Изучив статью, вы узнаете:

  • Для чего нужен отладчик и как им пользоваться?
  • Что такое точки останова, как и зачем их ставить?
  • Как пошагово выполнять программный код и зачем это нужно?
  • Где смотреть значения своих переменных, а также вычислять значения выражений?
  • Для чего нужен стек вызова и как его посмотреть?
  • Как остановить выполнение программного кода по ошибке?

Применимость

В статье рассматривается платформа 1C версии 8.3.4.365. Текущая актуальная версия платформы содержит более богатые механизмы отладки, однако это не делает представленную информацию устаревшей, т.к. все описанные в статье механизмы и приемы отладки остались прежними.

Использование отладчика в системе «1С:Предприятие 8»

Система “1С:Предприятие 8” содержит встроенный отладчик программного кода.

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

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

Точка останова – место остановки работы системы в программном коде, отмеченное специальным маркером (Рис. 1).

Рис. 1. Точка останова

При срабатывании точки останова становится возможным пошаговое выполнение программного кода и анализ значений переменных.

Установка точек останова

Установка точки останова на определенной строке программного кода осуществляется двойным щелчком левой кнопки мыши в левой области программного модуля, которая выделена серым цветом.

Также возможна установка точки останова командой на панели инструментов конфигуратора или кнопкой F9 . Снятие существующей точки останова производится аналогичным образом.

Для установки точки останова на конец процедуры или функции необходимо устанавливать точку останова на ключевом слове КонецПроцедуры или КонецФункции .

Точку останова можно временно отключить, не удаляя ее из программного кода. Для выключения точки останова выполнить команду Отключить точку останова на панели инструментов или нажать сочетание клавиш Ctrl+Shift+F9 .

Для просмотра всех точек останова нужно выполнить команду главного меню Отладка – Список точек останова или нажать сочетание клавиш Alt+F9 . В открывшей форме Точки останова можно временно отключать или удалять точки останова (Рис. 2).

Рис. 2. Список точек останова

Для удаления всех точек останова нужно выполнить команду главного меню конфигуратора Отладка – Убрать все точки останова .

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

Точка останова с условием необходима для остановки выполнения программного кода при срабатывании определенного условия.

Для установки точки останова с условием нужно выполнить команду главного меню конфигуратора Отладка – Точка остановка с условием . Откроется форма Условие останова. В поле ввода нужно ввести необходимое условие (например, значение какой-либо переменной в программном коде) и нажать кнопку ОК (Рис. 3).

После запуска системы в режиме отладки точка останова сработает, когда будет выполнено условие останова. Убедиться в этом можно с помощью формы Табло (Рис. 3). Работа с формой Табло будет рассмотрена ниже.

Рис. 3. Установка точки останова с условием и результат ее обработки

Для того чтобы начать отлаживать программный код необходимо установить точки останова и запустить приложение в режиме отладки. Для запуска отладки нужно выполнить команду главного меню конфигуратора Отладка – Начать отладку (F5).

После запуска приложения в отладочном режиме необходимо обеспечить срабатывание точки останова. Здесь возможны разные сценарии. Например, точка останова установлена в модуле формы документа в стандартном обработчике события ПриОткрытии () . В этом случае точка останова сработает в момент открытия формы любого документа в пользовательском режиме.

Точка останова может быть установлена в произвольной процедуре или функции, которую создал разработчик. В этом случае точка останова сработает после вызова этой процедуры или функции из определенной строки программного кода.

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

Пошаговое выполнение программного кода

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

Шагнуть в (F11) . Если следующий оператор программного кода выполняет вызов проце-дуры или функции, то осуществляется ее пошаговое выполнение, иначе – выполняется следующий оператор.

Шагнуть через (F10) . Если следующий оператор программного кода выполняет вызов процедуры или функции, то осуществляется ее выполнение полностью без входа внутрь. Затем выполняется следующий оператор.

Идти до курсора (Shift+F10) . Осуществляется выполнение операторов от текущей выпол-няемой строки до строки программного кода, где расположен курсор.

Использование форм Табло и Выражение

Для просмотра значений переменных и вычисления значений выражений во время оста-новки программного кода предназначены формы Табло и Выражение .

Форма Табло вызывается командой главного меню конфигуратора Отладка – Табло или сочетанием клавиш Ctrl+Alt+W . В табло можно записать значения каких-либо переменных и анализировать, как они изменяются в процессе выполнения программного кода.

У табло доступны четыре закладки. По умолчанию закладки выключены. Для включения закладок в форме Табло нужно вызвать контекстное меню и установить флаг Закладки (Рис. 4).

Рис. 4. Форма “Табло” с включенными закладками

Для вычисления значений выражений в момент остановки программного кода используется форма Выражение . Для открытия этой формы используется команда главного меню конфигуратора Отладка – Вычислить выражение или сочетание клавиш Shift+F9 (Рис. 5).

Рис. 5. Форма “Выражение”

В поле Выражение вводится выражение на встроенном языке. Значение выражения можно получить нажав кнопку Рассчитать . В поле Результат выводится значение выражения. Выражение можно отобразить в табло нажав кнопку Включить в табло .

Для просмотра значений коллекции (например, таблицы значений, списка значений, массива) можно использовать команду Показать значение в отдельном окне или клавишу F2 .

Просмотр стека вызовов

Стек вызовов – форма, которая позволяет отслеживать взаимные вызовы процедур и функций в процессе исполнения программного кода. Стек вызовов отображается командой главного меню конфигуратора Отладка – Стек вызовов или сочетанием клавиш Ctrl+Alt+C . Из формы Стек вызовов можно перейти к соответствующей процедуре или функции (Рис. 6).

В форме нужно установить флаг Остановка по ошибке и запустить приложение в режиме отладки. Выполнение программного кода будет остановлено на строке, в которой возникла ошибка (Рис. 7).

Используя возможности отладчика, описанные в этой статье, разработчик может анализировать как собственный программный код, так и программный код типовых решений фирмы “1С”.

Как показывает практика без отладчика поиск ошибок в программном кода занимает длительное время. Поэтому освоению отладчика нужно уделить особое внимание.

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

В заключение отметим, что конфигуратор – это полноценная и до недавнего времени единственная среда разработки приложений на платформе «1С:Предприятие 8». Он обладает очень богатым функционалом, призванным помочь разработчику в решении его ежедневных задач.

В редакции 8.3 в конфигураторе добавилось много мелких полезностей для разработчика. И в следующей статье мы с ними обязательно познакомимся.

8 назрела необходимость (о чём ниже) в значительной переработке процедуры отладки. Это отразилось в версии 8.3.7.1759. Во-первых, был создан для этой процедуры универсальный интерфейс, а во-вторых, таким изменением обеспечивается дальнейшее развитие самой программы. Ведь теперь с отладкой можно работать не только через Конфигуратор, но и с помощью Development Tools. Рассмотрим, как включить отладку на сервере 1С начиная с новой версии.

Использование нового протокола

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

В настоящее время использование такого протокола стало ограничивать выход программы 1С:Предприятие в интернет и порождало неудобства для работы мобильных приложений.

Поэтому для свободного доступа к информационным базам, которые могут находиться за пределами локальной сетки, теперь принят к использованию гибкий протокол HTTP.

Новая архитектура

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

В новой версии в прямом соединении с базами нет необходимости - достаточно просто обладать такой же базой, как у клиента. А загрузить её можно из файла.

Мобильные приложения

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

Другие изменения

С новой версией в отладочной процедуре доступно изменение значений для локальных переменных, - для этой цели реализовано новое окно быстрого просмотра.

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

Отладчик в Development Tools

Взаимодействие с новой процедурой выполнено в специально разработанном универсальном программном интерфейсе. С одной стороны, этот интерфейс используется Конфигуратором. С другой стороны - он внедрён в новую среду 1C:Enterprise Development Tools.

Как это выглядит теперь

После изменения программы процедура происходит по следующему сценарию:

Теперь в ней участвуют не только отладчик и предметы, как это было ранее. Теперь в цепочку введён дополнительный элемент - Server.

Мало того, что он добавлен - он служит основным элементом обмена информацией между отладчиком и предметами. А сам обмен происходит посредством выстраиваемых в очередь сообщений.

А поскольку обмен этот проводится через протокол HTTP, то теперь не имеет значения, где именно могут быть расположены данные.

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

Включение отладки при разных сценариях

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

Рассмотрим, что же происходит при запуске режима если мы выбираем один из двух сценариев.

Файловый сценарий

В начале файлового варианта необходимо в конфигураторных настройках указать использование нового механизма - «Отладка по протоколу HTTP».

Тогда со стороны Конфигуратора будет автоматически предложено использовать локальный сервер. Это условие нужно принять и заново запустить программу в режиме Конфигуратора.

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

Включённый механизм теперь автоматически будет запускать Сервер отладчика, который представляет собой специальное приложение dbgs.exe. Отражается оно в окне Диспетчера задач.

Значение параметра ownerPID будет соответствовать идентификатору приложения, которое привязано к нему.

При запуске отладочного сеанса через Конфигуратор - серверное подключение произойдёт автоматически. А в нём отразятся подключённые предметы.

Если же программа 1С была активирована без нового механизма, то включить отладку на сервере 1С нужно будет вручную. Только теперь нужно будет указывать серверный адрес:

Заходим в Сервис — Параметры

Он находится в настройках предметов:

Заходим Подключение — Настройка

При использовании файлового сценария с несколькими базами одновременно нужно учесть важный нюанс, - каждый из Конфигураторов (с включённым механизмом по HTTP) отправляет свой Сервер:

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

Клиент-серверный сценарий

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

ragent.exe -debug -http

При его запуске автоматически стартует за ним и отладчик.

Значение параметра ownerPID будет соответствовать идентификационному номеру менеджера кластера 1С.

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

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

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


Ключевые слова: отладчик, отладка, управление, точка останова, пошаговое выполнение

Те, кто хоть раз работал с отладчиком VBA, мечтают о том, чтобы и в 1С можно было изменять значения переменных и переходить на любую точку кода.

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

Применение этих функций основано на том, что в табло отладчика в режиме Конфигуратора или 1С:Предприятия можно вызывать доступные в контексте точки останова функции. Примеры нужно вводить в табло Ctrl+Alt+W или в окно просмотра значения выражения Shift+F9 и сразу же получать результат.

Функция ДУ

Эта функция позволяет в любой момент выполнить любой код на языке 1С над любыми данными, переданными ей.

Функция Ду(Код, П=Неопределено, П1 =Неопределено, П2 =Неопределено, П3 =Неопределено, П4 =Неопределено) Экспорт Перем Р; Выполнить(Код); Возврат Р; КонецФункции

Примеры:
= Сообщает некий текст
Ду("Сообщить(1) ")
= Присваивает переменной Отказ значение истина
Ду("П=истина ", Отказ)
= Закрывает форму
Ду("П.Закрыть() ", ЭтаФорма)
= В отладчике нельзя вызвать процедуру, но можно это сделать через ДУ:
Ду("ЗавершитьРаботуСистемы() ");

Функция Присвоить

Всем известно, что в 1С80 нельзя по хоту отладки менять значения переменных.
Однако есть выход!
В общем модуле объявите функцию:

Функция Присвоить(А,Б) Экспорт А=Б; Возврат А; КонецФункции

Теперь вы можете в любой момент присвоить значение переменной.

Примеры:
Присвоить(флПродолжать, ложь ); Присвоить(Остаток, ОстатокНаСкладе()-11 );

Отладка в типовой конфигурации

А что же делать, если вам досталась отладка конфигурации, в которой нет этих замечательных функций?

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

ВнешниеОбработки.Создать("C:\debug.epf ").Присвоить(А, Неопределено);

Манипуляции со стеком.

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

Нужно открыть окно стека (Ctrl+F3), перейти на нужны уровень и ввести в табло имя переменной.
Лучше всего это рассмотреть на примере рекурсивной функции:
Функция Тест(А) Если А>10 Тогда Возврат ложь ; Иначе Возврат Тест(А+1 ); КонецЕсли; КонецФункции

Поставьте в этой функцию точку останова и вы увидите что на разных уровнях стека переменная А принимает разные значения.

Прерывание работы программы

К сожалению, в 1С 80 можно прекратить работу некоторого кода только прекратив работу всего 1С:Предприятия. Так сказать, для борьбы с головной болью нужно отрубить голову. :)
Но не все так плохо.

С помощью функции Присвоить вы можете присвоить какому-нибудь критическому объекту программы значение Неопределено или ноль и как только программа попробует получить реквизит или метод этого объекта возникнет ошибка и работа кода прекратится.
Например вы находитесь в точке:

А=1 ; Если Спр.Код>А Тогда Возврат Неопределено; КонецЕсли;

Используйте вызов:
Присвоить(Спр,0 );

Теперь, как только выполнение кода дойдет до строки с "Если", возникнет ошибка и выполнение прекратится.

Упреждающий просмотр

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

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

Изменение кода на лету

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

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

Маялись мы маялись, а потом придумали - все вызовы Выполнить были вынесены в одну функцию, куда передавался код для выполнения и параметры. Это нам и сослужило хорошую службу.

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

Отладка на сервере

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

Условная точка останова

Не все знают, что в 1С 80 есть условная точка останова - точка останова по условию. Однако это очень полезный механизм.

Трассировка

Иногда возникает необходимость в трассировке кода программы - т.е. в выдаче в окошко сообщений значений переменных на каждом проходе через точку кода.

Для этих целей в 1С можно использовать условную точку останова, т.к. условие проверяется на каждом проходе кода через условную точку останова.

Рассмотрим код:
С=0 ; Для Инд=1 по 10 Цикл С=С+Инд; КонецЦикла; //Здесь ставим условную точку останова

На указанной строке ставим точку останова с условием:
ДУ("Сообщить(""Сумма:""+П) ", С)

Теперь при отладке программы в окошке сообщения трассируется выполнение кода:

Сумма:1
Сумма:3
Сумма:6
Сумма:10
Сумма:15
Сумма:21
Сумма:28
Сумма:36
Сумма:45
Сумма:55

Естественно, можно использовать условия и выводить не все сообщения, а только при интересующих нас значениях переменных:
ДУ("Если Сумма>10 Тогда Сообщить(""Сумма:""+П) КонецЕсли ", С)

Метод удобен тем, что не нужно вносить изменения в конфигурацию.
Удобно ловить ошибки, когда 1С "вылетает", если записывать сообщения в файл.

Управление кодом

Предположим у нас есть такой код:
Если А=0 Тогда ИначеЕсли А=1 Тогда ИначеЕсли А=2 Тогда КонецЕсли;
В таком случае мы можем применять программное управление кодом.
На начале оператора Если ставим условную точку останова:
?(А=1 , Присвоить(А,2 ), Присвоить(А, 1 ))
Т.е. если А=1 то мы присваиваем А значение 2, и присваиваем 1 в противоположном случае.
Это позволяет, не меняя конфигурацию, постоянно перенаправлять код на нужную нам ветку.
Можно просто поставить условную точку останова, которая будет присваивать А нужное значение:
Присвоить(А,2 )

Обозримая трассировка

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

Предлагаю оформлять такие вызовы так, чтобы перед вызовом сообщения стояла точка с запятой:
;Сообщить("Сумма= "+Сумма);

Если трассировка временно не нужна, ее нужно убрать так:
//;Сообщить("Сумма="+Сумма);

Тогда все активные трассировки можно найти по строке ";Сообщить", а все неактивные - по строке "//;Сообщить".

Интерфейс для отладки

Честно говоря, когда мне надоело постоянно после перезапуска 1С заходить через Операции-Документы в список нужных мне документов, я создал себе интерфейс "Отладчик" и в его меню воткнул нужные мне команды. Теперь после перезапуска я оказывался в нужном мне журнале/форме с одного клика.

Другой вариант - создать себе целый отладочный десктоп - т.е. сразу открыть все нужные формы и документы. Для этого лучше всего создать внешнюю обработку, назвать ее например "Открывалка" и в форме этой обработки написать, что нужно открывать:
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка) Документы.ПриходнаяНакладная.ПолучитьФормуСписка().Открыть(); Отказ=истина ; КонецПроцедуры
Теперь достаточно открыть эту внешнюю обработку и десктоп настроится. В следующий раз эта обработка уже будет в списке недавно открытых файлов.

Более простой вариант для ленивых - в табло написать вычисление выражений (например с помощью ДУ), которые откроют нужные документы и журналы. Легко и быстро!

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

Отладка клиент-серверной базы

Известно, что код на сервере не отлаживается.
Поэтому варианты отладки:
1. Трассировка (вставка диагностических сообщений).
2. Выгрузить базу в файловую копию и там отлаживать.
3. Поставить галочку "Клиент" на интересующем вас модуле и отлаживать. Потом вернуть галочку обратно.
Примечание: В 1С v 8.1 появилась возможность отлаживать код на сервере. Для этого сервер нужно запустить в режиме отладки, можно из командной строки: ragent.exe /debug

Использование внешней обработки

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

Подсовывание тестовых данных

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

Отладка блокировок

Иногда нужно посмотреть, как ведут себя два параллельных процесса.
Простейший способ отладки таких ситуаций - вставить в коде вызов процедуры Предупреждение().
Например, в событии ПриЗаписи объекта вставляем вызов Предупреждение("Идет запись объекта!!!").
Тогда если открыть другую сессию и попытаться записать объект, выдастся предупреждение, что объект заблокирован.

Если такая отладка вызывается часто, рекомендую такой способ вызова сразу двух сессий 1С.
Из отладчика нажимаете F5 (Запустить отладку), запускается 1С:Предприятие. Отключаетесь от отладки этого 1С Предприятия - "Отладка"->"Отключиться", затем еще раз нажимаете Ф5. В итоге вторая сессия у вас подключена к отладчику. Запускаете код с предупреждением в первой сессии и отлаживаетесь во второй.

Ускорение отладки

Отладчик снижает скорость работы программы.
Поэтому можно поступить так - отключить отладчик, а в нужном месте вывести Предупреждение();
Когда выведется предупреждение, можно опять подключить отладчик, поставить точку останова и начать отладку.

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

Иногда сложно найти, в какую процедуру заходит программа по нажатию кнопки. В таком случае выбирайте команду отладчика "Остановить" и нажимайте кнопку. Программа остановится на первой же строке кода. У метода есть недостаток - если подключен обработчик ожидания, то программа может остановиться на нем, а не на коде кнопки, если код обработчика ожидания сработает раньше. ;-)
Понравилась статья? Поделитесь ей