Можно ли комментировать вставки #Удаление и #КонецУдаления?

1. pentanom 25 21.11.23 20:10 Сейчас в теме
Сделал расширение и удалением куска кода
#Удаление	
		Если ЗначениеЗаполнено(ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве(ДеревоДанных, "ДопДанныеДокументаОтгрузки")) Тогда
			ИнфПолФХЖ3 = ПолучитьОбъектТипаCML("Файл.Документ.СвПродПер.ИнфПолФХЖ3", ПространствоИмен);
			
			РаботаСФайламиБЭД.ЗаполнитьСвойствоXDTO(ИнфПолФХЖ3, "ИдФайлИнфПол",
				ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве(ДеревоДанных, "ДопДанныеДокументаОтгрузки.ИдентификаторФайла"), , Ошибки);
			
			СтрокиДопДанныеДокументаОтгрузки = ДеревоДанных.Строки.Найти("ДопДанныеДокументаОтгрузки", "ПолныйПуть");
			СтрокаТаблицы = СтрокиДопДанныеДокументаОтгрузки.Строки.Найти("ДопДанныеДокументаОтгрузки.ТекстоваяИнформация", "ПолныйПуть");
			Если ТипЗнч(СтрокаТаблицы.Значение) = Тип("Число") И СтрокаТаблицы.Значение > 0 Тогда
				Для Каждого Информация Из СтрокаТаблицы.Строки Цикл
					ТекстИнфТип = ПолучитьОбъектТипаCML("ТекстИнфТип", ПространствоИмен);
					
					РаботаСФайламиБЭД.ЗаполнитьСвойствоXDTO(ТекстИнфТип, "Идентиф",
						ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве(Информация,
						"ДопДанныеДокументаОтгрузки.ТекстоваяИнформация.НомерСтроки.Идентификатор"), Истина, Ошибки);
					РаботаСФайламиБЭД.ЗаполнитьСвойствоXDTO(ТекстИнфТип, "Значен",
						ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве(Информация,
						"ДопДанныеДокументаОтгрузки.ТекстоваяИнформация.НомерСтроки.Значение"), Истина, Ошибки);
					
					ИнфПолФХЖ3.ТекстИнф.Добавить(ТекстИнфТип);
				КонецЦикла;
			КонецЕсли;
			РаботаСФайламиБЭД.ЗаполнитьСвойствоXDTO(ДанныеОбОтгрузкеТоваров, "ИнфПолФХЖ3", ИнфПолФХЖ3, Истина, Ошибки);
		КонецЕсли;
#КонецУдаления		
Показать
Теперь мне временно нужно отключить это удаление. Думал, что можно закомментировать строки #Удаление и #КонецУдаления. Но почему-то после этого Отладчик не останавливается в точках останова, которые вне этого куска. А вообще-то комментировать эти строки можно?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. ZhokhovM 733 21.11.23 20:25 Сейчас в теме
Комментировать нужно после строки #Удаление и перед строкой #КонецУдаления, ну и чтобы аннотация была &ИзменениеИКонтроль.
#Удаление
//код
#КонецУдаления
3. pentanom 25 21.11.23 21:17 Сейчас в теме
(2)

2. ZhokhovM 809 21.11.23 20:25
Комментировать нужно после строки #Удаление и перед строкой #КонецУдаления, ну и чтобы аннотация была &ИзменениеИКонтроль.
#Удаление
//код
#КонецУдаления
Мне нужно, чтобы код внутри выполнялся.
4. YNik 21.11.23 23:34 Сейчас в теме
(3) Попробуйте так:
#Удаление
#КонецУдаления
   код
