Примеры самого отвратительного кода в 1С

  1. 9 г. назад

    Выкладываем на всеобщее осуждение куски самого отвратительного кода 1С.

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

    Пример 1.
    УчитыватьМинСумму = Не Объект.ПолучитьФорму().ЭлементыФормы.БезУчетаМинимальныхСуммПоставщиков.Значение;

    Пример 2.
    В таб.части документа - реквизит "ПрайсЛисты" - тип ХранилищеЗначений, хранит ТаблицуЗначений
    (что само по себе - прекрасно, учитывая, что документов таких тут много):

    Если ТабНайдено.ПрайсЛисты.Получить() <> Неопределено Тогда
    ПрайсЛисты2 = ТабНайдено.ПрайсЛисты.Получить();
    Если Не ЗначениеЗаполнено(ТаблицаМинимальныеПрайсыПоставщиков) Тогда
    ТаблицаМинимальныеПрайсыПоставщиков = ТабНайдено.ПрайсЛисты.Получить().СкопироватьКолонки();

    Ответы: (1) (6)
  2. ptiz Вынужден сейчас ковыряться в конфе

    самописка? типовая?

  3. Переписанная вусмерть Розница.

  4. Если "" + глПользователь = "Мария Ивановна" Тогда
    Для х = 1 По 1000 Цикл
    Для у = 1 По 1000 Цикл
    Для й = 1 По 1000 Цикл
    Подарок = СоздатьОбъект("ТаблицаЗначений");
    КонецЦикла;
    КонецЦикла;
    КонецЦикла;
    КонецЕсли;

    Ответы: (4) (5) (24)
  5. (3) Программа долго думает, значит - работает!

    Ответы: (5)
  6. ptiz (3) Программа долго думает, значит - работает!

    Одной финдирше-блондинке сделал отчёт, где три "галочные" колонки назвались "х", "у" и "й".
    Думаешь заметила?

    Ответы: (26)
  7. ptiz УчитыватьМинСумму = Не Объект.ПолучитьФорму().ЭлементыФормы.БезУчетаМинимальныхСуммПоставщиков.Значение;

    Сильно.

    Ответы: (9)
  8. нахуа?

    Ответы: (8) (10)
  9. malina нахуа?

    Свои 22 показать

  10. (6) зато работает!

  11. (7) Накипело. Тут вся конфигурация так написана.

  12. я с ЗУПа блевал. вот где говнокод-то...

    Ответы: (12) (13)
  13. +(11) особенно расчет налогов. ЕСН и иже с ними

  14. (11) там запросы чарующие

  15. да, и кроме них есть на что подрочитьблевать

  16. Работает - не трожь!

    Ответы: (16) (19)
  17. (15) а если сильно допиленную ЗУП обновлять?

    Ответы: (19)
  18. попозжа я свой говнокод запосщу

  19. тонны говнокода

  20. bvn13 (15) а если сильно допиленную ЗУП обновлять?

    Тут без коньяка не обойтись

  21. чёто я не встречал в природе сильно допиленных ЗУП
    имхо, там особо пилить нечего

    Ответы: (21)
  22. (20) у нас была. УПП, перепиленная вхлам. соответственно ЗУПную часть обновлять вообще было невозможно автоматически.

    Ответы: (22)
  23. (21) а что пилили касательно ЗУПа? просто интересно, какой функционал был нужен и при этом типовой функционал его не предоставлял

  24. Попадалась как то моему другу конфа самописная для ювелирки. Он мне куски кода оттуда кидал. Вот где жесть на жести была и жестью погоняла. )

  25. (3) от, это вестчь.
    Надо заюзать будет...
    Сенкс...

    Ответы: (27)
  26. Хотя если для х=1 по 1000000000000 цикел,
    Не хуже будет...

    Ответы: (29)
  27. Эльниньо Одной финдирше-блондинке сделал отчёт, где три "галочные" колонки назвались "х", "у" и "й".
    Думаешь заметила?

    вельми профессионально, надо заметить.

  28. (24) 100^100^100 - это не весч, это 3,14.

    Ответы: (28)
  29. (27) 3,14 это f64(4)

  30. Славян Хотя если для х=1 по 1000000000000 цикел,
    Не хуже будет...

    Ну и где здесь завуалированное ПНХ?
    Примитивно же.

  31. 04.04.2015 16:06:43 отредактировано alex_shkut

    Вот Вам пример говнокода:

    Если ГраницаПоОрганизации <> Неопределено 
    					 И Запись.Период <= ГраницаПоОрганизации 
    					 И НЕ (СтруктураПараметров.РазрешитьЗаписьДо01042011 И ГраницаПоОрганизации = '20110331235959') Тогда
    					Отказ = Истина;
    					Возврат;
    				КонецЕсли;
  32. 04.04.2015 19:00:57 отредактировано Скользящий

    наткнулся года 4 назад. Долго думал. Это 7ка, правда.

    Функция ПредыдущаяДата(ИсходнаяДата)
        
        ИсхДата_Число = ДатаЧисло(ИсходнаяДата);
        ИсхДата_Месяц = ДатаМесяц(ИсходнаяДата);
        ИсхДата_Год =    ДатаГод(ИсходнаяДата);
        
        Если ИсхДата_Число = 1 Тогда
            Если ИсхДата_Месяц = 1 Тогда
                Результат = Дата(ИсхДата_Год-1, 12, 31);
            Иначе
                Результат = КонМесяца(Дата(ИсхДата_Год, ИсхДата_Месяц-1, ИсхДата_Число));
            КонецЕсли            
        Иначе    
            Результат = Дата(ИсхДата_Год, ИсхДата_Месяц, ИсхДата_Число-1);
        КонецЕсли;    
        
        Возврат Результат;    
        
    КонецФункции
    Ответы: (32)
  33. (31) Кто-то большие велосипеды изобретает, кто-то - маленькие.

  34. вы свой код то видели? )

    Ответы: (34) (35)
  35. Еврейчик вы свой код то видели? )

    Глаза бы мои на него не смотрели

  36. Еврейчик вы свой код то видели? )

    Мы твой не видели

    Ответы: (36)
  37. Барматолог Мы твой не видели

    да ладно ) не обижайтесь! я же пошутил.

  38. 09.04.2015 10:43:30 отредактировано MIK

    Типовая обработка ПоискИЗаменаЗначений

    				Попытка
    					Параметры.Объект.Записать();
    				Исключение
    					СообщитьОбОшибкеПриЗаписи(ИнформацияОбОшибке());
    					БылиИсключения = Истина;
    					Если ВыполнятьВТранзакции Тогда
    						Перейти ~ОТКАТ;
    					КонецЕсли;
    				КонецПопытки;
    
    Ответы: (38) (39)
  39. (37) а что не нравится?

    Ответы: (39)
  40. andrewks (37) а что не нравится?

    за "перейти" еще в универе преподы бьют по рукам

    Ответы: (40) (41) (46)
  41. Stim за "перейти" еще в универе

    Ты же вояка? Разве не танковое заканчивал?

    Ответы: (42)
  42. (39) в редких случаях может быть оправданно.
    хотя я и сам не сторонник

  43. Bumer Ты же вояка? Разве не танковое заканчивал?

    нет)
    я - пиджак. отслужил 2 года лейтенантом по военной кафедре от гражданского универа

  44. Пару раз перейти использовал для выхода из двойного цикла. Можно было конечно без него код как то реализовать, но у меня времени не было, а потом стало жалко нервных клеточек - работает и [...].

  45. Вот, случайно в конфе наткнулся. Чего пытался достичь автор шедевра?

    	ЧислоДокумента                          = Формат(Дата,"ДФ='дд';Л=uk_UA");
    	ДатаДокумента                           = Формат(Дата,"ДФ='дд ММММ ггггр.';Л=uk_UA");
    	ДатаДокументаБезЧисла                   = Прав(ДатаДокумента, СтрДлина(ДатаДокумента) - 2);
    	ОбластьПодпись.Параметры.ДатаДокумента 	= ЧислоДокумента + ДатаДокументаБезЧисла;
    
    Ответы: (45) (62)
  46. 20.11.2015 12:08:53 отредактировано Lenka_Boo

    (44) чтоб пробела не было между числом и месяцем? А хотя не. Былоб -3.

    Ответы: (48)
  47. (39) Расскажи это писателям типовых. Видно там индусы за тарелку супа пишут, которые институтов не канчали, поэтому что нельзя использовать перейти не знают

    Ответы: (47)
  48. (46) Какой смысл отвечать на апрельский пост?

    Ответы: (49)
  49. (45) Это все одним Формат-ом делается. Чем не пример говнокода? Это не типовая, это отраслевка.

    Ответы: (55) (62)
  50. (47) А какой смысл вообще на форуме что то писать в оффтоповской ветки?

    Ответы: (50)
  51. (49) Тема-то продолжается. Вот я и дополнил ее.

    Ответы: (51)
  52. (50) а чем я хуже? Ты можешь дополнить, а мне нельзя?

    Ответы: (52)
  53. (51) Посмотри на дату поста, на который ответил. Да и Стима ты когда в последний раз видел?

  54. претендую на первое место

  55. Вот такое условие я обнаружил в модуле проведения ПТУ в функции которая должна что то там проверять.

    Где (Ном.Ссылка в Иерархии (&Номенклатура)
    | ИЛИ Ном.ССылка в Иерархии (Выбрать Номенклатура.Ссылка ИЗ Документ.ПоступлениеТоваровУслуг.Товары КАК прих
    | Где Прих.ССылка = &Приход)

    Ответы: (56) (59)
  56. (48) Ну ясен пень, одним форматом. Я просто пытаюсь определить ход мысли ваятеля.
    В отраслевках много приколов. :)

    Ответы: (62)
  57. К (54)

    Запрос.УстановитьПараметр("Номенклатура", Товары.ВыгрузитьКолонку("Номенклатура"));
    Запрос.УстановитьПараметр("Приход", Документы.ПоступлениеТоваровУслуг.ПустаяСсылка());

    Ответы: (57)
  58. (56) Такой себе вечно пустой запрос. Я как-то точно так же тупанул. Спасибо, добрые люди мордой ткнули в условие ГДЕ.

    Ответы: (58)
  59. (57) Не совсем :) Если бы он был пустым всегда то никто бы об этом не узнал.
    То что должно выбираться этим запросом перебиирается в цикле. В этом цикле еще один запрос который тоже перебирается в цикле и уже внутри его еще один.

    И недавно вдруг начали жаловаться, что попытка проведения ПТУ валит всю базу.

  60. Когда я нашел нужный документ, то мой опытный взгляд быстро обнаружил пустую строку в табличной части товары. :))))
    Что мы получаем в условии (54) в таком случае

    Ответы: (60)
  61. (59) Весь справочник Номенклатура?

    Ответы: (61)
  62. (60) Да !
    Во всех типовых в т.ч. и в нашей УТ делается проверка на заполненность реквизитов, но этот код вставили перед проверкой.

  63. Lenka_Boo (48) Ну ясен пень, одним форматом. Я просто пытаюсь определить ход мысли ваятеля.
    В отраслевках много приколов. :)

    (44) упрощение. Так проще читать, чего автор хотел добиться. На мой взгляд, пример хорошего, годного кода

    Ответы: (66) (67)
  64. Манагерам надо было услуги ввести.
    Тыркнули мышью в товары. Получилась пустая строка.
    Потом методом копирования наплодили таких документов.

    Ответы: (64)
  65. Grekos2 методом копирования

    Я бы этот метод вообще выпилил из программы :)

  66. Вот игра прикольная, попробуйте. Поймете, что такое "годный" код.
    Human Resource Machine - думаю, сами найдете.

  67. 20.11.2015 13:30:24 отредактировано Lenka_Boo

    (62) Если собираешься где-то использовать число и месяц-год по отдельности, это нормально раскидать по переменным.
    Извини, но не понимаю зачем

    ДатаДокумента                           = Формат(Дата,"ДФ='дд ММММ ггггр.';Л=uk_UA");
    ДатаДокументаБезЧисла                   = Прав(ДатаДокумента, СтрДлина(ДатаДокумента) - 2);
    

    Если нормально:

    ДатаДокументаБезЧисла  = Формат(Дата,"ДФ='ММММ ггггр.';Л=uk_UA");
    

    ?

    Ответы: (68) (69)
  68. (66) Так потому он и попал в ЭТУ ветку :)

    Ответы: (74)
  69. (66)я конечно не программист, но

    Месяц(Дата)+Год(Дата)

    ?

    Ответы: (70)
  70. (69) В этом случае ты получишь 2026 для сегодняшнего дня, но совсем не дату. И не строковое представление...

  71. говнокодеры обсуждают чужой код...

    Ответы: (72)
  72. (71) Естественно!!! Чтобы этого самого вещества изготавливать поменьше. Хотя бы в 1С.

    Ответы: (73)
  73. (72) в нынешних типовых такой сложный и террабайтный код, что без препаратов из Области Тьмы его невозможно читать и курочить, имхо...а тут жалкий, простенький код обсуждается аля "Привет, Мир"...

  74. (68) Это философу надо растолковать.

  75. 20.11.2015 14:01:11 отредактировано Hans
    24*60*60

    я так пишу всегда. Для некоторых это говнокод. Хули эти теги не работают хз

    Ответы: (76) (77)
  76. 20.11.2015 14:01:09 отредактировано alex_shkut

    (75) Говнокод, потому что ты используешь процессорное время вместо константы.
    86400 //Сутки в секундах

    Ответы: (78)
  77. (75) Напиши оба варианта на Ассемблере, и сразу поймешь разницу.

  78. (76) а разве у 1С такой плохой компилятор что он не сможет распознать что это константа?

    Ответы: (79)
  79. (78)Не имею ни малейшего понятия, хотя косвенно можно проверить.

  80. Проверил. На миллионе циклов разницы нету. На 10 миллионах константа выиграла на 14 секунд.
    Значит - не распознает...

или зарегистрируйтесь чтобы ответить!