Ошибка «Поле объекта недоступно для записи» в 1С 8.3
📋 Содержание
Ошибка Поле объекта недоступно для записи в 1С 8.3 всплывает в двух ситуациях: у пользователя — при попытке провести документ или сохранить справочник после обновления, у программиста — при выполнении своего кода. Причина у них разная, поэтому и лечится по-разному.
Быстрый ориентир: если вы просто работаете в базе и раньше всё сохранялось — почти всегда виновато незавершённое обновление конфигурации. Если ошибка вылезает из вашей обработки или доработки — вы пишете туда, куда платформа писать не даёт.
Что означает ошибка «Поле объекта недоступно для записи»
Платформа сообщает: вы пытаетесь присвоить значение полю, которое в текущий момент помечено как только для чтения.
Полный текст обычно выглядит так:
{Обработка.ЗагрузкаДанных.Форма.Форма.Форма(42)}: Поле объекта недоступно для записи (Наименование)
В скобках — конкретное поле (Наименование, Ссылка, Код, реквизит документа). Именно с него и надо начинать разбор.
Две группы причин
Все случаи делятся на два лагеря. Определите свой — дальше идите только в нужный раздел.
| Кому | Как проявляется | Корень проблемы |
|---|---|---|
| 👤 Пользователю | Ошибка при записи документа/справочника в обычном режиме | Обновление конфигурации не завершено, структура БД «отстала» |
| 👨💻 Программисту | Ошибка при запуске своего кода/обработки | Запись в ссылку или в системное поле |
Ссылка. Получите объект методом ПолучитьОбъект() и меняйте его, а не ссылку.Причина у пользователя: незавершённое обновление
Самый частый сценарий. Обновили конфигурацию (сами или прислал подрядчик), а структуру базы данных под новую конфигурацию не перестроили. Метаданные новые, таблицы старые — платформа блокирует запись.
Что делать:
- Закройте все сеансы пользователей в базе.
- Откройте базу в режиме Конфигуратор.
- Меню
Конфигурация→Обновить конфигурацию базы данных(или клавишаF7). - Согласитесь на реструктуризацию, дождитесь завершения.
- Запустите базу в режиме
Предприятиеи повторите запись документа.
⚠️ Перед реструктуризацией сделайте резервную копию базы. Реструктуризация меняет таблицы данных, и откатить её без бэкапа нельзя.
Если после F7 ошибка осталась — прогоните базу через тестирование и исправление.
Никогда не запускайте реструктуризацию без свежей резервной копии — при сбое можно потерять данные.
Если база файловая
Дополнительно поможет проверка физической целостности через chdbfl.exe (лежит в каталоге bin платформы). Запускайте с галкой «Исправлять обнаруженные ошибки» только по копии базы.
Причина у программиста: запись в ссылку
Классика доработок. Ссылка (СправочникСсылка, ДокументСсылка) — это указатель на объект, а не сам объект. Её поля доступны только на чтение.
Так писать нельзя — платформа выдаст ошибку:
// НЕВЕРНО: пытаемся изменить поле через ссылку
КонтрагентСсылка.Наименование = "ООО Ромашка";
КонтрагентСсылка.Записать();
Правильно — получить сам объект, изменить его и записать:
// ВЕРНО: меняем объект, а не ссылку
Объект = КонтрагентСсылка.ПолучитьОбъект();
Объект.Наименование = "ООО Ромашка";
Объект.Записать();
💡 Правило простое: меняй объект, а не ссылку. Всё, что вы получили запросом или как
Ссылка, — только для чтения. Для изменения всегдаПолучитьОбъект().
Изменение объекта по ссылке в цикле по выборке
Та же ошибка ловится при обходе выборки из запроса. Поля выборки — тоже только чтение.
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Объект = Выборка.Ссылка.ПолучитьОбъект();
Объект.Комментарий = "Обработано";
Объект.Записать();
КонецЦикла;
Попытка изменить системные поля
Часть полей заполняет сама платформа. Присвоить их через = нельзя, даже имея объект на руках.
К системным (только для чтения) относятся:
- 🔒
Ссылка— платформа выдаёт её при записи нового объекта; - 🔒
ПредопределённыйиИмяПредопределённыхДанных— задаются в конфигураторе; - 🔒
КодиНомер— если включена автонумерация; - 🔒
МоментВремени,ВерсияДанных— служебные.
Для того, что и правда нужно менять, есть штатные методы:
| Что нужно | Неверно | Верно |
|---|---|---|
| Пометить на удаление | Объект.ПометкаУдаления = Истина | Объект.УстановитьПометкуУдаления(Истина) |
| Провести документ | запись в поле проведения | Документ.Записать(РежимЗаписи.Проведение) |
| Задать ссылку новому объекту | Объект.Ссылка = ... | платформа сделает сама при Записать() |
⚠️
ПометкаУдалениячерез прямое присвоение сработает не всегда и не проведёт нужные проверки. ИспользуйтеУстановитьПометкуУдаления()— он корректно снимает/ставит пометку по подчинённым данным.
Столкновение имён переменных и объектов
Реже, но встречается: вы называете переменную так же, как реквизит объекта или свойство, и платформа путается, куда писать.
Лечится переименованием. Давайте переменным осмысленные имена с префиксом (мСтрока, тзДанные), чтобы они не пересекались с полями объекта и системными свойствами.
Регулировка значений на электронных формах
Отдельный случай — управляемая форма. Если реквизит формы объявлен ТолькоПросмотр или недоступен по условию, попытка записать в него из кода тоже даст эту ошибку.
Проверьте свойство ТолькоПросмотр у элемента формы и условия его установки в обработчиках ПриСозданииНаСервере / ПриИзмененииТипа.
Частые ошибки и как их избежать
- 🚫 Запускать
F7без бэкапа — при обрыве реструктуризации база может остаться в промежуточном состоянии. - 🚫 Обновлять конфигурацию при активных пользователях — часть сеансов работает на старой структуре и ловит ошибку.
- 🚫 Копировать чужой код с
Ссылка.Реквизит = ...из форумов, не разобравшись. - 🚫 Менять
ПометкаУдаленияприсвоением вместо метода. - ✅ Правило на все доработки: читаем из ссылки/запроса, пишем только в
ПолучитьОбъект().
Проверь себя
Если не помогло
Ошибка держится после всех шагов — сузьте круг:
- Определите точное поле из текста ошибки (в скобках). Ищите присвоение именно этому полю.
- Проверьте расширения конфигурации: доработка из расширения могла остаться на старой структуре. Обновите или отключите расширение.
- Если база на поддержке подрядчика — соберите текст ошибки целиком (со стеком вызовов) и передайте тому, кто ведёт доработки.
- Для типовой конфигурации без своих правок ошибка почти наверняка означает недокатанное обновление — вернитесь к разделу про реструктуризацию.
Частые вопросы
Почему «Поле объекта недоступно для записи» появилось внезапно, хотя вчера всё работало?
F7.В чём разница между ссылкой и объектом в 1С?
ПолучитьОбъект(). Писать можно только в объект.Как записать значение в поле, которое даёт эту ошибку?
ПолучитьОбъект(), измените и вызовите Записать(). Если поле системное (Ссылка, Предопределённый) — напрямую его менять нельзя, для этого есть штатные методы платформы.Помогает ли перезапуск 1С или компьютера?
Опасно ли делать реструктуризацию базы?
Что делать, если я не программист и база на поддержке?
Материал подготовлен редакцией 1С 8.3 — независимый справочник. Проверено и обновлено: 12.07.2026. Независимый справочник. Мы не представляем фирму «1С» и не аффилированы с ней.