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

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
//Николай
	//проверяем артикул и если его нет, то генерируем
	Если ПустаяСтрока(Артикул) Тогда
		Запрос = Новый Запрос("ВЫБРАТЬ
		                      |	МАКСИМУМ(Номенклатура.Артикул) КАК ТекАртикул
		                      |ИЗ
		                      |	Справочник.Номенклатура КАК Номенклатура");
		
		Выборка = Запрос.Выполнить().Выбрать();
		Выборка.Следующий();
		ТекКод = ?(Выборка.ТекАртикул = NULL, 1, Мин(ОбщегоНазначения.ПривестиСтрокуКЧислу(Выборка.ТекАртикул) + 8000, 9999999));
		ТекАртикул = Формат(ТекКод, "ЧЦ=7; ЧВН=; ЧГ=");
		
		
		//проверяем дальше
		Выход=0;
		Пока Выход=0 Цикл
			Запрос = Новый Запрос("ВЫБРАТЬ
			|	Номенклатура.Артикул КАК ТекАртикул
			|ИЗ
			|	Справочник.Номенклатура КАК Номенклатура
			|ГДЕ
			|	Номенклатура.Артикул = &Артикул");
			Запрос.УстановитьПараметр("Артикул", ТекАртикул);
			
			Выборка = Запрос.Выполнить().Выбрать();
			Нашли = Выборка.Следующий();
			Если Нашли Тогда
				ТекАртикул=Мин(ОбщегоНазначения.ПривестиСтрокуКЧислу(ТекАртикул) + 1, 9999999);
				ТекАртикул = Формат(ТекАртикул, "ЧЦ=7; ЧВН=; ЧГ=");
			Иначе
				Выход=1;
			КонецЕсли
		КонецЦикла;
		Артикул=ТекАртикул;
		
	КонецЕсли;
	//Николай

Задача: сформировать артикул (число) из 7и знаков по формуле "максимальный артикул + 1". при этом тип реквизита - строка(7). В базе встречаются значения "945784 ", "98763443".

Запостил: alex-makhnev alex-makhnev, (Updated )

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

  • Запрос = Новый Запрос("
    |ВЫБРАТЬ
    |	ВЫБОР &Сына.ПришёлИзШколы
    |		КОГДА РАНО
    |			Тогда ""Прогуливает""
    |		КОГДА ВОВРЕМЯ
    |			Тогда ""Отличник""
    |		КОГДА ПОЗДНО
    |			Тогда ""Он что-то задумал!""
    |		КОГДА ОЧЕНЬ_ПОЗДНО_И_С_ФИНГАЛОМ
    |			Тогда ""Блин...""
    |		КОГДА РАНО_УТРОМ_И_ЗАВТРА_И_С_БАБОЙ
    |			Тогда ""O_o, да я в твои годы!!!""
    |		ИНАЧЕ 
    |	КОНЕЦ КАК РезультатВыбора");
    Запрос.ЗафиксироватьПараметр("Сына.ПришёлИзШколы", Сына.ПришёлИзШколы.Время);
    Выборка = Запрос.Выполнить().Выбрать();
    Выборка.Следующий();
    Мысли = Подумать(Выборка.РезультатВыбора);
    	Если Мысли.Бурлят = Истина Тогда
    		Мысли = Мысли.Разбавить("Коньяк", "Вино", "Покурить", "Подышать");
    	Конец Если;
    	
    ЧтоДелать = Вывод(Мысли + "Кому на Руси жить хорошо");
    Ответить
  • //Николай-Николай
    //сиди дома, не гуляй

    скажите, они SQL тоже на русский перевели?
    Ответить
    • Запрос = Новый Запрос("ВЫБРАТЬ
      		                      |	МАКСИМУМ(Номенклатура.Артикул) КАК ТекАртикул
      		                      |ИЗ
      		                      |	Справочник.Номенклатура КАК Номенклатура");
      - это по вашему не перевод SQL на русский?
      Ответить
        • <!ТИПДОКУМ ЯРГТ НАРОДНЫЙ "-//ВэТриЦэ//ДэТэДэ ЯРГТ 4.01//РУ" "http://стандарт.рф/строгий.гост">
          <ЯРГТ>
          <голова>
          <надмозг> </надмозг>
          </голова>
          <тело>

          </тело>
          <!-- <тэги вырезаны цензурой> -->
          </ЯРГТ>
          Ответить
      • Просто весь код воспринимается как однородное говно
        Ответить
      • Я слышал, что у 8ки внизу не ДБФки, а СУБД (МС СКЛ). Так значит они свои запросы к базе плавно переводят на английский, а потом их СУБД скармливают?
        Ответить
  • Самый ненавистный мне вид говнокода - оформлен хорошо, с виду всё грамотно, даже работает! Он же даже откомментирован! Отлично замаскирован и хрен определишь, что это говнокод.

    Остается только удивляться, почему бухгалтерия всё время бегает к айтишникам с жалобами на тормоза. И с чего бы им жаловаться на такой замечательный код? Уж не потому ли, что при определенной комбинации номеров, процедура будет в цикле перебирать все номера базы? Нет! Конечно же нет!

    ...Ну почему нельзя было написать что-то вроде:
    #Если Николай
    //При условии, что длина поля - 10.
    Артикул=ОбщегоНазначения.ПривестиСтрокуКЧислу(Запрос.Новый("select coalesce(max(left('0000000000',10-LEN(code))+n),0) result
    from goods").Выполнить().Выбрать().Выгрузить()[0].result)+1
    #КонецЕсли
    Ответить
    • ага, значит в 1С можно запросы на СКьюЛ делать!!! аллилуйя!
      Ответить
  • Почему, когда я вижу код на русском языке - меня тошнит?
    Ответить

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

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8