Своя функция &Вместо &ИзменениеИКонтроль

13.06.21

Разработка - Универсальные функции

Как добавить контроль в расширения, если не доверяешь аннотации &ИзменениеИКонтроль.

Как всем известно, программные продукты фирмы 1С еще не достигли такого совершенства, как их маркетинг, который настолько доминирует, что сначала потребители, а потом и производитель, стали путать рекламу с документацией.

Так, например, пресс-релиз многие воспринимают буквально. Мол, действительно, начиная с платформы 8.3.15.x, появилась возможность безопасно использовать в расширениях аннотацию &ИзменениеИКонтроль. Реальность же способна разочаровать неосторожного программиста и навсегда перевести его в категорию людей, первые N лет не пользующихся новинками.

Предлагаю внести ясность.

Во-первых, никаких конструкций #Вставить, #КонецВставить, #Удалить и #КонецУдалить, упомянутых на 1c.ru, разумеется, не существует. Вместо них платформа понимает: #Вставка, #КонецВставки, #Удаление и #КонецУдаления. Это настолько очевидно, что даже щепетильная 1С считает избыточным грузить посетителей своего сайта такими детальными подробностями.

Во-вторых, если вы начнете использовать &ИзменениеИКонтроль, то придется вручную проверять возможность применения расширений. Командой "Проверка возможности применения" в конфигураторе. Без этого вы можете не узнать, что код оригинальной процедуры изменился (например, после обновления), и программа невозмутимо игнорирует непонятный теперь аналог в расширении, не отвлекая пользователей от работы занудными предупреждениями. Вы будете думать, что расширение работает, а оно молча передаст свои обязанности типовым процедурам и функциям.

В-третьих, я с подозрением отношусь к новинкам от 1С в первые несколько лет.

В итоге, сам я не нашел смелость использовать &ИзменениеИКонтроль и при этом спокойно спать. Поэтому предлагаю пользоваться вроде бы работающей аннотацией &Вместо, а контроль добавить самим.

Где-нибудь в общем модуле можно определить функцию, выполняющуюся &НаСервере:

Функция СравнениеСВерсиейКонфигурации(МестоВызова, ВерсияМодуля, ВызыватьИсключение=Истина) Экспорт
    // Функция для контроля на соответствие кода в расширениях текущему релизу конфигурации.
    // Подробнее: //infostart.ru/1c/articles/1454444/

    ВерсияКонфигурации = Метаданные.Версия;
    Если ВерсияМодуля <> ВерсияКонфигурации Тогда
        Если ВызыватьИсключение Тогда
            ВызватьИсключение "Версия конфигурации (" + ВерсияКонфигурации + ") отличается от версии модуля (" + ВерсияМодуля + ").
            |" + МестоВызова;
        КонецЕсли;

        Возврат Ложь;
    КонецЕсли;

    Возврат Истина;
КонецФункции

 

А в расширениях первой строчкой в заменяющих процедурах и функциях использовать конструкцию типа:

ОбщийМодульСПроверкой.СравнениеСВерсиейКонфигурации("Текст, помогающий найти проблему", "циферки.версии.с.точками");

 

Например:

&Вместо(ЗаменяемаяПроцедура)
Процедура Расш_ЗаменяемаяПроцедура()
    ОбщийМодульСПроверкой.СравнениеСВерсиейКонфигурации("Справоник.Номенклатура.МодульМенеджера.ЗаменяемаяПроцедура", "3.1.14.500");

    // полезный код
КонецПроцедуры

 

Такие сигнализирующие ловушки можно расставить в критически важных местах расширения. И вписывать в них актуальный номер релиза вторым параметром каждый раз после обновления. Если где-то забыть это сделать, программа выдаст ошибку, когда попытается выполнить данные инструкции. Задав по-человечески МестоВызова, легко найдете проблемное место. Короче, после обновления игнорировать проверку замененных в расширении функций станет заметно труднее. В худшем случае о забытой процедуре вы узнаете от пользователя, но сразу! А это лучше, чем узнать об ошибке из отчетов за полугодие.

 

Update

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

 

1. Аннотация &ИзменениеИКонтроль работает достаточно хорошо. Нужно пользоваться ею, не забывая запускать контроль в конфигураторе.

Кто же спорит, что использование встроенных инструментов лучше, чем разработка таких же аналогов? Но на мой взгляд &ИзменениеИКонтроль работает странно. Вместо сигнализации о проблеме игнорируется код в расширении. Нужно же вызывать ошибку вместо тихой неправильной работы!

 

2. Функция сложна в эксплуатации, потому что требует ручного изменения второго параметра в каждом месте вызова при обновлениях.

