Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

О недостатках использования свойства ЭтотОбъект вместо ЭтаФорма в управляемой форме #296

Open
tormozit opened this issue Sep 11, 2024 · 1 comment

Comments

@tormozit
Copy link
Collaborator

tormozit commented Sep 11, 2024

https://partners.v8.1c.ru/forum/t/2202363/m/2202363
Свойство ЭтотОбъект в управляемых формах было добавлено для единообразия с другими клиентскими модулями. Одновременно старое свойство ЭтаФорма с тем же смыслом было скрыто из синтакс-помощника, но осталось в объектной модели, контекстной подсказке и командах рефакторинга. Однако в силу особенностей управляемой формы использование ЭтотОбъект вместо ЭтаФорма имеет ряд недостатков:

  1. В формах объектов в подавляющем большинстве есть основной реквизит с именем "Объект". Соответственно имеем 2 очень похожих по написанию свойства (ЭтотОбъект и Объект) с сильно различающимся смыслом. Это создает путаницу для начинающих программистов.
  2. Нередко код из модуля формы приходится переносить в клиентский общий модуль. При этом все обращения в нем к ЭтотОбъект сохраняют свою корректность для компилятора (проверки кода конфигуратора), хотя меняют смысл. Легко забыть переименовать их или передать одноименный параметр. Если передать одноименный параметр, то становится недоступным одноименное свойство самого модуля.

Эти недостатки повышают риски внесения лишних ошибок в код.
Поэтому предлагаю восстановить свойство ЭтаФорма "в правах":

  1. Вернуть его видимость в синтакс-помощнике.
  2. Убрать рекомендации и проверки (например в EDT), которые считают его устаревшим.

Пример перенесенного из модуля формы в клиентский общий модуль кода

Процедура РассчитатьСумму(СтрокаТЧ) Экспорт
   СтрокаТЧ.Сумма = СтрокаТЧ.Количество * СтрокаТЧ.Цена;
   СтрокаТЧ.Скидка = СтрокаТЧ.Сумма * СтрокаТЧ.ПроцентСкидки;
   Если СтрокаТЧ.Скидка > РасчетСумм.ПорогСкидки() Тогда
       ЭтотОбъект.ПоследняяБольшаяСкидка = СтрокаТЧ.Скидка;

Такой код будет скомпилирован и даже долгое время может работать без ошибки, пока однажды сработает условие и выполнится обращение к ЭтотОбъект.

изображение

@lrRatibor
Copy link

В EDT Вы у себя сами можете исключить это из проверок.

@tormozit tormozit changed the title О недостатках использования свойства ЭтотОбъект в управляемой форме О недостатках использования свойства ЭтотОбъект вместо ЭтаФорма в управляемой форме Sep 11, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants