Поле объекта недоступно для записи в 1С
Для начинающих разработчиков 1С 8.3 трудно понять, почему же они так часто получают ошибку — Поле объекта недоступно для записи 1С (РабочаяДата, Код, Таблица, Номер, Дата и т.д.). Разберемся, почему эта ошибка может появятся, и как с ней бороться.
Содержание
Если Вы НЕ программист 1С
Если Вы понятия не имеете, что такое программирование, то лучше ничего не трогать. Скорее всего, программисты, которые дорабатывали Вашу конфигурацию, просто допустили досадную ошибку. Просто вызовите специалиста, который работал с Вами. Данная ошибка решается достаточно быстро (если она не тянет за собой другие, более сложные проблемы). Если контакты с личными программистами потеряны, Вы можете обратиться к нашим высококвалифицированным профессионалам, подробности на странице — доработка 1С.
Если ошибка возникла после обновления конфигурации 1С 8.2 или 8.3, скорее всего, Вам необходимо обновить платформу 1С до последней актуальной версии.
Если Вы начинающий программист 1С
Если говорить в общем, то Вы пытаетесь в программном коде изменить данные, которые не имеете права менять. Рассмотрим конкретные случаи:
Меняй объект, а не ссылку
Хит-парад причин появления этой ошибки возглавляет попытка присвоения ссылке элемента новых атрибутов. Делают это обычно примерно так:
Петров = Справочники.ФизическиеЛица.НайтиПоНаименованию("Петров Иван"); Петров.НомерПаспорта = "2156363";
И вот на этом моменте новичок получает ошибку — Поле объекта недоступно для записи 1С.
Получите понятные самоучители по 1С бесплатно:
Следует уяснить: изменять свойства и реквизиты возможно только объекта. В данном случае переменная «Петров» содержит в себе т.н. «ссылку» — уникальный идентификатор в базе данных, с помощью которого система поддерживает уникальность. А то, что нам доступно «по точке» (Петров.НомерПаспорта), — это просто удобство 1С предприятия, и на самом деле любая «точка» — это еще один запрос к базе данных.
Правильное решение задачи:
ПетровСсылка = Справочники.ФизическиеЛица.НайтиПоНаименованию("Петров Иван"); ПетровОбъект = ПетровСсылка.ПолучитьОбъект(); ПетровОбъект.НомерПаспорта = "2156363"; ПетровОбъект.Записать();
В данном случае Вы из ссылки получаете объект, а только потом изменяете его. И потом, естественно, фиксируете новое состояние объекта — записываете его.
Попытка изменить системные поля
Второй по популярности причиной возникновения данной ошибки является попытка изменить реквизиты, которые не поддаются изменению.
Пример:
- номер строки табличной части;
- использование ТекущаяСтрока, вместо ТекущиеДанные;
- и так далее.
Читайте также другие статьи по 1С:
- Администрирование (обновление 1С, резервные копии и т.д);
- Программирование 1С
- Обучение 1С
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
СПРОСИТЕ в комментариях!
Екатерина:
Добрый день.
Спасибо за замечательную статью, но остается одна закавыка.
Отключаю стандартную обработку, открываю форму выбора с нужным мне отбором, но при двойном щелчке на выбираемом элементе поле в исходной форме не заполняется.
Как это исправить?
Кирилл:
Добрый день!
Спасибо за отзыв.
Так как вы отключили стандартную обработку он и не обрабатывает установку нового значения в поле выбора. То есть нужно сделать что то вроде «ТекущиеДанные.Реквизит = ВыбранноеЗначениеИзСписка».
Андрей:
Здравствуйте! Очень помогла ваша статья, раньше пользовался ЗагрузкаДанныхИзТабличныхДокументов, теперь все намного упростилось. Спасибо большое!
Аднрей:
Добрый день.
Есть еще один вопрос.
Представим что у меня документ из 1527 строк и исправить надо 3 реквизита в 588 строке????
Андрей:
Сам нашел. Все просто… Если знаешь
Макс:
Спасибо! Всё толком и по делу. То что надо для юных падаванов)
Нияз:
поле объекта недоступно для записи (обратное значение ндс)
Ирина:
В форме выбора есть отбор по полю Статья оборотов. Пишу:
ФормаВ.Отбор.СтатьяОборотов = ЭлементыФормы.СтатьяДвиженияДенежныхСредств
Пишет, что поле объекта недоступно для записи (СтатьяОборотов). Помогите разобраться, пожалуйста
Станислав:
кратко и по делу, спасибо за «меняй объект, а не ссылку» сразу ошибку выявил и избавился от нее