IE 2018

1. Гость 11.10.18 11:26

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

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

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


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

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

Вакансии

Программист 1С
Салехард
зарплата от 80 000 руб. до 200 000 руб.
Полный день

Программист 1С
Казань
Полный день

Программист 1С
Санкт-Петербург
зарплата от 130 000 руб. до 150 000 руб.
Полный день

Ведущий программист 1С
Екатеринбург
зарплата от 100 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 60 000 руб. до 110 000 руб.
Полный день