1. Список говнокодов пользователя ErrorEd88

    Всего: 3

  2. C++ / Говнокод #9726

    +995

    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
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    Для Каждого ТекСтрокаТовары Из ЭтотОбъект.Товары Цикл
    		
          //Товары в резерве на складах
          Если ЗначениеЗаполнено(ЭтотОбъект.ЗаказПокупателя) Тогда
    
            ЗапросРезерв = Новый Запрос;
            ЗапросРезерв.УстановитьПараметр("Период", КонецДня(ЭтотОбъект.Дата));
            ЗапросРезерв.УстановитьПараметр("Склад", ЭтотОбъект.Склад);
            ЗапросРезерв.УстановитьПараметр("Номенклатура", ТекСтрокаТовары.Номенклатура);
    	ЗапросРезерв.УстановитьПараметр("Цвет", ТекСтрокаТовары.Цвет);
    	ЗапросРезерв.УстановитьПараметр("Регистратор", ЭтотОбъект.ЗаказПокупателя.Ссылка);
    	ЗапросРезерв.Текст = "ВЫБРАТЬ
    	|	ТоварыВРезервеНаСкладах.Номенклатура,
    	|	isnull(ТоварыВРезервеНаСкладах.Количество, 0) КАК Количество,
    	|	isnull(ТоварыВРезервеНаСкладах.Размер42, 0) КАК Размер42,
    	|	isnull(ТоварыВРезервеНаСкладах.Размер44, 0) КАК Размер44,
    	|	isnull(ТоварыВРезервеНаСкладах.Размер46, 0) КАК Размер46,
    	|	isnull(ТоварыВРезервеНаСкладах.Размер48, 0) КАК Размер48,
    	|	isnull(ТоварыВРезервеНаСкладах.Размер50, 0) КАК Размер50,
    	|	isnull(ТоварыВРезервеНаСкладах.Размер52, 0) КАК Размер52,
    	|	isnull(ТоварыВРезервеНаСкладах.Размер54, 0) КАК Размер54,
    	|	isnull(ТоварыВРезервеНаСкладах.Размер56, 0) КАК Размер56,
    	|	isnull(ТоварыВРезервеНаСкладах.Размер58, 0) КАК Размер58,
    	|	isnull(ТоварыВРезервеНаСкладах.Размер60, 0) КАК Размер60
    	|ИЗ
    	|	РегистрНакопления.ТоварыВРезервеНаСкладах КАК ТоварыВРезервеНаСкладах
    	|ГДЕ
    	|	ТоварыВРезервеНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
    	|	ТоварыВРезервеНаСкладах.Период <= &Период
    	|	И ТоварыВРезервеНаСкладах.Регистратор = &Регистратор
    	|	И ТоварыВРезервеНаСкладах.Склад = &Склад
    	|	И ТоварыВРезервеНаСкладах.Номенклатура = &Номенклатура
    	|	И ТоварыВРезервеНаСкладах.Цвет = &Цвет";
    	ТЗРезерв = ЗапросРезерв.Выполнить().Выгрузить();
    			
    	Если ЗапросРезерв.Выполнить().Пустой() = Истина Тогда
    	Иначе
    		ЗапросСнятие = Новый Запрос;
    		ЗапросСнятие.УстановитьПараметр("Период", КонецДня(ЭтотОбъект.Дата));
    		ЗапросСнятие.УстановитьПараметр("Склад", ЭтотОбъект.Склад);
    		ЗапросСнятие.УстановитьПараметр("Номенклатура", ТекСтрокаТовары.Номенклатура);
    		ЗапросСнятие.УстановитьПараметр("Цвет", ТекСтрокаТовары.Цвет);
    		ЗапросСнятие.УстановитьПараметр("ДокументРезерва", ЭтотОбъект.ЗаказПокупателя.Ссылка);
    		ЗапросСнятие.Текст = "ВЫБРАТЬ
    		|	ТоварыВРезервеНаСкладах.Номенклатура,
    		|	isnull(ТоварыВРезервеНаСкладах.Количество, 0) КАК Количество,
    		|	isnull(ТоварыВРезервеНаСкладах.Размер42, 0) КАК Размер42,
    				.....
    		|	isnull(ТоварыВРезервеНаСкладах.Размер60, 0) КАК Размер60			
    		|ИЗ
    		|	РегистрНакопления.ТоварыВРезервеНаСкладах КАК ТоварыВРезервеНаСкладах
    		|ГДЕ
    		|	ТоварыВРезервеНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
    		|	И ТоварыВРезервеНаСкладах.ДокументРезерва = &ДокументРезерва
    		|	И ТоварыВРезервеНаСкладах.Период = &Период
    		|	И ТоварыВРезервеНаСкладах.Склад = &Склад
    		|	И ТоварыВРезервеНаСкладах.Номенклатура = &Номенклатура
    		|	И ТоварыВРезервеНаСкладах.Цвет = &Цвет";
    		ТЗСнятие = ЗапросСнятие.Выполнить().Выгрузить();
    				
    		//Товары в резерве на складах
    		Движение = Движения.ТоварыВРезервеНаСкладах.Добавить();
    		Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
    		Движение.Период = Дата;
    		Движение.Склад = ЭтотОбъект.Склад; 
    		Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
    		Движение.ДокументРезерва = ЭтотОбъект.ЗаказПокупателя.Ссылка;
    		Движение.Цвет = ТекСтрокаТовары.Цвет;
    		//42
    		Если ТЗРезерв.Итог("Размер42") - ТЗСнятие.Итог("Размер42") > 0 Тогда
    			Если ТЗРезерв.Итог("Размер42") - ТЗСнятие.Итог("Размер42") > ТекСтрокаТовары.Количество Тогда
    				Движение.Размер42 = ТекСтрокаТовары.Размер42;
    			Иначе
    				Движение.Размер42 = ТЗРезерв.Итог("Размер42") - ТЗСнятие.Итог("Размер42");
    			КонецЕсли;
    		КонецЕсли;      
    		...
                    //И так до 60го размера

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

    ErrorEd88, 21 Марта 2012

    Комментарии (16)
  3. 1C / Говнокод #9538

    −137

    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
    Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    	
    	Если ЭтоНовый() Тогда
    		Запрос = Новый Запрос;
    		Запрос.УстановитьПараметр("Период", НачалоГода(ТекущаяДата()));
    		Запрос.Текст = "ВЫБРАТЬ
    		|	Максимум(ПлатежноеПоручение.Номер) КАК Номер
    		|ИЗ
    		|	Документ.ПлатежноеПоручение КАК ПлатежноеПоручение
    		|ГДЕ
    		|	ПлатежноеПоручение.Дата >= &Период";
    		Выборка = Запрос.Выполнить().Выбрать();
    		НомерМакс = 0;
    		Пока Выборка.Следующий() Цикл
    			Если НомерМакс < Число(Выборка.Номер) Тогда
    				НомерМакс = Число(Выборка.Номер);
    				Если СтрДлина(НомерМакс) = 1 И НомерМакс<9 Тогда
    					НомерДок ="0000000000" + Строка(Число(Число(Выборка.Номер) + 1));
    				ИначеЕсли (СтрДлина(НомерМакс) = 2 И НомерМакс<>99) Или НомерМакс=9 Тогда
    					НомерДок ="000000000" + Строка(Число(Число(Выборка.Номер) + 1));
    				ИначеЕсли (СтрДлина(НомерМакс) = 3 И НомерМакс<>999) Или НомерМакс<>99 Тогда
    					НомерДок ="00000000" + Строка(Число(Число(Выборка.Номер) + 1));
    				ИначеЕсли (СтрДлина(НомерМакс) = 4 И НомерМакс<>9999) Или НомерМакс<>999 Тогда
    					НомерДок ="0000000" + Строка(Число(Число(Выборка.Номер) + 1));
    				ИначеЕсли (СтрДлина(НомерМакс) = 5 И НомерМакс<>99999) Или НомерМакс<>9999 Тогда
    					НомерДок ="000000" + Строка(Число(Число(Выборка.Номер) + 1));
    				ИначеЕсли (СтрДлина(НомерМакс) = 6 И НомерМакс<>999999) Или НомерМакс<>99999 Тогда
    					НомерДок ="00000" + Строка(Число(Число(Выборка.Номер) + 1));
    				КонецЕсли;
    			КонецЕсли;
    		КонецЦикла;
    		ЭтотОбъект.Номер = НомерДок;
    	КонецЕсли;
    	
    КонецПроцедуры

    Мое творение, писАл на полном серьезе. В одном из документов БП пользователь отредактировал вручную номер документа, после этого сбилась нумерации. Документы с "неправильными" номерами удалили и добавили вновь - было поздно. Типового решения проблемы не нашлось и был написан этот код.
    Можно увидеть очень интересное: нахождение максимального значения в запросе и одновременный бесполезный прогон всего цикла, чтобы снова найти максимальное значение и много чего другого.

    ErrorEd88, 24 Февраля 2012

    Комментарии (6)
  4. 1C / Говнокод #9532

    −146

    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
    Процедура ОбработкаНоменклатуры()
        
    НомерЛистаТипы = 1;
    Попытка ExcelТипы = СоздатьОбъект("Excel.Application");
     ФайлДанныхТипы = ExcelТипы.Workbooks.Open(НазваниеФайла);        
    Исключение
    КонецПопытки;
    //Лист = ФайлДанныхТипы.WorkSheets(НазваниеФайла);
     
    ЗагрузкаТипы = ФайлДанныхТипы.Worksheets(НомерЛистаТипы).UsedRange;    
    //КоличествоСтрокЭкселеТипы = Лист.Rows.Count;    
     
    КоличествоСтрокЭкселеТипы = ФайлДанныхТипы.Worksheets(НомерЛистаТипы).UsedRange.Rows.Count;
    ExcelТипы.Sheets(НомерЛистаТипы).Select();    
    
    Спр2 = СоздатьОбъект("Справочник.Номенклатура");
    СпрВидНом = СоздатьОбъект("Справочник.ВидыНоменклатуры");
    СпрНДС = СоздатьОбъект("Справочник.СтавкиНДС");
    СпрНП = СоздатьОбъект("Справочник.СтавкиНП");
    СпрЕд = СоздатьОбъект("Справочник.ЕдиницыИзмерений");
    
    Для СтрТипы = НачСтр+1 По КонСтр Цикл      
        
    Спр = СоздатьОбъект("Справочник.Номенклатура");
    Если Спр.НайтиПоНаименованию(Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,1).Value))) =  1 Тогда
        Сообщить("Номенклатура найдена");
    Если ВидыЦен = 1 Тогда
        Спр.Себестоимость = Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,4).Value));
    ИначеЕсли ВидыЦен = 2 Тогда
        Спр.Цена = Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,4).Value));
    КонецЕсли;
    Спр.Записать(); 
    Иначе
    Спр.Новый(); 
    Спр.ИспользоватьДату('01.11.2011');
    Если Спр2.НайтиПоКоду("Сй111")=1 Тогда
    Спр.Родитель =Спр2.ТекущийЭлемент(); 
    Конецесли;
    Спр.Наименование = Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,1).Value));  
    Сообщить("Создается номенклатура" + Спр.Наименование);
    Спр.ТипТовара = Перечисление.ТипыТоваров.Собственный; 
    Если СпрВидНом.НайтиПоНаименованию("Товар")=1 Тогда
    Спр.ВидНоменклатуры = СпрВидНом.ТекущийЭлемент();
    КонецЕсли;
    Спр.ПолнНаименование = Спр.Наименование;
    Если ВидыЦен = 1 Тогда
        Спр.Себестоимость = Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,4).Value));
    ИначеЕсли ВидыЦен = 2 Тогда
        Спр.Цена = Строка(СокрЛП(ExcelТипы.Cells(СтрТипы,4).Value));
    КонецЕсли;
    Спр.СтранаПроисхожд = 1;   
    Если СпрНДС.НайтиПоКоду("3")=1 Тогда
    Спр.СтавкаНДС = СпрНДС.ТекущийЭлемент(); 
    КонецЕсли;
    Если СпрНП.НайтиПоКоду("1")=1 тогда
    Спр.СтавкаНП = СпрНП.ТекущийЭлемент(); 
    КонецЕсли;        
    Если СпрЕд.НайтиПоНаименованию("шт")=1 Тогда
    Спр.ЕдиницаИзмерения = СпрЕд.ТекущийЭлемент(); 
    КонецЕсли;
    Спр.Записать();
    КонецЕсли;     
    
    КонецЦикла;
    
    КонецПроцедуры

    В бух 7.7 нужно было загрузить определенный данные из экселя. С 7.7 не работаю - начал сочинять. В начале писал по аналогии с 8.х:
    Спр.СтавкаНДС = СпрНДС.НайтиПоКоду("3") и т.д.
    Потом на инфостарте и мисте подсказали как правильно сделать и посоветовали создать здесь эту запись)

    ErrorEd88, 24 Февраля 2012

    Комментарии (15)