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

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

Запостил: Cascader Cascader, (Updated )

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

  • > Запрос.Текст = "ВЫБРАТЬ
    С первого раза показалось 'Запрос.Текст = "ВЫЕБАТЬ'
    Ответить
    • > С первого раза показалось 'Запрос.Текст = "ВЫЕБАТЬ'
      Недоёб, однако у вас... Необходимо срочное лечение женщиной.
      Ответить
  • Это были очень тяжёлые наркотики. Я так и не смог понять, чего там добивается автор.
    А ещё парсер говнокода не поддерживает восьмёрочный синтаксис.
    Ответить
  • Зря смеётесь, "Если 1=1 тогда" - очень важная проверка, в полнолуние 1 бывает не равно 1.
    Ну а так - типичные запросы в цикле; закомменченый код; добавление накой-то хрен номенклатуры в массив итд
    Ответить
    • Тут есть две парадигмы мышления. Обычное, nosql-ное и sql-ное. Плоское императивное и с исчислением кортежей.
      В первом человек пользуется базой данных как, скажем, массивом, или "волшебной" функцией. Тут чаще всего и возникают запросы в цикле.
      Во втором случае человек знает, как эффективнее всего использовать базы данных. Он подготавливает данные, отправляет в базу, пишет чуть более сложный запрос, и получает уже готовые массивы данных.
      Задачу можно решить и так, и так. Только по эффективности второй подход гораздо более лучше.
      Ответить
            • в этом случае одним запросом можно сделать всё, что душенька пожелает
              было бы интересно обсудить, если кто-то придумает обратный пример для одной таблицы
              Ответить
              • дерево, в базе хранится ид потомка, имя потомка и ид родителя, нужно найти все иды потомков одного предка.
                Ответить
                • пф, как раз вопрос на выразительные средства субд

                  select t.id
                  from mytree t
                  start with t.id = :some_parent
                  connect by prior t.id = t.parent_id

                  можно даже воспользоваться connect_by_root и прочими няшностями, если надо в одном запросе сразу лес вернуть
                  Ответить
                  • я думал вопрос как раз о бедной на выразительные средства БД(ну или необходимости универсального метода). А так то конечно согласен.
                    Ответить
              • Выдвигаю в качестве кандидатов на обратный пример деревья (id, data, leftid, rightid), списки (id, data, nextid) и JSON (id, name, type, primitivevalue, firstchildid, nextsiblingid).
                P.S. а, деревья уже выдвинули и опровергли.
                Ответить
                • есть ещё интересные запросы вида "а давай напротив каждой строки ещё отобразим данные соседней по некоему критерию - например, разницу от предыдущей" lag
                  Ответить
                • Вроде кто-то умеет нативно json обрабатывать. Даже не вспомню, кто. Может, постгрес через расширение. Или снова приснилось.
                  Ответить
                  • Свежие постгресы умеют, да. Там даже индексы простенькие можно построить по json'у (по функции от жсона или по наличию в нем определенных ключей).

                    Да и ораклы всякие поди умеют.
                    Ответить
              • Ну, можно конечно придумать пример где фильтрацию нельзя сделать средствами БД. Например в базе хранятся алгоритмы, надо посчитать сколько из них завершается меньше чем за N шагов для заданных входных данных.
                Ответить
                • если алгоритм можно декларировать в неких атомарных шагах, а сами шаги выполнить в виде object с методом apply(), то можно и на базе
                  можно и из буханки сделать троллейбус)
                  Ответить
                  • Конечно незачем. Просто если задаться целью, то пример где без цикла не обойтись (или где цикл будет проще одиночного запроса) можно сконструировать.
                    Ответить
    • По меньше сарказма. Просто было изменение кода другим программистом, что бы весь код не перелапачивать для постоянного выполнения данного участка была применена такая конструкция
      Ответить
        • Я просто объяснил логику программиста. Данный комментарий был ответом на пост doom2good , извини видимо ошибся...
          Ответить
  • Нормальная практика внесения изменений в чужой код - минимум вмешательства
    Ответить

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

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

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


    8