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

    −166

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

    Запостил: volfyx, 11 Марта 2014

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

    • > ЛЕВОЕ СОЕДИНЕНИЕ

      ЛЕВАЯ РЕЗЬБА
      Ответить
    • Помимо регистра сведений еще в запросе смутил Товар из регистра (правой таблицы).
      И синоним ТоварыНаСкладах как ОстаткиНоменклатуры.
      Мне кажется, или это какая-то учебная задачка, в которую впилили еще регистр сведений, но поленились переписать запрос?
      Ответить
      • Как вариант, просто не знали, как это сделать в одном запросе.
        Ответить
        • Но знали про левое соединение и естьnull? Слабо верится.
          Либо говно, либо стажер, либо корявая оптимизация (может раньше еще хуже было).
          Ответить
          • Хотя в любом случае говно :)
            Ответить
          • Не совсем. Запрос мог быть, а переписывал его совершенно левый и совершенно дрочистый изумруд.
            Поскольку совсем не каждый одноэсник может в запросы, империативщиков лично я встречал. Более того, не каждый может влёгкую выдумать запрос без конструктора запросов. Я встречал людей, которые агрессивно относились к тому, что написать (пусть на птичьем) запрос руками будет быстрее, нежели чем тыкать без понимания мышкой.
            Ответить
            • показать все, что скрытоНад мамой глумился.
              Ответить
            • Какое-то понимание логики работы платформы все равно должно быть. Пусть не в деталях, но не запросы в цикле же =/

              >> Я встречал людей, которые агрессивно относились к тому, что написать (пусть на птичьем) запрос руками будет быстрее, нежели чем тыкать без понимания мышкой.
              Какие странные люди Оо Ладно там отмазы вроде "синтаксиса не знаю", "я конструктором привык", но с агрессией...
              Ответить
              • Я где-то давным-давно приводил пример какой-то промышленной загрузки документов. "Промышленной" - от раруса или ещё какой-то ракоты. Там документ искался по комментарию в базе.
                Был нахерачен запрос из юнионов, количеством числа загружаемых документов. Логика примитивная: так, тут у нас документ поступление, давайте поищем его по комментарию во всех документах, лол. Врать не буду, дело давнее, но не исключено, что такой запрос был в цикле для каждого документа.
                У бухов сраная загрузка шла по полчаса, они рвали на себе волосы.

                В той же рарусорознице творится просто невообразимый ад содомии.
                Ответить
    • показать все, что скрытоЯ ваших матерей кабаном ебал.
      Ответить

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