gifts2017

Переменная ЭтотОбъект в 8.3

Опубликовал nick-max nick-max (nick-max) в раздел Программирование - Практика программирования

Мое наблюдение, которое может помочь вам сэкономить время

Недавно я обновлял Бухгалтерию на управляемых формах с 3.0.25.9 на 3.0.30.12 версию. И все мои внешние обработки перестали работать. Ругались они все одинаково:

{Форма.Форма.Форма(14)}: Поле объекта недоступно для записи (ЭтотОбъект)
ЭтотОбъект = РеквизитФормыВЗначение("Объект");

Открываю модуль формы. Ошибка происходит в следующей процедуре:

&НаСервере 
Процедура СформироватьНаСервере() ЭтотОбъект = РеквизитФормыВЗначение("Объект"); ЭтотОбъект.Сформировать(); ЗначениеВРеквизитФормы(ЭтотОбъект, "Объект"); КонецПроцедуры

Это стандартный способ вызвать процедуру модуля объекта из модуля формы. Работал везде и всегда. При более подробном рассмотрении в отладчике оказывается, что в переменной "ЭтотОбъект" хранится объект типа УправляемаяФорма. Та же самая управляемая форма, что и в реквизите формы "ЭтаФорма". При выполнении обработок в старой конфигурации все работает корректно. Платформа 8.3.4.389.

В ходе расследования выяснилось, что в новой версии конфигурации убрана совместимость с 8.2. А реквизит управляемой формы "ЭтотОбъект" появился как раз в 8.3. Так что советую все переменные "ЭтотОбъект" в модулях форм своих обработок переименовать, например, в "ДанныйОбъект". И надеяться, что разработчики платформы 1С хотя бы еще несколько лет не будут заводить реквизит формы с таким названием)

См. также

Вознаграждение за ответ
Сумма: 0 $m
Добавили:
nikita zakharov (zna.miass) (1.00 $m)
Подписаться Добавить вознаграждение

Комментарии

1. Михаил Зотов (ZOMI) 07.03.14 18:27
Заведи бложек и пости там в разделе
"Любимые новости из пресс-релизов 1С с опозданием на полгода" .
BigB; DrAku1a; integragirl; _also; Vladuha; rayastar; +6 4 Ответить 1
2. Ivan Alekseev (IvanAlekseev) 07.03.14 19:15
Чтобы не создавать объектов, используйте модуль менеджера, а данные передавайте в качестве параметра.
3. Евгений Сосна (pumbaE) 07.03.14 19:31
(2) IvanAlekseev, фокусник? Попробуйте найти во внешней обработке модуль менеджера.
4. Михаил Калимулин (mkalimulin) 07.03.14 20:57
А я всегда "об=" пишу. Лень - полезное качество!
5. Елена Пименова (Bukaska) 07.03.14 21:33
Я что-то слышала что в БСП2.2 как раз уюерут с обработчиков понятие: ЭтаФорма, и ей на замену придет понятие: ЭтотОбъект)))
6. Александр Лыткин (TrinitronOTV) 08.03.14 11:03
спасибо автору за замечания, описанные в данной публикации
7. nikita zakharov (zna.miass) 11.03.14 00:20
8. Владислав (Vladuha) 11.03.14 10:20
В файл V8Update.htm все-таки надо иногда заглядывать, тогда подобных сюрпризов будет меньше ;)
9. Яков Коган (Yashazz) 11.03.14 19:04
А нефиг называть свои переменные служебными именами.
Ovrfox; uncle_Vasya; Bukaska; NittenRenegade; BigB; 1c-kt; AlexanderKai; Nuuq; GATTUSO; amon_ra; artfa; artbear; DrAku1a; bulpi; 3762515; МимохожийОднако; +16 Ответить 1
10. Антон Рощин (wolfsoft) 12.03.14 09:15
Так что советую все переменные "ЭтотОбъект" в модулях форм своих обработок переименовать, например, в "ДанныйОбъект". И надеяться, что разработчики платформы 1С хотя бы еще несколько лет не будут заводить реквизит формы с таким названием

Советую переименовать в ТекОбъект и забыть об опасениях навсегда :)
niko75; GATTUSO; higs; nick-max; theshadowco; +5 Ответить
11. Тимур Багаутдинов (Timur_Bagautdinov) 12.03.14 10:39
А если бы переменным присваивались содержательные имена, а не всякие ЭтотОбъект, ДанныйОбъект, ТекущийОбъект и т.п., то таких бы проблем совсем бы не возникало. В умных книжках много про это пишут.
Ovrfox; uncle_Vasya; +2 Ответить 1
12. Ruslan (rus128) 12.03.14 11:52
плюсую, но не хотелось бы, чтобы в жизни пришлось на такие грабли наступить.
а как тут голосовать теперь?
(1) ZOMI, изменения зарезервированных (предопределенных) имен объектов теперь в пресс-релизах описывают?
13. Михаил Калимулин (mkalimulin) 12.03.14 12:07
(11) Timur_Bagautdinov, Какие например?
АЭтаПеременнаяНамНужнаДляДоступаКТекущемуОбъекту - годится?
14. Михаил Зотов (ZOMI) 12.03.14 13:05
(12) rus128, не поверите... в V8Update.htm в описании изменений 8.3.3 про "ЭтотОбъект" было сообщено. Читайте иногда/// А то у Вас как у ТС, наверное, столько новостей с которыми хотелось бы поделиться.
15. nick-max nick-max (nick-max) 12.03.14 16:15
(12) rus128,

В файле V8Update правда написано про добавление метода в 8.3.3. Понятно, что дотуда никто не дочитывал (кроме zomi), но ctrl+F ом найти можно. Другое дело, что при возникновении аналогичной ошибки эту тему можно будет найти в гугле, а вот фрагмент файла спецификации - нет.

Хотя тему топика и правда можно переименовать в свете высказанных замечаний)
16. Эмиль Карапетян (amon_ra) 13.03.14 17:22
(9) Yashazz, Вот как-то трудно не согласиться! Я вот считаю, что если обзываешь переменную, то и обозначь ее что это переменная каким-нить символом (например добавь спереди буковку "п") потом же самому легче будет с переменной работать.
17. Гульнара Р (Эсти) 03.09.14 09:53
18. Andrey Smirnov (dusha0020) 26.01.15 18:20
ЭтотОбъект использовался в модулях объектов фиг знает с каких времен и обозначал собственно Объект в модуле которого это употреблялось. Логично было ожидать, что рано или поздно 1С введет ЭтотОбъект в форму где он по аналогии будет означать собственно форму в модуле которой употребилось...
Хотя с другой стороны удобно в модуле формы и объекта использовать один и тот же псевдоним для собственно объекта... И здесь логику автора не оспорить, но чтобы в очередной раз не попасть впросак нужно учитывать логику разработчиков платформы:)
19. Елена Пименова (Bukaska) 27.01.15 13:24
(18) dusha0020, Я тоже что-то слышала, что в БСП 2.2 так и сделают, что везде вместо: ЭтаФорма будет: ЭтотОбъект.
Так а вместо ЭтотОбъект - какой псевдоним тогда будет? Просто Объект? Нельзя же две разные переменные одним именем, иначе программа не так поймёт...
20. Виталий Черненко (SeiOkami) 12.03.15 09:57
У уже везде есть СейОбъект. Такое одинэсники точно не будут использовать
21. Ольга Теленкова (telenkovaolga) 04.08.15 08:26
22. Никита Васин (vasyalisk88) 08.09.15 14:10
Из оперы -
ТаблицаЗначений = Новый ТаблицаЗначений;
...
Для каждого Строка Из ТаблицаЗначений Цикл 

КонецЦикла
...Показать Скрыть

))))
23. Рустам Ахметов (rustamakhmetov) 21.12.15 12:53
См. "Таблица 1. Переименования методов и свойств в версии 8.3" на ИТС здесь
Прикрепленные файлы:
dj_serega; +1 Ответить
24. Xer shi (Xershi) 07.07.16 13:03
В конфигурации на обычных формах платформа 8.3.5 пока режим совместимости 8.2.13
Пришлось написать такое
//УстановитьОтборыДинамическихСписков(ЭтотОбъект, Отборы);
УстановитьОтборыДинамическихСписков(РеквизитФормыВЗначение("Объект"), Отборы);
УстановитьОтборыДинамическихСписков(ЭтаФорма, Отборы);

Обработка портировалась с управляемых форм. Хотя это не вариант, "ЭтаФорма" похоже требовалось вставить, пока полностью переход не сделаю.
25. Константин Куликов (Светлый ум) 01.09.16 22:34
накинулись дружно...а мне вот в 3 часа ночи пригодилось (чужую заготовку реанимировал) за это +1
:P
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа