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

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С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

21.05.2024    12038    dimanich70    80    

125

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

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

1 стартмани

18.03.2024    3401    3    John_d    11    

57

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

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

12.02.2024    8509    atdonya    22    

55

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

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

30.11.2023    4772    ke.92@mail.ru    16    

65

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

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

28.08.2023    11582    YA_418728146    7    

154

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

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

2 стартмани

22.08.2023    2858    43    progmaster    8    

4

Инструментарий разработчика Универсальные функции Платформа 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    17259    152    sapervodichka    112    

134
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Yashazz 4762 06.06.21 08:15 Сейчас в теме
Наиболее надёжный и проверенный способ, гарантирующий минимум внезапных проблем в будущем - просто НЕ пользоваться расширениями. Эта кривая хрень всегда найдёт, где косякнуть, а на серьёзных проектах подобные чудеса могут слишком дорого стоить. Так что, имхо, наилучший способ добиться стабильности расширений - просто игнорировать сию поделку.
AfterEarth; Irwin; kostas; krendel01; ardn; ollega; yatec; zqzq; Drivingblind; Светлый ум; BomjBandit; YPermitin; Darklight; AntonProgma; Dream_kz; wolfsoft; +16 20 Ответить
2. AntonProgma 47 06.06.21 08:52 Сейчас в теме
(1) Если перестать пользоваться всеми инструментами, которые можно отнести к категории "кривая хрень", то что останется в арсенале?
mc2; 1cNBL; ogroup; ybatiaev; simuljakr; DrAku1a; chg; tivanitsky; awk; ipoloskov; +10 1 Ответить
3. Yashazz 4762 06.06.21 10:38 Сейчас в теме
(2) Таких не столь много - основная платформа достаточно стабильно работает (а где не работает, так там места расположения граблей известны и неизменны).

При этом да, предложенное решение - неплохая идея, я плюсанул.
tivanitsky; Darklight; +2 Ответить
12. triviumfan 95 07.06.21 09:50 Сейчас в теме
(3) Не соглашусь, как раз платформа - самое больное место 1с :)
Что не релиз - так куча ошибок.
И самое обычное дело, когда она жрёт вне себя.
Прикрепленные файлы:
biker1052; Риник; DrAku1a; +3 Ответить
13. AntonProgma 47 07.06.21 09:57 Сейчас в теме
(12) В магазине на компьютере должна быть наклейка "1С совместимо".
36. Darklight 32 07.06.21 13:25 Сейчас в теме
(13)Почему бы и ЕСТЬ - 1С давно уже сертифицирует компьютеры на "1С Совместимо" - но толку то
42. AntonProgma 47 07.06.21 13:34 Сейчас в теме
(36) а я придумал это, как шутку. Обажаю 1С
DrAku1a; CSiER; DimaShapovaloff; e.kogan; +4 Ответить
170. ogroup 282 29.11.22 10:15 Сейчас в теме
(42)
а я придумал это, как шутку. Обажаю 1С

Вы наверное теперь выросли в должности и пишете новости для Панорамы?
171. AntonProgma 47 29.11.22 15:41 Сейчас в теме
(170) нет. Всё там же. А как ваша судьба сложилась?
132. DrAku1a 1733 11.06.21 14:42 Сейчас в теме
(13) Судя по вышесказанному, не на весь комп наклейку надо, а на модули оперативной памяти.
16. Yashazz 4762 07.06.21 11:02 Сейчас в теме
(12) Так для избежания проблем с платформой достаточно отставать на 3-4 релиза, если это не типовая под замком. В среднем этого хватает, чтоб наиболее чреватые грабли успели пофиксить или детально описать/разобрать.

Жрёт она вне себя, начиная с поколения 8.3 как такового, тут уж остаётся только ностальгировать и кушать кактус...

А вот расширение, особенно которое с данными или сложными формами, совершенный ларец Пандоры и букет проблем. Проверка применимости ни капли не спасает, т.к. а) иногда выдаёт фантомные расхождения, б) иногда не видит реальные расхождения. Использование расширений в серьёзных бизнес-процессах это сидение на пороховой бочке, при каждом новом релизе и конфы, и платформы.
Расширение хорошо, когда оно какое-нибудь "сбоку-бантик" или для нужд разработки-отладки.
66. Darklight 32 07.06.21 15:00 Сейчас в теме
(16)Эти директивы ввели в 15 релизе (два года назад). Последний ФИНАЛЬНЫЙ релиз уже 8.3.19 - надо считать что 4 релиза уже прошло? (хотя не факт что в 8.3.19.1150 этой проблемы нет, хотя, для верности по вашим принципам, видимо финальный релиз 8.3.20 надо ждать). Но типовые пока не перешли за совместимость выше 8.3.14 (ERP2 8.3.16) - так, что надо считать - всё что выше 8.3.14 - нестабильно - использовать можно только на свой страх и риск - и только на нетиповых! Хотя платформу рекомендуют уже не ниже 8.3.17.
А для указанные директивы, вроде бы доступны на платформе 8.3.15 при совместимости ниже 8.3.15
90. Yashazz 4762 07.06.21 19:06 Сейчас в теме
(66) Финальный релиз глючит, см. чего пишет tormozit: https://infostart.ru/journal/news/news/vyshla-novaya-versiya-tekhnologicheskoy-platformy-1s-predpriyatie-8-3-19_1455307/
Так что я не поручусь, что эти директивы стабильно работают. Повторюсь, если писать для ларька, так оно не страшно и можно экспериментировать, а если что-то серьёзное, так лучше не надо. Грамотно покуроченная конфигурация ещё долго будет надёжнее, чем любое расширение. Вот, хотя бы, с ПВХ и составными типами адские проблемы, по владельцам справочников не гладко, справку до сих пор нельзя заимствовать и доделать, а уж чего оно в формах для некоторых типов элементов откалывает, вообще молчу.

А для указанные директивы, вроде бы доступны на платформе 8.3.15 при совместимости ниже 8.3.15
Пробовал на режиме совместимости с 14-м, не взлетело.
104. Darklight 32 08.06.21 09:10 Сейчас в теме
(90)
Пробовал на режиме совместимости с 14-м, не взлетело.

Возможно ошибся с 15-ым релизом. На 16-ом уже точно доступны

А вообще - расширения (так как они реализованы) - ЗЛО - но другой, достойной альтернативы им пока нет. Вернее она у меня пока в разработке - но это большой проект....
118. TerveRus 08.06.21 11:07 Сейчас в теме
(66) 3-4 релиза это последних цифр, але!
Может 8.0 еще будете пользоваться и вызывать смех?
126. Yashazz 4762 11.06.21 08:18 Сейчас в теме
(118) Последние цифры это общепринято называется номер подрелиза или номер сборки, алё. https://its.1c.ru/db/v8std/content/483/hdoc

А что до смеха, ну, мне известно изрядное количество серьёзных крупных организаций, спокойно годами работающих на 8.2.19, не говоря уж о некоторых на 7.7 - им постоянные грабли убыточны, а стабильная работа важна. Если миллиардная прибыль ставится под сомнение из-за любой гадости, даже описанной в баг-трекере 1С, то смеха это как-то не вызывает. Например, ошибка 40049115, цитирую, "В некоторых случаях клиентское приложение может аварийно завершить свою работу." - вот вы понимаете, что сделает топ-менеджер крупной корпорации, если у него такое пару раз за день случится? Или главбух перед сдачей отчётности? Вот ответственному за систему совершенно не смешно будет, и отмазки в духе "ждём обновления от 1С" ни разу не проканают.
127. Yashazz 4762 11.06.21 08:33 Сейчас в теме
(118) а ещё, я смотрю, не все знают, как идёт развитие релизов 1С. Оно отнюдь не линейное, оно ветвится, и идёт раздельно по релизам. 3-4 релиза надо выжидать ещё и потому, что, найдя какую-то ошибку на релизе N+3, запросто могут выпустить сборку для релиза N. И наоборот, ошибка, уже вроде бы исправленная в N, может всплыть в N+4, потому что так закоммитили.
128. TerveRus 11.06.21 08:54 Сейчас в теме
(127) только вот не надо забывать что в следующих релизах правят ошибок больше, чем добавляют.
И по каким критериям выбран релиз текущей рабочей платформы? В багтрекере так куча критических ошибок, но работает же! А потому что эти ошибки довольно маловероятны.

И да, по опыту пользователи страдают больше от текущих ошибок платформы, чем после ее обновления. Страдает производительность и программисты. Иначе, с чего бы вообще 1С развивать и исправлять платформу, если становится только хуже по Вашей логике?
129. Yashazz 4762 11.06.21 09:00 Сейчас в теме
(128) Не надо за меня мою логику озвучивать. Я сказал ровно то, что сказал. Что достаточно пары критических багов, чтобы всё умерло, и гендиру уже неважно, сколько там других исправили, и чего куда развивается.

Текущие ошибки можно самостоятельно обойти, они известны.

И кстати, утверждение насчёт "правят больше, чем добавляют", спорно. Я статистикой не располагаю, но может оказаться, что добавляют порой больше, и это ещё учитывая, что в баг-трекер далеко не всё присылают.
172. AfterEarth 25.10.23 14:16 Сейчас в теме
(1) У меня обнаружилось, что при захвате функции в расширение для "ИзмененияИКонтроля" 1С удаляет САМА из кода 1 табуляцию!
4. Xershi 1505 06.06.21 11:17 Сейчас в теме
У вас проекты на 1 лям баксов?
Написали за час, потом баг репорт и через месяц переписали на свежем релизе.
Если есть инструмент нужно им пользоваться, а не ждать пока другие его протестируют и у них будет работать, а вы с костылем до сих пор.
TerveRus; al_zzz; +2 Ответить
5. AntonProgma 47 06.06.21 11:37 Сейчас в теме
(4) Вы не поверите, но функция, описанная в статье, это тоже инструмент. Таким образом теперь существует минимум два инструмента контроля изменения кода. Вопрос, собственно, какой лучше использовать в каждом конкретном случае.
6. Xershi 1505 06.06.21 13:22 Сейчас в теме
(5) в такой реализации как написано в статье, я бы точно не использовал.
TerveRus; +1 Ответить
7. AntonProgma 47 06.06.21 13:27 Сейчас в теме
8. unknown181538 158 06.06.21 20:14 Сейчас в теме
(7) Это получается, что надо после каждого обновления вручную проверить, изменилась ли процедура, и поменять цифирки?
Метаданные.Версия ведь вернет просто номер релиза?
Не понятно тогда, зачем это нужно - уж проще просто вручную проверить все процедуры. Хотя, на мой взгляд, тогда проще не пользоваться расширениями, а писать в конфигурацию, и при обновлении корректировать.

&ИзменениеИКонтроль я пробовал использовать - у меня вывалились какие-то платформенные ошибки, кажется. И я решил ближайшие три года не использовать.
asupsam; vovan_victory; Sashares; +3 Ответить
9. AntonProgma 47 06.06.21 20:32 Сейчас в теме
(8) Мне кажется, что варианты: "вручную проверить" и "вручную проверить и поменять цифирки", не так уж сильно различаются по трудозатратам. Но во втором случае добавляется контроль, который я и ищу.

Пользоваться расширениями или нет, вопрос бессмысленный вне контекста ситуации. Но если жизнь заставит, то придётся как-то контролировать актуальность измененного кода.
burgomister; +1 Ответить
23. Sashares 35 07.06.21 12:56 Сейчас в теме
(9) И в чем смысл? Работа ради работы?
Да о каком контроле идет речь, если суть вашей идеи - записать в блокноте используемые в расширении процедуры, чтобы потом не забыть сравнить их с типовыми.
asupsam; TerveRus; +2 Ответить
24. AntonProgma 47 07.06.21 13:00 Сейчас в теме
26. Sashares 35 07.06.21 13:06 Сейчас в теме
(24)Ну просто это дичь. Вы путаете теплое с мягким.
Вы ставите тождество, что изменение номера релиза в процедуре в расширении = контроль. Да ни разу.
Запустил пользователь предприятие после обновления - выдало ошибку.
Пользователь пошел пнул разраба, т.к. не дает работать.
Разраб изменил номер версии, чтобы от него отстал пользователь.
Где тут контроль?
Это просто дополнительные грабли, которые надо еще не забыть обойти каждый раз при обновлении релиза, и переложить заново.
ixijixi; Award; XACHAPURIN; SlavaKron; unknown181538; asupsam; TerveRus; Xershi; +8 Ответить
29. Артано 766 07.06.21 13:08 Сейчас в теме
(26) Так инструментом тоже надо уметь пользоваться и доводить исключительные ситуации собственноручно сгеренные это немного не тот уровень организации, когда вообще беспокоятся о качестве.
30. Sashares 35 07.06.21 13:10 Сейчас в теме
(29)Имхо, это не инструмент, это грабли.
Award; asupsam; zqzq; +3 Ответить
32. Артано 766 07.06.21 13:15 Сейчас в теме
(30) По деталям реализации можно обсуждать, согласен. Но вот суть инструмента понятна и вполне применима. По крайней мере до тех пор, пока расширения не обзаведутся более надежным и удобным способом поддержки изменений
33. Sashares 35 07.06.21 13:18 Сейчас в теме
(32)Если надо иметь условно, список важных процедур в расширении, так добавьте специфический комментарий в такие процедуры. Тогда глобальным поиском по такому комментарию можно всегда будет их найти, и потом уже проверить соответствие кода в типовой конфигурации и в расширении.
awk; TerveRus; +2 Ответить
34. Артано 766 07.06.21 13:21 Сейчас в теме
(33) Автор же написал - нельзя допустить неправильного выполнения программы. Исключение посреди выполнение это и есть та самая гарантия. Если оно в продакшне произошло, тогда вообще не стоило затевать игры с контролем версий - сначала надо авгиевы конюшни в головах и процессах разгрести.
43. AntonProgma 47 07.06.21 13:36 Сейчас в теме
(33) Обратите внимание, что комментарии и код состоят из одних и тех же символов. Только комментарий не проконтролирует, правильные ли в нем данные. Даже если много восклицательный знаков поставить.
47. Артано 766 07.06.21 13:40 Сейчас в теме
(43) Верно мыслите, комментарии несут такой же смысл, но "за базар не отвечают". То есть написав комментарий, вы берете на себя труд по их поддержке, причем неправильность комментария экспериментом не проверить.
92. Yashazz 4762 07.06.21 19:10 Сейчас в теме
(47) На комментах, написанных по некоторым соглашениям, целые системы-вокруг-систем основаны, всякие контроли качества и проверки кода. Видел такие не раз. Комментарий с разбивкой "Параметры" даже вроде синтакс-разбор 1С понимать научили. Так что тоже вариант, хотя тоже так себе.
kostas; awk; +2 Ответить
101. Артано 766 08.06.21 08:26 Сейчас в теме
(92) Оформление комментариев к методам, это не совсем комментарии. Это документация к API. Спецификация, если быть точным, ну или обязательство разработчика по предоставляемой функциональности. Но поддерживать их приходится. Я для себя такой принцип принял давно - если что-то есть в документации, но нет в коде, то это проблемы кода. И разработка организована так же - сначала пишется документация к коду, потом уже сам код.
38. AntonProgma 47 07.06.21 13:26 Сейчас в теме
(32) Мне интересно обсудить детали реализации.
44. Артано 766 07.06.21 13:37 Сейчас в теме
(38) Например, я бы просто использовал функцию общего модуля возвращающую последнюю проверенную версию конфигурации поставщика, вместо использования волшебных строк по коду. Из "дешевых" замечаний, кажется всё.
48. AntonProgma 47 07.06.21 13:41 Сейчас в теме
(44) я решил, что проверка и вызов исключения - важная общая часть задумки. Если функция что-то будет возвращать, то результат придётся обрабатывать в каждом месте использования.