Я все равно проверяю код, вынесенный в расширение. И необходимость указать новую версию релиза воспринимаю, как отметку, помогающую отслеживать ход выполнения процесса. Также считаю, что указание релиза в каждом отдельном месте вызова — правильный подход. Использование глобальной константы для сравнения с текущим релизом дает гораздо меньше гарантий, что важные участки были проверены. А так, проверил функцию/модуль, изменил релиз во втором параметре и знаешь, что проверял, а что — нет.

 

3. Плохо, что исключительная ситуация возникнет уже в процессе работы, ведь может прерваться какой-нибудь важный процесс. Да и у пользователя осадочек останется.

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

 

4. Зачем нужна функция, если можно ставить обычный комментарий в коде, либо вообще выписать на листочек важные места, чтобы не забыть их проверить?

С этого начиналось, но в моей практике оказалось недостаточным. Если пропустить пункт на листочке или процедуру с комментарием, можно об этом и не узнать. А с этой функцией пропущенный участок станет невозможно игнорировать в процессе работы. Заменить текст в параметре вызова не труднее, чем в комментарии.  

 

5. Если использовать тестирование функциональности, то дополнительные элементы контроля не нужны.

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

 

6. Лишняя самописная функция страшное зло. Нужно пользоваться только инструментами от проверенного производителя!

Как давно и успешно практикующий программист, не испытываю благоговейного трепета перед элементарным кодом. Его же можно прочитать. Данная функция: маленькая, простая, не имеющая зависимостей, вписываемая в любую архитектуру. Вообще, воспринимайте предложенный вариант, как минимальную реализацию идеи, которую можно доработать, если потребуется.

 

7. Возможно, фирма 1С посчитает этот код отладочным и откажется давать какой-нибудь сертификат.

Пока не спросишь — не узнаешь. У меня нет опыта в этом вопросе, но как я понял из комментариев, фирма 1С сама активно использует функции проверки версий БСП.

 

8. Функция ничего не гарантирует. Злоумышленник может просто изменить второй параметр, и тогда исключения не произойдет, а участок останется не проверенным!

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

 

9. Я разочарован. Ожидал чего-то большего.

Добро пожаловать в клуб.

 

p.s.

В комментариях коллега привел ссылку на более надежные материалы о расширениях, чем в упомянутом анонсе. Если, конечно, у вас есть доступ к ИТС.

Расширение контроль Вместо ИзменениеИКонтроль

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    2935    2    John_d    11    

56

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    5259    atdonya    22    

52

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

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

30.11.2023    4162    ke.92@mail.ru    16    

62

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    9595    YA_418728146    6    

143

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2299    28    progmaster    8    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16438    144    sapervodichka    112    

130

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7394    quazare    8    

110
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
114. awk 741 08.06.21 09:46 Сейчас в теме
(108)
Необязательно собирать 747-й каждый раз - достаточно однажды постараться, а дальше мелкие модификации)
Про боинг это не сарказм. Это дань уважения старой школе. И таки да, я то же собрал пару раз боинг.

Нам не о чем спорить. Ваш подход работает и надежен, в отличии от предлагаемого автором, который работает но не надежен (есть более надежные варианты).
125. Yashazz 4727 08.06.21 11:50 Сейчас в теме
(114) В любом деле главное - без фанатизма. У БСП тоже есть ряд подсистем, которые разумно заимствовать, а не колхозить с нуля.

Мы поняли друг друга)
Артано; awk; +2 Ответить
40. AntonProgma 46 07.06.21 13:31 Сейчас в теме
(28) всё тонет в фарисействе! Код писать - не поле перейти
57. RocKeR_13 1325 07.06.21 14:21 Сейчас в теме
если вы начнете использовать &ИзменениеИКонтроль, то придется вручную проверять возможность применения расширений

Если использовать &Вместо, то можно нарваться на огромные проблемы: процедура в расширении будет отрабатывать без ошибок, но из-за того, что ее логика устарела, будет выполнять некорректные манипуляции с данными. &ИзменениеИКонтроль также позволит легко идентифицировать места внесения изменений, если разработчик забудет/не сочтет нужным оставить комментарии.

Кстати, конструкции #Вставить, #КонецВставить, #Удалить и #КонецУдалить имели место быть и именно они указаны в Зазеркалье: потом их просто переименовали) В руководствах разработчика на ИТС уже корректно фигурируют конструкции #Вставка-#КонецВставки и #Удаление-#КонецУдаления (Источник: ИТС)
59. AntonProgma 46 07.06.21 14:30 Сейчас в теме
(57) Приём не нужен человеку, которого все устраивает в работе ИзменениеИКонтроль.

А по поводу анонса. Он на сайте 1с и поисковиками выдаётся одним из первых. Я сразу выразил сожаление, что такие материалы воспринимаются на веру.
61. RocKeR_13 1325 07.06.21 14:40 Сейчас в теме
(59) На мой взгляд, лучше "популязировать" использование &ИзменениеИКонтроль, чем "лепить" костыли к варианту &Вместо: последний вариант следует использовать только в каких-то разовых, экспресс-изменениях, как делает 1С в патчах. Сам использовался данным вариантом изменения типовых процедур в расширении: держался долго, но после крупного обновления конфигурации плюнул и перешел на &ИзменениеИКонтроль, ибо так поддерживать расширение гораздо проще.
По поводу "Он на сайте 1с и поисковиками выдаётся одним из первых" - а это проблемы "ищущих": использовать анонсы вместо руководства разработчика или хотя бы более-менее свежих статей на Инфостарте - так себе затея (которая все равно приведет к изучению руководства или форумов)))
65. AntonProgma 46 07.06.21 14:59 Сейчас в теме
(61) Не встречались ли вам печальные люди, не понимающие, почему ИзменениеИКонтроль обмануло их? Я тоже возносил хвалу Нуралиеву за эту аннотацию. Но после опытов не могу отделаться от ощущения, что она прямо сейчас тихо-мирно не работает. Завидую, что в вашей практике все столь без облачно.
unknown181538; +1 Ответить
71. RocKeR_13 1325 07.06.21 15:09 Сейчас в теме
(65) Единственное разочарование - не работает в общих клиентских модулях. В остальном работает без нареканий. Некоторые сталкиваются с непониманием, как правило использовать конструкции вставки/удаления: при наличии хотя бы одного лишнего пробела заимствованная процедура перестает работать. Решается это очень просто: до начала вставки находим последнюю непустую строку в коде, переходим в конец строки клавишей End, выполняем переход на новую строку, пишем #Вставка-->Enter --> #КонецВставки и уже после #Вставка делаем, что душе угодно; с удалением ситуация похожая - по аналогии открываем конструкцию #Удаление, а #КонецУдаления уже ставим после последней удаляемой строки, переходя в конец клавишей End и переходя на новую строку. Обещали этот момент исправить в ближайших режимах совместимости, но я уже привык, что даже не обращаю на него внимания
69. Darklight 32 07.06.21 15:07 Сейчас в теме
Разочаровал предложенный способ контроля за контролем. Рассчитывал на большее. Хотя бы на внешний инструмент, который бы сверял бы тексты модулей. Или инструмент - который контролировал что какая-то процедура не срабатывает. Не говоря уже о мечте о более продвинутом инструменте интеграции - чтобы тот сам приводил текст функции к соответствию, а у программиста были бы более удобные и продвинутые средства по инъектированию доработок, чем тот примитив - что предложила компания 1С
72. AntonProgma 46 07.06.21 15:09 Сейчас в теме
(69) лучше зажечь одну свечу, чем прожить всю жизнь в темноте.
74. Darklight 32 07.06.21 15:11 Сейчас в теме
(72)ну я по тихонько всё-таки пилю более продвинутый инструмент...
Но Ваш подход тоже имеет право на существование!
75. AntonProgma 46 07.06.21 15:12 Сейчас в теме
(74) Надеюсь, ваш инструмент не разочарует меня
76. Darklight 32 07.06.21 15:14 Сейчас в теме
(75)Он может разочаровать кого угодно - ибо за рамками коморки 1С
94. Yashazz 4727 07.06.21 19:16 Сейчас в теме
(74) Многие пилят. Я тоже такой сделал однажды. А вообще, по-хорошему, такое должна делать сама платформа.
105. Darklight 32 08.06.21 09:11 Сейчас в теме
106. Darklight 32 08.06.21 09:11 Сейчас в теме
(94)
А вообще, по-хорошему, такое должна делать сама платформа.

Должна - но не делает :-(
73. 1v7 235 07.06.21 15:10 Сейчас в теме
А вообще по расширениям есть чат в телеге. Велком кому интересна тема: https://t.me/rasshirenija
100. Areal 14 08.06.21 00:40 Сейчас в теме
ИМХО. Функциональная парадигма + динамическая типизация априори делает невозможным нормальное расширение. В ООП это решается просто - интерфейс на входе, интерфейс на выходе и делай внутри расширения что хочешь, не опасаясь обнов. А тут пытались сделать аля наследование, убрав его фундамент - контракты (интерфейсы) + баги платформы. В итоге имеем кольт нацеленный в ногу. Хотя, в каких-то моментах расширения незаменимы.
Артано; +1 Ответить
103. logarifm 1120 08.06.21 09:09 Сейчас в теме
(100) не путайте ООП с 1С - это абсолютно разное. Вообще 1С страдает во многом из-за не типизированности объектов, но имеем ровно то что имеем. И 1С никогда не говорила, что это ООП.
107. Darklight 32 08.06.21 09:16 Сейчас в теме
(103)ООП в 1С8 сделать можно. Но
1. Либо будет весьма ограничено и не очень удобно
2а. Либо можно сделать свой компилятор и построить весьма продвинутый ООП - но только для кода в рамках этого компилятора и только, условно, для серверного контекста (для внешнего кода такие классы будут доступны только как готовые экземпляры, без доп. механизмов
ООП)
2б. Сделать полноценный ООП для клиентской части тоже можно - но не с помощью компиляции, а с помощью кодогенерации - будет несколько кривее - но в принципе будет работать
Все варианты подразумевают внешний препроцессинг и сборку готового решения (на EDT это проще). Первый вариант можно строить и без препроцессинга, но будет ещё кривее и ещё ограниченнее
109. AntonProgma 46 08.06.21 09:26 Сейчас в теме
(107) Кажется, есть ещё один способ попроще. Com-объект, например, на Питоне, в котором можно использовать eval и exec, с указанием пространства имён. Методы и свойства назначать через setattr, и так далее.
112. Darklight 32 08.06.21 09:33 Сейчас в теме
(109)Не современно. Платформенно ограничено. Может быть ограничено на уровне профилей безопасности. Связка питона через Com и eval - это ещё и медленно. И вообще не понятно что Вы там вычислять в eval собрались!
Хотя, в принципе, эмуляцию ООП на Native-ВК, мне кажется, построить можно - но это будет уже совсем не 1С
113. AntonProgma 46 08.06.21 09:39 Сейчас в теме
(112) Думается, связка питона с 1с будет все равно быстрее, чем чистый 1с). Но раз вы более в теме, вам и карты в руки. Пилите, она золотая
102. logarifm 1120 08.06.21 09:07 Сейчас в теме
(0) Категорично не соглашусь с автором. Во первых в конечном примере Вы использовали анотацию &Вместо, а как известно, что данная анотация полностью передаст все свои полномочия и хоть сколько угодно "штатная" функция там внутри меняется она будет выполнятся ровно до тех пор, пока не изменится количество параметров самой функции/процедуры и пользователи это увидят ввиде ошибок так что Вы не совсем разобрались как работают расширения.
110. Darklight 32 08.06.21 09:30 Сейчас в теме
(102)Автор всё "правильно" сделал Именно этого он и добивался. Вы просто не поняли сути решения. Он меняет штатную функцию на свою (изменённую), но делает внутри проверку на версию конфигурации - которая сверяется с версией, жёстко заданной внутри функции ПРИ ЕЁ НЕПОСРЕСТВЕННОМ ВЫЗОВЕ (в идеале - это должны быть юнит-тесты, о которых автор не упомянул, ну или это этот вызов просто случится в боевой базу у пользователя обрадовав его ОШИБКОЙ ВРЕМЕНИ ВЫПОЛНЕНИЯ - что не есть гуд). А программист потом должен следить за такими ситуациями и сверять/исправлять вручную эти функции (подразумевается, что программист должен это сделать ещё заранее до выпуска в боевую базу - но если где пропустит - то ошибки ему напомнят - хотя ведь просто можно после обновления глобальным поиском найти все места где написано "&Вместо" и провести такую же проверку - без пропусков). Проблема в том, что
а) Фиг его знает, когда эти ошибки сработают, т.е. функции выполнятся (если нет юниттестов)
б) Ошибки прервут работу алгоритма - что не факт, что будет лучше (ну можно просто в Ж/Р писать без ошибки и прерывания и потом мониторить)
в) Всё-равно нужно вручную сравнивать эти функции в поисках - что изменилось (вернее просто брать исходную функцию и переносить в неё заново доработки)
г) Если текст функции изменится в основной конфигурации, то он будет проигнорирован (просто другой программист может и не знать, что функция расширена - увы, платформа об этом никак не сигнализирует) - или функция может быть расширена с заменой в другом расширении - та ещё проблема....
Артано; +1 Ответить
111. AntonProgma 46 08.06.21 09:33 Сейчас в теме
(102) Вы опоздали, я уже вчера устал разжевывать элементарные вещи представителям местной флоры. Не могли бы вы сами перечитать текст и опровергнуть для себя тот факт, что описанный в статье подход с ручной проверкой каждой функции как-то мешает в том числе проверке количества параметров в ней.
115. logarifm 1120 08.06.21 10:16 Сейчас в теме
А, все понятно это местные студенты решили побаловаться в 1С.
116. AntonProgma 46 08.06.21 10:47 Сейчас в теме
(115) Вы не разобрались в смысле одной простой функции с описанием. Неужели это не помогает стать осторожнее с выводами?
117. logarifm 1120 08.06.21 11:04 Сейчас в теме
Одним словом - это не рабочая фигня.
потому как, когда в ЗаменяемаяПроцедура() поставщик добавит ЗаменяемаяПроцедура(Парам1, Парам2) - расширение упадет и код который тут предложен никогда не исполнится - туфта короче.

Ну и конечно же писать версию модуля в каждой расширеной процедуре/функции - это вообще то дело. После обновления то самое оно опять все их исправлять - "отличное решение" не зря тут минусов понабросали и от меня один!
120. AntonProgma 46 08.06.21 11:14 Сейчас в теме
(117) Парам-парам-парам-пам-пам.

Раз вы не уходите, напрягитесь, узрите же, что предлагается проверять код вручную и подтверждать проверку изменением второго параметра. Это предполагает, что программист заметит метаморфозы. А если пропустит, то будет ошибка, что, собственно, и есть цель - на последнем рубеже обороны сработает сигнализация о кодоизменениях.
121. logarifm 1120 08.06.21 11:16 Сейчас в теме
(120) Так а в чем тут ишка - особенность? Нет ее ... поэтому в топку сжечь как плод ядовитого дерева.
122. AntonProgma 46 08.06.21 11:20 Сейчас в теме
(121) имеющий глаза, увидит.
123. logarifm 1120 08.06.21 11:29 Сейчас в теме
(122) Главное что имеющие мозги - понимают, что это туфта.

1С гласит в рекомендациях. Максимально анотации Вместо отделить в отдельное расширение и назначить соответсвующее значение: "Исправление".

Исправление — этот вариант означает, что расширение вносит исправления в конфигурацию.
Адаптация — этот вариант означает, что расширение настраивает существующее решение (конфигурацию) с учетом специфики отдельного предприятия.
Дополнение — расширение вносит новый функционал.

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

Умеющий пользоваться поисковиками - найдет и увидит и главное, что прочтет правильный способ применения расширений, а не кустарное ее творение.
https://its.1c.ru/db/pubextensions/content/11/hdoc
124. AntonProgma 46 08.06.21 11:36 Сейчас в теме
(123) во-первых, вы не можете наверняка утверждать, что понимают разумные люди. Во-вторых, как то, что программист обязан проверить расширения, припятствует тому, что он не проверит?
130. XACHAPURIN 68 11.06.21 10:25 Сейчас в теме
Тогда уж можно дойти до ручки и сохранять типовые тексты изменяемых процедур в отдельный регистр или на диск. И после обновления запускать обработку которая будет выгружать обновленную конфигурацию поставщика в файлы и сравнивать типовые процедуры из новой конфигурацией поставщика со старыми процедурами. Она даже сообщит что именно поменялось.
А если серьёзно то я пользуюсь расширениями активно уже 4 года. Да года 3 назад с расширениями иногда были сложности и приходилось менять основную конфигурацию. Но сейчас в расширении можно сделать практически всё. За 4 года в 99% случаев я делал доработки через расширения. И сейчас почти всё прекрасно работает, в том числе ИзменениеИКонтроль, который можно проверить в конфигураторе, без вызова измененной функции. Конечно при работе с расширениями много тонкостей, не всё в них функционирует как надо, и приходится нарабатывать опыт через боль и страдания. Но результат того стоит, просто нужно знать какой функционал в них надо использовать, а с чем лучше повременить.
У нас же не средневековье, инквизиция не покарает за использование магии)
131. AntonProgma 46 11.06.21 14:10 Сейчас в теме
(130)Спасибо за предупреждение! Теперь я знаю, что с создания одной вспомогательной функции начинается скользкая дорожка к "ручке".
137. Yashazz 4727 16.06.21 20:15 Сейчас в теме
(130) Вот как у вас что-нибудь серьёзное, основанное на расширениях, рухнет, и ваш работодатель устроит вам весёлую жизнь, вот тогда это действительно будет "опыт через боль". А пока - наивный наивняк, блажен, кто верует)
141. XACHAPURIN 68 17.06.21 05:41 Сейчас в теме
(137) Я ж говорю 4 года уже пользуюсь расширениями. Клиентов 50 кому ставил их. У всех всё работает как задумано. При обновлении иногда слетают, но ничего криминального не происходит. Просто я не вижу смысла перелопачивать типовую, что бы потом заниматься бесконечными обновлениями. У одного клиента была перепиленная тройка, обновление занимало 14 часов. Предложил перенести доработки в расширения (перенес всё кроме реквизитов). В итоге сейчас обновление занимает 2 часа. Если вы считаете что работодатель обязан переплачивать за то что вы боитесь и не умеете пользоваться новыми технологиями, что ж ваше право, но динозавры всё таки вымерли
143. Yashazz 4727 17.06.21 07:35 Сейчас в теме
(141) Если "не умеете пользоваться новыми технологиями" вы говорите мне, то это мимо) Я ещё во времена 8.3.5 занимался расширениями, писал об этом, и знаю о них достаточно, чтоб, например, публиковать это или это. Динозавр, ага)))

