Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как реализовать переоценку товаров?

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

                Движение = Движения.ПродажнаяСтоимостьТоваровНаСкладе.Добавить();
                Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
                Движение.Период = Дата;
                Движение.Товар = ТекСтрокаЦены.Товар; 
                Движение.ПродажнаяСтоимость = (ТекСтрокаЦены.ПредыдущаяСтоимость * Количество) - (РаботаСДокументами.ПолучитьПродажнуюСтоимость(Дата, ТекСтрокаЦены.Товар) * Количество);
                Движение.Склад = СпрСклад.Ссылка;
            Иначе
                // регистр ПродажнаяСтоимостьТоваровНаСкладе Приход

                Движение = Движения.ПродажнаяСтоимостьТоваровНаСкладе.Добавить();
                Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
                Движение.Период = Дата;
                Движение.Товар = ТекСтрокаЦены.Товар; 
                Движение.ПродажнаяСтоимость = (РаботаСДокументами.ПолучитьПродажнуюСтоимость(Дата, ТекСтрокаЦены.Товар) * Количество) - (ТекСтрокаЦены.ПредыдущаяСтоимость * Количество);
                Движение.Склад = СпрСклад.Ссылка;
            КонецЕсли;

Если новая цена больше - находим остаток и проводим приход. Если же цена меньше - находим остаток и проводим расход. Проблема в том, что в отчете по данному регистру, эти движения тоже будут считаться. А значит несколько раз меняя цену, сумма расхода и прихода будет складываться. В итоге я получу не совсем верные данные, так как все движения документа пойдут в отчет. Стоит ли решать эту проблему?
   MikhaNik
 
5 - 21.10.20 - 18:10
Это цикл, а в цикле еще запрос (желательно все одним запросом делать)
РаботаСДокументами.ПолучитьПродажнуюСтоимость(Дата, ТекСтрокаЦены.Товар)

причем 2 раза за проход, если уж так писать, то хотя бы переменную сделай, что бы 1 раз считалось в цикле

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.