И я, боюсь, не понял, что такое последняя проверенная версия
49. Артано 766 07.06.21 13:43 Сейчас в теме
(48) Я не говорил об отказе от исключений. Читайте внимательнее

Например, я бы просто использовал функцию общего модуля возвращающую последнюю проверенную версию конфигурации поставщика, вместо использования волшебных строк по коду


UPD. Примерно так

ОбщийМодульСПроверкой.СравнениеСВерсиейКонфигурации(ШифрОбъекта(ЭтотОбъект), ПоследняяПровереннаяВерсииКонфыПоставщикаБП100500());
51. AntonProgma 47 07.06.21 13:49 Сейчас в теме
(49) вы говорите о том, что волшебство можно не использоаать. Но это все равно не даёт понимания, что же можно улучшить в коде.
52. Артано 766 07.06.21 13:50 Сейчас в теме
(51) Магические/волшебные строки, числа, даты. Лучше, если у них будет имя и храниться они будут в одном месте.
53. AntonProgma 47 07.06.21 13:53 Сейчас в теме
(49) не согласен с вашим примером. Весь смысл функции в контроле. А контроль теряется, если мы договоримся, поправить некую констант, когда все-все честно-честно проверим. Надёжнее в каждом вызове меня релиз вручную после проверки данного участка. И ещё комментарий ставить, кто и когда проверил. На меньшее я не согласен
91. Yashazz 4762 07.06.21 19:08 Сейчас в теме
(30) Скажем так, это грабли, целенаправленно останавливающие процесс на нужной точке эксплуатации путём прицельного удара по лбу. Это лучше, чем гейзенбаги, которые всплывают хз когда и где, но всегда не вовремя. Это неплохая попытка возглавить, когда не удалось остановить.
kostas; Артано; +2 Ответить
35. AntonProgma 47 07.06.21 13:21 Сейчас в теме
(26) Это вы путаете контроль с инструментами контроля. Функция не гарантирует, что ей не будет пользоваться идиот! От программиста я лично ожидаю ответственности при изменении кода.

Презерватив тоже не даёт 100% защиты! Один человек надел, но все равно попал под машину.
Yashazz; Артано; +2 Ответить
119. TerveRus 08.06.21 11:09 Сейчас в теме
(8) почему именно три года? Откуда вы берете эти цифры?
Хотя, когда пользователям пофиг, то можете хоть на 8.2 сидеть и творить что угодно, конечно.
27. Артано 766 07.06.21 13:06 Сейчас в теме
(6)
зации как написано в статье, я бы точ


Есть шероховатости, согласен тоже. Но чтобы вы предложили взамен?
10. Cmapnep 18 07.06.21 08:25 Сейчас в теме
Браво, вступление шедеврально!
11. AntonProgma 47 07.06.21 08:43 Сейчас в теме
14. by_1Cnik 236 07.06.21 10:03 Сейчас в теме
хорошая функция. утащу! спасибо
15. AntonProgma 47 07.06.21 10:10 Сейчас в теме
(14) Если принесет пользу, буду рад! Я верю, что только коллективно мы найдём способы надёжной работы на платформе 1С.
17. ellavs 1038 07.06.21 12:05 Сейчас в теме
Мы по старинке - ведем реестр всех расширений, там список "Вместо-функций" которые при обновлении нужно проверить.
Sashares; +1 Ответить
20. AntonProgma 47 07.06.21 12:16 Сейчас в теме
(17) Ваши муки в прошлом! С нашей новой высокоэффективной функцией вы сможете находить нужные места в расширениях глобальным текстовым поиском по номеру предыдущего релиза. Это убережет от необходимости запоминать, что проверено, а что - нет. В крайнем случае в процессе работы появится текст ошибки. И это без регистрации и СМС!
55. comptr 35 07.06.21 14:08 Сейчас в теме
(17) попробуйте https://github.com/oscript-library/diff3cf.
После небольших доработок для добавления поддержки ИзменениеИКонтроль можно сразу видеть отчет о проблемных местах.
Drivingblind; Артано; awk; +3 Ответить
18. ipoloskov 164 07.06.21 12:07 Сейчас в теме
Даже ручная проверка возможности применения в конфигураторе может не сработать. Например, если код модуля обрамлен скобками #Если Сервер или ... #КонецЕсли - конфигуратор бодро рапортует, что все о-кей! И так же бодро будет выполнять код - но уже не неизмененный код новой версии, а измененный код старой версии, что гораздо опаснее.
(ошибка 10231111)
19. amd1986 07.06.21 12:16 Сейчас в теме
Очень активно используем расширения. Ежемесячно клиенты ставят пару тысяч наших модулей расширений. Косяки(на уровне платформы) случаются, но они уже очень редкие. И да, использовать &Вместо крайне не рекомендуется.
RocKeR_13; awk; CyberCerber; +3 Ответить
21. AntonProgma 47 07.06.21 12:20 Сейчас в теме
(19) Лишний контроль не помешает. Предлагаю обдумать предложенный метод для использования с другими аннотациями. В конце концов, это всего лишь инструмент для проверки указанного релиза на равенство с текущим.
22. ixijixi 1833 07.06.21 12:33 Сейчас в теме
(19)
Ежемесячно клиенты ставят пару тысяч наших модулей расширений
Как вы умудряетесь написать 2к расширений за месяц? У вас 500 разработчиков?
25. Артано 766 07.06.21 13:01 Сейчас в теме
(22) Я думаю, тут ввиду имеются инсталлы нескольких маленьких расширений
89. amd1986 07.06.21 17:49 Сейчас в теме
(22) расширений всего 10-15. А клиентов много
28. awk 743 07.06.21 13:07 Сейчас в теме
Претензии к статье:
1. Придирка не по делу к анонсу. Анонс не документация. В документации аннотации правильно называются. https://its.1c.ru/db/v8315doc#bookmark:dev:TI000001843
2. Нарушение стандарта https://its.1c.ru/db/v8std#content:456:hdoc п.3

3. Программные модули не должны иметь закомментированных фрагментов кода, а также фрагментов, которые каким-либо образом связаны с процессом разработки (отладочный код, служебные отметки, например, TODO, MRG и т.п.) и с конкретными разработчиками этого кода.


Для вашего случая должны быть тесты, а не проверки в коде.
zqzq; ardn; Sashares; +3 Ответить
31. Артано 766 07.06.21 13:12 Сейчас в теме
(28)

Не согласен с п2. Это не отладочный код. Банальная проверка версии объкта. Если версия не соответствует ожидаемой, то кидается исключение. Ну а чтобы исключений и вовсе не было, то после обновления нужно таки провести ревизию всех подобных закладок и выполнить те самые тесты
37. awk 743 07.06.21 13:26 Сейчас в теме
(31) А "и т.п."?

Разберем ситуацию классификации кода. Классифицировать будем по признаку отношения кода к процессу производства:

1. Код для разработки
2. Код для бизнес-логики

О чем и идет речь в пункте 3 стандарта.

Итак:

Если мы в коде проверяем нечто, и в зависимости от этого нечто, включаем тот или иной кусок функционала, то код однозначно относится к бизнес-логике.

Если мы проверяем не упало ли что при обновлении, то код очевидно относится к процессу разработки, а не к бизнес логике. Такого кода согласно п.3 стандарта быть в рабочем варианте не должно.

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

Проблема не в том что не работает инструмент 1С. Проблема в неправильном процессе разработки. Должно быть так:

Обновление поставщика -> Проверка применимости расширений -> Расширенный синтаксический контроль (в т.ч. расширений и внешних обработок) -> автотесты -> ручные тесты -> нагрузочные тесты - > обновление рабочей базы.

А тут мы видим

Обновление поставщика -> Проверка применимости расширений -> Расширенный синтаксический контроль (в т.ч. расширений и внешних обработок) -> обновление рабочей базы.

