Вместо введения
Привет всем!
Более чем уверен, многие из вас уже сталкивались с тем, что современная платформа 1с, запущенная в режиме отладки, иногда попросту игнорирует все "точки останова" при выполнении какой-нибудь процедуры или функции, где они установлены.
Лично у меня, при первом опыте, это вызывало сначала недоумение, потому раздражение, когда один из фундаментальных механизмов 1с предприятия "перестал работать" так как "привыкли". Поэтому, я решил написать небольшую базовую "закрепляющую" статью, которая, надеюсь, снимет у вас вопрос об отладке, сэкономить время ("а почему не срабатывает отладка?"), наконец окончательно позволит разобраться в современном и достаточно простом (классном) функционале "новой" отладки 1с.
При написании статьи, я использовал свой личный опыт, а так же некоторые базовые рекомендации и инструкции для разработчиков с ИТС, которые когда-то сам изучал.
Описывать использование "старого" механизма отладки я буду на демо конфигурации УПП в файловом режиме.
Описывать "новый" механизм отладки я буду также на файловой базе. Исходя из моего опыта, большинство микро- и маленьких компаний имеют мелкие и простые файловые базы, например "Розница 2.2".
Итак, начнем по-пунктам:
Использование старого механизма отладки
Если Вы спросите меня — "зачем нужно уделять внимание описанию старого механизма?", могу на это ответить так — во-первых, чтобы были более видны отличия механизма отладки на обычных формах от механизма отладки на управляемых формах, и во-вторых, на своем жизненном пути я встречал разработчиков "программистов 1с", которые не знают, что такое "режим отладки" платформы 1с и как с ним работать. И, тем не менее, числятся как "инженер-программист".
Пусть этот раздел будет для них, остальные — пропустите.
Итак, допустим, вы имеете "старую" конфигурацию УПП 1.3. Конфигурация работает на обычных формах.
Открываем конфигуратор, заходим в форму документа "Реализация товаров и услуг", ставим точку останова в коде процедуры "КонтрагентОбработкаВыбора" (Рис. 1).
Рис.1. Конфигуратор УПП 1.3 (работа с неуправляемыми формами).
Далее, нажимаем "Начать отладку", запуская предприятие в отладочном режиме. Возвращаемся в конфигуратор, открываем "табло отладчика" (Рис.2):
Рис.2. Открытие "Табло" в режиме отладки в конфигураторе.
По достижению события, в данном случае у меня — это обработка выбора "поля" Контрагент в документе "Реализация товаров и услуг" платформа "возвращает" нас в конфигуратор, где, в открытом ранее "табло" мы можем отследить значения передаваемых параметров в эту процедуру :
Здесь это: Элемент, ВыбранноеЗначение и СтандартнаяОбработка (Рис. 3):
Рис.3. Содержимое "Табло-1" в процессе отладки.
Далее, нажимаем, кнопку "Продолжить отладку" и продолжаем работу до повторного возникновения этого события
Все очень удобно и очень просто. Привычно. Работай — не хочу…. все как на ладони.
Переход на новый механизм
Теперь, давайте посмотрим, что будет, если я запущу описанную процедуру отладки в конфигурации на управляемых формах, например, вышеупомянутую "Розницу 2.2", Итак, делаю все тоже самое:
1.Открываю в режиме конфигуратора, ставлю "точку останова" в документе "РеализацияТоваровУслуг" в процедуре "КонтрагентПриИзменении" (Рис.4).
Рис.4. Установка точки останова в конфигурации на управляемых формах.
2. Для убедительности добавляю строчку кода "Привет!" в выбранную процедуру
&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
Сообщить("Привет!"); // для убедительности:)))
ПересчитатьИлиОтменитьСкидки();
// СтандартныеПодсистемы.РаботаСКонтрагентами
ПроверкаКонтрагентовКлиент.ЗапуститьПроверкуКонтрагентовВДокументе(ЭтотОбъект, Элемент);
// Конец СтандартныеПодсистемы.РаботаСКонтрагентами
// ИнтернетПоддержкаПользователей.СПАРКРиски, ОбновитьОтображениеИндексов.
Если ИспользованиеСПАРКРазрешено Тогда
// Отображать не по ссылке, а по ИНН, НЕ сохраняя в кэше.
ЭтотОбъект.ИндексыСПАРКРиски = Неопределено; // Сбросить полученные значения.
ОбновитьОтображениеИндексыСПАРК();
КонецЕсли;
// Конец ИнтернетПоддержкаПользователей.СПАРКРиски, ОбновитьОтображениеИндексов.
КонецПроцедуры
3.Запускаю отладчик, "добираюсь" до вызова этой процедуры…. и ничего не работает…. точка останова "проигнорирована"
А сообщение "Привет" выскочило! (Рис.5).
Рис.5. Тестирование срабатывания точки останова.
Ладно, сделаем так, установим точку останова на коде и запустим конфигурацию в режиме отладке заново (Рис.6.).
Рис.6. Точка останова установлена напротив строки кода (конфигурация на УФ).
Точка останова отработала. У меня открылось табло, где я могу посмотреть передаваемый в процедуру "Элемент" (Рис.7):
Рис.7. Содержимое "Табло-1" при отладке конфигурации на управляемых формах.
Вот, определяем, что в "старом" режиме отладке — отработка "точки" возможна, если она установлена на "пустой строке". В новом режиме — отработка "точки" не получается. Если это запомнить — можно сэкономить много времени и нервов. Казалось бы элементарная "невидимая" вещь, но помнить нужно.
Если даже есть "какие-то настройки" в самом конфигураторе типа "останавливаться на пустой строке", как минимум — их нужно "включить". Но, по-умолчанию механизм "точки останова", работает так, как описано у меня.
Базовые настройки режима отладки для конфигурации на УФ
Теперь давайте посмотрим, как быстро настроить новый режим отладки для конфигурации на управляемых формах.
Рассмотрю файловую базу, как самый распространенный вариант на малых предприятиях.
Во-первых, в конфигураторе заходим в меню "Сервис — Параметры — Отладка". Здесь выбираем протолок отладки "Отладка по протоколу TCP/IP" как более универсальный.
Используем локальный сервер отладки (по-умолчанию).
Далее, конфигуратор предлагает перезапустить его для применения настроек, соглашаемся с этим и перезапускаем.
Выглядит это вот так (Рис.7):
Рис.7 Установка отладки по протоколу HTTP и принятие изменений.
Одним из отличий работы файлового режима отладки от серверного режима заключается в определении типов предметов отладки. Есть такая кнопка "Автоматическое подключение" в меню "Отладка — подключение". Установка "типов предметов отладки" для файлового режима — не требуется (точнее это бесполезно) — Рис.8, в файловом режиме будут подтягиваться все задействованные типы отладки, например "Сервер (файловый вариант) и Тонкий клиент":
Рис.8. Установка предметов отладки (в файловом варианте не требуется).
Нажимаем кнопку "начать отладку". В предприятии идем в меню "Сервис — Параметры", убеждаемся, что отладка разрешена в текущем сеансе "по протоколу TCP/IP" (Рис.9).
Так же я прописал значения полей "Отладка при перезапуске" и "Сервер отладки при перезапуске". Просто повторил их с полей свыше.
Рис.9. Параметры запуска предприятия (Отладка разрешена).
Все, мы работаем в режиме отладочном режиме для файлового режима базы (Рис.10).
Рис.10. Задействованные предметы отладки (файловый режим).
В форме "Предметы отладки" (режим предприятия), все как на ладони — пользователь Администратор в двух типах отладки — "Тонкий клиент" и "Сервер (файловый вариант)", так же, например, могу возникать фоновые задания.
При нажатии кнопки "Завершить" — закрывается выбранный тип отладки, например это так же может быть фоновое задание в файловом варианте под другим сеансом.
Пожалуй, о настройках файлового режима мне написать больше нечего.
Пример работы, главное отличие от старого механизма
Теперь, я приведу пример работы в отладочном режиме. Предварительно, настроил все по предыдущему разделу.
Заходим в процедуру и ставим точку останова напротив кода. Например, вот здесь (Рис.11):
Рис.11. Точка останова в процедуре на событие "При изменении номенклатуры" — Розница 2.2.
Затем, запускаем код, и "отлавливаем" эту точку (событие срабатывает при изменении номенклатуры, возвращаясь в конфигуратор. В нем нам нужна наша панель "Табло 1".
В ней пишем "Объект" и выбираем какое-нибудь свойство, например дата (Рис.12.):
Рис.12. Устанавливаем новое значение в виде выражения в "Табло-1".
Нажимаем, правой кнопкой на "Установить новое значение в виде выражения" и пишем вот такой код:
Дата("11.10.2024 10:10:10")
нажимаем кнопку "Установить". Успех! "Изменение значения параметра "Дата" установлено". Кстати, на примитивные типы значений, к чему относится в том числе и тип "Дата" можно менять прям в табло (Рис.13). Но, для демонстрации, я прописал это кодом — и так и так сработает:
Рис.13. Ввод выражения.
Теперь, "продолжаем отладку", — мы возвращаемся в конфигурацию и опсс — у нас поменялось наше значение (Рис.14). Класс.
Рис.14. Результат изменения параметра "на лету" через подстановку в отладчике.
В этом пример, я наглядно показал основное отличие старого механизма от нового — это изменение параметров в процессе отладки и "передача" их в предприятие. По мне — так очень удобная штука.
Вместо заключения
Так, вроде все. Надеюсь, что я достаточно подробно описал основные "отладочные моменты". Специально не стал уделять внимание таким возможностям как "остановка по ошибке", "стек вызовов", "точка остановка с условием"…. кому интересно и кто не знает — может сам посмотреть что это такое.
Решил поделился своим практическим опытом работы с отладчиком и постарался указать вам на наиболее интересные и казалось бы "простые" вещи в данном механизме.
Сейчас, наверное, невозможно представить разработку даже простейшего кода без отладчика. Чего уж говорить о том, если нужно "разобраться" с какой-нибудь конфигурацией.
Хочу еще раз обратить ваше внимание на вот эти моменты:
1. (Здесь я сам споткнулся и не раз). В новом механизме УФ — это "установка" точки остановка на коде. Не все так делают и может возникнуть непонимание.
2. Возможность изменения данных "на лету" в отладке — достаточно (мега)полезная вещь, отсутствующая в предыдущем механизме отладке. Пример работы с данным функционалом приведен выше, предполагаю, что он максимально понятен.
И само изменение переменной в процессе отладки у меня почему-то ассоциируется с триггерами (подписками на события, только более униварсальными) — очень похоже, не знаю как вам…
Ну и вообще — куда ни копни в механизмах 1с — там такая "бездонная яма" информации… очень многое и много нужно знать и помнить.
Спасибо Всем, кто дочитал эту статью до конца, надеюсь, что она была полезна для вас и поможет как минимум сэкономить время в дальнейшем, работая с отладчиком. Еще раз напомню, что я написал ее в основном полагаясь на свой практический "ежедневный" опыт, что называется "без изысков".
Желаю Всем удачного и комфортного кодинга. И, конечно, постоянного изучения возможностей 1с предприятия. Всем привет!
Ранее опубликованные материалы
Так же, прошу посмотреть мои предыдущие статьи:
Я прошу прощения, но что за набор абзацев ?
1. (Здесь я сам споткнулся и не раз). В новом механизме УФ — это «установка» точки остановка на коде. Не все так делают и может возникнуть непонимание.
Целый раздел посвящен!!!
Извините, но о какой точке останова вообще может идти речь на ПУСТОЙ строке ?
не буду вдаваться в теорию, просто проведем маленький эксперимент: попробуем поставить точку останова на пустой строке и посмотреть что произойдет. Результат — на скрине во вложении. Почему так: автор, надеюсь сам поймёт. И, может быть поймёт, почему в УФ точка останова на пустой строке просто не работает… И не будет рассуждать о «старом и новом» механизме отладки…
Во-первых, в конфигураторе заходим в меню «Сервис — Параметры — Отладка». Здесь выбираем протолок отладки «Отладка по протоколу TCP/IP» как более универсальный.
Используем локальный сервер отладки (по-умолчанию).
Далее, конфигуратор предлагает перезапустить его для применения настроек, соглашаемся с этим и перезапускаем.
Выглядит это вот так (Рис.7):
Но что же мы видим на рисунке ? Даже процитирцю:
Как-то странно выглядит у нас на рисунке настройка отладки «Отладка по протоколу TCP/IP»…
И вот тут несколько вопросов к автору. Дмитрий:
1) в серверном режиме хотя бы раз запускали отладку?
2) вы уверены, что этом суть отличия «нового и старого» режимов отладки (точка останова на ПУСТОЙ строке…)?
1. Хорошо бы дать определение, что подразумевается под «старым» и «новым» механизмом отладки.
2.
Ошибаешься: абсолютно никакой связи между видами форм и механизмом отладки нет.
3.
Хорошо бы указать критерий универсальности.
4.
Кажется, ИС — не лучшая площадка для фантазий.
5.
Ошибаешься: есть еще и фоновые задания.
6.
И вновь ошибаешься: изменение значений переменных на лету не зависит от протокола отладки.
В общем, получил от меня заслуженный минус.
есть ли команда командной строки для запуска 1C в режиме отладки. Т.к окно открыто в режиме рабочего стола, то не могу зайти в сервис параметры и включить отладку
(3)
-debug пробуй