Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 06:54

Проблема при списании стоимости

Автор RisenAzazel, 11 апр 2018, 14:00

0 Пользователей и 1 гость просматривают эту тему.

RisenAzazel

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

Подскажите как решить эту проблему.

wise

(0) проблема в НЕ верном суммовом списании.
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

RisenAzazel

Вот обработка проведения документа:


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


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

   

КонецПроцедуры

Сумма рассчитывается в форме документа:

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

&НаКлиенте
Функция ПолучитьСумму(ТекДанные)
   ТекДанные.Сумма = ТекДанные.Количество*ТекДанные.Цена;
КонецФункции

В чем косяк?

Добавлено: 12 апр 2018, 09:29


Списывать стоимость из регистра остатков.
Тоесть как это сделать?

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск