Доработки конфигурации. Один совет по избежанию потенциальных грабель

16.08.17

Разработка - Рефакторинг и качество кода

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

Например, безобидная конструкция

Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
    
    //начало доработки
    Для Каждого Оформление Из ОформленияСтрок Цикл
        //что-то там делаем
    КонецЦикла;
    //конец доработки
    
    //стандартный код
    // тут пока ничего нет
    //конец стандартного кода
    
КонецПроцедуры

после очередного обновления может превратиться в 

Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
    
    //начало доработки
    Для Каждого Оформление Из ОформленияСтрок Цикл
        //что-то там делаем
    КонецЦикла;
    //конец доработки
    
    //стандартный код
    Если ЛунаНаходитсяВДомеВенеры() Тогда
        Оформление = ВесёленькиеЦвета();
    КонецЕсли;
    
    Если Оформление<>Неопределено Тогда
        РаскраситьСтроки(ОформленияСтрок, Оформление);
    КонецЕсли;
    //конец стандартного кода
    
КонецПроцедуры

Видно, что если Луна не находится в доме Венеры, то разработчик предполагает, что Оформление = Неопределено. А в результате работы вашего куска кода это не так. Поэтому лучше написать:

Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
	
	//начало доработки
	Доработка_СписокПриПолученииДанных(Элемент, ОформленияСтрок);
	//конец доработки
	
	//стандартный код
	// тут пока ничего нет, но однажды может появиться!
	//конец стандартного кода
	
КонецПроцедуры

Процедура Доработка_СписокПриПолученииДанных(Элемент, ОформленияСтрок)
	
	Для Каждого Оформление Из ОформленияСтрок Цикл
		//что-то там делаем
	КонецЦикла;
	
КонецПроцедуры

См. также

Результаты ревью кода 1500+ решений каталога Инфостарт: наиболее частые ошибки разработчиков в коде

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Поделюсь своим опытом аудита кода авторских продуктов с Infostart.ru как одним из элементов применения DevOps-практик внутри Инфостарт. Будет настоящий код, боевые скриншоты, внутренние мемы от команды ИТ-лаборатории Инфостарт и прочее мясо – все, что любят разработчики.

10.04.2024    4777    artbear    70    

70

Ниндзя-код

Рефакторинг и качество кода Платформа 1С v8.3 Россия Бесплатно (free)

Предлагаю вашему вниманию советы мастеров древности. Программисты прошлого использовали их, чтобы заострить разум тех, кто после них будет поддерживать код. Гуру разработки при найме старательно ищут их применение в тестовых заданиях. Новички иногда используют их ещё лучше, чем матёрые ниндзя. Прочитайте их и решите, кто вы: ниндзя, новичок или, может быть, гуру? (Адаптация статьи "Ниндзя-код" из учебника JavaScript)

01.04.2024    2247    DrAku1a    15    

33

Практическое программирование: когда скорость важнее совершенства

Рефакторинг и качество кода Бесплатно (free)

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

01.04.2024    581    Prepod2003    6    

2

Когда понадобился новый оператор

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

Когда понадобился новый оператор, но его нет в синтакс-помощнике, что делать?

18.03.2024    1339    ZhokhovM    4    

4

Когда разработчик платформы не добавил проверку препроцессоров

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

Когда разработчик платформы решил пойти на кухню за кофе, а проверку препроцессоров не добавил, и вот тут-то и началось: "Что, опять все сломалось? Ну и кофе же я забыл сделать!".😅

18.03.2024    2976    ZhokhovM    4    

9

Реструктуризация - бесконечная история

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

При разработке программ требуемый функционал ставят на первое место, но есть еще и архитектура программы. На горизонте 5-10 лет она становится важнее функционала, который должен работать при масштабировании и росте данных. Реструктуризация 5 терабайтной базы 1С 8.2 в формат 1С 8.3, складывает весь пазл архитектурных просчетов, которые сделали ради функционала. Как это исправить? - для разработки правильной архитектуры, нужно всего лишь сместить фокус с функционала и подумать о «вечном».

29.09.2023    2059    1CUnlimited    15    

23
Комментарии
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Bassgood 1428 16.08.17 10:41 Сейчас в теме
(0) Не ново, плюс в таком подходе также в более удобном обновлении конфы (вместо 100500 своих вставленных в типовую процедуру строк сравнение показывает только одну строку с вызовом нашей процедуры) и более читабельном коде.
shalimski; roman.pykhov; +2 Ответить
7. pm74 199 17.08.17 10:20 Сейчас в теме
(1) зависит имхо от того насколько глобально меняется конфигурация + насколько важны обновления
15. Bassgood 1428 17.08.17 11:14 Сейчас в теме
(7) Лучше изначально придерживаться определенных правил, чем потом наблюдать в коде смешанные "жанры", приятнее все же наблюдать некое однообразие в подходе доработок, чем разрозненное "как умею, так и делаю".
Дело может касаться даже не только более удобного обновления, но и более наглядного разграничения своего кода от типового.
16. pm74 199 17.08.17 11:23 Сейчас в теме
(15) не всегда получается , например когда доработка делается "лоскутно" по тех заданиям или сильно изменяется функционал конфигурации
например на рис. документ "заказ на производство" конф. УНФ 1.2 , от стандартного мало что осталось
Прикрепленные файлы:
acanta; Bassgood; +2 Ответить
21. user633533_encantado 11 17.08.17 13:37 Сейчас в теме
(16) В таких случаях проще сразу новую форму делать для документа.
acanta; ice-net; ipoloskov; +3 Ответить
22. pm74 199 17.08.17 13:45 Сейчас в теме
(21)
А чем проще-то ?
конфигурация не обновляется ,
чтобы потом исправлять все обращения к форме документа по всей конфе ?
24. user633533_encantado 11 17.08.17 13:50 Сейчас в теме
(22) Вы похоже не понимаете: в таких конфах как ут11 или ERP в формы и в общие модули лезть не нужно, чтобы добавить реквизиты на форму.
С обновлением вообще никаких проблем. Все делается программно из своих модулей.
27. ipoloskov 162 17.08.17 13:59 Сейчас в теме
(24) приходится лезть, если нужно назначить обработчики добавленным элементам формы
29. user633533_encantado 11 17.08.17 16:41 Сейчас в теме
31. monkbest 115 07.09.17 14:49 Сейчас в теме
(21)забудьте этот криворукий метод!!! Не делайте новых форм, это прикапывание проблемы обновления, а не решения. Потом не разберетесь какого релиза Ваша форма, какого типовая
ipoloskov; +1 Ответить
32. user633533_encantado 11 07.09.17 15:20 Сейчас в теме
(31) Это всего лишь предположение. А вообще программно модифицировать типовую форму как в 16 может оказаться намного дороже чем сделать свою, заказчик решает.
34. monkbest 115 08.09.17 10:56 Сейчас в теме
(32) вы правы, что решает заказчик: изменять интерфейс кодом или мышкой в визуальном редакторе. Мышкой быстрее, но воспроизводить потом при обновлении вручную - медленнее, т.к. скопипастить элементы управления не всегда удается.

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

Но вод создавать новую форму, делать её основной и в неё вносить изменения - это ошибка. Тут Вы никогда не узнаете в процессе обновления, что надо что-то "скрестить" ни робот ни глазки не увидят конфликта версий и конфликт будет обнаружен уже на этапе тестирования. Плюс, если ошибки при тестировании не всплывёт, Ваша форма будет клоном типовой формы неизвестного релиза, версия которого нигде не будет зафиксирована и Вы никак не узнаете какие строки кода в ней типовые, а какие Ваши. По сути Вы теряете все прелести механизма "Поддержки", когда каждому объекту сопоставлен типовой объект и можно сравнить.
33. Артано 762 08.09.17 03:48 Сейчас в теме
(31) (32)

Отчасти правы оба. Объясню в чем дело. В общих случаях согласен с тем, что модификация формы должна быть программной. Этот метод проще в управляемых, но вполне эффективен (при наличии подготовленного API) и в обычных формах. Впрочем, модификация обычных форм сложна в любом случае =)

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

Но в любом случае, программная доработка типовых интерфейсов, значительно упрощает процесс обновления и высвобождает сэкономленное время для собственных доработок.
35. monkbest 115 08.09.17 10:59 Сейчас в теме
(33) "человек, который будет на постоянной основе анализировать типовые релизы и выдавать указания"

Функции этого человека реализованы платформой механизмом "поддержки", платформа сама Вам покажет различия трех конфигураций и Вы примете решение, что делать.
2. N_s_s 2 16.08.17 11:05 Сейчас в теме
Полезная информация, я пишу в коде процедуры, просто с пометками типа
//***НСС дата 
//**НСС


Хорошо если меняешь одну процедуру, а если пяток?
то как писать?
Функция МояФункция(Функция источник, параметр)
 обработка под функции
КонецФункции


так выходит? советуюсь на будущее
4. Артано 762 16.08.17 11:10 Сейчас в теме
(2) Вынесение доработок в отдельные функции - это в большинстве случае единственный способ обеспечения сопровождаемости алгоритма. Под сопровождаемостью я понимаю скорость восприятия всего алгоритма в целом и следовательно скорость внесения изменений. Обновление типовой это частный случай сопровождения.
Также, если вы любитель методов по 1-3к строк, то эта заметка для вас.
Nelli_A86; +1 Ответить
38. wau8824ru 22 29.02.20 09:24 Сейчас в теме
(2)
Функция МояФункция(Функция источник, параметр)
 обработка под функции
КонецФункции

