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

16.08.17

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

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

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

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

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

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

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

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

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

См. также

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

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

вчера в 10:30    341    ovetgana    15    

4

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

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

11.03.2025    2271    mrXoxot    42    

37

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

В последней статье по докладу Александра Кириллова, с которым он выступил на конференции INFOSTART TECH EVENT 2024, обсудим особенности тестирования после завершения рефакторинга платформеннозависимого кода

11.03.2025    237    it-expertise    0    

3

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

Расширяемый форматтер структуры модулей 1С. Умеет автоматически расставлять стандартные области и раскидывать по ним процедуры и функции модуля, оформлять стандартные комментарии к методам с помощью ИИ. Также умеет анализировать модуль - извлекать структуру вызовов, используемые поля и т.д. Реализован в виде расширения (.cfe). Можно использовать как платформу для обработки кода в своих задачах автоматизации разработки.

12.02.2025    6413    418    wonderboy    42    

118

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

В третьей статье по докладу Александра Кириллова, с которым он выступил на конференции INFOSTART TECH EVENT 2024, обсудим подходы к рефакторингу платформеннозависимого кода

11.02.2025    952    it-expertise    0    

3

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

Во второй статье по докладу Александра Кириллова, с которым он выступил на конференции INFOSTART TECH EVENT 2024, поговорим об особенностях анализа конфигурации 1С на наличие платформеннозависимого кода.

31.01.2025    1621    it-expertise    1    

7

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

В практике нашей специальной команды по проектам сложных обновлений 1С прошел один из самых объёмных проектов: необходимо было обновить «1С: Бухгалтерия предприятия КОРП 3.0 + БИТ.ФИНАНС». Конфигурация содержала доработки практически по всем типам объектов метаданных. Длительность проекта составила 1 год и 2 месяца и обеспечила полной загрузкой 4 разработчиков на 6 месяцев.

31.01.2025    1174    1c-izh    3    

5

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

В последнее время термин «чистый код» стал очень популярным. Появились даже курсы по данной тематике. Так что же это такое?

16.09.2024    17524    markbraer    66    

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

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

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

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

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

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

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


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


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

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

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

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

А я говорю не об одной , а о целой линейке ут11, erp , ка 2.0 , все что сейчас активно разрабатывается и постоянно обновляется, где как раз и нужны новые методы доработки. А не о старье типа ут 10, на которое только исправительные релизы выходят.
26. pm74 203 17.08.17 13:59 Сейчас в теме
(25) я говорю о том , что переопределение вызова любого обработчика формы одинаковое для УФ и ОФ , в ОФ проще т.к. нет разделения контекстов
а на "старье типа ут 10" львиная часть фирм работала и будет работать в обозримом будущем
monkbest; +1 Ответить
28. user633533_encantado 12 17.08.17 16:40 Сейчас в теме
(26) Работать то будут, но обновления там незначительные и проблем как правило нет.
6. Tahallus 441 16.08.17 21:23 Сейчас в теме
Изучайте расширения конфигураций
Berckk; skalex; Windyhead; Dmitri93; OlegAr; +5 Ответить
30. monkbest 114 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 Сейчас в теме
Звезданул :)
Тема актуальная.
Оставьте свое сообщение