|
Рефакторинг кода в 1С | ☑ | ||
---|---|---|---|---|
0
НоваяВолна
12.01.22
✎
11:34
|
Надоел робот, который не воспринимает код, вроде и простой и говорит ИСПРАВЬ! Хоть и часы по рефакторингу у нас оплачиваются как и обычные рабочие часы, но лезть в готовый код, переделывать и по новой тестировать уже сданную работу как то не комильфо. И ладно ещё были бы серьезные ошибки, а то ругается на такую мелочь, как //Комментарий - отствие пробела между // и Комментарий )))). А теперь к сути. как бы вы написали конструкцию вида:
Если ВидНеисправности = Справочники.ВидНеисправности .НайтиПоКоду("10464") ИЛИ ВидНеисправности = Справочники.ВидНеисправности .НайтиПоКоду("10998") ИЛИ ВидНеисправности = Справочники.ВидНеисправности .НайтиПоКоду("10999") ИЛИ ВидНеисправности = Справочники.ВидНеисправности .НайтиПоКоду("10929") ИЛИ ВидНеисправности = Справочники.ВидНеисправности .НайтиПоКоду("10467") Тогда ...... КонецЕсли; ругается что слишком сложная конструкция из ИЛИ |
|||
1
dubolom
12.01.22
✎
11:37
|
МассивВН = Новый Массив;
МассивВН.Добавить(Справочники.ВидыНеисправности.НайтиПоКоду("ХорошийКод")); МассивВН.Добавить(Справочники.ВидыНеисправности.НайтиПоКоду("ОченьХорошийКод")); МассивВН.Добавить(Справочники.ВидыНеисправности.НайтиПоКоду("ВащеОтстойныйКод")); Если МассивВН.Найти(ВидНеисправности)<>Неопределено Тогда ... КонецЕсли; |
|||
2
pechkin
12.01.22
✎
11:38
|
(1) Лучше соотвествие
|
|||
3
ДенисЧ
12.01.22
✎
11:38
|
Справочники.ВидНеисправности.Поломка
и т.п. |
|||
4
pechkin
12.01.22
✎
11:39
|
а правильно нужно галку какую поставить в справочник
|
|||
5
arsik
гуру
12.01.22
✎
11:40
|
(2) Массив быстрее
|
|||
6
Василий Алибабаевич
12.01.22
✎
11:40
|
(0)
МассивКодовНеисправностей = Новый Массив; МассивКодовНеисправностей.Добавить("10464"); МассивКодовНеисправностей.Добавить("..."); МассивКодовНеисправностей.Добавить("..."); МассивКодовНеисправностей.Добавить("..."); Если МассивКодовНеисправностей.Найти(ВидНеисправности.Код) <> Неопределено Тогда |
|||
7
pechkin
12.01.22
✎
11:41
|
(5) в массиве поиск - это перебор, а в соотвествии - хэшмап
|
|||
8
RomaH
naïve
12.01.22
✎
11:41
|
Справочники.ВидНеисправности.Поломка();
Функция Поломка() Экспорт Возврат Справочники.ВидНеисправности.ПолучитьСсылку(новый УникальныйИдентификатор("")); КонецФункции |
|||
9
dubolom
12.01.22
✎
11:41
|
(7) Хосподя, у него пять элементов.
|
|||
10
Василий Алибабаевич
12.01.22
✎
11:41
|
+ (6) Или можно строку с разделителями. Но строка ИМХО не так наглядно. И будет тяжелее в сопровождении.
|
|||
11
arsik
гуру
12.01.22
✎
11:44
|
(7) На создание и заполнение соответствия время потеряешь. Если Соответствие заполнить 1 раз и вызывать поиск 100 тогда возможно будет быстрее.
|
|||
12
pechkin
12.01.22
✎
11:45
|
(11) все равно правильный вариант это (4)
|
|||
13
mistеr
12.01.22
✎
11:47
|
(0) Я бы заменил на функцию. А список кодов на массив ссылок с кэшированием.
|
|||
14
dubolom
12.01.22
✎
11:48
|
(13) Тогда уж запилить отдельный регистр сведений со списком требуемых видов неисправности, чтобы каждый раз в код не лезть.
|
|||
15
Uberschall
12.01.22
✎
11:52
|
(7) это так, но чтобы это знать, надо быть "одной ногой" в "нормальном" ЯП. т.е. по сути знать несколько ЯП и все -равно заниматься 1С)))
|
|||
16
mistеr
12.01.22
✎
11:52
|
(14) Возможно, если он часто меняется.
|
|||
17
Garykom
гуру
12.01.22
✎
11:53
|
(0)
|
|||
18
dubolom
12.01.22
✎
11:55
|
(12) Смотря по размеру справочника.
Если он большой, а в коде, как сейчас, вариантов 5 - то правильнее (14) |
|||
19
Garykom
гуру
12.01.22
✎
11:55
|
(0) У тебя ошибка не в сложном условии а в куче лишних дерганий БД через НайтиПоКоду
|
|||
20
mistеr
12.01.22
✎
11:55
|
(17) Хороший вариант, если вместо Коды будет говорящее имя.
|
|||
21
RomanYS
12.01.22
✎
11:55
|
(17) низзя такие ключи в структуре.
|
|||
22
Garykom
гуру
12.01.22
✎
11:55
|
(21) ну сделай массив или соответствие
|
|||
23
НоваяВолна
12.01.22
✎
11:58
|
(4) галку? интересно, но не понятно. выборка по справочнику потому и идет по нескольким кодам, потому как Виды Неисправностей, а точнее объекты ремонта разные. Грубо говоря если случились перечисленные неисправности, то сломался к примеру холодильник, а если другие, то радиоприемник, третьи - телевизор и т.д.
|
|||
24
Garykom
гуру
12.01.22
✎
11:59
|
(21) хотя влом
Коды = Новый Структура("К10464, К10998, ..."); Если Коды.Свойство("К"+ВидНеисправности.Код) Тогда // ... КонецЕсли; |
|||
25
Garykom
гуру
12.01.22
✎
11:59
|
(24)+ или вместо "К" лучше|можно "_" ?
|
|||
26
dubolom
12.01.22
✎
12:00
|
(23) Тогда не галку, а перечисление "ПоломаннаяХрень". И соответствующий реквизит в справочнике/регистре сведений.
|
|||
27
dubolom
12.01.22
✎
12:01
|
(24) Если бы я был такой же злой, как средний мистянин, написал бы, что это - образец говнокода.
|
|||
28
RomanYS
12.01.22
✎
12:02
|
(24) имхо лучше так
Массив = СтрРазделить("10464, 10998, ..."); (25) а если код будет с пробелом или ещё каким символом запрещенным в ключах? |
|||
29
Garykom
гуру
12.01.22
✎
12:02
|
(28) Согласен
|
|||
30
Garykom
гуру
12.01.22
✎
12:03
|
(27) Говнокод это в (0) У меня ближе к https://ru.wikipedia.org/wiki/Brainfuck - излишняя оптимизация
|
|||
31
Garykom
гуру
12.01.22
✎
12:05
|
Суть что если у ТС работа с кодами то нехрен дергать базу
Коды из строки в некую структуру и ищи в ней |
|||
32
VladZ
12.01.22
✎
12:08
|
(0) А можно объединить эти Виды неисправностей общим признаком?
Тогда можно добавить реквизит в справочник и отбирать по этому признаку. Плюсы: при добавлении нового элемента справочника с подобным признаком нет необходимости переписывать код. Минусы: требуется дополнительный реквизит (если база на поддержке - нужно продумать варианты). |
|||
33
НоваяВолна
12.01.22
✎
12:13
|
(32) в том то и дело что нет. По идее создается документ в котором группой является Неисправность, а подгруппы Виды неисправностей. При этом Объект ремонта для каждой подгруппы свой. Объекты - это отдельный справочник
|
|||
34
VladZ
12.01.22
✎
12:21
|
(33) Из личного опыта: кусок кода в сабже - это показатель неэффективной архитектуры.
А чтобы дать эффективный ответ на вопрос в сабже - нужно видеть архитектуру системы в целом. Подвожу итог: если указанный код тебя не особо напрягает - оставь как есть. Да, он кривоват, но работает же. Придет время - и поправишь. Либо оно само отомрет за ненадобностью. Как говорят китайцы: "Живи, сохраняя покой. Придет весна и цветы распустятся сами"... |
|||
35
dubolom
12.01.22
✎
12:21
|
(33) Ну соответствие же "многие к одному" типичное. (26) чем не устраивает?
|
|||
36
ildary
12.01.22
✎
12:25
|
(0) Для глупых проверок типа отсутствие пробела между // и Комментарий - лучше включить запрет их обнаружения - спецкомментарий в начале кода.
|
|||
37
mikecool
12.01.22
✎
13:00
|
(0) за такой код линейкой бить надо
|
|||
38
mikecool
12.01.22
✎
13:00
|
+37 чугунной
|
|||
39
Asmody
12.01.22
✎
13:02
|
(38)+ по голове
|
|||
40
DrShad
12.01.22
✎
13:02
|
(39) сначала по пальцам
|
|||
41
ДенисЧ
12.01.22
✎
13:03
|
(40) Лучше по яйцам.
|
|||
42
DrShad
12.01.22
✎
13:04
|
(41) +100500 чтобы не размножались
|
|||
43
mikecool
12.01.22
✎
13:04
|
перепись садистов ))
|
|||
44
Asmody
12.01.22
✎
13:05
|
(36) ну, вообще-то, ненужные проверки отключаются в настройках. (полагаю, что у ТС модный нынче сонаркуб с bsl-плагином). только такие настройки обсуждаются в команде, а не по принципу "я хочу, я не хочу".
порядок в коде должен быть |
|||
45
Asmody
12.01.22
✎
13:06
|
(43) ты первый начал
|
|||
46
DrShad
12.01.22
✎
13:07
|
(43) садист в данном случае это ТС
прикинь тебе в наследство достанется такая БД? |
|||
47
mikecool
12.01.22
✎
13:08
|
(45) ага ))
как то на проекте в тестовую(даже не в прод) проскочил аналог кода из (0), прог забыл убрать - так буча была поднята со стороны заказчика, что чуть ли не проект сворачиваем... ))) |
|||
48
mikecool
12.01.22
✎
13:09
|
(44) дык такие конструкции однозначно проверки не должны пропускать, ибо овнокод )
|
|||
49
Asmody
12.01.22
✎
13:11
|
(47) За НайтиПоКоду() и НайтиПоНаименованию() надо бить вот этой книжкой https://v8.1c.ru/metod/books/42696.htm
|
|||
50
Dmitrii
гуру
12.01.22
✎
13:14
|
Соглашусь с (34). Проблема не в коде, а в архитектуре.
Либо переделать по человечески. И тогда надо пересматривать архитектуру. Либо оставить пока как есть, отложив до тех времён, когда будет возможность сделать нормально. (47) >> в тестовую проскочил аналог кода из (0), прог забыл убрать - так буча была поднята со стороны заказчика. Тут всё таки обратная ситуация. *авнокод уже в проде. Любая оптимизация поиска или проверки по коду в справочнике даст только лишь оптимизированный *авнокод. Надо подход пересматривать, а не менять один *авнокод на другой - более оптимальный. ИМХО. |
|||
51
DimVad
12.01.22
✎
13:19
|
(17) Может вместо "Если Коды.Свойство(ВидНеисправности.Код) Тогда"
что-то типа : Код_ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВидНеисправности, "Код"); Если Коды.Свойство(Код_) Тогда |
|||
52
ildary
12.01.22
✎
13:37
|
(44) Да, но нет: в коде надежнее - завтра эту конфигурацию откроют удаленщики без сонаркуба, но с вручную подключенным BSL (Turboconf, phoenixbsl) - и им уже не надо заморачиваться.
|
|||
53
Asmody
12.01.22
✎
13:40
|
(52) Если практикуется сонаркуб, то код удаленщиков так же обязан через него проходить.
|
|||
54
Гений 1С
гуру
12.01.22
✎
13:47
|
(0) хороший робот, ободряю. А робот ободряет разработчиков.
|
|||
55
ildary
12.01.22
✎
13:50
|
(53) Да, но удаленщики проверяют свой код до сонаркуба.
|
|||
56
novichok79
12.01.22
✎
14:42
|
да, тяжко в 1С без нормальных линтеров.
ну шо, хешмап, можно даже фиксированный чтоб наверняка и инициализация его 1 раз. |
|||
57
Asmody
12.01.22
✎
14:51
|
(55) это проблемы удаленщиков. ну или дайте им свой .bsl-language-server.json
|
|||
58
mikecool
12.01.22
✎
14:51
|
(50) "Либо оставить пока как есть, отложив до тех времён, когда будет возможность сделать нормально. " Такое время не наступает почти никогда
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |