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

    −144

    1. 1
    СуммаРЗ = СуммаРЗ;

    Капитан, это вы?

    mrbus, 14 Марта 2012

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

    −139

    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
    Если  ЗначениеЗаполнено(ВыслугаЛет) Тогда 
    			Запрос.УстановитьПараметр("ВыслугаЛет",     ВыслугаЛет);
    		КонецЕсли;
    		
    		Если не ЗначениеЗаполнено(ВыслугаЛет) Тогда 
    			Запрос.Текст = СтрЗаменить(Запрос.Текст,"И ПНУ.ВидРасчета <> &ВыслугаЛет","");
    			Запрос.Текст = СтрЗаменить(Запрос.Текст,"И ТабельныйЛист.ВидРасчета <> &ВыслугаЛет","");
    			Запрос.Текст = СтрЗаменить(Запрос.Текст,"И Прекращения.ВидРасчета <> &ВыслугаЛет","");
    		КонецЕсли;
    		
    		Запрос.УстановитьПараметр("Организация",    Организация);
    		Запрос.УстановитьПараметр("ПодразделениеОрганизации",  ПодразделениеОрганизации);
    		
    		Если ПодразделениеОрганизации.Пустая() Тогда
    			Запрос.Текст = СтрЗаменить(Запрос.Текст,"И Подразделение В ИЕРАРХИИ(&ПодразделениеОрганизации)","");
    			Запрос.Текст = СтрЗаменить(Запрос.Текст,"И Прекращения.ПодразделениеОрганизации = &ПодразделениеОрганизации","");
    			Запрос.Текст = СтрЗаменить(Запрос.Текст,"И ТабельныйЛист.Подразделение В ИЕРАРХИИ(&ПодразделениеОрганизации)","");
    		КонецЕсли;
    		
    		Если НЕ ЗначениеЗаполнено(ВыслугаЛет) Тогда 
    			Запрос.Текст = СтрЗаменить(Запрос.Текст,"ГДЕ
    			|	ТабельныйЛист.ВидРасчета <> &ВыслугаЛет
    			|	И","Где ");
    		КонецЕсли;

    Jivchic, 12 Марта 2012

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

    −142

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    Если РучнойВводОтработанногоВремени И СТЧ.ОтработаноДней = 0 И СТЧ.ОтработаноЧасов = 0 Тогда 
    	Если СТЧ.ОтработаноДней = 0 И СТЧ.ОтработаноЧасов = 0 Тогда 
    			СТЧ.ОтработаноДней  = НачислениеИзРегистрыРасчета.ОтработаноДней;
    			СТЧ.ОтработаноЧасов = НачислениеИзРегистрыРасчета.ОтработаноЧасов;
    	КонецЕсли;	
    КонецЕсли;

    Бонд, Джеймс Бонд.

    Если СТЧ.ОтработаноДней = 0 И СТЧ.ОтработаноЧасов = 0 Тогда
    Если СТЧ.ОтработаноДней = 0 И СТЧ.ОтработаноЧасов = 0 Тогда

    Jivchic, 12 Марта 2012

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

    −133

    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
    Функция ПроверкаНогИВанны()
    	Строка = ТаблицаНоменклатуры.Найти(Справочники.Номенклатура.НайтиПоКоду("50641     "), "Номенклатура");
    	Если Строка = Неопределено Тогда
    		Возврат Ложь;
    	Иначе 
    		СтрокаВанна = ТаблицаНоменклатуры.Найти(Справочники.Номенклатура.НайтиПоКоду("50624     "), "Номенклатура");
    		Если СтрокаВанна = Неопределено Тогда 
    			Возврат Истина
    		Иначе 
    			Возврат Ложь
    		КонецЕсли;
    	КонецЕсли;
    КонецФункции

    glavdir, 02 Марта 2012

    Комментарии (12)
  5. 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)
  6. 1C / Говнокод #9533

    −151

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    Процедура ВводНаОсновании(ДокОснование) 
        // .....
        ДатаДок=РабочаяДата();
       // .....
    КонецПроцедуры

    Типовая торговля для Украины.
    Зачем то явно указывается рабочая дата. Причём ровно один раз.

    Xbrut, 24 Февраля 2012

    Комментарии (13)
  7. 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)
  8. 1C / Говнокод #9400

    −138

    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
    Для Каждого СтрПЛ Из ПутевыеЛисты Цикл
    	ЗаказСсылкаИзПЛ = СтрПЛ.ЗаказНаИспользованиеТС;
    	Если Не ЗаказСсылкаИзПЛ.Пустая() Тогда
    		ЗапросВыборкаЗаказовПоСсылкеИЗПЛ = Новый Запрос;
    		ЗапросВыборкаЗаказовПоСсылкеИЗПЛ.Текст = "ВЫБРАТЬ
    					   |	АСУ_ЗаказНаИспользованиеТС.Ссылка
    					   |ИЗ
    					   |	Документ.АСУ_ЗаказНаИспользованиеТС КАК АСУ_ЗаказНаИспользованиеТС
    					   |ГДЕ
    					   |	АСУ_ЗаказНаИспользованиеТС.ДатаС <= &Дата1
    					   |	И АСУ_ЗаказНаИспользованиеТС.ДатаПо >= &Дата2
    					   |	И АСУ_ЗаказНаИспользованиеТС.Ответственный = &Ответственный
    					   |	И АСУ_ЗаказНаИспользованиеТС.Номер = &Номер";	
    		ЗапросВыборкаЗаказовПоСсылкеИЗПЛ.УстановитьПараметр("Дата1", КонецДня(Дата));
    		ЗапросВыборкаЗаказовПоСсылкеИЗПЛ.УстановитьПараметр("Дата2", НачалоДня(Дата)); 
    		ЗапросВыборкаЗаказовПоСсылкеИЗПЛ.УстановитьПараметр("Ответственный", Ответственный);
    		ЗапросВыборкаЗаказовПоСсылкеИЗПЛ.УстановитьПараметр("Номер", ЗаказСсылкаИзПЛ.Номер);
    		РезультатЗаказыПоСсылкеИзПЛ = ЗапросВыборкаЗаказовПоСсылкеИЗПЛ.Выполнить().Выгрузить();
    		Если РезультатЗаказыПоСсылкеИзПЛ.Количество() > 0 Тогда
    			Для Каждого СтрЗаказПоСсылкеИзПЛ Из РезультатЗаказыПоСсылкеИзПЛ Цикл
    				...
    			КонецЦикла;
    		КонецЕсли;
    	КонецЕсли;
    КонецЦикла;

    Ищем заказ по номеру. А номер берем из заказа. И, конечно же, их может оказаться множество. (КонтрольУникальности = Истина, периодичность = Непериодический).
    А также хитровылепленный способ убедиться, что заказ попадает в указанный период и имеет указанного ответственного.
    И, конечно же, запрос надо создавать заново для каждой СтрПЛ, а вдруг он испортился...
    Вот такие у нас крайне осторожные прогромисты.

    mrbus, 13 Февраля 2012

    Комментарии (12)
  9. 1C / Говнокод #9377

    −143

    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
    Функция ПолучитьМаксимальныйДокументРеализации(ТЗРеализаций)
    	МаксДок = ПолучитьПустоеЗначение("Документ");
    	ТЗРеализаций.ВыбратьСтроки();
    	Пока ТЗРеализаций.ПолучитьСтроку()=1 Цикл
    		Если МаксДок = ПолучитьПустоеЗначение("Документ") Тогда
    			МаксДок =  ТЗРеализаций.ДокументРеализации;
    		ИначеЕсли МаксДок.ДатаДок < ТЗРеализаций.ДокументРеализации.ДатаДок Тогда
    		    МаксДок =  ТЗРеализаций.ДокументРеализации;
    		КонецЕсли;
    		
    	КонецЦикла;
    	Возврат МаксДок;
    КонецФункции

    Во как надо получать последний документ из таблицы!

    jerokee, 10 Февраля 2012

    Комментарии (5)
  10. 1C / Говнокод #9376

    −135

    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
    Процедура ЗаписатьТрижды(Док)
    	Попытка
    		Док.Записать();
    	
    	Исключение
    		Для ХХХ=1 По 1000 Цикл
    			УУУ = ХХХ;
    		КонецЦикла;
    		Попытка
    			Док.Записать();
    		
    		Исключение
    			Для ХХХ=1 По 1000 Цикл
    				УУУ = ХХХ;
    			КонецЦикла;
    			Попытка
    				Док.Записать();
    			
    			Исключение
    				Сообщить("И с третьей попытки не удалось записать документ "+Док);
    				Сообщить(ОписаниеОшибки());
    			КонецПопытки;
    		КонецПопытки;
    	КонецПопытки;

    Разбирал тут обработку, наткнулся на этот шедевр...

    jerokee, 10 Февраля 2012

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