|
Мозговой штурм в код-ревью lEvGl, pavlika, H A D G E H O G s, happysan, obs191, Доминошник, ILM, diamkms, evorle145, Bigbro, Garykom, Caesar, Злопчинский, PR, Lama12, _Batoo, Garikk, MWWRuza, Philix, Шурик71, Затейник, Волшебник, Dotoshin, altair2019, Karamzin, Гипервизор, Web00001, X Leshiy, Seriy_Volk, bolder, Timon1405, palsergeich, Amra, timurhv, Dedal, ReaLg, Михаил Козлов, integer, Страждущий, akronim, Группа неравнодушных, probably, RomanYS, reg0303, PLUT, crotnn, tulke, DomenER, rozer76, ndrv, Beduin, ads55, dmt, alexxx961503, DeeK, Мультук, Vostochnick, Baiji, trooba, Fish, KJlag, Zamestas, Еврейчик, d18, HobbyHorser, paramedic, calmius, kogotaz, Федя Тяпкин, Sserj, phabeZ, zenik, spiller26, trad, 2S, VladZ, Ненавижу 1С, shuhard, АнализДанных, Gucci76, vis, ОператорПК, maxar, Radion, Lemkus, mortal, maxab72, San787, AlexKimp, okmail, Читатель снов, Kigo_Kigo, yurikmellon2, p-soft, kir-g, AntiBuh, RVN, Prog_man, nick86, АгентБезопаснойНацио, ЕRPe, viraboy, Greeen, Franchiser, apiary, GlRoznica, d4rkmesa, Вадя, sikuda, alexis_nov, Верещагин, Широкий
| ☑ | ||
|---|---|---|---|---|
|
0
happysan
04.05.26
✎
15:36
|
Всем доброго времени суток!
Прилагаю скрин: https://dropmefiles.com/uAjZc , на котором есть неоптимальный (некорректный) код. Попутно тоже буду приводить замечания по коду, но и буду благодарен полезным комментариям со стороны сообщества. Сейчас данная задача популярна на собеседованиях и хотелось бы максимально изучить данный вопрос и ничего не упустить. Всем заранее спасибо за позитивное и эффективное участие! |
|||
|
1
Гипервизор
04.05.26
✎
15:15
|
Скрин-то сюда прилагаете?
|
|||
|
2
happysan
04.05.26
✎
15:36
|
Прилагался, но не пропустило. Сейчас ещё раз попытаемся. JPG не пропускает? На всякий случай ещё здесь: https://dropmefiles.com/uAjZc
|
|||
|
3
ads55
04.05.26
✎
15:22
|
(2) Да вставьте вы это поделие просто текстом.
Мне этот код уже не нравится.... :) |
|||
|
4
rozer76
04.05.26
✎
15:28
|
(2) мы... вы там всем отделом сейчас собес проходите в рилтайме что ли...))
|
|||
|
5
happysan
04.05.26
✎
15:37
|
В (0) и (2) добавлена ссылка на скрин.
|
|||
|
6
Garykom
гуру
04.05.26
✎
15:37
|
// При изменении элемента формы "Контрагент"
&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
// Получим пометку удаления
ПометкаУдаления = ПолучитьПометкуУдаленияНаСервере(Контрагент);
Если ПометкаУдаления = Истина Тогда
ТекстВопроса = "Контрагент помечен на удаление. Очистить?";
Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Да Тогда
Контрагент = Неопределено;
КонецЕсли;
КонецЕсли;
// Если контрагент пустой, заполним сумму договора
Если НЕ ЗначениеЗаполнено(Контрагент) Тогда
Для Каждого СтрокаДоговора Из Объект.ТаблицаДоговоров Цикл
СтрокаДоговора.СуммаДоговора = ПолучитьСуммуДоговора(СтрокаДоговора.ДоговорКонтрагента);
КонецЦикла;
КонецЕсли;
КонецПроцедуры // КонтрагентПриИзменении()
&НаСервере
Функция ПолучитьПометкуУдаленияНаСервере(ТекущийКонтрагент)
Возврат ТекущийКонтрагент.ПометкаУдаления;
КонецФункции // ПолучитьПометкуУдаленияНаСервере()
&НаСервере
Функция ПолучитьСуммуДоговора(ДоговорКонтрагента)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ДоговорКонтрагента", ДоговорКонтрагента);
Запрос.Текст = "..........";
/// Выполнение запроса, обработка результата
Возврат Выборка.СуммаДоговора;
КонецФункции // ПолучитьСуммуДоговора() |
|||
|
7
happysan
04.05.26
✎
15:38
|
(3) (4) )))
|
|||
|
8
Garykom
гуру
04.05.26
✎
15:38
|
Говнокод + ИИ-код
|
|||
|
9
happysan
04.05.26
✎
15:39
|
(6) Спасибо, а то был только скрин)
|
|||
|
10
Garykom
гуру
04.05.26
✎
15:43
|
1. ПолучитьПометкуУдаленияНаСервере() - нахер отдельно если там внутри одна строка, да еще без запросов
2. = Вопрос() - все современные конфы давно отказ от модальности/синхронности 3. = ПолучитьСуммуДоговора() - в цикле? и внутри запрос? мдя |
|||
|
11
spiller26
04.05.26
✎
15:40
|
(0) Цикл с запросами на каждого контрагента уже плохо.
|
|||
|
12
happysan
04.05.26
✎
15:40
|
(8) Полностью согласен, но полезно разобрать по пунктам.
|
|||
|
13
RomanYS
04.05.26
✎
15:43
|
(10) " нахер отдельно если там внутри одна строка"
Вроде очевидно - на клиенте поле недоступно) |
|||
|
14
RomanYS
04.05.26
✎
15:44
|
(10) +
4. Контекстный вызов без необходимости |
|||
|
15
happysan
04.05.26
✎
15:44
|
(0)(6) Вызов серверной функции ПолучитьСуммуДоговора(ДоговорКонтрагента) с клиента в цикле - неоптимально и некорректно.
|
|||
|
16
RomanYS
04.05.26
✎
15:47
|
Ещё непонятно откуда изменяется Объект.ТаблицаДоговоров.
|
|||
|
17
ads55
04.05.26
✎
15:49
|
(6) это вот такое сейчас на собесах дают? Да, обмельчал кандидат....
Ну самое первое - зачем вы запрос в цикл кидаете? Получите все договору контра и с ними работайте. Сократить можно код, убрав нафиг, в данном случае, не нужные комментарии. Да и проверку "=Истина" зачем? Вопрос() - ПоказатьВОпрос(). PS. Ого, тут уже написали... А всё то же самое.... |
|||
|
18
Garykom
гуру
04.05.26
✎
15:50
|
(13) Это понятно, почему не объединить?
Зачем делать для одной пометки когда можно свою ЗначениеРеквизитаОбъекта/ЗначенияРеквизитовОбъекта сразу сделать? |
|||
|
19
happysan
04.05.26
✎
15:54
|
(18) Всё верно, я тоже этот вариант фиксировал: использовать функцию БСП ОбщегоНазначения.ЗначениеРеквизитаОбъекта().
|
|||
|
20
happysan
04.05.26
✎
15:57
|
(6) Функция ПолучитьСуммуДоговора(ДоговорКонтрагента) - нужно вызывать без контекста.
|
|||
|
21
RomanYS
04.05.26
✎
15:59
|
(19) только это не избавляет от серверной (без контекста конечно) обертки.
Ну и про наличии БСП в задании ни слова, хотя и открыта собственно конфигурация БСП) |
|||
|
22
happysan
04.05.26
✎
15:59
|
(6) Использовать ПоказатьВопрос(<ОписаниеОповещенияОЗавершении>, <ТекстВопроса>, <Кнопки>, <Таймаут>, <КнопкаПоУмолчанию>, <Заголовок>, <КнопкаТаймаута>)
|
|||
|
23
happysan
04.05.26
✎
16:02
|
(21) Можно два варианта, я лично, два вариант озвучивал на собеседованиях. И, кстати, всё, что здесь люди сообщили, я тоже озвучивал, но пытливые соискатели ещё чего-то хотели, вот я и решил убедиться, что ничего не упущено.
|
|||
|
24
Garykom
гуру
04.05.26
✎
16:17
|
Если честно то код рабочий, для джуна пойдет на ура
И даже мидл/сеньор сможет отмазаться с таким Ну типа запрос в цикле, потому что есть готовая функция и один хрен по одному контрагенту в ТЧ будет 1-2 договора, нет смысла оптимизировать |
|||
|
25
RomanYS
04.05.26
✎
16:18
|
(24) код рабочий ... по одному контрагенту в ТЧ будет 1-2 договора
Тогда ответь на (16). Поменялся контрагент, идёт обработка ТЧ. А что должно было поменять эту ТЧ!? |
|||
|
26
Radion
04.05.26
✎
16:21
|
(24) если этот контрагент некое общее физическое лицо, через которое идут сотни покупок
|
|||
|
27
Garykom
гуру
04.05.26
✎
16:25
|
(25) Это уже вне задачи :)
|
|||
|
28
Федя Тяпкин
04.05.26
✎
16:38
|
Если ПометкаУдаления = Истина Тогда
убрать "= Истина" |
|||
|
29
Garykom
гуру
04.05.26
✎
16:51
|
(28) Вот тут я бы поспорил
Функция же, может и Неопределено вернуть |
|||
|
30
PR
04.05.26
✎
16:56
|
(0) 15 лет стажа и код картинкой?
Мир тупеет со страшной силой Пора повышать ставку до пятерки |
|||
|
31
H A D G E H O G s
04.05.26
✎
16:58
|
(0) У вас там гнездо ливингстаров?
|
|||
|
32
PR
04.05.26
✎
17:01
|
По ходу у ИИ нет никаких шансов
Скоро он переварит все ценное и начнет захлебываться человеческой тупостью и тем, что он сам на этой тупости нагенерил |
|||
|
33
H A D G E H O G s
04.05.26
✎
17:06
|
(32) А Ливингстар и Г1С в этом ему помогут. Особенно есть там библиотека у Г1С с лакомым для нейросетки названием "Библиотека".
|
|||
|
34
Dedal
04.05.26
✎
18:26
|
(0) Первый вопрос: "Какая задача стоит за этим кодом" Что он делает я понимаю, а зачем он это делает?
|
|||
|
35
timurhv
04.05.26
✎
18:32
|
(34) этим и определяется: перед вами кодер по ТЗ или сеньор)
|
|||
|
36
palsergeich
04.05.26
✎
18:33
|
(30) а там еще и окажется что у него зп под лям)
Просто он ублажает пользователей по другому) |
|||
|
37
Web00001
04.05.26
✎
19:12
|
(24)Сеньор? Да как бы тут такой код обычно и джун пишет первый и последний раз. Потом ему говорят так не писать он и не пишет больше.
1. Все вызовы контекстные, хотя смысла в этом ноль. У сеньора должна быть аллергия на такое. 2. Про запрос в цикле написали, это конечно очевидно. Но типа "там данных немного поэтому не страшно". А какой смысл делать плохо и не делать хорошо. Буквы на клавиатуре печатающие хороший код такие же как и буквы печатающий плохой. Зачем печатать плохой? Иногда, такое имеет смысл, но здесь запрос без цикла не усложнит ровным счетом ничего. 3. Объектная модель вытаскивания пометки на удаление прямое нарушение рекомендаций 1с и тоже не имеет никакого смысла. 4. Серверные вызовы в клиентских обработчках без фонового выполнения фризят интерфейс и тоже не рекомендуются. |
|||
|
38
Web00001
04.05.26
✎
19:07
|
(34)Показывает триггерит ли тебя контекстный вызов без необходимости
|
|||
|
39
Web00001
04.05.26
✎
19:09
|
(29) В данном случае не может
|
|||
|
40
H A D G E H O G s
04.05.26
✎
19:14
|
(39) Это если Контрагент - действительно элемент справочника, а не какая-нибудь Структура
|
|||
|
41
PR
04.05.26
✎
19:27
|
(40) Если эта функция может вернуть не только булево, то тогда по определению одно из двух
Либо нужно не писать "= Истина", потому что программа в случае возврата не булево должна упасть с ошибкой "Хули ты от меня хочешь, осел, иди проверяй код" Либо нужно проверять не только Истина, но и Ложь и все остальные возможные значения, потому что хрен его знает, что там может вернуться, может там целый букет типа Истина, Ложь, "true", "false", 0, 1 и пр. херобора, рожденная в воспаленном мозгу автора Вообще, самый ожидаемый вариант — это булево А раз так, то пихать туда что-то еще — преступление, как минимум, в этом случае нужно переобозвать функцию А то получится, что функция СписокСправочников возвращает картинку в jpeg, на которой список метаданных, относящихся к справочникам |
|||
|
42
Злопчинский
04.05.26
✎
20:15
|
Ответ = да
И при этом контрагент присвоить неопределено... ? |
|||
|
43
Garykom
гуру
04.05.26
✎
20:27
|
(37) Написал же про готовую функцию
В типовых такое постоянно |
|||
|
44
Garykom
гуру
04.05.26
✎
20:29
|
(43)+ Есть типовая/готовая функция получения чего-то
Знаем что цикл будет из малого числа повторов (1-3) Ну так и хрен с ним пускай функция в цикле вызывается Будет заметно тормозить - перепишем, вероятно на полный отказ от циклов и готовых функций, все на нормальные запросы |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |