|
|
|
|||
| snafu
14.12.12 — 10:27 |
В обработке на вкладке «Данные» добавляю реквизит типа «Документ.Объект». В модулях обработки он не доступен, то есть не выполняется подстановка при написании кода, синтаксический контроль говорит, что переменная не определена. Уже удалял реквизит, переименовывал — он по — прежнему недоступен. При этом тут же создаю другую обработку, так же добавляю реквизит, и он доступен в модулях, и синтаксический контроль проходит успешно. В чем причина явления, описанного в первом абзаце? |
||
| НЕА123
1 — 14.12.12 — 10:28 |
а жирный — кто? |
||
| MadHead
2 — 14.12.12 — 10:29 |
Почему объект, а не ссылка? Как то никогда не доводилось объекты добавлять в реквизиты |
||
| AlexeyAlexeyAlexey
3 — 14.12.12 — 10:31 |
Кинь мне обработку в мыло, хочу посмотреть |
||
| snafu
4 — 14.12.12 — 10:33 |
(1) Не понял. |
||
| snafu
5 — 14.12.12 — 10:34 |
(2) Обработка вызывается из вновь созданного документа, документ не записан и не проведен, ссылки соответственно нет. |
||
| НЕА123
6 — 14.12.12 — 10:39 |
(4)
(0) |
||
|
snafu 7 — 14.12.12 — 10:40 |
(6) Виноват, обычное приложение. |
TurboConf — расширение возможностей Конфигуратора 1С
Почему реквизит не доступен для записи?
Автор Yamuna, 12 окт 2019, 16:47
0 Пользователей и 1 гость просматривают эту тему.
добрый день, при формировании списка документов на форме списка документа,хочу перезаписать реквизит СостояниеЗаявки и ДатаСостояния, которые были переопределены в регистре, при выполнении получаем ошибку:
{Документ.ИТС_ВходящаяЗаявкаНаТОР.Форма.ФормаСписка.Форма(36)}: Поле объекта недоступно для записи (СостояниеЗаявки)
Строчка.СостояниеЗаявки = ВыборкаДетальныеЗаписи.СостояниеЗаявки;, и вопрос почему так , что не правильно?
&НаСервереБезКонтекста
Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
МассивКлючей = Строки.ПолучитьКлючи();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ИТС_ПодпискиТОРСрезПоследних.СостояниеЗаявки КАК СостояниеЗаявки,
| ИТС_ПодпискиТОРСрезПоследних.ДатаСостояния КАК ДатаСостояния
|ИЗ
| РегистрСведений.ИТС_ПодпискиТОР.СрезПоследних КАК ИТС_ПодпискиТОРСрезПоследних
|ГДЕ
| ИТС_ПодпискиТОРСрезПоследних.Заявка В( &Ссылка)";
Запрос.УстановитьПараметр("ссылка",МассивКлючей) ;
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Для каждого Строчка Из МассивКлючей Цикл
Строчка.СостояниеЗаявки = ВыборкаДетальныеЗаписи.СостояниеЗаявки;
Строчка.ДатаСостояния = ВыборкаДетальныеЗаписи.ДатаСостояния;
КонецЦикла;
// Вставить обработку выборки ВыборкаДетальныеЗаписи
КонецЦикла;
КонецПроцедуры
Цитата: Yamuna от 12 окт 2019, 16:47
добрый день, при формировании списка документов на форме списка документа,хочу перезаписать реквизит СостояниеЗаявки и ДатаСостояния, которые были переопределены в регистре, при выполнении получаем ошибку:
{Документ.ИТС_ВходящаяЗаявкаНаТОР.Форма.ФормаСписка.Форма(36)}: Поле объекта недоступно для записи (СостояниеЗаявки)
Строчка.СостояниеЗаявки = ВыборкаДетальныеЗаписи.СостояниеЗаявки;, и вопрос почему так , что не правильно?&НаСервереБезКонтекста
Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
МассивКлючей = Строки.ПолучитьКлючи();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ИТС_ПодпискиТОРСрезПоследних.СостояниеЗаявки КАК СостояниеЗаявки,
| ИТС_ПодпискиТОРСрезПоследних.ДатаСостояния КАК ДатаСостояния
|ИЗ
| РегистрСведений.ИТС_ПодпискиТОР.СрезПоследних КАК ИТС_ПодпискиТОРСрезПоследних
|ГДЕ
| ИТС_ПодпискиТОРСрезПоследних.Заявка В( &Ссылка)";
Запрос.УстановитьПараметр("ссылка",МассивКлючей) ;
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Для каждого Строчка Из МассивКлючей Цикл
Строчка.СостояниеЗаявки = ВыборкаДетальныеЗаписи.СостояниеЗаявки;
Строчка.ДатаСостояния = ВыборкаДетальныеЗаписи.ДатаСостояния;
КонецЦикла;
// Вставить обработку выборки ВыборкаДетальныеЗаписи
КонецЦикла;
КонецПроцедуры
Вы пытаетесь изменить реквизит у ссылки, а нужно изменять у объекта.
СтрочкаОбъект=Строчка.ПолучитьОбъект();
СтрочкаОбъект.СостояниеЗаявки = ВыборкаДетальныеЗаписи.СостояниеЗаявки;
Теги:
- Форум 1С
-
►
Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4 -
►
Конфигурирование, программирование в 1С Предприятие 8 -
►
Почему реквизит не доступен для записи?
Похожие темы (5)
Поиск
Добрый день! У меня огромная проблема. Конфигурация Бухгалтерия 3.0, есть пользователь с неполными правами (роль создавала сама). Пользователь создает счет на оплату покупателю, нажимает на поле надписи, где написано «Документ без НДС». Открывается общая форма цены и валют. Хочет выбрать тип цен, а он у этого пользователя недоступен для выбора. У пользователя права на счет на оплату и справочник «тип цен номенклатуры» есть. Искала по коду по доступности и толькопросмотру — нет ничего подобного. Более того, при открытии общей формы у объекта Элементы.ТипЦен.Доступность = Истина, а Элементы.ТипЦен.ТолькоПросмотр = ложь. Где еще можно поискать ограничение? Такое ощущение, что на что-то не хватает прав, а на что именно — непонятно
«права на счет на оплату и справочник «тип цен номенклатуры» есть» — какие права?
Добавление, редактирование…короче все, кроме удаления
А на общую форму «ФормаЦеныиВалюта» есть право просмотра?
на общей форме «ФормаЦеныИВалюты» есть еще реквизит «Вариант расчета НДС» — вот он доступен для редактирования, а тип цен нет
там еще есть Если ДокументБезНДС ИЛИ НДСНеВыделять Тогда
как это влияет на доступность поля Тип цен?
может я не понимаю, что вы хотите сказать) но это же доступность поля НДСВключенВСтоимость, а не доступность поля типцен
Чет я на НДСВключенВСтоимость зациклился, извиняюсь)
да ничего, у меня под конец рабочего дня тоже крыша потихоньку съезжает))
право Просмотр на нужный вид данных есть?
Да, там не только просмотр, там и редактирование тоже
«Если установлена низкая скорость соединения и не указывается текущая строка, то кэшируется форма выбора.» Может кэш попробуешь?
Низкая скорость точно не стоит, а еще я базу на свой комп перенесла. Сначала проблема была на компе у клиента, теперь на моем. Почищу кэш, но боюсь, что дело не в этом
Свойство «Редактирование» реквизита «ТипЦен» формы «ФормаЦеныИВалюта». В открывшемся окне редактирования ищем нашу роль и ставим напротив неё галочку.
Aleksandr N, Вы супер!!! Все получилось!!!
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
Поле объекта недоступно для записи в 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С информацию об ошибке.
Вмешательство в программный код при отсутствии необходимых навыков может повлечь за собой другие сбои и повреждения в структуре базы данных.
Заказать консультацию
По этой или иной ошибке Вы можете обратиться к нашим специалистам, мы Вам поможем решить Вашу проблему.
|
Yulunga 1172 / 714 / 208 Регистрация: 22.04.2013 Сообщений: 5,269 Записей в блоге: 1 |
||||||||
|
1 |
||||||||
расширения и недоступные реквизиты17.11.2017, 11:11. Показов 39691. Ответов 8 Метки нет (Все метки)
добрый день.
теперь собираюсь его же забацать в 8.3 с расширением
в консоли запросов работает. в расширении — нет. говорит нет ничего . добавил реквизит валюта взаиморасчета. окей.
0 |
|
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
17.11.2017, 11:11 |
|
8 |
|
476 / 413 / 93 Регистрация: 26.09.2012 Сообщений: 1,911 |
|
|
17.11.2017, 17:37 |
2 |
|
Идешь по справочниками и добавляешь нужные реквизиты. Думаю в случае владельца, нужно добавить и все справочники, что могут быть его владельцем.
0 |
|
1172 / 714 / 208 Регистрация: 22.04.2013 Сообщений: 5,269 Записей в блоге: 1 |
|
|
20.11.2017, 08:06 [ТС] |
3 |
|
нужно добавить и все справочники, что могут быть его владельцем. там родитель — справочник.контрагенты. а он добавлен. засада ( Миниатюры
0 |
|
1172 / 714 / 208 Регистрация: 22.04.2013 Сообщений: 5,269 Записей в блоге: 1 |
|
|
20.11.2017, 08:26 [ТС] |
4 |
|
прикольно. надо добавить форму списка в расширение. тогда всё появляется )
0 |
|
Joker_vad 476 / 413 / 93 Регистрация: 26.09.2012 Сообщений: 1,911 |
||||
|
20.11.2017, 17:32 |
5 |
|||
|
На м..сте нашел что нужно получить поля через * т.е
0 |
|
1845 / 1259 / 450 Регистрация: 16.01.2015 Сообщений: 5,502 |
|
|
20.11.2017, 17:49 |
6 |
|
может кто пояснить, при чём тут ФОРМА ? Yulunga, Еще как причем. Добавляя форму в расширение, автоматом добавляются все связанные с формой реквизиты, все Справочники документы перечисления, чей тип установлен для полей формы. Добавлено через 7 минут
там родитель — справочник.контрагенты. а он добавлен. засада ( А на скрине как раз реквизит Контрагент в справочнике ДоговорыКонтрагентов, в расширение не перенесен. Просто перенесите этот реквизит в расширение и все
1 |
|
1172 / 714 / 208 Регистрация: 22.04.2013 Сообщений: 5,269 Записей в блоге: 1 |
|
|
20.11.2017, 18:27 [ТС] |
7 |
|
Проверка синтаксиса в расширении даст ошибку, но запрос в режиме предприятия будет работать а, это слово-в-слово я где-то прочитал сегодня. но не вчитался. теперь понял.
Добавляя форму в расширение, автоматом добавляются все связанные с формой реквизиты,… теперь понятно, спасибо, вник.
А на скрине как раз реквизит Контрагент в справочнике ДоговорыКонтрагентов, в расширение не перенесен. Просто перенесите этот реквизит в расширение и все так в этом и был вопрос — как ?
0 |
|
1845 / 1259 / 450 Регистрация: 16.01.2015 Сообщений: 5,502 |
|
|
20.11.2017, 19:13 |
8 |
|
а, это слово-в-слово я где-то прочитал сегодня. но не вчитался. теперь понял. Чест слово не копипастил))) Но… для удобства работы, сам всегда переношу все что надо в расширение
теперь понятно, спасибо, вник. И…. одна из задач после окончания написания расширения, удалить ВСЕ, что не задействовано в его работе (то что задействовано, не даст удалить. начинать надо с реквизитов форм и подниматься выше по иерархии)
потому что реквизита контрагент не было. переносить было нечего. это и есть родитель Это в справочнике ДоговорыКонтрагентов НЕТ реквизита Контрагент?!!! Может вы не поняли? Надо реквизит справочника из основной конфигурации перенести в расширение. На реквизите в основной пр кн мыши — добавить в расширение
0 |
|
1172 / 714 / 208 Регистрация: 22.04.2013 Сообщений: 5,269 Записей в блоге: 1 |
|
|
21.11.2017, 07:24 [ТС] |
9 |
|
Это в справочнике ДоговорыКонтрагентов НЕТ реквизита Контрагент?!!! см. рисунок.
Может вы не поняли? я наверно плохо объясняю. Миниатюры
0 |
|
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
21.11.2017, 07:24 |
|
9 |



