Задача 1.15

            Организация занимается оптовой торговлей. Поступление товаров

отражается документом «Приходная накладная», продажа - «Расходная

накладная». Продажа происходит с учетом единиц измерения, т.е. для каждой

номенклатурной позиции может быть произвольное количество единиц

измерения, например: штука; пачка из 10 штук; контейнер из 500 штук и т.д. Если

в накладной будет указана продажа 3-х пачек, то должны быть списаны 30 штук.

            Учет товаров ведется в разрезе складов. В документах по поступлению и

продаже товаров указан только один склад (склад – реквизит шапки).

            Товар может передаваться со склада на склад документом «Расходная

накладная». В этом случае в качестве покупателя указывается склад получатель и

колонки «цена» и «сумма» должны становиться невидимыми. Перемещение по

складам происходит без изменения стоимости товара.

            Себестоимость товара рассчитывается как средняя по складу.

            После продажи на следующий день (или позднее) в систему вводится

дополнительная информация о сумме затрат на доставку товаров, которая

определяется следующим образом: в документе «Распределение затрат»

указывается сумма доставки и перечень накладных, на которые эта сумма должна

распределиться. Далее сумма распределяется на товары из этих накладных,

пропорционально списанной их (товаров) себестоимости. На накладные по

перемещению товаров сумма не распределяется.

            Необходимо создать отчет о продажах за период, в котором для каждого

товара будет указано проданное количество, себестоимость (с учетом доставки,

вне зависимости от того, в каком периоде были внесены данные об увеличении

себестоимости) и сумма продаж.

            Продажи с 01.01.2010 по 31.03.2010

table.png

 

Для успешной реализации нам понадобится создать следующие документы:

2015-10-21 22-23-27 Конфигуратор - Каркасная конфигурация.png

И регистры:

2015-10-21 22-24-53 Конфигуратор - Каркасная конфигурация.png

Обработка проведения расходной



Процедура ОбработкаПроведения(Отказ, Режим)
	
	Блокировка = Новый БлокировкаДанных;
	ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
	ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
	ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
	ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
	Блокировка.Заблокировать();


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


Обработка проведения документа "Распределение затрат"



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


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

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