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

При проведении одного документа продажа, товар списывается со всех приходов

Автор Константин163, 01 апр 2015, 22:48

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

Константин163

Подскажите в чем проблема: создал 3 документа прихода и 1 документ продажа, но количество списывается со всех приходов!.
Вот код:
Процедура ОбработкаПроведения(Отказ, Режим)

Движения.Общий.Записывать = истина;

   Запрос = Новый Запрос;
   Запрос.Текст =
   
          "  Выбрать
| Товар,
| Сумма(Количество) как Количество,
| Сумма(Сумма) как Сумма
| Поместить ДокТЧ
| из
| Документ.Продажа.Товары
| где
| ссылка = &Ссылка и
| ссылка.склад = &склад

| Сгруппировать по
| Товар
| ;
|
| Выбрать
| ДокТЧ.Товар как товар,
| ДокТЧ.Количество как количество,
| рег.Количествоостаток как количествоостаток,
| рег.стоимостьостаток как стоимостьостаток,
| рег.партия как партия,
|
|ДокТЧ.Сумма как Продажа
|
|из
|ДокТЧ как ДокТЧ
|
|Левое Соединение
|Регистрнакопления.общий.остатки(&МоментВремени, Склад = &Склад) как рег
|
|По
|ДокТЧ.Товар = рег.товар
|
|упорядочить по Партия.дата возр
|
|Итоги Минимум(Количество), сумма(Количествоостаток) По
|ДокТЧ.Товар";
       
   Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
   Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.УстановитьПараметр("склад", склад);
    Запрос.УстановитьПараметр("ссылка.склад", склад);
   
    Результат = Запрос.Выполнить();

   Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);


   Пока Выборка.Следующий() Цикл
      Если Выборка.Количество > Выборка.количествоостаток тогда
      Сообщить("Не хватает товара   " + Выборка.Товар + " в количестве " + (Выборка.Количество - Выборка.КоличествоОстаток));

      Отказ = истина;
       Движения.Общий.Записывать = ложь;
   КонецЕсли;
КонецЦикла;

Если отказ тогда
   Возврат;
КонецЕсли;

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

cska-fanat-kz

Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Константин163

Цитата: cska-fanat-kz от 02 апр 2015, 03:44
выделил
А что не так? Код полностью списал с Чистова, только подставил его себе.
Добавлено: 02 апр 2015, 10:02


Цитата: Константин163 от 02 апр 2015, 09:38
Цитата: cska-fanat-kz от 02 апр 2015, 03:44
выделил
А что не так? Код полностью списал с Чистова, только подставил его себе.

Все, разобрался, спасибо. Видимо был уставший и не допонял, спасибо

Теги:

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

Рейтинг@Mail.ru

Поиск