Найти в Дзене

Отладка в 1С: Как найти червяка в яблоке

"Марковка! Отладка — это как искать червяка в яблоке. Ты знаешь, что где-то внутри что-то не так, но не видишь где." Без отладки:
Кусаешь яблоко → "Ой, червяк!" → Выплевываешь → Не знаешь, есть ли ещё. С отладкой:
Режешь яблоко ножом → Смотришь каждый кусочек → Находишь всех червяков → Вырезаешь. plaintext КАК: Кликни слева от номера строки → появится красная точка
ЧТО ДЕЛАЕТ: Программа остановится на этой строке ДО её выполнения
ПРИМЕР:
10: Сумма = Цена * Количество
11: НДС = Сумма * 0.2 ← ТОЧКА ОСТАНОВА ЗДЕСЬ
12: Итог = Сумма + НДС
Программа выполнит строку 10, остановится на 11, ждёт твоей команды. Совет шефа: "Ставь точки там, где что-то может пойти не так. Как стоп-кран в поезде — перед мостом, а не после." plaintext ЧТО ДЕЛАЕТ: Заходит внутрь каждой процедуры
ПРИМЕР:
Вызовешь: РассчитатьСумму() → F11 → попадёшь ВНУТРЬ этой процедуры
Увидишь, как она работает построчно. Аналогия: "Это как зайти на кухню и посмотреть, как повар готовит каждое блюдо, а не просто получить гот
Оглавление

Шеф Петрович учит дегустировать код

🐛 ЧТО ТАКОЕ ОТЛАДКА?

"Марковка! Отладка — это как искать червяка в яблоке. Ты знаешь, что где-то внутри что-то не так, но не видишь где."

Без отладки:
Кусаешь яблоко → "Ой, червяк!" → Выплевываешь → Не знаешь, есть ли ещё.

С отладкой:
Режешь яблоко ножом → Смотришь каждый кусочек → Находишь всех червяков → Вырезаешь.

🛠️ 5 ИНСТРУМЕНТОВ ДЕГУСТАТОРА КОДА

1. ТОЧКИ ОСТАНОВА (Breakpoints) — "СТОП! ЗДЕСЬ ПРОВЕРИМ"

plaintext

КАК: Кликни слева от номера строки → появится красная точка
ЧТО ДЕЛАЕТ: Программа остановится на этой строке ДО её выполнения

ПРИМЕР:
10: Сумма = Цена * Количество
11: НДС = Сумма * 0.2 ← ТОЧКА ОСТАНОВА ЗДЕСЬ
12: Итог = Сумма + НДС

Программа выполнит строку 10, остановится на 11, ждёт твоей команды.

Совет шефа: "Ставь точки там, где что-то может пойти не так. Как стоп-кран в поезде — перед мостом, а не после."

2. ШАГ С ЗАХОДОМ (F11) — "ЗАЙДИ В КАЖДУЮ КОМНАТУ"

plaintext

ЧТО ДЕЛАЕТ: Заходит внутрь каждой процедуры

ПРИМЕР:
Вызовешь: РассчитатьСумму() → F11 → попадёшь ВНУТРЬ этой процедуры
Увидишь, как она работает построчно.

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

3. ШАГ С ОБХОДОМ (F10) — "ПРОЙДИ МИМО"

plaintext

ЧТО ДЕЛАЕТ: Выполняет процедуру целиком, не заходя внутрь

ПРИМЕР:
Вызовешь: РассчитатьСумму() → F10 → получишь результат
Не увидишь, КАК она считала.

Аналогия: "Получил готовый торт. Не смотришь, как пекли — только пробуешь результат."

4. ОКНО ВЫРАЖЕНИЙ — "ПРОБА НА ВКУС"

plaintext

ЧТО ДЕЛАЕТ: Позволяет проверить любое выражение на лету

КАК ИСПОЛЬЗОВАТЬ:
1. Остановились на точке останова
2. В окне выражений пишем: Цена * Количество
3. Нажимаем Enter → видим результат
4. Или: ТипЗнч(Сумма) → увидим тип переменной

Совет шефа: "Это как пробовать соус пальцем в процессе готовки. Не ждёшь, пока всё блюдо будет готово."

5. СТЕК ВЫЗОВОВ — "КТО И ЗАЧЕМ ЗВАЛ НА КУХНЮ"

plaintext

ПОКАЗЫВАЕТ цепочку вызовов:

1. Форма.КнопкаНажатие() ← мы здесь
2. Модуль.РассчитатьЗаказ()
3. ОбщийМодуль.ОбщиеРасчеты()
4. ВнешняяОбработка.Расчёт()

Видишь: кто кого вызывал и в каком порядке.

Аналогия: "Повар → су-шеф → помощник повара → посудомойка. Видишь всю цепочку, кто что делал."

🎯 3 СЦЕНАРИЯ ОТЛАДКИ НА ПРАКТИКЕ

Сценарий 1: "Почему сумма нулевая?"

plaintext

ШАГИ:
1. Ставим точку останова на строку: Итог = Сумма + НДС
2. Запускаем программу
3. Она останавливается
4. Смотрим в окне переменных:
- Сумма = 0 (должно быть 1000)
- НДС = 0
5. Идём выше: ставим точку на Сумма = Цена * Количество
6. Смотрим:
- Цена = 100 ✓
- Количество = 0 ✗ (вот ошибка!)
7. Ищем, почему Количество = 0

Сценарий 2: "Цикл вечный"

plaintext

ПРОБЛЕМА: Программа зависает

ШАГИ:
1. Прерываем выполнение (Ctrl+Break)
2. Смотрим стек вызовов
3. Видим, что застряли в цикле:
Для Счётчик = 1 По 1000000 Цикл
// много кода
КонецЦикла
4. Ставим точку внутри цикла
5. Видим, что Счётчик не меняется
6. Находим: забыли Счётчик = Счётчик + 1

Сценарий 3: "Не та процедура"

plaintext

ПРОБЛЕМА: Вызывается не та функция

ШАГИ:
1. Ставим точку на вызов процедуры
2. F11 заходим внутрь
3. Видим, что попали не в РассчитатьСумму(), а в РассчитатьСуммуСтарая()
4. Ищем, где перепутали вызов

⚠️ 5 ОШИБОК НОВИЧКОВ ПРИ ОТЛАДКЕ

Ошибка 1: "Слишком много точек"

plaintext

НЕПРАВИЛЬНО: По точке на каждой строке
ПРАВИЛЬНО: Только на ключевых местах:
- После сложных вычислений
- Перед вызовами внешних процедур
- В начале и конце циклов
- В условиях (If)

Ошибка 2: "Забывают снимать точки"

plaintext

ПРОБЛЕМА: Программа останавливается в продакшене!
РЕШЕНИЕ:
1. Всегда чисти точки перед сохранением
2. Или используй Условные точки останова

Ошибка 3: "Не смотрят переменные"

plaintext

НЕПРАВИЛЬНО: "Код не работает" → начинают менять наугад
ПРАВИЛЬНО:
1. Остановились
2. Посмотрели ВСЕ переменные
3. Увидели, что в одной не то значение
4. Нашли, почему

Ошибка 4: "Отлаживают на рабочих данных"

plaintext

ОПАСНО: Можете сломать реальные данные
БЕЗОПАСНО:
1. Создайте тестового контрагента "Тест Тестович"
2. Работайте с ним
3. После отладки удалите

Ошибка 5: "Не ведут записи"

plaintext

ПЛОХО: Нашли ошибку → исправили → забыли что исправляли
ХОРОШО:
1. Записывайте: "15:30 - Найдено: Количество = 0"
2. Записывайте: "15:32 - Исправлено: добавил проверку"
3. В конце: список всех исправлений

🎓 ТРЕНИРОВОЧНЫЕ УПРАЖНЕНИЯ

Упражнение 1: "Найди пропавшую соль"

plaintext

// Код не считает правильно:
Сумма = Цена * Количество;
НДС = Сумма * 0.2;
Итог = Сумма; // Должно быть: Сумма + НДС

ЗАДАНИЕ:
1. Поставь точки на каждой строке
2. Пройди пошагово (F10)
3. Следи за значениями в окне переменных
4. Найди, где ошибка

Упражнение 2: "Бесконечный суп"

plaintext

// Цикл никогда не заканчивается:
Счетчик = 1;
Пока Счетчик < 10 Цикл
Сообщить("Шаг " + Счетчик);
// Забыли: Счетчик = Счетчик + 1;
КонецЦикла;

ЗАДАНИЕ:
1. Запусти отладку
2. Когда зависнет - Ctrl+Break
3. Посмотри стек вызовов
4. Найди проблему

🏁 ЗАКЛЮЧЕНИЕ ОТ ШЕФА:

"Марковка, запомни главное про отладку:

ОТЛАДКА — ЭТО НЕ ПРО ТО, ЧТО КОД НЕ РАБОТАЕТ, А ПРО ТО, ПОЧЕМУ ОН РАБОТАЕТ ИМЕННО ТАК!

Каждый баг — это урок. Каждая ошибка — это знание.

Начни с простого:

  1. День 1-3: Только точки останова и просмотр переменных
  2. День 4-7: Шаг с заходом (F11) в свои процедуры
  3. День 8-14: Шаг с обходом (F10) в чужие процедуры
  4. День 15+: Стек вызовов и условные точки

И никогда не говори 'не работает'. Говори:

  • 'Работает, но не так как ожидалось'
  • 'Останавливается здесь'
  • 'Возвращает это, а должно то'

Отладка — это как готовка:

  • Сначала рецепт (планируешь)
  • Потом приготовление (пишешь код)
  • Потом дегустация (отладка)
  • Потом подача (релиз)

Удачи! И помни: даже у лучших поваров иногда пригорает!" 🔍👨‍🍳