И мне ещё тогда, в 2015-м, по самое не балуйся хватило косяков, чтобы не применять поделочку "расширения" в мало-мальски серьёзных проектах.

Перелопачивать типовую надо с умом, а не абы как. Не все умеют. Я в одном заказе перепилил УТ 11.1 напрочь (кстати обидно вышло, многое потом появилось как типовое в 11.4), но обновление занимало полтора часа, потому что я аккуратно спроектировал, разметил и разместил.
Так что упомянутые 14 часов - это проблема чьих-то кривых рук, а не концепции пилёжки конфы. И за кривые руки, работодатель, конечно, переплачивать не должен.

И я ещё раз объясняю: ребятки, блажен, кто пока не нарвался. Некоторые так же искренне недоумевают, нафига бэкапы каждые сутки делать. Пока не случатся грабли. Перефразируя: "одинэсники делятся на 2 группы - те, кто ещё пользуется расширениями в серьёзных проектах, и те, кто уже нет".

Ещё расширения - рай для хаотичной доработки. Вали кулём, потом разберём, куча малограмотных пионэров-практикантов, каждый своё за... забабахает, хх и в продакшен, а главное, "ничего ж страшного", и прогрессивную методику юзают!
А потом начинается цирк и клоуны в рабочей системе...

Для тестирования, для мелкой правки интерфейса, для автоматизации уровня ларька - это всё хорошо, не спорю. Но не более.
148. XACHAPURIN 68 17.06.21 09:13 Сейчас в теме
(143) Ну тогда тем более не понятно почему вы не пользуетесь ими теперь. За последние года 2 там избавились почти от всех косяков. Так же как вы типовую с умом перелопачиваете, так и расширения надо с умом делать. И будет счастье. По поводу хаотичной доработки не совсем согласен, наоборот мне кажется что в расширениях удобней смотреть что именно дорабатывалось. По поводу ларька согласен, в основном такие и делаю дописки. Но и для больших проектов можно же структурированно вносить доработки через расширение, дабы не было хаоса.
133. ovasiliev 6 12.06.21 10:49 Сейчас в теме
Один из топиков, показывающих, сколько случайных людей в 1С.
134. AntonProgma 46 12.06.21 16:24 Сейчас в теме
(133) Тех, кто программирует или тех, кто комментирует?
135. ovasiliev 6 12.06.21 18:50 Сейчас в теме
136. Yashazz 4727 16.06.21 20:13 Сейчас в теме
Всем, кто выступает за использование расширений.
Сделал я тут маленькое расширение, всего-то одну функцию директивой "Вместо" заменил, из одного модуля. Поотлаживать мне её надо было, т.е. напихать сообщалки. Хорошее применение для расширений, кстати. Ну вот и что я имею: сначала, несколько заходов кряду, расширение просто никак не подцеплялось и не отрабатывало. Кэш? Нет. БСП? Тоже нет. В один из разов я щёлкнул туда-сюда применение в распределённой ИБ (дело было из-под Предприятия), перезапустил очередной раз, иии... оно заработало. А вот отладчик работать перестал окончательно - точка останова есть, но плевать он на неё хотел. Причём на останов в исходной процедуре нормально реагировал.

Вы всё ещё хотите пользоваться расширениями в продакшене?)))
138. AntonProgma 46 16.06.21 21:06 Сейчас в теме
(136) у меня расширения в качестве библиотек используются. Причём слоями, вызывая друг друга. Просто прелесть!
139. Yashazz 4727 16.06.21 21:58 Сейчас в теме
(138) Пользуйтесь-пользуйтесь, чем больше таких наивных, тем мне потом больше работы - чинить это всё и внутрь конфигураций переносить)
140. AntonProgma 46 16.06.21 22:08 Сейчас в теме
(139) В данный момент у нас обратный процесс. Качели, и все при деле!
142. XACHAPURIN 68 17.06.21 05:42 Сейчас в теме
(136) Вам если помощь нужна вы б хоть попросили
144. Yashazz 4727 17.06.21 07:54 Сейчас в теме
(142) Да ну? Гуру пришёл? Ловлю на слове. Имеется платформа 8.3.6.2237, используется локальный внепроцессный СОМ, файл comcntrcfg.xml в папке бинарника лежит. База файловая, всё на одном компе, поэтому там localhost (порты уже все перебрали, а сканирование я вообще задал от 1500 до 1900). Отладчик не подцепляется, на точку останова не реагирует.

При этом внутрипроцессный - ловит и реагирует.

Где плохо? Если в файле комконфиг, так нет, всё перепробовали. А?
145. AntonProgma 46 17.06.21 08:14 Сейчас в теме
(144) Я использую 8.3.16 и считал себя ужасным ретроградом. Думаю, с 8.3.6 возможности и стабильность работы расширений значительно увеличились.
146. Yashazz 4727 17.06.21 08:59 Сейчас в теме
(145) Некоторые крупные фирмы не хотят рисковать и работают на стабильных релизах, чьи баги им известны. Многие работают на 8.2, многие вообще на 7.7, и попытка предложить переход на новый, неизвестный релиз рассматривается как вредительство и саботаж.

Что имеем, с тем и работаем. И, если говорить о 8.3.19, к примеру, то я охотно соглашусь с таким подходом - чудовищно кривой релиз.
149. AntonProgma 46 17.06.21 09:15 Сейчас в теме
(146) у меня тоже есть на поддержке решение на 8.2, к которому не применимы расширения вообще и функция СтрРазделить, например. Но было бы странно утверждать, что функция СтрРазделить абсолютно не нужна никому никогда,потому что под 8.2 не работает.
151. Yashazz 4727 17.06.21 09:37 Сейчас в теме
(149) Во-первых, да, не нужна, потому что есть уже давно другие решения, не сильно уступающие в скорости. Во-вторых, и это на ИС разбирали, она имеет недостатки и особенности, которых собственное решение может быть лишено. В третьих, если вы не наблюдали, как об "СтрРазделить" ругался и падал синтакс-контроль релизов с 8.3.7 по 8.3.9, и не компилировались модули, и как напрочь отказывался работать с ней коннектор, значит, вам повезло. Мне в какой-то момент надоело тратить силы на эту дурь, и я просто забил, потому что моим заказчикам, повторюсь, не погоня за рискованной новизной нужна, а тупо надёжность.
153. AntonProgma 46 17.06.21 09:55 Сейчас в теме
(151) я к тому, что у вас уникальные условия, для которых действуют уникальные правила. Я ни в коем случае не призываю обновляться, вам виднее, что делать. Но конструктивной беседы об инструментах вообще не получится без уточнения платформ. Тем более, что разница в версиях существенная. Всему свое место
156. Yashazz 4727 17.06.21 10:14 Сейчас в теме
(153) Платформы различаются только составом и спецификой багов, но не их средним количеством. Допустим, 8.3.7 валилась при манипуляциях с элементами расширенной формы и см. вообще мою публикацию; 8.3.9 глючила в декларациях веб- и рест-сервисов и адски заклинивала кэш, 8.3.11 не видела половину исходного контекста (что в коде, что в запросах), ругаясь на неразрешённые ссылки и хз какие совместимости; 8.3.13 гробила индексы расширяемых объектов при отключении расширения, при этом не отключая его...

А потом мне окончательно надоело объяснять заказчикам, что "это баги и надо подождать обновления".
157. AntonProgma 46 17.06.21 10:22 Сейчас в теме
(156) но конкретно расширения стали более лучше поддерживаться. В условиях работы с бухгалтерией платформа обновляется вынуждено. Почему бы не пользоваться расширениями для типовых баз?
158. Yashazz 4727 17.06.21 10:26 Сейчас в теме
(157) Конкретно в типовых 1С с некоторых пор взяла гнусную манеру выпускать мелкие патчи именно в виде расширений-"исправлений", причём и выглядит, и работает это, мягко говоря, кхм.
Я это рассматривал, см. про исправления.
147. XACHAPURIN 68 17.06.21 09:03 Сейчас в теме
(144) Ну так в первой же строчке у вас решение видно. Надо платформу обновить =)
150. Yashazz 4727 17.06.21 09:35 Сейчас в теме
(147) Ответ, достойный великого "гуру"))) А всерьёз что-нибудь дельное можете предложить?
161. XACHAPURIN 68 17.06.21 10:56 Сейчас в теме
(150) Не работал с отладкой внешнего соединения. Надо разбираться
152. Yashazz 4727 17.06.21 09:45 Сейчас в теме
(147) Ладно, не знаете этот момент и киваете на релиз, вот вам другой вопрос.

Платформа 8.3.19.1150, х64, файловая база. Расширение с назначением "Адаптация", никаким образом не подцепляется и не исполняется. Просто вообще. Ни из конфигуратора, ни из предприятия, ни программным кодом не активируется.
Формы и собственные объекты не содержит. Основная роль создана, в настройках ролей всё верно. Перегружается один общий привилегированный серверный неглобальный модуль, и всё.

Где у меня кривые руки?
154. AntonProgma 46 17.06.21 09:59 Сейчас в теме
(152) Галочка "безопасный режим"?
155. Yashazz 4727 17.06.21 10:06 Сейчас в теме
(154)
Галочка "безопасный режим"?

Обижаете) Естессно, проверил. Профилей безопасного режима нет, функциональных требований нет, флажок режима снят.
159. AntonProgma 46 17.06.21 10:26 Сейчас в теме
(155) 8.3.16.1814. Рано или поздно перебором найдётся платформа, где этот глюк, если этот глюк, не возникает!

У меня расширения в принципе работают. Но иногда при попытке открыть через "Все функции" что-то, не связанное с расширениями, программа ругается, что применить ничего нельзя и закрывается. А в другой раз нормально отрабатывает. Кто её разберёт?
160. XACHAPURIN 68 17.06.21 10:48 Сейчас в теме
162. vx_gas 26 14.04.22 10:47 Сейчас в теме
Всем любителям типовых решений: релиз 8.3.19.1522, бах и не работает "Изменение и контроль", ни с того ни с сего, ну давайте теперь все ваши чудо штуки которые вы делали за последние года 3, возьмите и переделайте под "вместо", а когда обновите платформу обратно :)

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

И что больше всего меня радует в подходе, это то, что о проблеме ты узнаешь скорее всего сразу, в течении рабочего дня, а не когда придет какая ни будь "ночная смена", посмотрит что наделала дневная, подумает что этот "трэш" им разгребать "западло" и начнет тебе звонить чтобы найти дежурную "ж...", которая разберется с этим "гемором" в 3 часа ночи.
163. ollega 115 26.07.22 13:52 Сейчас в теме
Дааа. Холиварная тема. Если по чесноку, то обновлять измененную конфу проще, если расширений нет и изменяется напрямую основная конфа. Какая цель была у расширений? Чтобы обновлять типовую конфу не снимая с поддержки. Эта цель не достигнута. Ради этой цели часто может тратиться в разы больше времени на актуализацию расширений, чем если бы всё это было сразу в основной конфе. Вот нафига тогда всё это затевалось и столько ресурсов потратили?
У кого-то не такой опыт?
164. AntonProgma 46 27.07.22 13:57 Сейчас в теме
(163) а если одно расширение и десяток типовых баз? У нас на предприятии такая ситуация. И с расширениями получается провести обновление за пару часов. А до этого каждая переписанная база "думала" намного дольше и весила побольше.
165. ollega 115 27.07.22 14:39 Сейчас в теме
(164) да, вот и у меня мысли, что только в подобных случаях удобны расширения. Для тиражного распространения доработок. Как и по типу внешних обработок и отчетов, которые тоже сложнее актуализировать, чем если бы они сразу были в основной конфе.
166. bozo 27.07.22 17:26 Сейчас в теме
&ИзменениеИКонтроль дает очень простое преимущество перед любым костылем, вроде того, что в посте - а именно, интегрированное полноценное трехстороннее сравнение.
167. AntonProgma 46 28.07.22 14:39 Сейчас в теме
(166) поделитесь, пожалуйста, технологией сравнения
168. bozo 03.08.22 14:02 Сейчас в теме
(167) Так все просто: при проверке вылезет ошибка, и действие "Восстановить соответствие с методом конфигурации". При нажатии на это действие откроется трехсторонее сравнение для конкретной процедуры/функции, в моем случае откроется Kdiff.

Первый вариант текста: текущий текст процедуры в расширении с убранными вставками и удалениями (условно: старая конфигурация поставщика).
Второй вариант: текущий текст в расширении, но со вставками и удалениями (условно: основная конфигурация)
Третий вариант: новый типовой текст процедуры (условнно: новая конфигурация поставщика)

Дальше мержим и привет. В случае Kdiff все смержится вообще автоматически, если процедура не была изменена кардинально (99% кейсов), останется только пробежаться по решенным конфликтам и убедиться в корректности.
169. AntonProgma 46 03.08.22 20:23 Сейчас в теме
(168) спасибо! А проверка сама запускается?
Оставьте свое сообщение