Это не значит что нет этапов: "автотесты -> ручные тесты -> нагрузочные тесты" - просто эти этапы проходят в рабочих базах, что неправильно.
39. AntonProgma 47 07.06.21 13:30 Сейчас в теме
(37) Я не в курсе, о каких стандартах идёт речь. Но если вы имеете в виду, что есть документ запрещающий минимизировать ошибки, то я не верю!
45. Артано 766 07.06.21 13:38 Сейчас в теме
(39) Я думаю речь о соглашении о написании кода. Они же стандарты оформления. Чтобы для своего продукта получить "1С-совместимо", в теории надо это соглашение выполнять. Но глядя на тиражные отраслевые - верится с трудом.
46. awk 743 07.06.21 13:40 Сейчас в теме
(39)
Я не в курсе, о каких стандартах идёт речь

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

есть документ запрещающий минимизировать ошибки


Вы подменили понятие. Документ запрещает тянуть артефакты разработки, а не минимизировать ошибки. То есть вам, в документе, говорят не лезьте в окно. Я же указываю вам на дверь.
50. AntonProgma 47 07.06.21 13:46 Сейчас в теме
(46) Но там нет артефактов разработки! Это абсолютно рабочий код для работающих решений. Не для отладки. Для контроля. Код. Я же не собираюсь везде его поставить перед обновлением и удалять после.
56. awk 743 07.06.21 14:12 Сейчас в теме
(50) Можно уточнить?

Вы делаете тиражное решение или у вас кастомизация тиражного решения, для клиента на поддержке.
58. AntonProgma 47 07.06.21 14:25 Сейчас в теме
(56) Разное. Но это не важно. Свой вариант я предлагаю любому желающему. У него есть плюсы и минусы. Лично я вижу заметную выгоду от использования данного способа в том, что это защитит меня и клиентов, если мои расширения не будут тщательно проверены после обновления. А религиозные аспекты рассматривать не могу, потому как атеист.
60. awk 743 07.06.21 14:35 Сейчас в теме
(58) Немного поясню. Если вы делаете тиражное решение, то ваш подход нерационален. Так как инструмент который привязан к версии 8.3.15 бухгалтерии предприятия никто не купит, ибо обновления раз в месяц минимум выходят (или вы бесплатно обновления будете предоставлять?). А не написать, что вы не поддерживаете будущие версии - это значит обмануть клиента. Тут рациональнее написать тесты и при провале теста релиза оповещать покупателей о появившейся проблеме и пути решения. Так дешевле.

Если же вы сами обновляете клиентские базы, то ваше решение не эффективно. Так как вам надо просто покрыть код тестами и все. После обновления поставщика, просто прогнать тесты. А не ждать, когда вам с матами пользователь позвонит.
62. AntonProgma 47 07.06.21 14:47 Сейчас в теме
(60) Согласен, найдутся случаи, когда я сам уверенно откажусь от этой функции. Но принцип уместности и в другую сторону работает. "Просто придумать и выполнить все нужные тесты" - тоже так себе по надёжности решение в той реальности, которая окружает меня. Поэтому я всего лишь предлагаю приём, не предполагая тотального применения. Каждый решит сам на месте, эту функцию использовать, писать тесты или комбинировать методы.
63. awk 743 07.06.21 14:52 Сейчас в теме
(62) У меня прекрасно работает. См. Картинки...
Прикрепленные файлы:
70. AntonProgma 47 07.06.21 15:07 Сейчас в теме
(63) знаете, мне начинает казаться, что вам моя функция не подойдёт. У вас несколько другой ритм жизни.
41. Артано 766 07.06.21 13:33 Сейчас в теме
(37) Получается тогда, что БСП нарушает собственные же стандарты когда проверяет версии подсистем? =)

Если без шуток, то рассмотрим пример. Есть две независимо разрабатываемые системы, вынужденные взаимодействовать через некий интерфейс. Причем в случае расширений этот интерфейс не предназначен специально для взаимодействия. Вы реализовали взаимодействие опираясь на некую внутреннюю логику другой подсистемы. Подсистема поменялась, ваш код нет. Но при попытке её использовать вы ставите заглушку - мол версия не проверена на нашей системе. Нельзя ничего делать. Проверка эта, должна всегда проходить успешно на проде. Но если вдруг... то враг не пройдёт.
Да и каким образом вы будете контролировать адекватность ваших операций? Версионирование объектов, сервисов, интерфейсов, есть нормальная и надежная практика.
54. awk 743 07.06.21 14:02 Сейчас в теме
(41)

Получается тогда, что БСП нарушает собственные же стандарты когда проверяет версии подсистем? =)

Еще как нарушает. 637 ошибок больше 45 000 нарушений стандарта.

Так что если без шуток, то тут проблема в нарушении стандарта в самой 1С.


Причем в случае расширений этот интерфейс не предназначен специально для взаимодействия.

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


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


