Бухгалтерия / Говнокод #12643 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
Функция НайтиТовар(Наименование)
	Запрос = Новый Запрос("ВЫБРАТЬ Ссылка, Наименование ИЗ Справочник.Номенклатура ГДЕ НЕ ПометкаУдаления");
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		Если СокрЛП(ВРег(Выборка.Наименование))=ВРег(Наименование) Тогда
			Возврат Выборка.Ссылка;
		КонецЕсли;
	КонецЦикла;
КонецФункции

и все это вызывается в цикле

BlackMamba BlackMamba, (Updated )

Комментарии (16, +16)

Бухгалтерия / Говнокод #12557 Ссылка на оригинал

0

  1. 1
  2. 2
СтрокаСуммаСРазделителями = Строка(ТекСсылка.СуммаДокумента);
СтрокаСуммаБезРазделителей = СтрЗаменить(СтрокаСуммаСРазделителями, СимволРазделительСуммы, "");

Видать, использование "Формат" запрещено внутренней политикой =(

kovyl2404 kovyl2404, (Updated )

Комментарии (5, +5)

Бухгалтерия / Говнокод #12547 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
Запрос = Новый Запрос;
Запрос.Текст = "
	|ВЫБРАТЬ
	|	ВЫБОР Когда Ном.Ссылка.ЭтоГруппа=Истина Тогда 1 Иначе 0 Конец как этоГруппа,
	|      1 как Уровень,
	|	ВЫБОР Когда Ном.Ссылка.Родитель.Код=""00002"" Тогда """" Иначе Ном.Ссылка.Родитель.Код Конец как кодРодителя,
	|	Ном.Ссылка.Код как Код,
	|	Ном.Ссылка.Наименование как Наименование,
	|	Ном.Ссылка как Элемент
	|ИЗ справочник.Номенклатура как Ном";
	РЗ = Запрос.Выполнить();
	ТЗ = РЗ.Выгрузить();
	
	Сообщить("1. Подготовка таблицы ...");
	КК=0;
	КМАКС=ТЗ.Количество();
	Индикатор1 = ЭлементыФормы.Индикатор;
	Индикатор1.МаксимальноеЗначение = ТЗ.Количество();
	Индикатор1.Значение = 0;
	Для Каждого ТекСтрока ИЗ ТЗ Цикл
		Индикатор1.Значение = Индикатор1.Значение + 1;
		ОбработкаПрерыванияПользователя();
		КК = КК + 1;
		Состояние(Формат(КК/КМАКС*100, "ЧЦ=8; ЧДЦ=2"),Цел(КК/КМАКС*100));
		ТекСтрока.Уровень = ТекСтрока.Элемент.Уровень()-1;
	КонецЦикла;	
	
	ТЗ.Сортировать("этоГруппа убыв,Уровень возр,Наименование возр");

Вот такой вот способ получения номенклатуры вместе с иерархией

glavdir glavdir, (Updated )

Комментарии (4, +4)

Бухгалтерия / Говнокод #12501 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
//Рарус Обработка МодульОбменаДанными СоставКонтуровОбмена()
	КешСоставКонтуровОбмена = Новый Соответствие; 
	КешОбъектовКонтуровОбмена = Новый Соответствие; // м.б. будем использовать для ограничения типов поля "Документ" в запросе по регистру ТаблицаРегистрацииДокументов
	
	Попытка
		//Вот здесь в программу загружается список контуров обмена, представляющии из себя политики для документов
		Шаблон = ПолучитьМакет("СоставКонтуровОбмена"+Метаданные.Имя);
		ВерсияВШаблоне = СокрЛП(Шаблон.Область(1, 2).Текст);
......
				КешСоставКонтуровОбмена.Вставить(Тип(ТипСтр+"Ссылка."+ИмяСтр), ПеречислениеСсылка);

Просто засунули все в макет, раздел макета это тип политик для набора Документов. Это не такой плохой способ, притом что очень хорошо видно в конфигураторе как и куда петкать политики обработки файлов. Но по всем параметрам говнокод.
http://i54.fastpic.ru/big/2013/0130/34/730bb0d4a34dbccb43c3cb5cd46fea34.jpg

crastinus crastinus, (Updated )

Комментарии (3, +3)

Бухгалтерия / Говнокод #12388 Ссылка на оригинал

0

  1. 1
Торм. колодки передние[?(Докум.ТКП_Процент>0,",ост.толщина","")] [?(Докум.ТКП_Процент>0,Докум.ТКП_Процент,"")][?(Докум.ТКП_Процент>0,"мм","")]

это содержимое одной ячейки таблицы с видом вывода "Шаблон", мало того что автор вынуждает 3 раза обращаться к полю Докум.ТКП_Процент, так ещё и о конкатенации строк видимо ничего не слышал, упрощается до:
Торм. колодки передние [?(Докум.ТКП_Процент>0,",ост.толщина "+Докум.ТКП_Процент+" мм","")]

VladC VladC, (Updated )

Комментарии (6, +6)

Бухгалтерия / Говнокод #12383 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
  97. 97
  98. 98
  99. 99
  100. 100
Функция РазобратьКодыНеисправностей(СтрокаКодов, ТипКода)
	СпрКодов = СоздатьОбъект("Справочник.КодыГарантийныхНеисправностей");
	ГруппаТ1 = СпрКодов.НайтиПоКоду("0",0);
	ГруппаТ2 = СпрКодов.НайтиПоКоду("00",0);
	ГруппаТ3 = СпрКодов.НайтиПоКоду("000",0);
	Если СтрокаКодов <> "" Тогда
		Разд1 = Найти(СтрокаКодов, ";");
		Разд2 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд1), ";") + Разд1;
		Разд3 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд2), ";") + Разд2;
		Разд4 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд3), ";") + Разд3;
		Разд5 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд4), ";") + Разд4;
		Разд6 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд5), ";") + Разд5;
		Разд7 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд6), ";") + Разд6;
		Разд8 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд7), ";") + Разд7;
		Разд9 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд8), ";") + Разд8;
		Разд10 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд9), ";") + Разд9;
		Разд11 = Найти(Прав(СтрокаКодов,СтрДлина(СтрокаКодов) - Разд10), ";") + Разд10;
		Если ТипКода = "Т1" Тогда
			Если Разд1 > 1 Тогда
				СпрКодов.ИспользоватьРодителя(ГруппаТ1);
				Если СпрКодов.НайтиПоКоду("0/" + Лев(СтрокаКодов,Разд1-1),2)  = 1 Тогда 
					ПолучТ1 = СпрКодов.ТекущийЭлемент();
					Возврат ПолучТ1;
				КонецЕсли;
			КонецЕсли;
		ИначеЕсли ТипКода = "Т2" Тогда
			Если Разд2-Разд1 > 1 Тогда
				СпрКодов.ИспользоватьРодителя(ГруппаТ2);
				Если СпрКодов.НайтиПоКоду("00/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд1), Разд2 - Разд1 - 1), 2) = 1 Тогда
					ПолучТ2 = СпрКодов.ТекущийЭлемент();
					Возврат ПолучТ2;
				КонецЕсли;
			КонецЕсли;
		ИначеЕсли ТипКода = "Т3_1" Тогда
			Если Разд3-Разд2 > 1 Тогда
				СпрКодов.ИспользоватьРодителя(ГруппаТ3);
				Если СпрКодов.НайтиПоКоду("000/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд2), Разд3 - Разд2 - 1), 2) = 1 Тогда
					ПолучТ3_1 = СпрКодов.ТекущийЭлемент();
					Возврат ПолучТ3_1;
				КонецЕсли;
			КонецЕсли;
		ИначеЕсли ТипКода = "Т3_2" Тогда
			Если Разд4-Разд3 > 1 Тогда
				СпрКодов.ИспользоватьРодителя(ГруппаТ3);
				Если СпрКодов.НайтиПоКоду("000/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд3), Разд4 - Разд3 - 1), 2) = 1 Тогда
					ПолучТ3_2 = СпрКодов.ТекущийЭлемент();
					Возврат ПолучТ3_2;
				КонецЕсли;
			КонецЕсли;
		ИначеЕсли ТипКода = "Т3_3" Тогда
			Если Разд5-Разд4 > 1 Тогда
				СпрКодов.ИспользоватьРодителя(ГруппаТ3);
				Если СпрКодов.НайтиПоКоду("000/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд4), Разд5 - Разд4 - 1), 2) = 1 Тогда
					ПолучТ3_3 = СпрКодов.ТекущийЭлемент();
					Возврат ПолучТ3_3;
				КонецЕсли;
			КонецЕсли;
		ИначеЕсли ТипКода = "Т3_4" Тогда
			Если Разд6-Разд5 > 1 Тогда
				СпрКодов.ИспользоватьРодителя(ГруппаТ3);
				Если СпрКодов.НайтиПоКоду("000/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд5), Разд6 - Разд5 - 1), 2) = 1 Тогда
					ПолучТ3_4 = СпрКодов.ТекущийЭлемент();
					Возврат ПолучТ3_4; 
				КонецЕсли;
			КонецЕсли;
		ИначеЕсли ТипКода = "Т3_5" Тогда
			Если Разд7-Разд6 > 1 Тогда
				СпрКодов.ИспользоватьРодителя(ГруппаТ3);
				Если СпрКодов.НайтиПоКоду("000/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд6), Разд7 - Разд6 - 1), 2) = 1 Тогда
					ПолучТ3_5 = СпрКодов.ТекущийЭлемент();
					Возврат ПолучТ3_5;
				КонецЕсли;
			КонецЕсли;
		ИначеЕсли ТипКода = "Т3_6" Тогда
			Если Разд8-Разд7 > 1 Тогда
				СпрКодов.ИспользоватьРодителя(ГруппаТ3);
				Если СпрКодов.НайтиПоКоду("000/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд7), Разд8 - Разд7 - 1), 2) = 1 Тогда
					ПолучТ3_6 = СпрКодов.ТекущийЭлемент();
					Возврат ПолучТ3_6; 
				КонецЕсли;
			КонецЕсли;
		ИначеЕсли ТипКода = "Т3_7" Тогда
			Если Разд9-Разд8 > 1 Тогда
				СпрКодов.ИспользоватьРодителя(ГруппаТ3);
				Если СпрКодов.НайтиПоКоду("000/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд8), Разд9 - Разд8 - 1), 2) = 1 Тогда
					ПолучТ3_7 = СпрКодов.ТекущийЭлемент();
					Возврат ПолучТ3_7; 
				КонецЕсли;
			КонецЕсли;
		ИначеЕсли ТипКода = "Т3_8" Тогда
			Если Разд10-Разд9 > 1 Тогда
				СпрКодов.ИспользоватьРодителя(ГруппаТ3);
				Если СпрКодов.НайтиПоКоду("000/" + Лев(Прав(СтрокаКодов, СтрДлина(СтрокаКодов) - Разд9), Разд10 - Разд9 - 1), 2) = 1 Тогда
					ПолучТ3_8 = СпрКодов.ТекущийЭлемент();
					Возврат ПолучТ3_8; 
				КонецЕсли;
			КонецЕсли;
		ИначеЕсли ТипКода = "Т3_9" Тогда
			Если Разд11-Разд10 > 1 Тогда
				СпрКодов.ИспользоватьРодителя(ГруппаТ3);

ещё один высер от автодилера.
1. начнём сначала, там есть строки:
...
ГруппаТ1 = СпрКодов.НайтиПоКоду("0",0);
..., обращаю внимание автора, что функция НайтиПоКоду не возвращает элемент справочника, она лишь говорит есть он или нет, для позиционирования на элементе не хватает строк типа ГруппаТ1 = СпрКодом.ТекущийЭлемент(); и т.д.
2. дальше. в функцию передаётся параметр СтрокаКодов - это строка с запятыми в качестве разделителей. я конечно понимаю, что в 1С нет встроенной функции для получения массива частей строки типа split в java, но написать свою вообще не сложно, но видимо у автора не хватило мозг..., извините, времени.
3. теперь смотрим на подобные (их несколько в функции) блоки кода типа:
СпрКодов.ИспользоватьРодителя(ГруппаТ1);
Если СпрКодов.НайтиПоКоду("0/" + Лев(СтрокаКодов,Разд1-1),2) = 1 Тогда
ПолучТ1 = СпрКодов.ТекущийЭлемент();
Возврат ПолучТ1;
КонецЕсли;
строка СпрКодов.ИспользоватьРодителя(ГруппаТ1); не имеет смысла, т.к. ГруппаТ1 содержит значение 1 (см. п.1), а не ссылку на элемент справочника, код работает только благодаря второму параметру - 2, т.к. он заставляет функцию НайтиПоКоду искать по всему справочнику, используя полный код.

VladC VladC, (Updated )

Комментарии (41, +41)

Бухгалтерия / Говнокод #12325 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
Word.FormFields("Data").Result  = СокрЛП(?(ДатаЧисло(ДатаДок2)<10,"0","")+ДатаЧисло(ДатаДок2)); 
Word.FormFields("Manth").Result = СокрЛП(МесяцПрописью(ДатаДок2)); 
Word.FormFields("God").Result   = СокрЛП(ДатаГод(ДатаДок2));

взято из конфигурации одного автодилера, особенно порадовали имена частей даты

VladC VladC, (Updated )

Комментарии (14, +14)

Бухгалтерия / Говнокод #12252 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
Если (ЕстьНомен.НайтиЗначение(Док.Номенклатура) > 0)
	ИЛИ (ЕстьНомен.НайтиЗначение(Док.Номенклатура.Родитель) > 0) 
	ИЛИ (ЕстьНомен.НайтиЗначение(Док.Номенклатура.Родитель.Родитель) > 0) 
	ИЛИ (ЕстьНомен.НайтиЗначение(Док.Номенклатура.Родитель.Родитель.Родитель) > 0) 
	ИЛИ (ЕстьНомен.НайтиЗначение(Док.Номенклатура.Родитель.Родитель.Родитель.Родитель) > 0) 
	ИЛИ (ЕстьНомен.НайтиЗначение(Док.Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель) > 0) Тогда
		ИтогоРМ = ИтогоРМ+Док.Сумма;
КонецЕсли;

ЕстьНомен - это элемент формы Список, т.е. код можно упростить до:

Если ЕстьНомен.Принадлежит(Док.Номенклатура) =1 Тогда
ИтогоРМ = ИтогоРМ+Док.Сумма;
КонецЕсли;

взято из конфигурации одного автодилера.

VladC VladC, (Updated )

Комментарии (6, +6)

Бухгалтерия / Говнокод #12222 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
ВЫБРАТЬ
	ЕСТЬNULL(СрокПолезногоИспользования, 0) КАК СрокПолезногоИспользования
ИЗ
	РегистрСведений.РасчетАмортизацииОС.СрезПоследних
ГДЕ
	ОС = &ОсновноеСредство

Типовая конфигурация. Там такой запрос используют в печатной форме Основных средств... Думает по 10-15 минут
2 глупых ошибки:
1. Проверка на NULL, в данном случае его быть не может (хотя это особо ни на что не влияет)
2. Условие по законам 1С должно применяться в РегистрСведений.РасчетАмортизацииОС.Срез Последних(,ОС = &ОсновноеСредство), иначе сильно падает скорость выполнения.

ok0504 ok0504, (Updated )

Комментарии (11, +11)