11.12.2015

Задача 1.42

Данная задача полностью аналогична задаче 1.41, за исключением данного абзаца. 

В первую очередь должен списываться товар, купленный в той же валюте, в

которой происходит продажа. Порядок списания по остальным валютам остается

на усмотрение разработчика. 

С уроком 1.41 можете ознакомиться по данной ссылке

Видео решение задачи 1.41:

Модернизируем запрос:

	 

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


 

В итоге, как мы видим для успешного решения задачи нам пришлось добавить одно поле в запрос и сделать упорядочивание по возрастанию, ну и конечно же наложить параметры виртуальной таблицы. Всё очень просто и легко - и ещё одна задача - смело может лежать в нашей копилке выполненных задач.

Возврат к списку

  • Facebook
  • Вконтакте