Имя: Пароль:
1C
1С v8
Проблема при списании стоимости
0 RisenAzazel
 
11.04.18
10:48
Здравствуйте.
Имеется ведомость по товарам на складах.
Товар у меня приходуется и расходуется по одной розничной цене.
Но при изменении цены товар расходуется по последней цене(цены хранятся в регистре сведений). В итоге на конечных остатках у меня получается неправильная сумма.
Например:
    Товар      Приход       Расход       КонечныйОстаток  
Очки          20шт.  24р  | 10шт. 13р  |   10шт. 11р
Куртка        15шт.  258р | 15шт. 259p |   0шт.  -1р
Фотокамера    15шт.  201р | 15шт. 200p |   0шт.  1р

Подскажите как решить эту проблему.
1 Cool_Profi
 
11.04.18
10:50
Менять цену в регистре на остатках при изменении цены
2 catena
 
11.04.18
10:52
А зачем вы приходуете товар по розничной цене?
3 Масянька
 
11.04.18
10:53
(2) Поддержу - зачем?
4 igorPetrov
 
11.04.18
10:57
(2) Да и бы спросил - зачем?
5 RisenAzazel
 
11.04.18
10:58
Задание такое.
В регистр товар должен приходоваться по продажной стоимости.
6 Pro1001C
 
11.04.18
11:00
ну если задание такое... тогда расход должен идти по той цене, по которой пришел товар, а не которая сейчас. Партионный учет вам в помощь.
Хотя думаю что-то не договаривают и задачу можно решить проще
7 Масянька
 
11.04.18
11:02
(5) А продажная стоимость как определяется?
8 catena
 
11.04.18
11:04
(6)А, ну тогда с получившейся проблемой к тому же задачнику. Почему проектировку регистров вы доверяете пользователям, а решать получившиеся проблемы пытаетесь силами программиста?
9 RisenAzazel
 
11.04.18
11:09
Масянька,
В форме документа, запросом выгружаю цену (срез последних)
Функция ПолучитьЦену(Товар)
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    РозничныеЦеныСрезПоследних.Цена КАК Цена
        |ИЗ
        |    РегистрСведений.РозничныеЦены.СрезПоследних(, Товар = &Товар) КАК РозничныеЦеныСрезПоследних";
    
    Запрос.УстановитьПараметр("Товар", Товар);
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    ВыборкаДетальныеЗаписи.Следующий();
       
    Возврат ВыборкаДетальныеЗаписи.Цена;
КонецФункции

Затем умножаю на количество запрашиваемого товара

&НаКлиенте
Функция ПолучитьСумму(ТекДанные)
    ТекДанные.Сумма = ТекДанные.Количество*ТекДанные.Цена;
КонецФункции
10 Джинн
 
11.04.18
11:10
(5) Переоценку нужно делать всегда.
11 Масянька
 
11.04.18
11:12
(9) Ты не понял...
"должен приходоваться по продажной стоимости" - откуда берется продажная стоимость?
12 RisenAzazel
 
11.04.18
13:00
Масянька, Цена + наценка.
13 КнОпка
 
11.04.18
13:09
Но при изменении цены товар расходуется по последней цене(цены хранятся в регистре сведений).

учет товаров какой - по средней, по партиям?
14 КнОпка
 
11.04.18
13:09
И да, озвучьте конфигурацию
15 RisenAzazel
 
11.04.18
13:21
КнОпка, по средней.
Приходная накладная:


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

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

Расходная накладная:

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


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

    

КонецПроцедуры
16 Йохохо
 
11.04.18
13:30
(0) см (10) у тебя работа типа НПП, неавтоматизированная торговая точка, погугли
17 Йохохо
 
11.04.18
13:31
НТТ конечно
18 Масянька
 
11.04.18
13:32
(12) Я правильно понимаю, что продажная цена формируется так:
приход -> 1 фигня 100 рэ (в приходном док-те) -> формирование цены = 1 фигня 100 рэ + наценка
?
19 RisenAzazel
 
12.04.18
09:33
Списывать стоимость из регистра остатков.
Тоесть как это сделать?
20 Михаил Козлов
 
12.04.18
09:39
(19) СтоимостьСписуемого = СтоимостьОстаток/КоличествоОстаток*КоличествоСписуемого;
21 hhhh
 
12.04.18
09:46
(18) хрень какая-то. Розничная цена формируется из прайса. Документ Установка цен номенклатуры.
22 RisenAzazel
 
12.04.18
12:32
Михаил Козлов
20 - 12.04.18 - 09:39
(19) СтоимостьСписуемого = СтоимостьОстаток/КоличествоОстаток*КоличествоСписуемого;

Спасибо.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.