Разбираемся на практике

Ошибки начинающего в 1С:
найдите причину и проверьте исправление

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

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

Где увидеть настоящий текст ошибки

Фраза «возникла непредвиденная ошибка» ещё не объясняет причину. Я сначала открываю подробный текст: там есть имя проблемного поля или метода, модуль и строка. Это точка входа в разбор — по одному общему окну нельзя понять, что исправлять.

Для снимков я воспроизвёл три ошибки в отдельной пустой базе на платформе 1С 8.5.1.1150. Это версия нашего стенда, а не требование установить именно её. Окна в вашей версии или конфигурации могут отличаться. Ниже — настоящие снимки, без перерисовки; нажмите на изображение, чтобы рассмотреть текст крупнее.

  1. Не останавливайтесь на общем сообщении

    На снимке я нажал «Проверить пример» в учебной обработке. Появилось общее окно с красным крестом. В этом интерфейсе путь к причине начинается со ссылки «Сформировать отчет об ошибке» внизу окна. Откройте её — отправлять отчёт для чтения причины не нужно.

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

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

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

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

    Окно «Отчет об ошибке» в 1С со ссылкой «подробный текст ошибки» и перечнем включаемых сведений
    Нам нужна ссылка «подробный текст ошибки». Сохранять полный отчёт и передавать сведения о пользователе или компьютере для чтения причины не требуется.

Поле объекта не обнаружено

В учебной обработке создайте структуру с полем «Цена». Обращение к «Стоимость» завершится ошибкой: похожий смысл не делает эти имена взаимозаменяемыми. В отладчике посмотрите ТипЗнч(Данные) и состав структуры.

Исправьте обращение на Данные.Цена. Если поле действительно необязательно, используйте Свойство и отдельно обработайте его отсутствие. Не подставляйте ноль молча: отсутствие цены и бесплатная услуга — разные ситуации.

  1. Прочитайте имя поля и строку обращения

    В первой строке написано «Поле объекта не обнаружено (Стоимость)». Ниже платформа показывает наш модуль формы и Сообщить(Данные.Стоимость). Число 4 в скобках — строка в модуле этого примера; у вас номер может быть другим.

    Это не сообщение о том, что «1С потеряла цену». В структуре есть поле «Цена», а код запросил другое — «Стоимость». Сначала сверяем имена и тип значения; затем исправляем обращение или явно проверяем наличие необязательного поля.

    Настоящая ошибка 1С «Поле объекта не обнаружено (Стоимость)» со строкой Сообщить(Данные.Стоимость) в модуле формы
    Ошибка воспроизведена на структуре с полем «Цена» и значением 250. Платформа называет отсутствующее поле «Стоимость» и показывает обращение к нему.
Ошибка: поля «Стоимость» нет
Данные = Новый Структура("Цена", 250);
Сообщить(Данные.Стоимость);
Исправление: проверка необязательного поля
Если Данные.Свойство("Цена", Цена) Тогда
    Сообщить(Цена);
Иначе
    Сообщить("Укажите цену.");
КонецЕсли;

Метод объекта не обнаружен

Метод выбирают по типу значения, а не по желаемому действию. У массива есть «Добавить», у структуры — «Вставить». Если написать Данные.Добавить(250), а в Данные лежит структура, программа не найдёт такой метод.

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

  1. Сопоставьте метод с типом значения

    Здесь подробности говорят «Метод объекта не обнаружен (Добавить)» и указывают Данные.Добавить(250). Само слово «Добавить» написано без опечатки. Ошибка в том, что в Данные находится структура, а не массив.

    Не заменяйте коллекцию только ради исчезновения сообщения. Для последовательности цен подходит массив с Добавить; для именованного поля «Цена» — структура с Вставить. Сначала выберите, какие данные вы храните.

    Настоящая ошибка 1С «Метод объекта не обнаружен (Добавить)» на вызове Данные.Добавить(250) у структуры
    В учебном примере переменная Данные содержит структуру. Сообщение показывает отсутствующий у неё метод, а не запрещает использовать Добавить у массива.
Ошибка на снимке: у структуры нет Добавить
Данные = Новый Структура;
Данные.Добавить(250);
Два разных контейнера
Цены = Новый Массив;
Цены.Добавить(250);

Услуга = Новый Структура;
Услуга.Вставить("Цена", 250);

Переменная не определена

В процедуре вычислили «СуммаЗаказа», а в сообщении написали «СуммаЗакза». Это другое имя. Исправьте опечатку, затем проверьте все места присваивания. Угадывать по похожему звучанию не нужно.

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

  1. Ищите причину ниже слов «Ошибка инициализации модуля»

    На этом снимке форма даже не открылась: платформа не смогла скомпилировать её модуль. После слов «по причине» видно «Переменная не определена (СуммаЗакза)». В примере присваивание сделано переменной СуммаЗаказа — в сообщении пропущена буква «а».

    Метка <?> указывает место, на котором обнаружена проблема; переносить её в свой код не нужно. Это ошибка компиляции, в отличие от двух предыдущих ошибок выполнения. Её можно найти проверкой модуля в конфигураторе ещё до запуска формы.

    Настоящая ошибка инициализации модуля формы 1С: «Переменная не определена (СуммаЗакза)» и указатель места опечатки
    Форма не открылась из-за опечатки в имени переменной. Причина указана ниже общей фразы об инициализации: СуммаЗакза вместо СуммаЗаказа.
Ошибка на снимке: два разных имени
СуммаЗаказа = 2 * 250;
Сообщить(СуммаЗакза);
Передача значения явно
Функция Стоимость(Количество, Цена)
    Возврат Количество * Цена;
КонецФункции

Процедура ПроверитьРасчет()
    СуммаЗаказа = Стоимость(2, 250);
    Сообщить(СуммаЗаказа);
КонецПроцедуры

Почему кнопка ничего не делает?

Начните с цепочки: элемент формы → команда → действие команды → обработчик в модуле формы. Надпись на кнопке сама по себе не связывает её с процедурой. Откройте свойства команды и проверьте «Действие».

В первой строке обработчика временно поставьте Сообщить("Обработчик вызван."). Если сообщения нет, проверьте привязку и то, какую форму открыли. Если оно есть, поставьте точку останова (F9 в Windows и macOS, на Mac при необходимости Fn+F9), запустите свой сеанс под отладкой через F5 и найдите условие или Возврат, после которого нужная часть не выполняется.

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

  1. Проверьте переход к обработчику

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

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

    Пункт «Действие команды» в контекстном меню кнопки управляемой формы
    Через «Действие команды» проверяем вторую часть связи: команда → процедура в модуле формы.
  2. Проверьте результат нажатия в предприятии

    На снимке — работающая учебная кнопка: после нажатия внизу появилось «Привет». Так можно проверить всю цепочку, прежде чем добавлять расчёты и условия.

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

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

Нужно посмотреть, как связываются кнопка и код?

Найдите команду у кнопки и процедуру в действии команды.

В инструкции с настоящими снимками разобрана вся цепочка создания внешней обработки.

Собрать форму с кнопкой «Привет мир» →

Код вызывается, но точка останова не срабатывает?

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

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

Проверить, почему не работает отладка в 1С →

Почему изменения не появились в предприятии?

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

Если меняли основную конфигурацию собственной учебной базы, сохраните её (Ctrl+S в Windows, Cmd+S на Mac), выполните обновление конфигурации базы данных через F7 (на Mac при необходимости Fn+F7) и заново откройте нужную форму. Сохранение редактируемой конфигурации и её обновление в базе — не одно и то же.

Если меняли внешний .epf, сохраните этот файл в конфигураторе (Ctrl+S в Windows, Cmd+S на Mac), закройте прежнюю форму обработки в предприятии и откройте тот же файл заново (Ctrl+O в Windows, Cmd+O на Mac). Обновлять основную конфигурацию для этого не нужно.

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

  1. После сохранения .epf закройте прежнюю форму

    В примере текст уже заменён в конфигураторе и файл сохранён. В предприятии пока открыта старая форма с прежним сообщением «Привет». Закройте именно форму обработки крестиком справа в её заголовке, а не всю базу и не панель сообщений.

    Крестик закрытия старой формы внешней обработки с прежним сообщением «Привет»
    Закрываем прежнюю форму внешней обработки перед повторным открытием сохранённого файла.
  2. Откройте сохранённый файл и повторите действие

    Выберите «Файл» → «Открыть», откройте сохранённый .epf и нажмите «Выполнить». Теперь видно новое сообщение «Привет мир 1С». В примере также изменён синоним обработки: поэтому заголовок стал «Привет мир».

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

    Повторно открытая внешняя обработка с заголовком «Привет мир» и новым сообщением «Привет мир 1С»
    После повторного открытия видны оба изменения: синоним в заголовке формы и новый текст в сообщениях.

Самопроверка

Частые вопросы

Нужно ли скрывать ошибку через Попытка?

Нет. Сначала найдите причину. Обработка исключения нужна для ожидаемого сбоя с понятным дальнейшим действием.

Что передать ментору?

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

Почему похожая строка работает в другом модуле?

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

Первичные источники

Что проверить дополнительно

·

Полезный материал

Поделиться статьёй

Сохраните материал или отправьте его тому, кому он пригодится.

Следующий шаг

Теперь попробуйте найти ошибку самостоятельно

В тренажёре код-ревью — 50 бесплатных заданий на поиск ошибок в чужом коде. Отметьте проблемные строки, объясните причину и сравните результат с проверкой. Это самостоятельная тренировка, не проверка вашей работы ментором.

Нужен бесплатный вход. AI-раздел и практика с проверкой ментором имеют отдельные условия доступа. В «1С код» действуют лимиты попыток и восстановление жизней.
Открыть тренажёр код-ревью →