Имя: Пароль:
1C
1С v8
товара нет на складе, а операция продажи проходит
0 Константин536
 
01.04.15
11:47
Здравствуйте. У меня такая проблема: По факту товара нет на складе, но если я его выбираю и продаю, то операция проходит. А если на складе есть хоть 1шт, а я хочу продать 3, то выскакивает ошибка. Как сделать чтоб и при нуле такая ошибка выходила.
Вот код:


Процедура ОбработкаПроведения(Отказ, Режим)

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

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

Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
     Запрос.УстановитьПараметр("склад", склад);
     Запрос.УстановитьПараметр("ссылка.склад", склад);
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();

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

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

    КонецПроцедуры
1 Nuobu
 
01.04.15
11:54
Разберись, как работают запросы в 1С, посмотри Чистова, почитаю желтые книги по 1С и поймёшь.
2 lxndr
 
01.04.15
11:54
Уоттакуот!

"выбрать
          |пр.товар как товар,
          |Сумма(пр.количество) как количество,
          |Максимум(ЕстьNULL(рег.количествоостаток, 0)) как количествоостаток,
          |Максимум(ЕстьNULL(рег.стоимостьостаток, 0)) как стоимостьостаток,
          |Сумма(пр.Сумма) как Продажа
          |из
          |документ.продажа.товары как пр
          |левое соединение
          |регистрнакопления.общий.остатки(&МоментВремени, склад = &склад) как рег
          |по
          |пр.товар = рег.товар
          |где
          |//склад = &склад и
          |ссылка = &ссылка и
          |ссылка.склад = &склад
          |сгруппировать по
          |пр.товар";
3 Константин536
 
01.04.15
14:33
(2) Респект! Благодарю!