Для собственного объекта dot-доступ и доступ по строковому имени обращаются к одному полю. Перед изменением проверяем тип, разрешённое имя и допустимое значение.
Где и как запускать
Полный серверный общий модуль учебной базы. Собственные значения в памяти, без чтения или записи рабочих данных.
Подготовка
В отдельной учебной базе 8.5.1.1343 создайте общий модуль УчебныйЯзык: Сервер=Истина, Глобальный=Ложь, ВызовСервера=Ложь, Привилегированный=Ложь. Клиентские и внешнее соединение отключены; ПовторноеИспользованиеВозвращаемыхЗначений=НеИспользовать.
Вставьте весь приведённый текст в этот общий модуль. ВыполнитьПример — экспортная точка входа; остальные процедуры и функции располагаются рядом, а не внутри неё.
В своей внешней учебной обработке создайте управляемую форму, команду Выполнить и кнопку. Клиентский обработчик Выполнить(Команда) вызывает свою процедуру ВыполнитьНаСервере(); она имеет директиву &НаСервереБезКонтекста и одну строку УчебныйЯзык.ВыполнитьПример();. Это серверный вызов общего модуля, а не разрешение клиенту прямо обращаться к серверной библиотеке.
Все товары, количества и строки придуманы в этом модуле. Запись документов, подключение к чужой базе, файлы, сеть и печать не используются. В рабочие общие модули текст не вставляйте.
HTML только показывает BSL. Код в 1С не запускался; перечисленные результаты и отрицательные опыты проверяйте самостоятельно в собственном стенде.
Процедура ВыполнитьПример() Экспорт
Позиция = Новый Структура("Товар,Цена,Количество", "Азбука", 250, 3);
Сообщить(Позиция.Количество = Позиция["Количество"]);
До = Позиция.Цена * Позиция.Количество;
Изменено = ИзменитьУчебноеКоличество(Позиция, "Количество", 4);
После = Позиция.Цена * Позиция["Количество"];
Сообщить(Изменено И Позиция.Количество = 4);
Сообщить(До = 750 И После = 1000);
Сообщить(Не ИзменитьУчебноеКоличество(Позиция, "Цена", 1));
Сообщить(Не ИзменитьУчебноеКоличество(Позиция, "Количество", 0));
Сообщить(Не ИзменитьУчебноеКоличество(Позиция, "Количество", "5"));
Сообщить(Не ИзменитьУчебноеКоличество(Позиция, "НеизвестноеПоле", 5));
Сообщить(Позиция.Цена = 250 И Позиция.Количество = 4);
КонецПроцедуры
Функция ИзменитьУчебноеКоличество(Позиция, Знач ИмяПоля, Знач НовоеКоличество)
Если ТипЗнч(Позиция) <> Тип("Структура") Тогда
Возврат Ложь;
КонецЕсли;
Если ИмяПоля <> "Количество" Тогда
Возврат Ложь;
КонецЕсли;
Если Не Позиция.Свойство(ИмяПоля) Тогда
Возврат Ложь;
КонецЕсли;
Если ТипЗнч(НовоеКоличество) <> Тип("Число") Тогда
Возврат Ложь;
КонецЕсли;
Если НовоеКоличество < 1 Или НовоеКоличество > 10 Или НовоеКоличество <> Цел(НовоеКоличество) Тогда
Возврат Ложь;
КонецЕсли;
Позиция[ИмяПоля] = НовоеКоличество;
Возврат Истина;
КонецФункцииРазбор по шагам
Создать известную структуру Товар/Цена/Количество и сравнить два способа чтения количества 3.
Собственная функция разрешает только поле Количество. Проверка имени выполняется до [] и не позволяет строке из неизвестного источника выбирать любое поле.
Свойство проверяет существование разрешённого поля. Затем тип Число проверяется до Цел и границ, поэтому строка 5 не участвует в арифметике.
Количество должно быть целым от 1 до 10. После успешной проверки присвоить Позиция[ИмяПоля] = НовоеКоличество.
Через точку наблюдаем то же обновлённое поле: четыре книги по 250 дают 1000 вместо 750.
По отдельности попробовать запрет цены, нулевое количество, строковый ввод и неизвестное имя. Все отказные ветви возвращают Ложь до записи; исходная цена и принятое количество сохраняются.
Как проверить результат
Восемь сообщений Истина. Единственное успешное изменение — количество с 3 на 4; итоговые поля Цена=250 и Количество=4.
Попробуйте разрешённое количество 10: будет Истина и сумма 2500. Для 1.5,11 или другой структуры без поля Количество функция вернёт Ложь.
Ожидаемый результат
Динамическое имя применяется к реальному собственному полю с безопасным ограничением, а не к неизвестному объекту или произвольному реквизиту рабочей базы.
На что обратить внимание
[] не отменяет readonly или правила доступа конкретного типа. У этой собственной изменяемой структуры поле количества записываемо; это не обещание записи любого свойства платформы.
Проверять поле через Структура.Свойство можно только у Структура. В функции сначала проверяется точный тип, а не предполагается наличие универсального метода у всякого объекта.
Этот отказный контракт возвращает Булево и не формирует текст ошибки. Для интерактивной формы добавьте согласованную диагностику отдельно, не выдавая Ложь за успешную запись.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.