Расчет средней цены запасов номенклатуры

1. Гость 11.10.18 11:26
Добрый день. Нужно рассчитать среднюю цену запасов номенклатуры для документа перемещение (состав: табличная часть ->Номенклатура, Количество, Сумма). Есть так же документы приход и расход. В них устанавливается произвольная цена номенклатуры в каждом документе. Также есть последовательность "КонтрольСтоимостиЗапасовНаСкладах" возможно через запрос к последовательности можно получить эту среднюю цену. В общем надо получить среднюю цену и при изменении количества в документе перемещения, сумма получалось по формуле "средняяцена/количество". Помогите пожалуйста :)
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. alex-l19041 8 11.10.18 11:39 Сейчас в теме
(1)
сумма получалось по формуле "средняяцена/количество".
- может средняяцена * количество ?
7. YellowAndBlue 11.10.18 11:52 Сейчас в теме
(4) да, извинюсь, опечатка
2. YellowAndBlue 11.10.18 11:27 Сейчас в теме
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	Запрос.Текст = 
	 "ВЫБРАТЬ
	 |	КонтрольСтоимостиЗапасовНаСкладах.Номенклатуры КАК Номенклатуры,
	 |	КонтрольСтоимостиЗапасовНаСкладах.Склад КАК Склад,
	 |	КонтрольСтоимостиЗапасовНаСкладах.Цена КАК Цена,
	 |	КонтрольСтоимостиЗапасовНаСкладах.Количество КАК Количество,
	 |	СУММА(КонтрольСтоимостиЗапасовНаСкладах.Цена) / СУММА(КонтрольСтоимостиЗапасовНаСкладах.Количество) КАК СредняяЦенаЗапасов
	 |ИЗ
	 |	Последовательность.КонтрольСтоимостиЗапасовНаСкладах КАК КонтрольСтоимостиЗапасовНаСкладах
	 |
	 |СГРУППИРОВАТЬ ПО
	 |	КонтрольСтоимостиЗапасовНаСкладах.Номенклатуры,
	 |	КонтрольСтоимостиЗапасовНаСкладах.Склад,
	 |	КонтрольСтоимостиЗапасовНаСкладах.Цена,
	 |	КонтрольСтоимостиЗапасовНаСкладах.Количество";
	РезультатЗапроса = Запрос.Выполнить();
	Выборка = РезультатЗапроса.Выбрать();                               
	СтрокаТабличнойЧасти = ЭтаФорма.Элементы.Товары.ТекущиеДанные;
	СтрокаТабличнойЧасти.Сумма = Выборка.СредняяЦенаЗапасов * СтрокаТабличнойЧасти.Количество;

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


Код написанный на данный момент
3. alex-l19041 8 11.10.18 11:37 Сейчас в теме
если нужна средняя цена из нескольких (где-то заданных цен), то надо Сумму цен / количество просуммированных цен
5. alex-l19041 8 11.10.18 11:41 Сейчас в теме
может проще? Средняя стоимость = Сумма по товару / количество товара
8. YellowAndBlue 11.10.18 12:11 Сейчас в теме
(5)да, точно можно сделать так, и тогда обратится через запрос к регистру остатков, в которых хранятся сумма и количество. Я думаю в правильном направлении?
6. catena 110 11.10.18 11:50 Сейчас в теме
Цену на количество не делят, а умножают, это же начальная школа.
9. YannikAlx 43 11.10.18 12:14 Сейчас в теме
(6) делить надо не цену , а сумму Цен на количество просуммированных цен , как написал (3)
10. YellowAndBlue 11.10.18 12:27 Сейчас в теме
Хорошо, с этим разобрались
11. YellowAndBlue 11.10.18 12:28 Сейчас в теме
(10) Как правильно это реализовать программно, ведь в документе перемещение нет колонки Цена
12. catena 110 11.10.18 12:32 Сейчас в теме
(11)Вы сперва разберитесь со средней ценой. У вас в запросе не средняя цена, а средняя температура по больнице.

| СУММА(КонтрольСтоимостиЗапасовНаСкладах.Цена) / СУММА(КонтрольСтоимостиЗапасовНаСкладах.Количество) КАК
13. catena 110 11.10.18 12:36 Сейчас в теме
(11)Еще пара моментов:
После Результат.Выбрать(), хорошо еще писать пока Выборка.Следущий()
Если вы хотите работать с конкретной строкой (на что указывает "ТекущиеДанные"), то стоит в запросе делать выборку только по параметрам строки, а не по всем записям за всю историю.
И всю эту кашу нужно писать не ПриСозданииНаСервере, а при изменении количества, вам же вроде так надо.
14. YellowAndBlue 11.10.18 12:41 Сейчас в теме
(13) Но запрос ведь не работает на клиенте, как его можно делать в процедуре при изменении? И что будет попадать в цикл, выборки. Я только начинаю работать с 1С и с ходу так тяжело понять и представить(
15. catena 110 11.10.18 13:53 Сейчас в теме
(14)Из клиентской процедуры можно вызвать серверную :)
alex-l19041; +1 Ответить
16. YellowAndBlue 11.10.18 14:18 Сейчас в теме
(15) Да, пробовала помешать сервер процедуру а потом вызывать, но она почему ту вызываться не хочет, помещала в общий модуль, пишет что переменная не найдена
Внимание! Не забывайте отмечать решение на ваш вопрос, если оно найдено. Это повысит ваш рейтинг на форуме.
Оставьте свое сообщение

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