#Удаление
#КонецУдаления
pentanom; +1 Ответить
6. pentanom 25 22.11.23 14:43 Сейчас в теме
5. ZhokhovM 733 22.11.23 08:31 Сейчас в теме
(3) тогда лучше использовать аннотацию Вместо
//#Удаление
код
//#КонецУдаления
7. VmvLer 22.11.23 17:00 Сейчас в теме
(5)
&Вместо
желательно убрать из платформы как потенциально тупиковую ветвь эволюции
8. lefthander 22.11.23 17:23 Сейчас в теме
(7)Не согласен, иногда просто нужная штукаа.....
9. pentanom 25 22.11.23 18:49 Сейчас в теме
Обнаружил следующую ситуацию. В процедуре аннотацией &ИзменениеИКонтроль(...) есть два куска со строками #Удаление и #КонецУдаления. В одном их закомментировал. Запускаю сделанное в работу и получаю, что эта процедура работает так, как будто в нее никаких изменений не вносилось. Хотя во втором куске строке не комментировались. Мне кажется, что это неправильное поведение - программа должна была об этом как-то сообщить.
10. VmvLer 23.11.23 09:41 Сейчас в теме
(9) отладчиком проверяли?

хотя почему ненормально? один блок исключения активен, значит изменения есть.

а вот когда все блоки изменения выключить, то методы идентичны и тогда глупо объявлять его в расширении.

компилятор, при сборке кода, по секциям формирует текст модуля и когда все закоменчены, то полученный текст равен исходному.
12. pentanom 25 23.11.23 11:01 Сейчас в теме
(10)
(9) отладчиком проверяли?
Проверил. Поставил точку останова на кусок в основной конфигурации, который в расширении скобках #Удаление ... #КонецУдаления. Останов произошел на этой точке в основной конфигурации.

(10)
а вот когда все блоки изменения выключить
У меня в расширении три таких блока. Хотел таким образом выключить только один

P.S. Платформа 8.3.22.2239. Может быть на более продвинутых платформах такого нет.
11. Captain_Pan 23.11.23 10:59 Сейчас в теме
Нельзя закоментить аннотации в процедуре с &ИзменениеИКонтроль. Потому-что закоменченная аннотация считается строкой кода, а в расширяемой процедуре такой строки(//#Удаление) - нет. Поэтому она не пройдет проверку применимости расширения. Поэтому в отладке ты не можешь попасть в эту процедуру.

Код в процедурах с &ИзменениеИКонтроль должен полностью соответствовать расширяемой процедуре, если из него удалить все вставки и удаления. (разрешается только с отступами поиграться)
13. pentanom 25 23.11.23 11:11 Сейчас в теме
(11)
Нельзя закоментить аннотации в процедуре с &ИзменениеИКонтроль.
Это уже понятно.
(11)
Потому-что закоменченная аннотация считается строкой кода, а в расширяемой процедуре такой строки(//#Удаление) - нет. Поэтому она не пройдет проверку применимости расширения.
Вот только "контроля" в этой ситуации нет :(
(11)
Код в процедурах с &ИзменениеИКонтроль должен полностью соответствовать расширяемой процедуре, если из него удалить все вставки и удаления. (разрешается только с отступами поиграться)
Я всегда считал, что любой компилятора закомментированные строки просто игнорирует, т.е. это ничего. Но похоже, в данном случае я не прав!
15. Captain_Pan 23.11.23 11:50 Сейчас в теме
(13)
Я всегда считал, что любой компилятора закомментированные строки просто игнорирует, т.е. это ничего. Но похоже, в данном случае я не прав!

Даже если просто лишнюю пустую строку добавить, то процедура не пройдет проверку на применимость.
18. pentanom 25 23.11.23 12:05 Сейчас в теме
(15)
Даже если просто лишнюю пустую строку добавить, то процедура не пройдет проверку на применимость.
Вот такая картина (см.) Закомментировал #Удаление ... #КонецУдаления в другом блоке. В указанном месте все осталось без изменения. Если бы я не поставил точку останова в этом месте, то и не заметил бы что кусок, который я хотел удалить, остался. А значит все что есть в этом блоке отработало и могло сильно изменить данные в базе.
Прикрепленные файлы:
19. Captain_Pan 23.11.23 12:20 Сейчас в теме
(18)
1. Перед #Удаление не хватает пустой строки. А как я писал выше, пустые строки важны для ИзменениеИКонтроль.
2. Закоменченное #Удаление в той же процедуре, тоже является проблемой.

В итоге будет использоваться основная процедура.
20. pentanom 25 23.11.23 12:29 Сейчас в теме
(19)
1. Перед #Удаление не хватает пустой строки. А как я писал выше, пустые строки важны для ИзменениеИКонтроль.
Да не менял я ничего в этом месте! Я поставил комментарии в другом блоке, а попал на точку останова в основной конфигурации.
21. Captain_Pan 23.11.23 12:38 Сейчас в теме
(20)
Другой блок - это другая процедура? Или та же процедура, но выше?
Если второе, то причина в том, что в случае отличия процедуры в расширении и в основной конфигурации, игнорируется вся процедура из расширения. А отличия в том, что в основной процедуре нет строки //#Удаление.
Так же отличие в том, что в основной процедуре есть пустая строка, а в расширении вместно нее #Удаление.

Повторюсь. Любое отличие от основной процедуры, если убрать все удаления и вставки, вызывает отказ от процедуры из расширения. Не от части процедуры из расширения, а от всей процедуры целиком.
22. pentanom 25 23.11.23 12:59 Сейчас в теме
(21)
Другой блок - это другая процедура? Или та же процедура, но выше?
Та же!
(21)
Повторюсь. Любое отличие от основной процедуры, если убрать все удаления и вставки, вызывает отказ от процедуры из расширения. Не от части процедуры из расширения, а от всей процедуры целиком.
Пусть так. Но что тогда означает слово "Контроль" в аннотации? Платформа как-то должна сигнализировать о том, что расширение не будет выполнено. Вот такого сигнала в этом случае НЕТ, а это может привести к непоправимым последствиям.
Я только это и хотел сообщить.
(21)
Любое отличие от основной процедуры, если убрать все удаления и вставки
Я не писал про ВСЕ удаления и вставки!
23. Captain_Pan 23.11.23 14:14 Сейчас в теме
(22)
Пусть так. Но что тогда означает слово "Контроль" в аннотации? Платформа как-то должна сигнализировать о том, что расширение не будет выполнено. Вот такого сигнала в этом случае НЕТ, а это может привести к непоправимым последствиям.
Я только это и хотел сообщить.


Мне кажется, это проблема платформы. До недавнего времени, на старом релизе платформы(8.3.19 вроде) всегда вылетали ошибки применения, из-за отличий в ИзменениеИКонтроль. Сейчас на 23 платформе, ошибки применения вылетают иногда. Такое чувство, что разработчики запихали результат сравнения куда-то в кэш, и ошибки выдает, только при обновлении основной конфы.
14. VmvLer 23.11.23 11:34 Сейчас в теме
(13) так все-таки вопрос-условие

Условие: Если в расширяемом методе есть два блока #Удаление ... #КонецУдаления, причем одни скобки закомментировать, то что происходит в отладке?

1. Отладчик попадает в блок основного метода, в том месте где в расширяемом указано
//#Удаление
....
//#КонецУдаления
Затем отладчик попадает в расширяемый метод, перед тем местом где в расширяемом
указано
#Удаление
....
#КонецУдаления

2. Отладчик вообще не попадет в расширяемый метод без выдачи ошибок компиляции.

По-моему, код с аннотацией "изменение" может выполняться либо в основном методе либо в расширяемых, без переходов. Исключение - несколько расширений одного метода.
16. Captain_Pan 23.11.23 11:55 Сейчас в теме
(14)На счет выдачи ошибок компиляции - это зависит от платформы.
Иногда выдает ошибку применимости расширения. Иногда без ошибки запускается база.

Но в любом случаем метод из расширения будет полностью проигнорирован.
17. pentanom 25 23.11.23 11:57 Сейчас в теме
(14)
Затем отладчик попадает в расширяемый метод, перед тем местом где в расширяемом
указано
#Удаление
....
#КонецУдаления
Вот в этом и проблема, что, если закомментирован первый блок, то отладчик НЕ попадает в расширение во втором блоке.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот