Можно ли комментировать вставки #Удаление и #КонецУдаления?
Сделал расширение и удалением куска кода Теперь мне временно нужно отключить это удаление. Думал, что можно закомментировать строки #Удаление и #КонецУдаления. Но почему-то после этого Отладчик не останавливается в точках останова, которые вне этого куска. А вообще-то комментировать эти строки можно?
#Удаление
Если ЗначениеЗаполнено(ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве(ДеревоДанных, "ДопДанныеДокументаОтгрузки")) Тогда
ИнфПолФХЖ3 = ПолучитьОбъектТипаCML("Файл.Документ.СвПродПер.ИнфПолФХЖ3", ПространствоИмен);
РаботаСФайламиБЭД.ЗаполнитьСвойствоXDTO(ИнфПолФХЖ3, "ИдФайлИнфПол",
ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве(ДеревоДанных, "ДопДанныеДокументаОтгрузки.ИдентификаторФайла"), , Ошибки);
СтрокиДопДанныеДокументаОтгрузки = ДеревоДанных.Строки.Найти("ДопДанныеДокументаОтгрузки", "ПолныйПуть");
СтрокаТаблицы = СтрокиДопДанныеДокументаОтгрузки.Строки.Найти("ДопДанныеДокументаОтгрузки.ТекстоваяИнформация", "ПолныйПуть");
Если ТипЗнч(СтрокаТаблицы.Значение) = Тип("Число") И СтрокаТаблицы.Значение > 0 Тогда
Для Каждого Информация Из СтрокаТаблицы.Строки Цикл
ТекстИнфТип = ПолучитьОбъектТипаCML("ТекстИнфТип", ПространствоИмен);
РаботаСФайламиБЭД.ЗаполнитьСвойствоXDTO(ТекстИнфТип, "Идентиф",
ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве(Информация,
"ДопДанныеДокументаОтгрузки.ТекстоваяИнформация.НомерСтроки.Идентификатор"), Истина, Ошибки);
РаботаСФайламиБЭД.ЗаполнитьСвойствоXDTO(ТекстИнфТип, "Значен",
ДеревоЭлектронногоДокументаБЭД.ЗначениеРеквизитаВДереве(Информация,
"ДопДанныеДокументаОтгрузки.ТекстоваяИнформация.НомерСтроки.Значение"), Истина, Ошибки);
ИнфПолФХЖ3.ТекстИнф.Добавить(ТекстИнфТип);
КонецЦикла;
КонецЕсли;
РаботаСФайламиБЭД.ЗаполнитьСвойствоXDTO(ДанныеОбОтгрузкеТоваров, "ИнфПолФХЖ3", ИнфПолФХЖ3, Истина, Ошибки);
КонецЕсли;
#КонецУдаления
ПоказатьОтветы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Обнаружил следующую ситуацию. В процедуре аннотацией &ИзменениеИКонтроль(...) есть два куска со строками #Удаление и #КонецУдаления. В одном их закомментировал. Запускаю сделанное в работу и получаю, что эта процедура работает так, как будто в нее никаких изменений не вносилось. Хотя во втором куске строке не комментировались. Мне кажется, что это неправильное поведение - программа должна была об этом как-то сообщить.
(9) отладчиком проверяли?
хотя почему ненормально? один блок исключения активен, значит изменения есть.
а вот когда все блоки изменения выключить, то методы идентичны и тогда глупо объявлять его в расширении.
компилятор, при сборке кода, по секциям формирует текст модуля и когда все закоменчены, то полученный текст равен исходному.
хотя почему ненормально? один блок исключения активен, значит изменения есть.
а вот когда все блоки изменения выключить, то методы идентичны и тогда глупо объявлять его в расширении.
компилятор, при сборке кода, по секциям формирует текст модуля и когда все закоменчены, то полученный текст равен исходному.
(10)
(10)
P.S. Платформа 8.3.22.2239. Может быть на более продвинутых платформах такого нет.
(9) отладчиком проверяли?
Проверил. Поставил точку останова на кусок в основной конфигурации, который в расширении скобках #Удаление ... #КонецУдаления. Останов произошел на этой точке в основной конфигурации.
(10)
а вот когда все блоки изменения выключить
У меня в расширении три таких блока. Хотел таким образом выключить только один
P.S. Платформа 8.3.22.2239. Может быть на более продвинутых платформах такого нет.
Нельзя закоментить аннотации в процедуре с &ИзменениеИКонтроль. Потому-что закоменченная аннотация считается строкой кода, а в расширяемой процедуре такой строки(//#Удаление) - нет. Поэтому она не пройдет проверку применимости расширения. Поэтому в отладке ты не можешь попасть в эту процедуру.
Код в процедурах с &ИзменениеИКонтроль должен полностью соответствовать расширяемой процедуре, если из него удалить все вставки и удаления. (разрешается только с отступами поиграться)
Код в процедурах с &ИзменениеИКонтроль должен полностью соответствовать расширяемой процедуре, если из него удалить все вставки и удаления. (разрешается только с отступами поиграться)
(11)
(11)
(11)
Нельзя закоментить аннотации в процедуре с &ИзменениеИКонтроль.
Это уже понятно.
(11)
Потому-что закоменченная аннотация считается строкой кода, а в расширяемой процедуре такой строки(//#Удаление) - нет. Поэтому она не пройдет проверку применимости расширения.
Вот только "контроля" в этой ситуации нет :(
(11)
Код в процедурах с &ИзменениеИКонтроль должен полностью соответствовать расширяемой процедуре, если из него удалить все вставки и удаления. (разрешается только с отступами поиграться)
Я всегда считал, что любой компилятора закомментированные строки просто игнорирует, т.е. это ничего. Но похоже, в данном случае я не прав!
(15)
Даже если просто лишнюю пустую строку добавить, то процедура не пройдет проверку на применимость.
Вот такая картина (см.) Закомментировал #Удаление ... #КонецУдаления в другом блоке. В указанном месте все осталось без изменения. Если бы я не поставил точку останова в этом месте, то и не заметил бы что кусок, который я хотел удалить, остался. А значит все что есть в этом блоке отработало и могло сильно изменить данные в базе.
Прикрепленные файлы:
(20)
Другой блок - это другая процедура? Или та же процедура, но выше?
Если второе, то причина в том, что в случае отличия процедуры в расширении и в основной конфигурации, игнорируется вся процедура из расширения. А отличия в том, что в основной процедуре нет строки //#Удаление.
Так же отличие в том, что в основной процедуре есть пустая строка, а в расширении вместно нее #Удаление.
Повторюсь. Любое отличие от основной процедуры, если убрать все удаления и вставки, вызывает отказ от процедуры из расширения. Не от части процедуры из расширения, а от всей процедуры целиком.
Другой блок - это другая процедура? Или та же процедура, но выше?
Если второе, то причина в том, что в случае отличия процедуры в расширении и в основной конфигурации, игнорируется вся процедура из расширения. А отличия в том, что в основной процедуре нет строки //#Удаление.
Так же отличие в том, что в основной процедуре есть пустая строка, а в расширении вместно нее #Удаление.
Повторюсь. Любое отличие от основной процедуры, если убрать все удаления и вставки, вызывает отказ от процедуры из расширения. Не от части процедуры из расширения, а от всей процедуры целиком.
(21)
(21)
Я только это и хотел сообщить.
(21)
Другой блок - это другая процедура? Или та же процедура, но выше?
Та же!
(21)
Повторюсь. Любое отличие от основной процедуры, если убрать все удаления и вставки, вызывает отказ от процедуры из расширения. Не от части процедуры из расширения, а от всей процедуры целиком.
Пусть так. Но что тогда означает слово "Контроль" в аннотации? Платформа как-то должна сигнализировать о том, что расширение не будет выполнено. Вот такого сигнала в этом случае НЕТ, а это может привести к непоправимым последствиям.
Я только это и хотел сообщить.
(21)
Любое отличие от основной процедуры, если убрать все удаления и вставки
Я не писал про ВСЕ удаления и вставки!
(22)
Мне кажется, это проблема платформы. До недавнего времени, на старом релизе платформы(8.3.19 вроде) всегда вылетали ошибки применения, из-за отличий в ИзменениеИКонтроль. Сейчас на 23 платформе, ошибки применения вылетают иногда. Такое чувство, что разработчики запихали результат сравнения куда-то в кэш, и ошибки выдает, только при обновлении основной конфы.
Пусть так. Но что тогда означает слово "Контроль" в аннотации? Платформа как-то должна сигнализировать о том, что расширение не будет выполнено. Вот такого сигнала в этом случае НЕТ, а это может привести к непоправимым последствиям.
Я только это и хотел сообщить.
Я только это и хотел сообщить.
Мне кажется, это проблема платформы. До недавнего времени, на старом релизе платформы(8.3.19 вроде) всегда вылетали ошибки применения, из-за отличий в ИзменениеИКонтроль. Сейчас на 23 платформе, ошибки применения вылетают иногда. Такое чувство, что разработчики запихали результат сравнения куда-то в кэш, и ошибки выдает, только при обновлении основной конфы.
(13) так все-таки вопрос-условие
Условие: Если в расширяемом методе есть два блока #Удаление ... #КонецУдаления, причем одни скобки закомментировать, то что происходит в отладке?
1. Отладчик попадает в блок основного метода, в том месте где в расширяемом указано
//#Удаление
....
//#КонецУдаления
Затем отладчик попадает в расширяемый метод, перед тем местом где в расширяемом
указано
#Удаление
....
#КонецУдаления
2. Отладчик вообще не попадет в расширяемый метод без выдачи ошибок компиляции.
По-моему, код с аннотацией "изменение" может выполняться либо в основном методе либо в расширяемых, без переходов. Исключение - несколько расширений одного метода.
Условие: Если в расширяемом методе есть два блока #Удаление ... #КонецУдаления, причем одни скобки закомментировать, то что происходит в отладке?
1. Отладчик попадает в блок основного метода, в том месте где в расширяемом указано
//#Удаление
....
//#КонецУдаления
Затем отладчик попадает в расширяемый метод, перед тем местом где в расширяемом
указано
#Удаление
....
#КонецУдаления
2. Отладчик вообще не попадет в расширяемый метод без выдачи ошибок компиляции.
По-моему, код с аннотацией "изменение" может выполняться либо в основном методе либо в расширяемых, без переходов. Исключение - несколько расширений одного метода.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот