1. 1C / Говнокод #2539

    −114.9

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 04 Февраля 2010

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

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

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