Поле объекта не доступна для записи 1с
Добрый день!
Появилась необходимость, чтобы в документе в зависимости от вида операции автоматически выбиралось определённое значение реквизита (в Платёжном поручении входящем при его создании при операции "Оплата от покупателя" в реквизит "Статья декларации по Единому налогу" автоматически подтягивалось определённая запись справочника).
В модуле документа в Процедуре ПриОткрытии я написала:
При попытке создания документа ошибка "Поле объекта недоступно для записи (СтатьяДекларацииПоЕдиномуНалогу)"
Как я поняла, неправильное обращение к элементу формы, но как по-другому - не знаю. Помогите советом, пожалуйста.
Спасибо!
(2) Alexey_, (3) Letos,
Исправила на:
Теперь ошибки нет, но и реквизит не заполняется
(4) Hantinka, а есть ли статья с таким наименованием в этом справочнике? А тип реквизита какой? Это реквизит формы или объекта? Если это реквизит объекта, то, по всей видимости, нужно писать так: Объект.РеквизитОбъекта = Справочники.ИмяСправочника.НайтиПоНаименованию("Наименование элемента справочника");
(5) starik-2005, Статья есть - название копирую, Это реквизит документа Платёжное поручение входящее в который выбирается элемент справочника. Написала следующее:
В итоге ошибка "Поле объекта не обнаружено (СтатьяДекларацииПоЕдиномуНалогу)"
Это я опять неправильно обратилась к объекту?
Если кончено на форме, есть реквизит СтатьяДекларацииПоЕдиномуНалогу.
(7) Doom2w, на форме реквизит этот есть,заменила. Но проблема была (и есть) не только в этом. Справочник то с иерархией и даже при выборе вручную из документа, если его не развернуть, то поиск не работает. Т.е., как я понимаю, я ещё и неправильно ищу по наименованию :(
ИЛИ искать до успеха.
Скорее всего Наименование указано не верно. Войти в режим предприятие найти в Справочнике СтатьиНалоговыхДеклараций нужный элемент и скопировать наименование данного элемента.
(9) Doom2w, Наименование указано верно, т.к. я его и копировала из справочника. Я думаю, что проблема именно в поиске, т.к. даже в режиме Предприятие, при выборе статьи декларации именно из документа поиск ни по наименованию, ни по коду не работает пока не развёрнута иерархия. Теперь буду маяться с поиском.
Проблему решил Doom2w . Ещё раз огромное спасибо!
Код должен выглядеть следующим образом
И его нужно дописывать в конце процедуры ПриОткрытии, т.к. цитирую "при открытии его что-то сбрасывает".
в результате этого каждый раз при открытии документа будет устанавливаться флаг модификации и устанавливаться исключительная блокировка на объект БД.
а)Предлагаю перенести заполнение реквизита в обработку заполнения модуля объекта.
б) разобраться - что же именно "сбрасывает" значение
(12) oldfornit, в процедуре ПриОткрытии также описаны счета расчётов устанавливаемые в зависимости от вида документа - и это фирменное 1с-ное решение, с котором нет никаких проблем. Я не понимаю почему установка ещё одного реквизита вызовет
в результате этого каждый раз при открытии документа будет устанавливаться флаг модификации и устанавливаться исключительная блокировка на объект БД.
(15) Hantinka, вот и получается, если Ваш код дописывать именно в конец процедуры "ПриОткрытии", то есть за проверками на "новость" документа, то этот код будет отрабатываться каждый раз при открытии документа с определенным видом операции.
Каждый раз будет изменять реквизит документа и этот документ, как измененный, будет заблокирован для изменений остальными пользователями - даже если этот документ просто открыли для просмотра.
(16) oldfornit, поняла, наконец-то. Спасибо!
Если написать код перед проверкой на "новость" документа, то всё работает.
P.S. Простите, я немного туго соображаю, т.к. знаний и опыта очень мало
(17) Hantinka, то есть опять за пределами проверок? :)
а) заполняемый реквизит - новый? В смысле нетиповой?
б) правильно ли я понимаю что необходимо как изменить уже существующие документы, так и сделать автозаполнение в новых?
(18) oldfornit, получается за пределами, блин.
Реквизит существующий, просто выбирать его вручную раз 50-100 в день и каждый день очень надоело (и иногда ещё можно забыть его заполнить, приходится проверять, иначе неправильно заполнится отчёт в налоговую). Надо просто чтоб он устанавливался в зависимости от операции документа по умолчанию определённый (как, например, ставка НДС или счёт учёта расчётов). В существующих документах всё заполнено вручную, изменять ничего не надо. Просто автоматизировать операцию. Я надеялась что есть штатная настройка как с НДС или счетами, а её нет, поэтому решила чуть допилить код (хэх в 7-ке было с эти проще). А т.к. я просто опытный пользователь и бухгалтер увлекающийся программированием, то получилось у меня не очень, а без помощи вообще никак.
В принципе, то, что документ при открытии будет заблокирован для других пользователей не проблема, т.к. с этим видом документов работает только один пользователь. Такое автозаполнение я хотела реализовать в двух документах "Платёжное поручение входящее" и "Платёжное поручение исходящее". В случае со входящим ПП есть в нём процедура "УстановитьАктивныйРеквизит", в которую можно дописать кусок вышеуказанного кода и всё работает. А в ПП исходящем такой процедуры нет. В процедуре ПриОткрытии код отрабатывает только если он находится в самом конце процедуры или непосредственно перед проверкой на "новость".
(19) Hantinka, посмотрите в модуле объекта - процедура ОбработкаЗаполнения.
Скорее всего там есть такая строчка -
(20) oldfornit, конкретно такого блока нет, но я таки поместила внутри проверки на новость. Вот так:
Платёжное поручение входящее:
Платёжное поручение исходящее:
(19) Hantinka, А почему бы это поле не запомнить в документе раз и навсегда?
А заполнять по умолчанию, только если это новый документ и при изменении поля ВидОперации.
Мне кажется это логичней.
(21) vkozak, так, собственно, вся возня для того чтобы это поле было заполнено по умолчанию в зависимости от операции документа (если оплата от поставщика. выбрать из статей декларации стать по реализации, а если другой вид операции, то оставить пустым буду выбирать вручную). Я выше писала, что поток документов большой (в день минимум штук 50 одного вида) и, как минимум, каждый раз выбирать одно и то же значение лениво, а, как максимум, просто иногда тупишь и забываешь где поставил, а где нет - приходится перепроверять. А т.к. мне приходится перепроверять ещё кучу всякой информации за другими пользователями и в трёх базах, хотелось автоматизации процесса, а штатной возможности чтоб выставить значение по умолчанию нет (как. например, по НДС: в настройках пользователя есть вариант выбрать основную ставку).
Для начинающих разработчиков 1С 8.3 трудно понять, почему же они так часто получают ошибку — Поле объекта недоступно для записи 1С (РабочаяДата, Код, Таблица, Номер, Дата и т.д.). Разберемся, почему эта ошибка может появятся, и как с ней бороться.
Если Вы НЕ программист 1С
Если Вы понятия не имеете, что такое программирование, то лучше ничего не трогать. Скорее всего, программисты, которые дорабатывали Вашу конфигурацию, просто допустили досадную ошибку. Просто вызовите специалиста, который работал с Вами. Данная ошибка решается достаточно быстро (если она не тянет за собой другие, более сложные проблемы). Если контакты с личными программистами потеряны, Вы можете обратиться к нашим высококвалифицированным профессионалам, подробности на странице — доработка 1С.
Если ошибка возникла после обновления конфигурации 1С 8.2 или 8.3, скорее всего, Вам необходимо обновить платформу 1С до последней актуальной версии.
Если Вы начинающий программист 1С
Если говорить в общем, то Вы пытаетесь в программном коде изменить данные, которые не имеете права менять. Рассмотрим конкретные случаи:
Меняй объект, а не ссылку
Хит-парад причин появления этой ошибки возглавляет попытка присвоения ссылке элемента новых атрибутов. Делают это обычно примерно так:
И вот на этом моменте новичок получает ошибку — Поле объекта недоступно для записи 1С.
Получите понятные самоучители по 1С бесплатно:
Следует уяснить: изменять свойства и реквизиты возможно только объекта. В данном случае переменная «Петров» содержит в себе т.н. «ссылку» — уникальный идентификатор в базе данных, с помощью которого система поддерживает уникальность. А то, что нам доступно «по точке» (Петров.НомерПаспорта), — это просто удобство 1С предприятия, и на самом деле любая «точка» — это еще один запрос к базе данных.
Правильное решение задачи:
В данном случае Вы из ссылки получаете объект, а только потом изменяете его. И потом, естественно, фиксируете новое состояние объекта — записываете его.
Попытка изменить системные поля
Второй по популярности причиной возникновения данной ошибки является попытка изменить реквизиты, которые не поддаются изменению.
- номер строки табличной части;
- использование ТекущаяСтрока, вместо ТекущиеДанные;
- и так далее.
Почему появляется эта ошибка?
Рис.1 Окно ошибки
Разработчики выделяют 3 распространенные причины появления окна с ошибкой:
Попытка изменения ссылки, а не объекта. В системе 1С существуют определенные правила, и одно из них гласит: «Изменять можно только объекты». Проблема в том, что ссылка – просто адрес объекта в базе данных, созданный для уникальности. Важно понять разницу между ссылкой и объектом, потому что при некоторых операциях с ними результат будет одинаковый.
Если вы случайно или по незнанию попытались изменить реквизит ссылки и получили ошибку, то необходимо добавить всего пару строк кода. В платформе 8.3 заложена функция получения объекта по ссылке, и для изменения значения реквизитов придется ею воспользоваться. То есть перед изменением нужно получить объект по ссылке, изменить реквизит и записать объект.
Вторым источником данной ошибки по частотности является код, в котором разработчик пытается поменять запрещенные к изменению реквизиты. Этим грешат неопытные программисты 1С, пытаясь изменить номер строки в табличной части, идентификаторы и так далее.
Еще одной причиной появления подобной ошибки является обновления. 1С выпускает их достаточно часто и для конфигураций, и для платформ. Проблема в том, что далеко не все изменения подвергаются тщательному тестированию, и пользователи невольно выполняют эту работу. Именно поэтому рекомендуется пользоваться тестовой базой для обновления, на которой проверять работоспособность нового релиза 1С, сопоставлять на ней значение и параметры.
Что делать, если после обновления вы все-таки не можете работать, наблюдая ошибку недоступности поля объекта для записи?
Если вы решили обратиться за помощью, имейте в виду, что в вашей компании может быть установлено несколько программных продуктов от 1С, поэтому для облегчения работы программистов при обращении сообщите им подробные данные. К нужным параметрам относится наименование программы, ее версия и действия, которые привели к появлению ошибки. С этими вводными разработчик в разы быстрее разберется с возникшей проблемой.
Иногда случается, что после обновления 1С пишет «Поле объекта не обнаружено», с указанием на тот или иной объект. Это может случиться при входе в программу, при заполнении какой-либо формы и т.п.
Рис.1 «Поле объекта не обнаружено»
Модуль, к которому идет обращение, перестает работать, но работу программа может не прерывать. Когда ошибка находится в модуле приложения или обработки, то при его запуске программа может и не запуститься.
Обновление платформы
При этом важно посмотреть на описание поставки, которое открывается при установке обновления. Там обязательно указывают рекомендации по использованию версии платформы.
Рис.2 Рекомендации по обновлению платформы
Таким образом, первый и основной вариант решения проблемы – это обновление платформы «1С:Предприятие».
Чтобы посмотреть, какая платформа у нас установлена, необходимо зайти в пункт меню «Сервис» - «О программе», где в верхней строке мы видим версию нашей платформы и сравниваем с рекомендуемой, при установке обновления конфигурации.
Рис.3 Обновление платформы
Очистка настроек пользователя
Рис.4 Настройки пользователя и прав
В подразделе «Персональные настройки пользователя» переходим по гиперссылке «Очистка настроек», где мы можем выбрать – очистить настройки у всех пользователей или только у выбранного. Также мы можем выбрать – очистить все настройки или какие-то отдельные виды настроек.
Рис.5 Гиперссылка «Очистка настроек»
При этом пункт «Отдельные виды настроек» доступен только при очистке настроек конкретного пользователя.
Рис.6 При этом пункт «Отдельные виды настроек» доступен только при очистке настроек конкретного пользователя
Перед нами откроются настройки пользователя, в которых как раз он и мог использовать устаревшие объекты, на которые и ссылается ошибка программы. Мы можем выбрать конкретную настройку (по подсказке ошибки) или очистить все настройки.
Рис.7 Настройки пользователя
Тестирование и исправление информационной базы
В том случае, если возникновение ошибки не связано с платформой и настройками пользователя, то возможно произошел просто сбой в информационной базе, который повредил указанный объект. В таком случае рекомендуется провести «Тестирование и исправление информационной базы», в режиме Конфигуратор, в пункте меню «Администрирование». Обратите внимание, что работа в конфигураторе требует определенных знаний, поэтому, если вы не уверены в своих силах, обращайтесь за консультацией по программе 1С к специалистам.
В тестировании и исправлении необходимо проверить логическую и ссылочную целостность базы. Если произошло необнаружение объекта, мы можем задать настройки программе проверки, что делать с такими объектами – создавать объекты, очищать ссылки или не изменять.
Рис.9 Проверка информационной базы
При выборе варианта «Создавать объекты», программа при обнаружении несуществующей ссылки на объект формирует элемент, своего рода заглушку. При выборе варианта – «Очищать ссылки» или «Удалять объект», некорректные ссылки будут просто удалены. Если оставить переключатель в положении – «Не изменять», программа просто укажет нам на этот объект, не предпринимая никаких действий. Этот вариант нам явно не поможет.
Таким образом, любой ошибке в программе 1С есть логическое объяснение. Если у вас остались вопросы, связанные с исправлением ошибок, и вы нуждаетесь в консультации по программе 1С, звоните, а также оставляйте заявки на нашем сайте. Наши специалисты свяжутся с вами в кратчайшие сроки.
С ошибкой Поле объекта недоступно для записи в 1С сталкиваются как начинающие программисты при доработке программного кода, так и обычные пользователи при обновлении программы. Полный список причин возникновения ошибки содержит:
- ошибку обновления программы;
- обращение к данным изменяемого объекта по Ссылке вместо Объект ;
- попытку изменения системных полей в программном коде.
Во всех перечисленных случаях при попытке записи данных фиксируется ошибка Поле объекта недоступно для записи .
Ошибка обновления
Каждое обновление содержит многочисленные изменения в программном коде программы. Разработчики тестируют все доработки, но тоже могут ошибаться. Обнаруженные ошибки регистрируются 1С и исправляются в следующем релизе.
Если ошибка появилась после проведенного обновления программы, есть вероятность, что она связана с обновлением.
Пока ошибку не исправили, восстановите базу и архивной копии или ждите выхода нового релиза обновления.
БухЭксперт8 рекомендует всегда делать копии перед обновлением. Это гарантирует возможность восстановления базы при неудачном обновлении.
Изменение объекта по ссылке
Самая распространенная ошибка начинающих программистов — запись изменений Объекта по Ссылке .
Объект — это внутренняя таблица 1С, в которой содержатся полные данные на элемент справочника, документ, регистр или обработку. Ссылка — указание места этой таблицы в 1С.
Чтобы вносить изменения в данные справочника, документа или регистра, нужно обращаться к данным Объекта , а не Ссылки .
При доработке программного кода или написании внешних обработок использование для изменения данных объекта Ссылки приводит к появлению ошибки Поле объекта недоступно для записи .
При написании обработки заполнения контактного лица в справочнике Контрагенты программист допустил ошибку в программном коде:
Выполнение записи происходит с ошибкой в поле Основное контактное лицо .
Ошибка записи выбранного контактного лица регистрируется при нажатии на кнопку Неправильно .
В данном программном коде Объект.Контрагент — это Ссылка на поле формы Контрагент обработки Заполнение контактного лица контрагента :
Для обращения к Объекту элемента справочника Контрагент нужно выполнить команду ПолучитьОбъект() . Исправленный программный код выглядит следующим образом:
В обработке Заполнение контактного лица контрагента исправление реализовано по кнопке Правильно . В этом случае программный код отработает без ошибки.
Но для получения идеального результата сохранения данных контактного лица в справочнике Контрагенты недостаточно, необходимо записать выбранного контрагента в справочнике Контактные лица .
По кнопке Идеально выбранное контактное лицо отобразится по ссылке Контактные лица контрагента.
БухЭксперт8 рекомендует выполнять все изменения программного кода на копии рабочей базы. Если ошибка появилась после доработки конфигурации или обработки программистом, лучше передать ему информацию по ошибке для исправления, а не пытаться исправлять ее самостоятельно.
Изменение системных полей
Третьей причиной, вызывающей ошибку Поле объекта недоступно для записи , является попытка изменения системных полей и команд в программном коде:
Эти поля недоступны для записи, попытка их изменения приводит к ошибке.
При написании обработки заполнения членов комиссии в документе Требование-накладная программист допустил ошибку в программном коде.
Выполнение записи членов комиссии в документ Требование-накладная происходит с ошибкой по полю Номер строки .
Ошибка записи выбранных в обработке членов комиссии регистрируется при нажатии кнопки Неправильно .
Ошибка вызвана присвоением номера системному полю НомерСтроки . Правильный программный код выглядит следующим образом:
По кнопке Правильно запись членов комиссии в документ Требование-накладная происходит без ошибки.
Все выбранные в обработке Заполнение членов комиссии в Требовании-накладной члены комиссии отображаются в документе по ссылке Комиссия .
БухЭксперт8 рекомендует выполнять все изменения программного кода на копии рабочей базы. Если ошибка появилась после доработки программистом конфигурации или обработки, лучше передать ему информацию по ошибке, а не пытаться исправлять ее самостоятельно.
См. также:
Помогла статья?
Получите еще секретный бонус и полный доступ к справочной системе БухЭксперт8 на 14 дней бесплатно
Похожие публикации
-
При обновлении базы 1С, установке новой Платформы, внесении изменений в.У вас нет доступа на просмотр Чтобы получить доступ:Оформите коммерческую.Ошибка Неоднозначное поле в запросе 1С 8.3 связана с наличием.После обновления информационной базы 1С, установки новой версии Платформы, доработки.
(1 оценок, среднее: 5,00 из 5)
Публикацию можно обсудить в комментариях ниже.
Обратите внимание!
В комментариях наши эксперты не отвечают на вопросы по программам 1С и законодательству.
Задать вопрос нашим специалистам можно в Личном кабинете
Вы можете задать еще вопросов
Доступ к форме "Задать вопрос" возможен только при оформлении полной подписки на БухЭксперт8
Нажимая кнопку "Задать вопрос", я соглашаюсь с
регламентом БухЭксперт8.ру >>
С 1 мая — новые коды в платежках при переводе денег физлицам
Изменения в 2022 году, о которых нужно знать бухгалтеру
6-НДФЛ за 1 квартал 2022 в 1С
Санкции и контрмеры: как работать организации и ее бухгалтеру в новой реальности. Часть 2
Отчетность за 1 квартал 2022
Лектор Мария Демашева — особенный. Спокойно, доходчиво, нет такого, что не понимаю. Высший класс!
Читайте также: