После обновления или доработки конфигурации пользователи иногда сталкиваются с ошибкой в 1С 8.3 «Поле объекта недоступно для записи». Разберем, с чем связана ошибка и как ее исправить на примерах в платформе 8.3.15.1747. Для самостоятельного решения задачи пользователю потребуются начальные знания в области 1С программирования.
Содержание
Причины появления ошибки
При появлении ошибки после обновления конфигурации достаточно дождаться выхода исправленной версии. Разработчики 1С оперативно реагируют на возникшие проблемы и решают вопрос в короткие сроки. Но лучше подстраховаться заранее и либо предварительно устанавливать обновления на тестовую базу, либо иметь в запасе актуальную резервную копию.
Если конфигурация изменялась, редактировалась под нужды организации, то для устранения ошибки лучше обратиться к программисту 1С.
Сообщение «Поле объекта недоступно для записи (Имя_поля)» выдается пользователю, когда программа в процессе исполнения кода не может присвоить элементу требуемое значение.
Доступно только для чтения данных
При работе с объектами 1С различают два способа обращения к данным:
- ссылка — содержит только представление объекта, часто это код и наименование. Сам объект не загружается. Доступ к реквизитам получают разыменованием: обращением через точку. Ссылки читаются из базы, но не изменяются;
- объект — включает данные в полном объеме, в т. ч. реквизиты, табличные части, которые можно создавать, удалять и редактировать.
Ссылочные данные программисты используют, когда не потребуется изменять объект. Программа обрабатывает ссылки быстрее, т. к. из базы загружается только информация об объекте — ссылка, а не сам объект целиком со всеми реквизитами и другими входящими в него данными. Для записи изменений из ссылки получают объект: например, с помощью метода ПолучитьОбъект(). Если это не сделано, и присвоение нового значения производится ссылочному полю, возникает ошибка «Поле объекта недоступно для записи».
Для перехода к месту ошибки:
- запустите конфигурацию в режиме отладки через конфигуратор Отладка — Начать отладку;
- повторите действия, приводящие к ошибке;
- в окне предупреждения нажмите Подробно, затем Конфигуратор.
В открывшемся служебном окне в нижней части конфигуратора отразится информация о месте сбоя:
- Поле объекта недоступно для записи (ВалютаДенежныхСредств) — тест ошибки и имя элемента, куда программа пытается сохранить данные;
- Справочник.Контрагенты.Форма.ФормаЭлемента.Форма(137) — путь до модуля, где расположена выполняемая строка кода, и порядковый номер строки с ошибкой;
- НайденныйБанковскийСчет.ВалютаДенежныхСредств = БанковскийСчет.ВалютаДенежныхСредств — команда записи изменений, в которой возникает сбой.
Чтобы исправить ошибку:
- Поставьте точку останова на строке кода из служебного сообщения.
- Перейдите в режим отладки конфигурации по кнопке Начать отладку.
- Выполните действия, приводящие к появлению ошибки, и исполнение программы остановится на отмеченной строке кода;
- С помощью команды контекстного меню Вычислить выражение определите тип объекта, которому присваивается значение:
- НайденныйБанковскийСчет — содержит ссылку на элемент справочника Банковские счета;
- ВалютаДенежныхСредств — реквизит справочника Банковские счета, имеет ссылочный тип данных на справочник Валюта.
При определении типа выделяйте объект постепенно: сначала узнайте тип первой часть объекта до точки, далее увеличивайте количество выделенных частей. Если реквизит имеет ссылочный тип данных, результат в окне Выражение может быть неверно понят пользователем. Почти всегда в операциях присваивания последним указывается реквизит объекта.
- Для получения объекта впишите строку кода с использованием соответствующего метода:
- документы, справочники, планы счетов и др. — ПолучитьОбъект();
- константы, перечисления, регистры и др. — Получить(), Прочитать();
Подробное описание методов смотрите в Синтакс-Помощнике.
- В выражении замените ссылку на объект.
Объекты конфигурации делятся:
- объекты (ДокументОбъект.[Имя] и др.) — можно найти в базе по ссылке. На вкладке Прочее в окне редактирования объекта конфигурации есть Модуль объекта;
- набор записей — для изменения одной записи регистров, перечислений используют менеджер записи, для констант — менеджер значения.
Ошибку «Поле объекта недоступно для записи» 1С выдает при неправильной записи как объектных данных, так и наборов записей. Обращение с записями лучше не исправлять самостоятельно, а поручить программисту.
Попытка изменить системные поля
В 1С существуют специальные системные поля, которым программа присваивает значения по умолчанию:
- порядковый номер строки;
- номер группировки;
- уровень группировки.
Системные поля доступны только для чтения. Создаются автоматически к элементам: например, номера строк табличных частей или уровень группировки в отчете. Повлиять на них пользователь не может. При попытке изменить значение будет выдано окно с предупреждением:
Один из вариантов решения:
- Выключите отображение системного поля через свойство Видимость.
- Добавьте свой реквизит в табличную часть кнопкой Добавить колонку реквизита.
- Замените в строке кода, где возникает ошибка, системное поле на имя созданного реквизита.
Имя переменной совпадает с именем объекта
При использовании переменных в программном коде следует задавать им наименования, отличные от зарезервированных за объектами системы. В противном случае программа посчитает их не переменными, которым можно присваиваться любое значение, а элементами базы соответствующего типа с уже заданными значениями.
В примере в переменную Документы пытаются записать результат выборки документов. В процессе выполнения программы пользователю выдается сообщение «Поле объекта недоступно для записи (Документ)». Для решения проблемы измените имя переменной, но оно не должно начинаться с цифры и совпадать с другими переменными во избежание конфликтных ситуаций.
Кроме команды равенства логично предположить, что переменная используется в последующем коде, где после изменения имени начнут возникать различные сбои. Поэтому поменять наименование нужно во всем местах, в которых она упоминается.
Изменение элемента формы
Еще один пример кода, приводящий к ошибке «Поле объекта недоступно для записи», — неверное обращение к полям формы при попытке присвоить им новое значение.
Формы содержат коллекцию элементов формы, через разыменование (точку) получают доступ к полю, таблице и т. д. и управляют их свойствами. Элементы используются для графической визуализации информации на форме. Они не содержат данные, путь к ним прописан в свойстве Путь к данным.
Чтобы изменить значение элемента, используют:
- реквизиты объекта;
- реквизиты, созданные в форме;
- свойство ТекущиеДанные при обращении к данным текущей строки табличной части.
Ошибку «Поле объекта недоступно для записи» сможет исправить пользователь самостоятельно, если он хоть немного разбирается в программном коде. Все изменения рекомендуется сначала произвести в тестовой базе. При возникновении затруднений передайте программисту 1С информацию об ошибке.
Вмешательство в программный код при отсутствии необходимых навыков может повлечь за собой другие сбои и повреждения в структуре базы данных.
См. также:
Поставьте вашу оценку этой статье:
Для отправки комментария вам необходимо авторизоваться.