//88(
Функция МояФункция(Функция источник, параметр)
 обработка под функции
КонецФункции//88) Функция МояФункция(Функция источник, параметр)

Так видно что добавлено
3. user633533_encantado 11 16.08.17 11:09 Сейчас в теме
Если говорить про УФ, то вообще не нужно лазить в процедуры событий элементов, а переназначать события на свои процедуры программно.
necropunk; +1 Ответить
5. Артано 762 16.08.17 11:11 Сейчас в теме
8. pm74 199 17.08.17 10:24 Сейчас в теме
(3) а в чем тут разница между УФ и ОФ ?
9. user633533_encantado 11 17.08.17 10:35 Сейчас в теме
(8) С точки зрения,того как правильно вносить изменения в конфигурацию, чтобы не иметь проблем с обновлениями - ни в чем.

Но в новых конфигурациях на УФ, таких как ERP или УТ11 разработчиками добавлены такие общие модули , как "событияформ", которые во многих случаях вообще избавляют от необходимости лезть в типовые модули форм, даже по мелочам.
10. pm74 199 17.08.17 10:37 Сейчас в теме
(9) может я чего не знаю , но ОФ это сделать проще
11. user633533_encantado 11 17.08.17 10:42 Сейчас в теме
12. pm74 199 17.08.17 10:46 Сейчас в теме
(11) переопределить поведение элементов формы например
на картинках форма заказа и скрин из конфигуратора заказа в типовой УТ10.3, обратите внимание что на самом документе и его реквизитах висит замок
Прикрепленные файлы:
13. Automatik 919 17.08.17 10:57 Сейчас в теме
14. pm74 199 17.08.17 10:58 Сейчас в теме
(13) инъекции кода в процедуры общих модулей
17. Dmitri93 12 17.08.17 12:48 Сейчас в теме
(14) Как инъекции кода добавили новые закладки на форму и столбцы в ТЧ? Объясните поподробнее, очень заинтересовал этот вопрос.
18. pm74 199 17.08.17 12:52 Сейчас в теме
19. Dmitri93 12 17.08.17 12:54 Сейчас в теме
20. user633533_encantado 11 17.08.17 13:36 Сейчас в теме
(14) А чем проще-то ? Вы влезли в типовой модуль, чтобы из него модифицировать форму. В уф тоже самое, только в типой общий модуль к тому же влезать не надо, если не считать тот, который как раз для этого предназначен.
d4rkmesa; +1 Ответить
23. pm74 199 17.08.17 13:49 Сейчас в теме
(20) вы мне в пример приводите одну единственную конфигурацию с каким то общим
модулем а делаете обобщения на все УФ в (3) дескать легче программно изменять , хотя методика переопределения обработчиков та же самая
25. user633533_encantado 11 17.08.17 13:53 Сейчас в теме
(23) Ну так и ваш пример использует общием моудли каких-то определенных конфигураций, он не универсальный.

А я говорю не об одной , а о целой линейке ут11, erp , ка 2.0 , все что сейчас активно разрабатывается и постоянно обновляется, где как раз и нужны новые методы доработки. А не о старье типа ут 10, на которое только исправительные релизы выходят.
26. pm74 199 17.08.17 13:59 Сейчас в теме
(25) я говорю о том , что переопределение вызова любого обработчика формы одинаковое для УФ и ОФ , в ОФ проще т.к. нет разделения контекстов
а на "старье типа ут 10" львиная часть фирм работала и будет работать в обозримом будущем
monkbest; +1 Ответить
28. user633533_encantado 11 17.08.17 16:40 Сейчас в теме
(26) Работать то будут, но обновления там незначительные и проблем как правило нет.
6. Tahallus 439 16.08.17 21:23 Сейчас в теме
Изучайте расширения конфигураций
Berckk; skalex; Windyhead; Dmitri93; OlegAr; +5 Ответить
30. monkbest 115 07.09.17 14:44 Сейчас в теме
После такой передачи параметров переменные все равно изменятся. Тогда уж надо передавать значения.

ИМХО: при ручном обновлении модуля надо в новый релиз два раза копипастнуть, а без Ваших советлв - 1

ИМХО2:Роберт Мартин Вас поддержит, т.к. проповедует функции в три строки не более. Но там java с чистым ООП, а тут 1С с суровой реальностью и лишняя строка в стеке вызовов -100500 к Вашей карме при отладке и пои,ке косяка другим разработчиком
36. andrusevich 30.09.17 23:38 Сейчас в теме
Раньше пользовался маркерами с датой и от кого требование считаю правильным этот подход.

Сча пишу с нуля на БСП и в основном пищевое или аграрка, проще настроить обмен с упр и бух учетом чем изобретать велосипед
37. avk72 79 03.11.17 19:43 Сейчас в теме
Звезданул :)
Тема актуальная.
Оставьте свое сообщение