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

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

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

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

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

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

image002

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

При работе с объектами 1С различают два способа обращения к данным:

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

image004

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

image006

Для перехода к месту ошибки:

  • запустите конфигурацию в режиме отладки через конфигуратор Отладка — Начать отладку;
  • повторите действия, приводящие к ошибке;
  • в окне предупреждения нажмите Подробно, затем Конфигуратор.

В открывшемся служебном окне в нижней части конфигуратора отразится информация о месте сбоя:

image008

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

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

  1. Поставьте точку останова на строке кода из служебного сообщения.image010
  2. Перейдите в режим отладки конфигурации по кнопке Начать отладку.
  3. Выполните действия, приводящие к появлению ошибки, и исполнение программы остановится на отмеченной строке кода;
  4. С помощью команды контекстного меню Вычислить выражение определите тип объекта, которому присваивается значение:
    image012

    • НайденныйБанковскийСчет — содержит ссылку на элемент справочника Банковские счета;image014
    • ВалютаДенежныхСредств — реквизит справочника Банковские счета, имеет ссылочный тип данных на справочник Валюта.
      image016
      При определении типа выделяйте объект постепенно: сначала узнайте тип первой часть объекта до точки, далее увеличивайте количество выделенных частей. Если реквизит имеет ссылочный тип данных, результат в окне Выражение может быть неверно понят пользователем. Почти всегда в операциях присваивания последним указывается реквизит объекта.
      image018
  5. Для получения объекта впишите строку кода с использованием соответствующего метода:
    • документы, справочники, планы счетов и др. — ПолучитьОбъект();
    • константы, перечисления, регистры и др. — Получить(), Прочитать();
      Подробное описание методов смотрите в Синтакс-Помощнике.
  6. В выражении замените ссылку на объект.
    image020

Объекты конфигурации делятся:

  • объекты (ДокументОбъект.[Имя] и др.) — можно найти в базе по ссылке. На вкладке Прочее в окне редактирования объекта конфигурации есть Модуль объекта;
  • набор записей — для изменения одной записи регистров, перечислений используют менеджер записи, для констант — менеджер значения.

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

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

В 1С существуют специальные системные поля, которым программа присваивает значения по умолчанию:

  • порядковый номер строки;
  • номер группировки;
  • уровень группировки.

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

image022image024

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

  1. Выключите отображение системного поля через свойство Видимость.image026
  2. Добавьте свой реквизит в табличную часть кнопкой Добавить колонку реквизита.image028
  3. Замените в строке кода, где возникает ошибка, системное поле на имя созданного реквизита.image030

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

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

image032

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

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

image034

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

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

image036

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

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

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

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

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


Поставьте вашу оценку этой статье:
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Добавить комментарий или вопрос: