Не показывает реквизиты и табличные части внешней обработки в модуле объекта если есть "ОбщегоНазначения."

Евгений М. Закрыто

Во вложении обработка с одним реквизитом и одной таб частью.
ТестИР_ТабЧасть.epf
Заходим в модуль обработки

Процедура Тест() Экспорт				
	ОбщегоНазначения.СообщитьПользователю("Вошли в модуль объекта внешней обработки!");	// С этой строкой подсказки с именем таб части нет
	//Сообщить("Привет!"); // а если убрать первую и оставить эту, то подсказка работает корректно
	
КонецПроцедуры

Если здесь в последней строке процедуры или всего модуля сделать "ЭтотОбъект." то не видим ни реквизитов, ни табличной части обработки (без "ЭтотОбъект" тоже самое)

Теперь комментируем 1-ю строку процедуры "ОбщегоНазначения.СообщитьПользователю.."
и расскомментируем вторую "Сообщить..."
Сохраняемся.
Теперь всё работает нормально

В обратную сторону, чтобы подсказка снова не подсказывала, тоже работает

Ссылка скрыта

Комментарии

Евгений М.
#1, ред. 01 ноября 2024 15:37

Причем "ОбщегоНазначения" может быть в любом месте. Например, вот так тоже не работает

Имя модуля не имеет значения
Евгений М. изменил статус на Открыто


tormozit
#2, ред. 01 ноября 2024 18:50

Скорее всего такой общий модуль (ОбщегоНазначения) отсутствует в приложении ИР. Поэтому создание объекта внешней обработки там выбрасывает ошибку и соответственно не видны ее метаданные.

У меня проблема в описанном виде не воспроизводится. Но если написать вместо ОбщегоНазначения другое несуществующее имя, то воспроизводится.


tormozit
#3, ред. 01 ноября 2024 19:15

Однажды я уже думал над обозначением для пользователя причины такого поведения. Но из простых решений есть только вывод уведомления об ошибке компиляции модуля обработки при каждом вызове подсказки, т.к. объект внешней обработки я не кэширую. Пробовал его и ожидаемо показался слишком назойливым, т.к. агрессивно принуждает исправлять ошибку компиляции.


Евгений М.
#4, 01 ноября 2024 20:54

(2) tormozit,

Скорее всего такой общий модуль (ОбщегоНазначения) отсутствует в приложении ИР. Поэтому создание объекта внешней обработки там выбрасывает ошибку и соответственно не видны ее метаданные.

Не совсем понял что это значит. У меня допиленная Бухгалтерия+БитФинанс. Я уже даже подрубил адаптер к основной базе, где ведется разработка, а не к "донору", как было всегда. Но это не помогло.
Общий модуль "ОбщегоНазначения" конечно же есть в Бухгалтерии. Но я даже пробовал подставить другой существующий общий модуль, но это не спасло (писал во 2м посте).
У меня бОльшая часть начальной разработки проходит во внешних обработках. И вот такое поведение сводит все плюсы быстрой разработки на нет. Сейчас вообще отключил адаптер. Так хоть что-то подсказывает и не приходится постоянно переключаться на основную форму обработки, чтобы посмотреть правильное имя Табличной части и/или реквизита


Евгений М.
#5, ред. 01 ноября 2024 21:03

А ларчик просто открывался!
Вставка в модуль обработки директивы

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
// тут весь код модуля
#КонецЕсли

Спасает ситуацию!


tormozit
#6, 01 ноября 2024 21:04

Да. Причина в том, что я создаю объект внешней обработки на клиенте. А твой общий модуль на клиенте недоступен.
Подумаю.


tormozit
#7, ред. 01 ноября 2024 22:10

Теперь в такой ситуации будет однократно выводиться уведомление:

Ошибка создания редактируемой внешней обработки на клиенте с родным модулем объекта. Поэтому создана и закэширована ее копия без модуля. Для отключения кэширования окружите модуль инструкцией "#Если Сервер Тогда" и выполните сброс памятного кэша.

И метаданные внешней обработки обновляться перестанут, т.к. одна распаковка+запаковка EPF файла занимает 500мс. Во всех отношениях такое поведение кажется не хуже старого.


Евгений М.
#8, ред. 04 ноября 2024 11:26

(7) tormozit, я не сильно понимаю механики, поэтому уточню:

  1. Если я не ставлю "#Если Сервер Тогда", то Адаптер при первом обращении сделает кэш обработки и её метаданных, которые будут в последующем использоваться при редактировании модуля. Так? Тогда непонятно несколько моментов:
    (а) если я добавляю новый реквизит, то как нужно обновить кэш? переоткрыв обработку?
    (б) Сообщение с предложением будет всплывать один раз или при каждом нажатии символа в модуле обработки?

  2. Если я ставлю "#Если Сервер Тогда", тогда обработка будет постоянно (?) переобновляться распаковкой и запаковкой?


tormozit
#9, ред. 04 ноября 2024 18:37

Исправлено в ИР 7.51 https://www.hostedredmine.com/issues/995740


tormozit
#10, ред. 05 ноября 2024 17:20

(8) Евгений М.,

  1. Да. Порядок обновления описал в документации. Но он тебе уже знаком. Уведомление будет только при помещении в кэш.
  2. Нет. Пересборка файла выполняется только в случае невозможности создания из него объекта. И если это случилось, то объект будет закэширован, т.к. операция долгая.


Евгений М.
#11, 05 ноября 2024 17:08

Евгений М. изменил статус на Закрыто


Для вставки изображения или файла, перетащите его в поле редактора или вставьте файл из буфера