Имя: Пароль:
LIFE
 
OFF: Поговорим о странном коде?
🠗 (Волшебник 20.04.2017 22:04)
,
0 Vladal
 
20.04.17
15:51
Привет!

Вот хочу разобраться в коде, который мне стал попадаться в последнее время всё чаще:
|...
|ГДЕ
|    Документ.ВидОперации = &Видоперации
|    И Документ.Проведен = Истина
|    И (Документ.Контрагент = &Дистрибьютор1
|        ИЛИ Документ.Контрагент = &Дистрибьютор2)
...
Далее что-то типа:

Запрос.УстановитьПараметры("Дистрибьютор1", ОбщийМодуль.ПолучитьКонстанту("Дистрибьютор1"));
Запрос.УстановитьПараметры("Дистрибьютор2", ОбщийМодуль.ПолучитьКонстанту("Дистрибьютор2"));

Вот у меня мысль - это какой-то тонкий шик оптимизации запроса, о котором я не знал (сравнивать два раза с различными параметрам), или надо было быстренько костыль сделать, а может просто неопытность автора?
Теперь поступила задача добавить третьего дистрибьютора и тут либо продолжить костылить, или поменять архитектуру решения.
Вроде до меня не глупые люди это писали.
1 Zombi
 
20.04.17
15:52
Нельзя же критиковать разработчиков 1сю Новые правила форума.
2 HEKPOH
 
20.04.17
15:52
"Вроде до меня не глупые люди это писали."
"И Документ.Проведен = Истина"

не стыкуется :)
3 Naf2017
 
20.04.17
15:53
(0) шик это делать константы Дистрибьютор1, Дистрибьютор2, ...
вместо регистра сведений, например
4 aka AMIGO
 
20.04.17
15:54
Запихивать в СЗ дистров - это 3-4 лишних строки в коде.
А так - оч.экономно, и задачу решает :)
5 Любопытная
 
20.04.17
15:54
(2) Глупые люди написали бы И "Документ.Проведен = &Проведен"
6 Волшебник
 
модератор
20.04.17
15:54
(1) Это какие-то быдлокодеры писали, а не разработчики 1С. Хотя да, ты прав.
7 Vladal
 
20.04.17
15:55
(1) В правилах говорится о разработчиках фирмы "1С".
а я и не критикую 1С, а конкретный код, и не типовой даже.
8 Smile 8D
 
20.04.17
15:58
(2) Варианты "И Документ.Проведен", "И НЕ Документ.ПометкаУдаления" не на всех версиях платформы и базах данных работают корректно. Пока не столкнулся даже не думал об этом, а теперь перестраховываюсь и пишу " = Истина", "= Ложь".
9 Hmster
 
20.04.17
15:58
может быть так специально было сделано, может был какой-то определенный процесс про который все забыли?
10 Трипиэль
 
20.04.17
15:59
быстрее переделать, чем писать на Мисту и читать бесполезные комментарии
11 Vladal
 
20.04.17
15:59
(2) Ага. "Никогда не говорите плохо о своих предшественниках. Ведь благодаря им Вы получили эту работу".
(4) Да. Хоть обошлось без НайтиПоКоду и НайтиПоНаименованию.
12 Любопытная
 
20.04.17
15:59
(8) на каких не работают?
13 Vladal
 
20.04.17
16:00
(10) моя цель не "напишите за меня решение", а "давайте погоаорм". понимаешь, мне одиноко, не с кем поговорить. Может найдутся такие же души )))
14 Smile 8D
 
20.04.17
16:01
(12) Сейчас уже не помню точную конфигурацию, на которой такая проверка стала вести себя некорректно. Но искали причину очень долго, смотрели запросы через профайлер. В итоге выяснилось, что замена на "ПометкаУдаления = Ложь" решила проблему.
15 Vladal
 
20.04.17
16:01
"давайте погоаорм" = "Давайте поговорим".
16 Vladal
 
20.04.17
16:01
(14) заменили в запросе "НЕ ПометкаУдаления" на "ПометкаУдаления = ЛОЖЬ"?
17 Vladal
 
20.04.17
16:02
Миста — веселый ресурс со своими эксклюзивными тараканами Ymryn
18 Любопытная
 
20.04.17
16:02
(14) ну как так-то? Такие вещи надо помнить. И другим рассказывать
19 Gantosha
 
20.04.17
16:05
я так люблю писать .. что бы другим потом тошно было.
Еще люблю писать найти по коду.
Найти по наименованию писать не люблю, так как с-ки их в баез часто меняют.
20 Вафель
 
20.04.17
16:07
сначала был 1 дисрибьютор,потом добавили 2.
Но на переписывать весь легаси код денег не дали.
Сделали по быстрому
21 Fish
 
20.04.17
16:08
(0) Очень похоже на стиль франчей. Обычно у них подобный код встречается.
22 Timon1405
 
20.04.17
16:10
Тут все просто: нет времени кодить - добавил и забыл,
есть время - меняй архитектуру.
23 aka AMIGO
 
20.04.17
16:10
(18) Так всё ясно ведь :) - причину некогда было искать, устранили следствие, метод запомнился.. Всё :)

(19) а я пишу без оглядки на других.
24 Новиков
 
20.04.17
16:14
(0) >>тут либо продолжить костылить

Делать неделю, потеть, ходить, ругаться, попросить ТП, ТЗ, обследование, сделать полный рефакторинг, посовещаться со срам-мастерами, выбить переработок еще на неделю и в конце написать:

Запрос.УстановитьПараметры("Дистрибьютор3", ОбщийМодуль.ПолучитьКонстанту("Дистрибьютор3"));
25 Любопытная
 
20.04.17
16:14
(23) Я с таким не встречалась никогда, всегда пишу просто не Документ.ПометкаУдаления, например. А вдруг люди платформу сменят, у них этот глюк вылезет и будут меня проклинать?
26 aka AMIGO
 
20.04.17
16:17
(25) Нее.. тут применяется принцип: "работает - не трогай!" :)
27 Smile 8D
 
20.04.17
16:17
(16) Да
(18) К сожалению на данном форуме не приветствуется описание проблем, возникших в 1С. Вот мой товарищ завел тему, где описал на какие грабли наступил при попытке сделать копию типового документа в БП3, а Волшебник просто удалил тему с комментарием "Данная тема на данном форуме не интересна", а затем вообще забанил товарища. К сожалению, тут теперь модно обсуждать политику и другие оффтопы)
28 Волшебник
 
модератор
20.04.17
16:18
(27) Так ему и надо
29 Джинн
 
20.04.17
16:20
(27) Вашему товарищу не повезло. А неудачникам на Мисте делать нечего.
30 Smile 8D
 
20.04.17
16:21
(29) Зато мы много узнали о манерах и воспитании Станислава) но это уже отдельная тема)
31 Волшебник
 
модератор
20.04.17
16:22
(30) Давай, скажи ещё что-нибудь.
32 Vladal
 
20.04.17
16:43
(24) зачет
33 agarych
 
20.04.17
16:50
(0) Вангую...

Сначала все обещали, что только один контрагент будет таким исключительным. Прог добавил константу. Через полгода год, пришли и попросили еще одного включить. Переделывать было лень, добавил еще одну константу.

Ты стоишь перед таким же выбором )

А вот зачем так константу получать я не пойму.
ОбщийМодуль.ПолучитьКонстанту("Дистрибьютор1")
34 DailyLookingOnA Sunse
 
20.04.17
16:53
"Документ" может быть полем составного типа.
Отсюда и проверка на булево.
35 Aleksey
 
20.04.17
16:53
(33) ну я в 7-ке также получаю значение константы. Не через Константа.МояКонстанта, а глКонстанта("МояКонстанта") - ибо кэш. Т.е. при первом обращении кэширую значения, а дальше уже из кэша выбираю
36 Timon1405
 
20.04.17
16:55
(33) этот ОбщийМодуль может быть привелигированным
37 Вафель
 
20.04.17
16:55
(33) вполне возможно, что там вообще не константа
38 Вафель
 
20.04.17
16:56
а чтонибуль
Контрагенты.НайтиПоКоду()
39 agarych
 
20.04.17
16:57
(38) Кстати да, ТС покажи что там в этой функции.
40 Vladal
 
20.04.17
16:58
(39) Нельзя.
(35) Правильный ход.
41 Smallrat
 
20.04.17
16:59
(24) этапять!
42 Вафель
 
20.04.17
17:03
(35) а в 8 наоборот отказались от  этого
43 Vladal
 
20.04.17
17:17
(42) В типовых кешируется. глЗначениеПеременной
44 HEKPOH
 
20.04.17
17:28
(34) + и у одного из видов есть реквизит "Проведен" составного типа. Да? :)
45 NorthWind
 
20.04.17
17:31
(0) тю... ну мож человек не знал про то что можно список в параметр передать
46 undertaker
 
20.04.17
17:34
(43) в глЗначениеПеременной не кешируются константы да и в новых типовых этого уже нет
47 VladZ
 
20.04.17
17:46
(0) Есть несколько способов решения задачи: 1. Быстрый. Смотришь, как было сделано раньше делаешь также.  Плюсы - очень быстро. Минусы: масштабируемость никакущая. При большой объеме доработок (при данном подходе решения) хаос в системе растет как снежный ком. И поддерживать в итоге этот уровень хаоса становится очень сложно.  2. Правильный. Требует временных затрат. Нужно сначала хорошенько подумать  над реализацией. Разработать максимально эффективное решение для текущей ситуации. Минусы: долго. Плюсы: концептуальный подход более эффективен. Еще один минус этого подхода - плохо работает в "динамично развивающийся компаниях". Пока придумаешь реализацию механизма, пока разработаешь и внедришь - концепция сменилась. И что в итоге делать? Что-что...  Как говорил известный персонаж: "Пилите, Шура! Пилите! Они золотые!".
48 VladZ
 
20.04.17
17:48
+47 Применительно к сабжу: скорей всего было сделано в варианте "сделай мне быстро".
49 kiruha
 
20.04.17
17:53
(0)
Было 2 дистрибьютора
Стало 3.
Ну может быть лет через 10 будет 4.

Этих дистрибьютеров менеджеры знают наизусть
Под каждого отдельные решения.

Вот не зная чужого огорода - чего туда лезть ?
И что такого принципиально(!) поменяется если будет справочник ?
50 undertaker
 
20.04.17
17:53
а мне вот интересна конструкция в последних типовых типа
Выбрать
Док.Ссылка
Из
Документы КАК Док
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
Константы КАК Константы
ИСТИНА

при этом Константы никак не используются. Возможно это издержки копипасты/универсальности
51 vi0
 
20.04.17
17:57
(8) не очень умно делать так из-за ошибки в одной из версий платформы
52 kiruha
 
20.04.17
18:05
Кстати есть франчи весь бизнес которых  на одном клиенте.
И у них возможно есть константа - СуперГлавныйКлиент

Можно к ним претензии - мол по хорошему надо справочник , клиентов нужно много и т.д учить их уму разуму как бизнес делать
53 breezee
 
20.04.17
18:15
(0)
-Сделай нам задачу, срочную, надо вчера. Через 5 минут закрытие месяца
-Я могу сейчас костыль налепить, а потом вернуться и доделать, если очень надо
-А еще у нас себестоимость по 2 контрагентам считаться не должна, через 20 минут надеемся на решение

Вангую, что как-то так все и было)
54 Aleksey
 
20.04.17
18:29
(49) внутренний перфекционист будет спать спокойно
55 lodger
 
20.04.17
18:41
эта ж Легаси код. заезженная тема. особенно грустно когда это наследие передается уже несколько поколений и уже напоминает не костыльное решение, а просто гору костылей вдетых друг в друга в хаотичном порядке :D
56 Asmody
 
20.04.17
21:17
Запрос к документам с проверкой? "Проведен" – это боль!
57 Asmody
 
20.04.17
21:19
(56)+ вопросительный знак – издержки юникода
58 Волшебник
 
модератор
20.04.17
21:19
(56) Присоединяюсь к страданиям
59 Asmody
 
20.04.17
21:22
Сам-знаешь-кто, если ты это читаешь: сейчас самое время переделать на регистры всё, что было страшновато трогать!
62 Волшебник
 
модератор
20.04.17
22:00
Считаю намеренную публикацию различного быдлокода непродуктивной и отнимающей время профессионалов. Как-нибудь включу в правила этот пункт.
63 Волшебник
 
модератор
20.04.17
22:05
Ветка притоплена. Можете высказать свои пожелания напоследок, завтра прочитаю.
64 Asmody
 
21.04.17
00:31
А давайте сделаем ветку с примерами красивого или необычного кода на 1С!
65 Asmody
 
21.04.17
00:34
Сразу говоримся, что код длиннее 20 строк, не может быть красивым.
66 VladZ
 
21.04.17
06:37
(64) Понятие красоты у всех разное.  "Кому-то и кобыла - невеста" (с)
67 FIXXXL
 
21.04.17
08:40
(65) вызов 20-ти вложенных функций друг за другом считается? :)
68 Asmody
 
21.04.17
10:13
(67) Это называется ЛИСП
69 Torquader
 
23.04.17
01:09
(65) А кто мешает вообще весь код в одну строку записать ?
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший