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

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

запрос.УстановитьПараметр("Заказ",заказ);					  

Результат = Запрос.Выполнить();
тРезервы.Очистить();
	
Если Не Результат.Пустой() Тогда
	Выборка = Результат.Выбрать();
	Пока Выборка.Следующий() Цикл
		НоваяСтрока 		= тРезервы.Добавить();
		НоваяСтрока.Номенклатура 	= Выборка.Номенклатура;
		НоваяСтрока.КоличествоВЗаказе = Выборка.КоличествоВЗаказе;
		НоваяСтрока.ОстатокВРезерве 	= Выборка.ОстатокВРезерве;
		НоваяСтрока.ОстатокКОтгрузке 	= Выборка.ОстатокПоЗаказу;
	КонецЦикла; 
КонецЕсли;

Заполнение таблицы значений, очень быстро работает)))
КоличествоВЗаказе в 2 раза больше получается

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

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

  • Не важно в чём суть, но плюсанул - меня очень порадовал перевод SQL на русский язык. Патриотизмъ так и прёт у кого-то, ага ))
    Ответить
    • Эх, дурко! Переменные удобно называть по-русски. Заморишься переключать регистр при написании операторов латиницей.
      Ответить
  • жесть конечно, наверное, автор соблазнился тем, что ИЗ и ГДЕ короче писать чем FROM и WHERE
    Ответить
  • ха вот жесть)) параметры виртуальной таблицы не для таких гениев, да и ваще в целом запрос шикарен))))
    Ответить
  • Народу даже влом конструктором как следует научиться пользоваться
    Ответить
  • Этому "программиста" сразу три зачёта:
    - за оригинальное соединение оборотов с остатками;
    - за СУММА(0);
    - за проверку результата на Пустой(). Видимо, чтобы цикл не выдал ошибку.
    Вот только проверку на равенство заказу лучше вынести из запроса. Проверять уже в цикле, а то вдруг в запросе что-нибудь потеряется.
    Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

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


    8