Да так бывает. Все будет работать, пока я не нарушу инкапсуляцию. То есть буду работать через экспортные процедуры и функции. У 1С есть объяснение как назначаются версии. https://its.1c.ru/db/v8std/content/483/hdoc https://its.1c.ru/db/v8std#content:484:hdoc

То есть если изменилась версия, то ничего не должно случится, а если изменилась редакция, то это другой продукт.

Тут проблема в 1С и соблюдении стандарта. Если вышло обновление 8.3.15, а у меня 8.3.14 - то обратная совместимость должна сохраняться. И я свое расширение объявляю как 8.3 совместимое.

Да и каким образом вы будете контролировать адекватность ваших операций? Версионирование объектов, сервисов, интерфейсов, есть нормальная и надежная практика.


Тестами - это то же нормальная практика.

Вообще мы кажется смешали два понятия:

1. Поддержка у конечного клиента
2. Процесс разработки.
64. Артано 766 07.06.21 14:56 Сейчас в теме
(54)
Не согласен. Если бы расширение было не предназначено для внутреннего взаимодействия, то расширением оно точно не называлось.


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

Тестами - это то же нормальная практика.

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


Вообще мы кажется смешали два понятия:
1. Поддержка у конечного клиента
2. Процесс разработки.


Не совсем, просто то, что предлагает автор, не должно выйти в прод. То есть из цикла "разработка внутри команды" не выходить. А если выйдет - то честно упасть.
67. AntonProgma 47 07.06.21 15:03 Сейчас в теме
(64) Минуточку! Автор только говорит, что можно получить такой-то эффект при таких-то условиях. А где это использовать и использовать ли, должны решать люди на месте. Я вот собираюсь активно это применять прямо в рабочих базах. И мне не стыдно.
68. Артано 766 07.06.21 15:05 Сейчас в теме
(67) да не спорю я с автором, расслабьтесь. Не надо читать между строк. Я пишу прямым текстом
77. awk 743 07.06.21 15:43 Сейчас в теме
(64) То что предлагает автор не вполне поддерживает 1С.

То есть: Если 1С фиксирует некий интерфейс и делает функцию: ЗубДаюСовместимоСВерсией(Э) Экспорт. То никаких вопросов нет. Делаем при запуске тест _1С_ЗубДетЧтоНеИзменилаИнтерфейс() и все ок. Это не процесс разработки - это бизнес-логика. А у автора функция:

Функция Если1СЧтоТоОбновилаТоЭтоТрындец()
  Возврат ИзмененияЕстьОт1С();
КонецФункции


Напоминает язык программирования Paranoid
78. AntonProgma 47 07.06.21 16:05 Сейчас в теме
(77) 1С вполне поддерживает. Попробуйте погонять тесты, увидите, что все так работает, как я написал.
79. awk 743 07.06.21 16:15 Сейчас в теме
(78) Я не говорил, что не работает. Я сказал что не подходит. А не подходит т.к. вылетит не перед обновлением рабочей базы, а после, может быть сильно после.


Кстати есть в БСП функции

#Область ВерсионированиеКонфигураций

// Получает номер версии конфигурации без номера сборки.
//
// Параметры:
// Версия - Строка - версия конфигурации в формате РР.ПП.ЗЗ.СС,
// где СС - номер сборки, который будет удален.
//
// Возвращаемое значение:
// Строка - номер версии конфигурации без номера сборки в формате РР.ПП.ЗЗ.
//
Функция ВерсияКонфигурацииБезНомераСборки(Знач Версия) Экспорт

// Сравнить две строки версий.
//
// Параметры:
// СтрокаВерсии1 - Строка - номер версии в формате РР.{П|ПП}.ЗЗ.СС.
// СтрокаВерсии2 - Строка - второй сравниваемый номер версии.
//
// Возвращаемое значение:
// Число - больше 0, если СтрокаВерсии1 > СтрокаВерсии2; 0, если версии равны.
//
Функция СравнитьВерсии(Знач СтрокаВерсии1, Знач СтрокаВерсии2) Экспорт

// Сравнить две строки версий.
//
// Параметры:
// СтрокаВерсии1 - Строка - номер версии в формате РР.{П|ПП}.ЗЗ.
// СтрокаВерсии2 - Строка - второй сравниваемый номер версии.
//
// Возвращаемое значение:
// Число - больше 0, если СтрокаВерсии1 > СтрокаВерсии2; 0, если версии равны.
//
Функция СравнитьВерсииБезНомераСборки(Знач СтрокаВерсии1, Знач СтрокаВерсии2) Экспорт
80. AntonProgma 47 07.06.21 16:29 Сейчас в теме
(79) Так в том и смысл, чтобы вылетела! Это даёт гарантию, что код, в котором не поставили метку проверки, не будет выполняться. Естественно, такая ошибка в процессе работы не желательна. И само собой, нужно по возможности все проверить перед передачей кода в эксплуатацию. Но если вдруг, какая-нибудь функция, не была проверена по трагической случайности, то программа упадёт. И это в ряде случаев лучше, чем если бы она продолжила работать молча, выполняя ненужный типовой код.
81. awk 743 07.06.21 16:35 Сейчас в теме
(80) Как гарантировано заставить функцию упасть до обновления? Ответ очевиден же: "Написать тест". А если мы все равно пишем тест, то зачем нам падающая функция? А если нам плевать упадет что-то или нет, то и проверка избыточна, что вашим методом, что тестом. По итогу: Либо пишем тест, либо кладем болт. Оба варианта имеют право на жизнь. Ваш вариант - это вариант перенедопил. :)
82. AntonProgma 47 07.06.21 16:43 Сейчас в теме
(81) это, если помешаться на тестах, то да, без написания теста ничего нельзя сделать, и, очевидно, нужно писать тест. А можно проверить визуально, изменилась ли процедура, поставить номер релиза, как подтверждение проверки. А сэкономленное время потратить на споры о тестах. Профит?
83. awk 743 07.06.21 16:47 Сейчас в теме
(82)
А можно проверить визуально

Не подскажите (только чур визуально) эти куски изменились или нет?
	НомерСтроки = "1550";
	НаименованиеСтроки = "Прочие обязательства";



	НомерСтроки = "1550";
	НаименованиеСтроки = "Прочие обязательства";

84. AntonProgma 47 07.06.21 16:49 Сейчас в теме
(83) Чисто визуально - не очень.
85. awk 743 07.06.21 17:01 Сейчас в теме
(84) А ведь просто поменял русскую эс, на английскую си. COMОбъект и COMОбъект.
86. AntonProgma 47 07.06.21 17:13 Сейчас в теме
(85) Гениально! Не "о", как я думал, а "с". Ваше превосходство в шарадах становится неоспоримым!

Только как это доказывает, что функция проверки версии абсолютно никому и никогда не нужна? Если разработчики изменили букву, и это ни влияет на выполнение программы, то и в расширении можно ничего не менять. Если они допустили ошибку в ComОбъект, то программа упадёт по этой причине, а не потому что есть функция проверки версии. Если вы просто хотели показать, что существуют очевидные ситуации, когда можно упустить из виду малозаметный аспект,так и при создании тестов его можно допустить.

Поймите, я не призываю выкинуть вашу красивую программу для тестов! Я предлагаю желающим ознакомиться с приёмом. А глянется он им или нет - дело их.

Для себя я вижу смысл это использовать.
87. awk 743 07.06.21 17:28 Сейчас в теме
(86) Ваш подход вполне известен. И нужен. Только не надо его пихать в каждую функцию. Да и функции лучше из БСП брать.

Когда он работает?

Когда мы хотим удостовериться, что версия конфигурации, платформы или библиотеки нам подходит. Таким образом мы можем всегда проверить, что версия от которой мы зависим не ниже на которой мы разрабатывали или это не совсем-совсем более новая (была бухгалтерия 2.0, а стала 3.0). А нам это надо знать в каждой функции или в целом по расширению? Наверное в целом по расширению. То тогда расширяем функции ПриНачалеРаботыСистемы и проверяем все что надо и выбираем бизнес-логику. Ошибка/предупреждение проявится при первом запуске. Мы обновляем что нам надо и профит.

Когда он не работает?

Если нам так критично, что бы наш код работал всегда верно, то надо писать тест. И только тест нам гарантирует, что функция на данных А, выдает результат Б.
88. AntonProgma 47 07.06.21 17:41 Сейчас в теме
(87) Я вовсе не стремлюсь сравнивать библиотеки и версии на больше-меньше. В данной теме рассматривается возможность контроля, была ли после обновления проверена каждая функция. Для этого в каждой проверяемой функции обязательно должен быть признак проверки. В предлогаемом варианте в качестве признака выступает введённый программистом номер релиза. Одна общая проверка теряет всякий смысл. Мне нужно удостовериться, что я и мои коллеги проверили все участки. Для этого, повторюсь, каждый участок проверяется (любым адекватным способом) и помечается отдельно.

Функции из БСП любой может использовать, если захочет. Но не вижу смысла для таких простых вещей привязываться к БСП и мониторить ещё и её. Есть конфигурации и без БСП.
96. awk 743 07.06.21 20:52 Сейчас в теме
(88) "Мне нужно удостовериться, что я и мои коллеги проверили все участки."

Подкину идею. Лист бумаги со списком, где подписью и датой коллеги помечают проверки. Дешево, сердито, работает даже не с 1С, а с любым ПО, а главное юридически значимо.

"Но не вижу смысла для таких простых вещей привязываться к БСП и мониторить ещё и её."

Точно. И чего все ЗУП, БП и т.п. используют? Только с нуля. Только хард-кор.


:)