1С стек вызовов программно

Большинство программистов 1С знакомы как минимум с двумя методиками отладки: точки останова и узнать значение. Отладка очень полезна и эти две функции позволяют ей пользоваться на 90%.

Одна из проблем отладки – легкая возможность заблудиться. Множество общих модулей, подписки на событие, рекурсия и прочее. Кто с этим не сталкивался – попробуйте отладить типовую обработку «ОбменДаннымиXML». Очень веселое занятие.

Как найти себя в этой массе кода?

Инструкция по поиску себя

1. Установить точку останова в нужном месте.

2. Если Вы уже это сделали и успешно прошагали неизвестное количество вызова функций и заблудились – то нужно остановиться и отдышаться.

3. В меню конфигуратора «Отладка / Стек вызовов» открыть окно стека.

4. В окне изображена последовательность «попадания» в то место, где сейчас мы находимся. Функции вызывались снизу вверх.

На указанном примере, сначала была вызвана функция «Обработка проведения», в которой вызвали «ПроверитьЗаполнениеШапки», а из которой вызвали ту функцию где мы сейчас.

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

v8: Хитрости отладки

Некоторые утонченные приемы отладки кода в 1С 8.0 Автор статьи: Гений 1С | Редакторы: Волшебник, Neco
Последняя редакция №20 от 16.07.07

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

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

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

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

Функция ДУ

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

Примеры:
= Сообщает некий текст

= Присваивает переменной Отказ значение истина

= В отладчике нельзя вызвать процедуру, но можно это сделать через ДУ:

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

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

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

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

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

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

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

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

Нужно открыть окно стека (Ctrl+F3), перейти на нужны уровень и ввести в табло имя переменной.
Лучше всего это рассмотреть на примере рекурсивной функции:

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

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

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

Но не все так плохо.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Трассировка

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

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

На указанной строке ставим точку останова с условием:

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

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

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

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

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

Предположим у нас есть такой код:

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

Т.е. если А=1 то мы присваиваем А значение 2, и присваиваем 1 в противоположном случае.
Это позволяет, не меняя конфигурацию, постоянно перенаправлять код на нужную нам ветку.
Можно просто поставить условную точку останова, которая будет присваивать А нужное значение:

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

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

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

Если трассировка временно не нужна, ее нужно убрать так:

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

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

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

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

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

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

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

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

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

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

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

Или, используя панель «Отладка конфигурации»

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

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

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

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

Обычно, разработчики запускают отладку кода в конфигураторе 1С, используя кнопку «Начать отладку».

Этот метод очень удобен, и, конечно же, имеет право на жизнь. Но очень часто могут возникать следующие ситуации:

  • 1С: Предприятие уже запущенно и в нем выполняется какой-то процесс, остановить Вы его не можете
  • Нужно отладить работу программы под пользователем, у которого нет прав на работу с конфигуратором

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

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

Чтобы начать отлаживать нужный тип подключения, достаточно выделить соответствующую строку и нажать на кнопку «Подключить» (дважды кликнуть левой кнопкой мышки).

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

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

Подробно о клиентском и серверном контексте формы читайте в моей книге: Основы разработки в 1С: Такси. Разработка управляемого приложения за 12 шагов

Обычно, нельзя подключиться к пользовательскому сеансу. Чтобы это стало возможным, необходимо в параметрах пользовательского приложения 1С включить возможность отладки. Установить в параметр «Откладка в текущем сеансе» значение «Разрешена (протокол TCP/IP)» , когда отлаживаем работу по локальной сети.

В этом случае отладка будет включена единовременно. Если мы хотим, чтобы под этим пользователем всегда была включена отладка, то нужно в параметр «Отладка при перезапуске» установить значение «Разрешена (протокол TCP/IP)»

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

При установке точки останова с условием, в условие необходимо указать какое-либо булево выражение.

Можно задать различные комбинации условий

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

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

Или с помощью комбинации клавиш Alt + F9

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

У формы списка точек останова есть очень интересные возможности сохранения и последующей загрузки сохраненных точек останова, которые осуществляются при помощи кнопок «Сохранить» и «Открыть файл»

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

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

Включить остановку по ошибке достаточно просто: Главное меню – Отладка- Остановка по ошибке.

В открывшемся окне нужно установить флаг «Остановка по ошибке» и нажать на кнопку «Ок».

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

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

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

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

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

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

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

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

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

Подсистема «Инструменты разработчика» (Старых Сергей, 1С 8.2, 8.3)

2020-03-29T12:35:49+00:00

Автор

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

Описание

Инструменты разработчика — это замечательная коллекция чудо обработок, объединённых в одну подсистему:

Это и:

  • Удаление объектов с контролем ссылок;
  • Поиск битых ссылок;
  • Поиск ссылок на объект;
  • Подбор и обработка объектов;
  • Поиск дублей и замена ссылок;
  • Редактор пользователей;
  • Консоль кода;
  • Консоль запросов;
  • Структура хранения БД;
  • Анализ технологического журнала;
  • Редактор параметров сеанса;
  • Редактор хранилищ настроек;
  • Анализ журнала регистрации;
  • И множество других инструментов.

Все эти обработки написал и уже много лет поддерживает настоящий профессионал своего дела Сергей Старых.

Как начать работать с инструментами

Инструменты разработчика поддерживаются Сергеем в двух вариантах: основной и портативный.

Основной вариант:

  • Требуется встраивать в конфигурацию базы.
  • Даёт больше возможностей.

Портативный вариант:

  • Не требует изменения конфигурации и открывается как внешняя обработка.
  • Даёт меньше возможностей.

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

Скачиваем архив инструментов

Внимание! Если есть возможность — качаем прямо с сайта Сергея, вот .

И только, если его сайт не работает — вот зеркало инструментов на моём сайте:
Инструменты разработчика 5.25 (Старых Сергей, 1С 8.2, 8.3)

Распаковываем архив

Распаковываем скачанный архив, например, в папку «Инструменты разработчика» на рабочем столе:

Открывать из своей базы нужно именно обработку «ирПортативный.epf». Это меню инструментов и уже через него мы будем открывать все остальные обработки:

Запускаем инструменты

Через меню Файл->Открыть запустите обработку «ирПортативный.epf» (подробнее здесь Я скачал обработку, как мне её открыть в 1C?):

Готово:

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

Возможные проблемы

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

Для использования инструментов в такой базе — запускайте её с ключом /RunModeOrdinaryApplication, который запускает толстый клиент в обычном режиме, несмотря на настройки конфигурации и пользователя.

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

  • Выделив базу и нажав Ctrl + F3
  • В открывшемся меню нажав кнопку Толстый клиент (ОФ)

Как обновлять инструменты

Чтобы обновить портативные инструменты — нажмите на значок помощи на их панели:

В открывшемся окне воспользуйтесь кнопкой «Обновить на актуальную версию»:

Где можно посмотреть обучающие ролики

У Сергея есть свой канал на youtube с обучающими роликами по инструментам разработчика:

Благодарность

Хочу сказать громаднейшее спасибо Сергею за то, что он разрешил поделиться инструментами с аудиторией helpme1c.ru!

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Подписывайтесь и получайте новые статьи и обработки на почту (не чаще 1 раза в неделю).
Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.

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

Нажмите одну из кнопок, чтобы поделиться: