|
Как реализовать переоценку товаров? | ☑ | ||
---|---|---|---|---|
0
wellno
21.10.20
✎
09:41
|
Добрый день.
У меня имеется документ ИзменениеЦены, который задает новое значение товара в регистр сведений Цены. Также у меня имеется регистр накоплений ПродажнаяСтоимостьТоваровНаСкладе в который входит: товар, склад, стоимость, количество. Каким образом мне реализовать переоценку в этом регистре? Я уже сделал два варианта: один находил все движения с заданным товаром и дублировал их с новой ценой, второй вариант просто напрямую изменял стоимость старых движений. Однако, оба способа некорректны. Каким образом должен выглядеть верный вариант? |
|||
1
wellno
21.10.20
✎
15:04
|
"Суть документа переоценки в том, что после его проведения изменяется только остаток. То есть документ должен СОЗДАТЬ такие движения, чтоб после его проведения ОСТАТОК имел новую стоимость (анализировать надо именно с Остатки)." Может, хоть это кто-нибудь расшифрует?
|
|||
2
MikhaNik
21.10.20
✎
15:44
|
Если "Стоимость" это измерение и = цена*количество,
то нужно найти все товары на этом складе и запись будет "Склад", "Товар", "Количество"=0 (не меняем), "Стоимость" = "Стоимость" - "Цена" * "Количество" т.е. если цена останется прежней итоги не поменяются (тут можно условие предусмотреть что бы не формировать лишние записи) |
|||
3
MikhaNik
21.10.20
✎
15:45
|
(поправка)
Если "Стоимость" это "ресурс" и = цена*количество, то нужно найти все товары на этом складе и запись будет "Склад", "Товар", "Количество"=0 (не меняем), "Стоимость" = "Стоимость" - "Цена" * "Количество" т.е. если цена останется прежней итоги не поменяются (тут можно условие предусмотреть что бы не формировать лишние записи) |
|||
4
wellno
21.10.20
✎
16:03
|
Реализовал что-то похожее:
Если ТекСтрокаЦены.ПредыдущаяСтоимость * Количество > РаботаСДокументами.ПолучитьПродажнуюСтоимость(Дата, ТекСтрокаЦены.Товар) * Количество Тогда // регистр ПродажнаяСтоимостьТоваровНаСкладе Расход Движение = Движения.ПродажнаяСтоимостьТоваровНаСкладе.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Товар = ТекСтрокаЦены.Товар; Движение.ПродажнаяСтоимость = (ТекСтрокаЦены.ПредыдущаяСтоимость * Количество) - (РаботаСДокументами.ПолучитьПродажнуюСтоимость(Дата, ТекСтрокаЦены.Товар) * Количество); Движение.Склад = СпрСклад.Ссылка; Иначе // регистр ПродажнаяСтоимостьТоваровНаСкладе Приход Движение = Движения.ПродажнаяСтоимостьТоваровНаСкладе.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Товар = ТекСтрокаЦены.Товар; Движение.ПродажнаяСтоимость = (РаботаСДокументами.ПолучитьПродажнуюСтоимость(Дата, ТекСтрокаЦены.Товар) * Количество) - (ТекСтрокаЦены.ПредыдущаяСтоимость * Количество); Движение.Склад = СпрСклад.Ссылка; КонецЕсли; Если новая цена больше - находим остаток и проводим приход. Если же цена меньше - находим остаток и проводим расход. Проблема в том, что в отчете по данному регистру, эти движения тоже будут считаться. А значит несколько раз меняя цену, сумма расхода и прихода будет складываться. В итоге я получу не совсем верные данные, так как все движения документа пойдут в отчет. Стоит ли решать эту проблему? |
|||
5
MikhaNik
21.10.20
✎
18:10
|
Это цикл, а в цикле еще запрос (желательно все одним запросом делать)
РаботаСДокументами.ПолучитьПродажнуюСтоимость(Дата, ТекСтрокаЦены.Товар) причем 2 раза за проход, если уж так писать, то хотя бы переменную сделай, что бы 1 раз считалось в цикле |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |