Отчет о продажах и себестоимости в пустой базе

1. user1381555 29.04.21 18:35 Сейчас в теме
Добрый день. Помогите разобраться. Получила задание создать отчет:

**************************************************************************************

Требуется реализовать конфигурацию для магазина торговли аквариумными рыбками:

В конфигурации должны быть реализованы 3 типа документов:

Документ «Покупка рыб»:
Табличная часть: Аквариум (Справочник), Порода рыб (Справочник), Количество, Цена покупки, Сумма.

Документ «Продажа рыб»:
Табличная часть: Аквариум (Справочник), Порода рыб (Справочник), Количество, Цена продажи, Сумма.

Документ «Покупка корма»:
Шапка документа: Аквариум (Справочник), Стоимость корма.

Целью создания конфигурации является отчет о полученной прибыли в результате продажи рыб. При этом себестоимость проданных рыб рассчитывается «по средней» на момент их продажи, без учета партий. Стоимость корма увеличивает себестоимость рыб пропорционально количеству.

Пример:

Мы закупили:
2 рыбы Минор по 50 рублей в Аквариум 1
2 рыбы Мечерот по 100 рублей в Аквариум 1
2 рыбы Мечерот по 100 рублей в Аквариум 2

После этого закупили корма в аквариум 1 на 100 рублей, в аквариум 2 на 30 рублей: в результате себестоимость рыб стала

2 рыбы Минор по 75 рублей в Аквариуме 1
2 рыбы Мечерот по 125 рублей в Аквариуме 1
2 рыбы Мечерот по 115 рублей в Аквариуме 2

После чего мы продали 1 Мечерота из Аквариума 1 за 200 рублей и 1 из аквариума 2 также за 200 рублей.

Отчет должен дать следующий результат:

Аквариум Порода рыбы Количество Сумма продажи Себестоимость Прибыль
Аквариум 1 Мечерот 1 200 125 75
Аквариум 2 Мечерот 1 200 115 85



**************************************************************************************************

Документ «Покупка рыб»
Код объекта модуля:
Процедура ОбработкаПроведения(Отказ, Режим)

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


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



Документ «Покупка корма»
Код объекта модуля:
Процедура ОбработкаПроведения(Отказ, Режим)

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

КонецПроцедуры
Показать



Отчет "продажи" в СКД
ВЫБРАТЬ
ПродажиОбороты.Аквариум КАК Аквариум,
ПродажиОбороты.ПородаРыб КАК ПородаРыб,
ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,
ПродажиОбороты.СебестоимостьОборот КАК Себестоимость,
ПродажиОбороты.СуммаОборот КАК СуммаПродажи
ИЗ
РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты


1) РегистрНакопления ОстаткиНоменклатуры (Остатки)

Измерения:
Аквариум
ПородаРыб

Ресурсы:
Количество
Стоимость

2) РегистрНакопления ПРОДАЖИ (Обороты)

Измерения:
Аквариум
ПородаРыб

Ресурсы:
Количество
Себестоимость
Сумма



Отчет должен дать следующий результат:

Аквариум Порода рыбы Количество Сумма продажи Себестоимость Прибыль
Аквариум 1 Мечерот 1 200 125 75
Аквариум 2 Мечерот 1 200 115 85



У МЕНЯ ОТЧЕТ ПОЛУЧАЕТСЯ ТАКОЙ

Аквариум Порода рыбы Количество Себестоимость Сумма продажи Прибыль
Аквариум 1 100 -100
Аквариум 1 Мечерот 1 100 200 100
Аквариум 2 30 -30
Аквариум 2 Мечерот 1 100 200 100


Что в каком моменте я не правильно делаю?
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 81 29.04.21 18:46 Сейчас в теме
(1)не правильно накапливаете себестоимость рыбы в аквариумах.
3. user1381555 29.04.21 19:11 Сейчас в теме
(2) А как правильно накопить себестоимость в аквариумах?
5. nomad_irk 81 29.04.21 19:36 Сейчас в теме
(3)
1. Определить, что является "хранилищем" себестоимости
2. Определить, что(какие события) влияют на себестоимость
3. Исходя из п.1 и п.2 выполнить движения в "хранилище" себестоимости.
4. Исходя из п.1, п.2 и п.3. использовать "хранилище" себестоимости для получения значения в отчете.
7. user1381555 29.04.21 20:12 Сейчас в теме
(5)

1. Определить, что является "хранилищем" себестоимости. Ответ: РегистрНакопления Продажи

Верно?
Прикрепленные файлы:
8. nomad_irk 81 29.04.21 21:46 Сейчас в теме
(7)Лично у меня ваш ответ вызывает когнитивный диссонанс :)
Такой ответ означает, что вы не понимаете, что есть себестоимость.
9. user1381555 29.04.21 22:13 Сейчас в теме
(8) В моем примере, себестоимость это сумма от продажи рыбок - сумма затрат на покупку рыбок и покупку и корма)
10. nomad_irk 81 29.04.21 22:32 Сейчас в теме
(9)Вы еще раз подтвердили, что не понимаете физического смысла себестоимости.
Советую все же разобраться с этим и уже потом приступать к решению задачи.

"сумма от продажи рыбок - сумма затрат на покупку рыбок и покупку и корма" называется прибылью.
11. user1381555 30.04.21 09:28 Сейчас в теме
(10)
Точно!! Разум уже помутнел к вечеру)
Себестоимость = сумма затрат на покупку рыбок и покупку и корма. Вот так хотела написать)

1. Определить, что является "хранилищем" себестоимости = два регистра нужно заводить и остаточный и оборотный?
2. Определить, что(какие события) влияют на себестоимость = покупка рыбок и корма для определенного аквариума. Так?
.
12. nomad_irk 81 30.04.21 09:34 Сейчас в теме
(11)
1. Вы должны четко понимать, для чего именно у вас будет каждый вид регистра. Исходя из условий задачи, на мой взгляд, хватит и одного.
2. Так. В общем случае себестоимость может изменяться в обе стороны - это должно быть основным условием при выборе вида регистра в п.1.
13. user1381555 30.04.21 09:58 Сейчас в теме
(12)

1. Определить, что является "хранилищем" себестоимости = Регистр Остатки

2. Определить, что(какие события) влияют на себестоимость = покупка рыбок и корма для определенного аквариума

3. Исходя из п.1 и п.2 выполнить движения в "хранилище" себестоимости = документы ПокупкаРыбок и ПокупкаКорма формируют движения Прихода в регистр остатков, документ ПродажаРыбок формирует движение Расхода

4. Исходя из п.1, п.2 и п.3. использовать "хранилище" себестоимости для получения значения в отчете = для отчета продаж, в запросе используем виртуальную таблицу ОстаткиИОбороты

Правильный ход мыслей?
16. nomad_irk 81 30.04.21 10:30 Сейчас в теме
(13)да, ход мыслей правильный.
4. Bukaska 147 29.04.21 19:15 Сейчас в теме
(1)Вложения делайте через форум, ваши картинки с чужим файловым хостингом недоступны
6. user1381555 29.04.21 19:56 Сейчас в теме
(4)
Прикрепленные файлы:
14. starjevschik 30.04.21 10:02 Сейчас в теме
ну сходите на какие-нибудь приличные курсы, елки-палки. Бесплатное образование - фикция. Заодно и бумажка будет, с ней проще на работу устроиться.
15. user1381555 30.04.21 10:10 Сейчас в теме
(14)
Курсов в веб формате у меня предостаточно, знать бы какие из них приличные) Есть рекомендации приличных курсов?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот