1. 1C / Говнокод #10261

    −102

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    	
    	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    		Продукт=ВыборкаДетальныеЗаписи.Продукт;
    		ЕдИзм=ВыборкаДетальныеЗаписи.ЕдИзмПродукта;
    		Количество=ВыборкаДетальныеЗаписи.КолвоПродукта;
    		Если Прав(ВыборкаДетальныеЗаписи.Продукт,6)="1/2 кг" ИЛИ 
    			Прав(ВыборкаДетальныеЗаписи.Продукт,5)="1/2кг"  ИЛИ 
    			Прав(ВыборкаДетальныеЗаписи.Продукт,6)="1\2 кг" ИЛИ
    			Прав(ВыборкаДетальныеЗаписи.Продукт,5)="1\2кг"  ИЛИ 
    			Прав(ВыборкаДетальныеЗаписи.Продукт,9)="(500  гр)"  ИЛИ 
    			Прав(ВыборкаДетальныеЗаписи.Продукт,5)="0,5кг" ИЛИ 
    			Прав(ВыборкаДетальныеЗаписи.Продукт,6)="(05кг)"   Тогда
    			Цена=Цена+ВыборкаДетальныеЗаписи.ЦенаПродукта/2;
    			
    		ИначеЕсли Прав(ВыборкаДетальныеЗаписи.Продукт,7)="1/2,5кг"  ИЛИ 
    			Прав(ВыборкаДетальныеЗаписи.Продукт,8)="(250 гр)" ИЛИ 
    			Прав(ВыборкаДетальныеЗаписи.Продукт,9)="(0,25 кг)" ИЛИ
    			Прав(ВыборкаДетальныеЗаписи.Продукт,6)="0,25кг"   Тогда
    			Цена=Цена+ВыборкаДетальныеЗаписи.ЦенаПродукта*0.25;
    		ИначеЕсли Прав(ВыборкаДетальныеЗаписи.Продукт,6)="1/4кг." ИЛИ 
    			Прав(ВыборкаДетальныеЗаписи.Продукт,5)="1/4кг"   ИЛИ 
    			Прав(ВыборкаДетальныеЗаписи.Продукт,6)="1/4 кг"  ИЛИ 
    			Прав(ВыборкаДетальныеЗаписи.Продукт,7)="1/4 кг."  ИЛИ 
    			Прав(ВыборкаДетальныеЗаписи.Продукт,5)="0,4кг"  ИЛИ 
    			Прав(ВыборкаДетальныеЗаписи.Продукт,3)="1/4"   Тогда
    			Цена=Цена+ВыборкаДетальныеЗаписи.ЦенаПродукта*0.4;
    		ИначеЕсли Прав(ВыборкаДетальныеЗаписи.Продукт,8)="0,085 кг"  ИЛИ 
    			Прав(ВыборкаДетальныеЗаписи.Продукт,9)="(0,085кг)"   Тогда
    			Цена=Цена+ВыборкаДетальныеЗаписи.ЦенаПродукта*0.085;
    		ИначеЕсли Прав(ВыборкаДетальныеЗаписи.Продукт,5)="0,7кг"  Тогда
    			Цена=Цена+ВыборкаДетальныеЗаписи.ЦенаПродукта*0.7;
    		ИначеЕсли Прав(ВыборкаДетальныеЗаписи.Продукт,8)="(100 гр)"  Тогда
    	        Цена=Цена+ВыборкаДетальныеЗаписи.ЦенаПродукта*0.1;
    		ИначеЕсли Прав(ВыборкаДетальныеЗаписи.Продукт,8)="(350 гр)"  ИЛИ
    			Прав(ВыборкаДетальныеЗаписи.Продукт,6)="350гр."  ИЛИ 
    			Прав(ВыборкаДетальныеЗаписи.Продукт,6)="0,35кг"  ИЛИ 
    			 Прав(ВыборкаДетальныеЗаписи.Продукт,7)="0,35 кг" Тогда
     	        Цена=Цена+ВыборкаДетальныеЗаписи.ЦенаПродукта*0.35;
    		ИначеЕсли Прав(ВыборкаДетальныеЗаписи.Продукт,8)="(450 гр)" ИЛИ
    			Прав(ВыборкаДетальныеЗаписи.Продукт,9)="(0,45 кг)" ИЛИ 
    			Прав(ВыборкаДетальныеЗаписи.Продукт,6)="0,45кг"  Тогда
                Цена=Цена+ВыборкаДетальныеЗаписи.ЦенаПродукта*0.45;
    		ИначеЕсли Прав(ВыборкаДетальныеЗаписи.Продукт,5)="1/3кг"  ИЛИ 
    			Прав(ВыборкаДетальныеЗаписи.Продукт,8)="(0,3 кг)" ИЛИ
    			Прав(ВыборкаДетальныеЗаписи.Продукт,5)="0,3кг"   Тогда
    		    Цена=Цена+ВыборкаДетальныеЗаписи.ЦенаПродукта*0.3;
    		ИначеЕсли Прав(ВыборкаДетальныеЗаписи.Продукт,8)="1\1,8 кг" ИЛИ 
    			Прав(ВыборкаДетальныеЗаписи.Продукт,8)="(0,18кг)"   Тогда
    			Цена=Цена+ВыборкаДетальныеЗаписи.ЦенаПродукта*0.18;
    		ИначеЕсли  Прав(ВыборкаДетальныеЗаписи.Продукт,8)="1/1,5 кг" Тогда
    			Цена=Цена+ВыборкаДетальныеЗаписи.ЦенаПродукта*0.15;
    		ИначеЕсли Прав(ВыборкаДетальныеЗаписи.Продукт,8)="(0,12кг)" Тогда 
    			Цена=Цена+ВыборкаДетальныеЗаписи.ЦенаПродукта*0.12;
    		ИначеЕсли Прав(ВыборкаДетальныеЗаписи.Продукт,7)="0,08 кг" Тогда 
    			Цена=Цена+ВыборкаДетальныеЗаписи.ЦенаПродукта*0.08;
    		ИначеЕсли Прав(ВыборкаДетальныеЗаписи.Продукт,7)="0,075кг" Тогда 
    			Цена=Цена+ВыборкаДетальныеЗаписи.ЦенаПродукта*0.75;
    		ИначеЕсли  Прав(ВыборкаДетальныеЗаписи.Продукт,6)="0,03кг" Тогда
    			Цена=Цена+ВыборкаДетальныеЗаписи.ЦенаПродукта*0.03;
    		ИначеЕсли  Прав(ВыборкаДетальныеЗаписи.Продукт,6)="0,23кг" Тогда
    			Цена=Цена+ВыборкаДетальныеЗаписи.ЦенаПродукта*0.23;
    	
    		Иначе
    			Цена=Цена+ВыборкаДетальныеЗаписи.ЦенаПродукта;
    		КонецЕсли;
    		
    	КонецЦикла;

    Отчет почему-то не всегда работал :)

    Запостил: sipkin, 14 Мая 2012

    Комментарии (12) RSS

    • Чума.
      Ответить
    • Хорошо им, вся номенклатура весовая шестнадцати видов. Хотя, судя по обилию вариантов из точек и пробелов, автор реально не заморачивался, а тупо добавлял все варианты, на которые ругалось. Можно же, в принципе, разработать более-менее универсальный парсер этих килограммов чёртовых, хоть и не так просто. Иногда мне кажется, что стандартная подсистема (не будем сейчас про недокостыли и расширения) должна быть адекватной и с нормальной текстовой/синтаксической обработкой. Наличие регекспов - минимальное требование. Нет - система говно.
      Но я знаю людей, которые умудрялись камменты к платёжкам парсить в чистом скуеле хитрым способом. Достойно отдельного говнокода.
      Ответить
    • Основной прикол говнокода в том, что в этой конфиге для веса отдельный реквизит есть. Я секунд 10 был в шоковом состоянии без движения, пытаясь представить лицо программера в момент написания этого чуда :) Первая моя фраза после и вслух: "да ну нахрен..."
      Ответить
      • Реквизит может и быть, только заполнять его обычно всем лень. А наименование - вот оно.
        Особо выдающиеся работники торговли ленятся заводить новую позицию, потому берут какую-нибудь существующую, по которой давно движений не было и тупо переименовывают. Исправят штрих-код и артикул, если есть, а на остальные параметры пох. Так что человеческий фактор - ого-го.
        Ответить
        • Мне этот говнокод не потребовался, но если надо было бы, то для заполнения этого самого реквизита он вполне подходит :) А то что осталось -- ручками. Так что самый говнокодный говнокод зачастую получше любой самой крутой обработки ))
          Ответить
    • А что тут ещё сделать-то...
      Ответить
    • что ни напиши на 1С, все одно говно получается...
      Ответить
      • Элементарно же. Куда солдата1с ни целуй - везде жопа. А оттуда хорошего не вылезало ничего, на моей памяти.
        Ответить
    • Автор - гений математики или я что-то не понимаю? Или это торгаши?
      1/2,5 кг = 0,25 кг
      1/4 кг = 0,4 кг
      Ответить
      • Это гений математики для торгашей :)
        А у вас намётанный глаз. Моё шоковое состояние не позволило проанализировать данный генокод так глубоко :)
        Ответить
    • Аффтар хотел учесть все варианты забивки. Но он не учёл, что юзер всегда придумает новый, например забьёт с ошибкой не "0,5кг", а "0.5 кг." или "1/2 килогр." или ещё шедевральнее "1/2 кг" - вроде такой вариант есть, но вместо пробела ухитрится скопировать знак табуляции из Word -а. И амбец, 1с сохранит это, а потом проит выгрузке в xml - обломит
      Ответить
      • Тогда Аффтар сядет и допишет этот новый вариант в код. Видимо так и родился этот ужас.
        Ответить

    Добавить комментарий