- 1
- 2
- 3
- 4
- 5
Если ВыгружатьВзаиморасчеты тогда
    Если ВыгружатьВзаиморасчеты() тогда
        УспешноВзаиморасчетыВыгружено=ВыгрузитьВзаиморасчетыНаСайт(СтруктураПараметровСайта);
    КонецЕсли;
КонецЕсли;Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−122
Если ВыгружатьВзаиморасчеты тогда
    Если ВыгружатьВзаиморасчеты() тогда
        УспешноВзаиморасчетыВыгружено=ВыгрузитьВзаиморасчетыНаСайт(СтруктураПараметровСайта);
    КонецЕсли;
КонецЕсли;Херово, когда имен не хватает =(
−160
Процедура ЗАЕБАШИТЬЧТОБВСЕРАБОТАЛО ()
	СООБЩИТЬ("Так не бывает!");
КонецПроцедурыИз реального проекта крупного торгового дома.
−117
Функция НайтиТовар(Наименование)
	Запрос = Новый Запрос("ВЫБРАТЬ Ссылка, Наименование ИЗ Справочник.Номенклатура ГДЕ НЕ ПометкаУдаления");
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		Если СокрЛП(ВРег(Выборка.Наименование))=ВРег(Наименование) Тогда
			Возврат Выборка.Ссылка;
		КонецЕсли;
	КонецЦикла;
КонецФункциии все это вызывается в цикле
−116
СтрокаСуммаСРазделителями = Строка(ТекСсылка.СуммаДокумента);
СтрокаСуммаБезРазделителей = СтрЗаменить(СтрокаСуммаСРазделителями, СимволРазделительСуммы, "");Видать, использование "Формат" запрещено внутренней политикой =(
−104
Запрос = Новый Запрос;
Запрос.Текст = "
	|ВЫБРАТЬ
	|	ВЫБОР Когда Ном.Ссылка.ЭтоГруппа=Истина Тогда 1 Иначе 0 Конец как этоГруппа,
	|      1 как Уровень,
	|	ВЫБОР Когда Ном.Ссылка.Родитель.Код=""00002"" Тогда """" Иначе Ном.Ссылка.Родитель.Код Конец как кодРодителя,
	|	Ном.Ссылка.Код как Код,
	|	Ном.Ссылка.Наименование как Наименование,
	|	Ном.Ссылка как Элемент
	|ИЗ справочник.Номенклатура как Ном";
	РЗ = Запрос.Выполнить();
	ТЗ = РЗ.Выгрузить();
	
	Сообщить("1. Подготовка таблицы ...");
	КК=0;
	КМАКС=ТЗ.Количество();
	Индикатор1 = ЭлементыФормы.Индикатор;
	Индикатор1.МаксимальноеЗначение = ТЗ.Количество();
	Индикатор1.Значение = 0;
	Для Каждого ТекСтрока ИЗ ТЗ Цикл
		Индикатор1.Значение = Индикатор1.Значение + 1;
		ОбработкаПрерыванияПользователя();
		КК = КК + 1;
		Состояние(Формат(КК/КМАКС*100, "ЧЦ=8; ЧДЦ=2"),Цел(КК/КМАКС*100));
		ТекСтрока.Уровень = ТекСтрока.Элемент.Уровень()-1;
	КонецЦикла;	
	
	ТЗ.Сортировать("этоГруппа убыв,Уровень возр,Наименование возр");Вот такой вот способ получения номенклатуры вместе с иерархией
−121
//Рарус Обработка МодульОбменаДанными СоставКонтуровОбмена()
	КешСоставКонтуровОбмена = Новый Соответствие; 
	КешОбъектовКонтуровОбмена = Новый Соответствие; // м.б. будем использовать для ограничения типов поля "Документ" в запросе по регистру ТаблицаРегистрацииДокументов
	
	Попытка
		//Вот здесь в программу загружается список контуров обмена, представляющии из себя политики для документов
		Шаблон = ПолучитьМакет("СоставКонтуровОбмена"+Метаданные.Имя);
		ВерсияВШаблоне = СокрЛП(Шаблон.Область(1, 2).Текст);
......
				КешСоставКонтуровОбмена.Вставить(Тип(ТипСтр+"Ссылка."+ИмяСтр), ПеречислениеСсылка);
            Просто засунули все в макет, раздел макета это тип политик для набора Документов. Это не такой плохой способ, притом что очень хорошо видно в конфигураторе как и куда петкать политики обработки файлов. Но по всем параметрам говнокод.
http://i54.fastpic.ru/big/2013/0130/34/730bb0d4a34dbccb43c3cb5cd46fea34.jpg
        
−119
Торм. колодки передние[?(Докум.ТКП_Процент>0,",ост.толщина","")] [?(Докум.ТКП_Процент>0,Докум.ТКП_Процент,"")][?(Докум.ТКП_Процент>0,"мм","")]
            это содержимое одной ячейки таблицы с видом вывода "Шаблон", мало того что автор вынуждает 3 раза обращаться к полю Докум.ТКП_Процент, так ещё и о конкатенации строк видимо ничего не слышал, упрощается до:
Торм. колодки передние [?(Докум.ТКП_Процент>0,",ост.толщина "+Докум.ТКП_Процент+" мм","")]
        
−119
Функция РазобратьКодыНеисправностей(СтрокаКодов, ТипКода)
	СпрКодов = СоздатьОбъект("Справочник.КодыГарантийныхНеисправностей");
	ГруппаТ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, т.к. он заставляет функцию НайтиПоКоду искать по всему справочнику, используя полный код.
        
−122
Word.FormFields("Data").Result  = СокрЛП(?(ДатаЧисло(ДатаДок2)<10,"0","")+ДатаЧисло(ДатаДок2)); 
Word.FormFields("Manth").Result = СокрЛП(МесяцПрописью(ДатаДок2)); 
Word.FormFields("God").Result   = СокрЛП(ДатаГод(ДатаДок2));взято из конфигурации одного автодилера, особенно порадовали имена частей даты
−118
Если (ЕстьНомен.НайтиЗначение(Док.Номенклатура) > 0)
	ИЛИ (ЕстьНомен.НайтиЗначение(Док.Номенклатура.Родитель) > 0) 
	ИЛИ (ЕстьНомен.НайтиЗначение(Док.Номенклатура.Родитель.Родитель) > 0) 
	ИЛИ (ЕстьНомен.НайтиЗначение(Док.Номенклатура.Родитель.Родитель.Родитель) > 0) 
	ИЛИ (ЕстьНомен.НайтиЗначение(Док.Номенклатура.Родитель.Родитель.Родитель.Родитель) > 0) 
	ИЛИ (ЕстьНомен.НайтиЗначение(Док.Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель) > 0) Тогда
		ИтогоРМ = ИтогоРМ+Док.Сумма;
КонецЕсли;
            ЕстьНомен - это элемент формы Список, т.е. код можно упростить до:
Если ЕстьНомен.Принадлежит(Док.Номенклатура) =1 Тогда
	ИтогоРМ = ИтогоРМ+Док.Сумма;
КонецЕсли;
взято из конфигурации одного автодилера.