Разбираемся на практике
Ошибки начинающего в 1С:
найдите причину и проверьте исправление
Кнопка не отвечает, поле не найдено, изменения исчезли после запуска? Выберите знакомую ситуацию. В каждом разборе есть маленький пример и проверка, которая помогает найти причину.
- Пять частых ошибок и симптомов
- Короткие примеры без рабочей базы
- Проверка причины, а не маскировка
- Следующая задача после исправления
Содержание
Где увидеть настоящий текст ошибки
Фраза «возникла непредвиденная ошибка» ещё не объясняет причину. Я сначала открываю подробный текст: там есть имя проблемного поля или метода, модуль и строка. Это точка входа в разбор — по одному общему окну нельзя понять, что исправлять.
Для снимков я воспроизвёл три ошибки в отдельной пустой базе на платформе 1С 8.5.1.1150. Это версия нашего стенда, а не требование установить именно её. Окна в вашей версии или конфигурации могут отличаться. Ниже — настоящие снимки, без перерисовки; нажмите на изображение, чтобы рассмотреть текст крупнее.
Если хотите повторить примеры, сначала создайте внешнюю обработку с формой, кнопкой и обработчиком команды. Двухстрочные фрагменты ниже вставляйте вместо Сообщить внутри клиентской процедуры кнопки — между Процедура и КонецПроцедуры. Не добавляйте их в рабочую конфигурацию.
Не останавливайтесь на общем сообщении
На снимке я нажал «Проверить пример» в учебной обработке. Появилось общее окно с красным крестом. В этом интерфейсе путь к причине начинается со ссылки «Сформировать отчет об ошибке» внизу окна. Откройте её — отправлять отчёт для чтения причины не нужно.
Если в вашем окне сразу есть «Подробно» или полный текст ошибки, переходите к нему. Перезапуск не исправит опечатку в коде: сначала прочитайте, на что жалуется платформа.

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

Нам нужна ссылка «подробный текст ошибки». Сохранять полный отчёт и передавать сведения о пользователе или компьютере для чтения причины не требуется.
Поле объекта не обнаружено
В учебной обработке создайте структуру с полем «Цена». Обращение к «Стоимость» завершится ошибкой: похожий смысл не делает эти имена взаимозаменяемыми. В отладчике посмотрите ТипЗнч(Данные) и состав структуры.
Исправьте обращение на Данные.Цена. Если поле действительно необязательно, используйте Свойство и отдельно обработайте его отсутствие. Не подставляйте ноль молча: отсутствие цены и бесплатная услуга — разные ситуации.
Если устройство структуры пока незнакомо, разберите именованные поля и проверку Свойство.
Прочитайте имя поля и строку обращения
В первой строке написано «Поле объекта не обнаружено (Стоимость)». Ниже платформа показывает наш модуль формы и Сообщить(Данные.Стоимость). Число 4 в скобках — строка в модуле этого примера; у вас номер может быть другим.
Это не сообщение о том, что «1С потеряла цену». В структуре есть поле «Цена», а код запросил другое — «Стоимость». Сначала сверяем имена и тип значения; затем исправляем обращение или явно проверяем наличие необязательного поля.

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

В учебном примере переменная Данные содержит структуру. Сообщение показывает отсутствующий у неё метод, а не запрещает использовать Добавить у массива.
Данные = Новый Структура;
Данные.Добавить(250);Цены = Новый Массив;
Цены.Добавить(250);
Услуга = Новый Структура;
Услуга.Вставить("Цена", 250);Переменная не определена
В процедуре вычислили «СуммаЗаказа», а в сообщении написали «СуммаЗакза». Это другое имя. Исправьте опечатку, затем проверьте все места присваивания. Угадывать по похожему звучанию не нужно.
Если имя верное, проверьте область видимости и контекст. Локальная переменная другой процедуры здесь не появится. Передайте её параметром или верните результат функции. Не делайте переменную общей для всего модуля только ради исчезновения ошибки.
Передачу данных между процедурой и функцией можно проследить в примере функции расчёта суммы.
Ищите причину ниже слов «Ошибка инициализации модуля»
На этом снимке форма даже не открылась: платформа не смогла скомпилировать её модуль. После слов «по причине» видно «Переменная не определена (СуммаЗакза)». В примере присваивание сделано переменной СуммаЗаказа — в сообщении пропущена буква «а».
Метка <?> указывает место, на котором обнаружена проблема; переносить её в свой код не нужно. Это ошибка компиляции, в отличие от двух предыдущих ошибок выполнения. Её можно найти проверкой модуля в конфигураторе ещё до запуска формы.

Форма не открылась из-за опечатки в имени переменной. Причина указана ниже общей фразы об инициализации: СуммаЗакза вместо СуммаЗаказа.
СуммаЗаказа = 2 * 250;
Сообщить(СуммаЗакза);Функция Стоимость(Количество, Цена)
Возврат Количество * Цена;
КонецФункции
Процедура ПроверитьРасчет()
СуммаЗаказа = Стоимость(2, 250);
Сообщить(СуммаЗаказа);
КонецПроцедурыПочему изменения не появились в предприятии?
Сначала уточните, что вы меняли: основную конфигурацию или отдельный файл внешней обработки .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 в учебной базе.
Полная последовательность для внешнего файла есть в шагах сохранения и повторного открытия .epf. Это не инструкция по обновлению основной конфигурации.
После сохранения .epf закройте прежнюю форму
В примере текст уже заменён в конфигураторе и файл сохранён. В предприятии пока открыта старая форма с прежним сообщением «Привет». Закройте именно форму обработки крестиком справа в её заголовке, а не всю базу и не панель сообщений.

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

После повторного открытия видны оба изменения: синоним в заголовке формы и новый текст в сообщениях.
Самопроверка
Частые вопросы
Нужно ли скрывать ошибку через Попытка?
Нет. Сначала найдите причину. Обработка исключения нужна для ожидаемого сбоя с понятным дальнейшим действием.
Что передать ментору?
Минимальный пример, точные шаги, ожидаемый результат и строку ошибки. Уберите личные данные и сведения о рабочей базе.
Почему похожая строка работает в другом модуле?
У модулей различаются контекст и доступные значения. Сравните тип переменной, параметры процедуры и место выполнения.
Первичные источники
Что проверить дополнительно
Полезный материал
Поделиться статьёй
Сохраните материал или отправьте его тому, кому он пригодится.
Следующий шаг
Теперь попробуйте найти ошибку самостоятельно
В тренажёре код-ревью — 50 бесплатных заданий на поиск ошибок в чужом коде. Отметьте проблемные строки, объясните причину и сравните результат с проверкой. Это самостоятельная тренировка, не проверка вашей работы ментором.
Нужен бесплатный вход. AI-раздел и практика с проверкой ментором имеют отдельные условия доступа. В «1С код» действуют лимиты попыток и восстановление жизней.

