1cved

logo

Поле объекта недоступно для записи в 1С

18.08.2022 admin Comments Off

Поле объекта недоступно для записи в 1С

После обновления или доработки конфигурации пользователи иногда сталкиваются с ошибкой в 1С 8.3 «Поле объекта недоступно для записи». Разберем, с чем связана ошибка и как ее исправить на примерах в платформе 8.3.15.1747. Для самостоятельного решения задачи пользователю потребуются начальные знания в области 1С программирования.

Причины появления ошибки

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

Если конфигурация изменялась, редактировалась под нужды организации, то для устранения ошибки лучше обратиться к программисту 1С.

Сообщение «Поле объекта недоступно для записи (Имя_поля)» выдается пользователю, когда программа в процессе исполнения кода не может присвоить элементу требуемое значение.

Доступно только для чтения данных

При работе с объектами 1С различают два способа обращения к данным:
  • ссылка — содержит только представление объекта, часто это код и наименование. Сам объект не загружается. Доступ к реквизитам получают разыменованием: обращением через точку. Ссылки читаются из базы, но не изменяются;
  • объект — включает данные в полном объеме, в т. ч. реквизиты, табличные части, которые можно создавать, удалять и редактировать.

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

Для перехода к месту ошибки:
  • запустите конфигурацию в режиме отладки через конфигуратор Отладка — Начать отладку;
  • повторите действия, приводящие к ошибке;
  • в окне предупреждения нажмите Подробно, затем Конфигуратор.
В открывшемся служебном окне в нижней части конфигуратора отразится информация о месте сбоя:
  • Поле объекта недоступно для записи (ВалютаДенежныхСредств) — тест ошибки и имя элемента, куда программа пытается сохранить данные;
  • Справочник.Контрагенты.Форма.ФормаЭлемента.Форма(137) — путь до модуля, где расположена выполняемая строка кода, и порядковый номер строки с ошибкой;
  • НайденныйБанковскийСчет.ВалютаДенежныхСредств = БанковскийСчет.ВалютаДенежныхСредств — команда записи изменений, в которой возникает сбой.

Чтобы исправить ошибку:

1. Поставьте точку останова на строке кода из служебного сообщения.

2. Перейдите в режим отладки конфигурации по кнопке Начать отладку.

3. Выполните действия, приводящие к появлению ошибки, и исполнение программы остановится на отмеченной строке кода;

4. С помощью команды контекстного меню Вычислить выражение определите тип объекта, которому присваивается значение:

  • НайденныйБанковскийСчет — содержит ссылку на элемент справочника Банковские счета;
  • ВалютаДенежныхСредств — реквизит справочника Банковские счета, имеет ссылочный тип данных на справочник Валюта.

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

5. Для получения объекта впишите строку кода с использованием соответствующего метода:
  • документы, справочники, планы счетов и др. — ПолучитьОбъект();
  • константы, перечисления, регистры и др. — Получить()Прочитать(); Подробное описание методов смотрите в Синтакс-Помощнике.
6. В выражении замените ссылку на объект.
Объекты конфигурации делятся:
  • объекты (ДокументОбъект.[Имя] и др.) — можно найти в базе по ссылке. На вкладке Прочее в окне редактирования объекта конфигурации есть Модуль объекта;
  • набор записей — для изменения одной записи регистров, перечислений используют менеджер записи, для констант — менеджер значения.
Ошибку «Поле объекта недоступно для записи» 1С выдает при неправильной записи как объектных данных, так и наборов записей. Обращение с записями лучше не исправлять самостоятельно, а поручить программисту.

Попытка изменить системные поля

В 1С существуют специальные системные поля, которым программа присваивает значения по умолчанию:
  • порядковый номер строки;
  • номер группировки;
  • уровень группировки.
Системные поля доступны только для чтения. Создаются автоматически к элементам: например, номера строк табличных частей или уровень группировки в отчете. Повлиять на них пользователь не может. При попытке изменить значение будет выдано окно с предупреждением:

Один из вариантов решения:

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

2. Добавьте свой реквизит в табличную часть кнопкой Добавить колонку реквизита.

3. Замените в строке кода, где возникает ошибка, системное поле на имя созданного реквизита.

Имя переменной совпадает с именем объекта

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

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

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

Изменение элемента формы

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

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

Чтобы изменить значение элемента, используют:

  • реквизиты объекта;
  • реквизиты, созданные в форме;
  • свойство ТекущиеДанные при обращении к данным текущей строки табличной части.

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

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

Обслуживание

Заказать консультацию

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