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

Публикация № 662405

Программирование - Практика программирования

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

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

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

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

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

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

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

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

14

См. также

Специальные предложения

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

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

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

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

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

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

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


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


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

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

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

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

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

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