Имя: Пароль:
1C
1С v8
Ошибка при проведении документа
0 Lecowi
 
13.05.19
10:14
При попытке проведения пишет ошибку, что недостаточно товара для продажи. К примеру, я закупаю 10 валиков, они отображаются у меня в остатках, но когда я продаю валик хотя бы в одном количестве, пишет, что недостаточно.

Процедура из МодуляОбъекта Документ.ОтпускМатериалов  

Процедура ОбработкаПроведения(Отказ, Режим)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

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

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

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

  |    Остатки.Склад КАК склад,

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

ДА и тут что то складом и не пахнет. Как я понимаю, прихода на пустой склад у вас нет)
3 Lecowi
 
13.05.19
10:35
Спасибо, заработало
AdBlock убивает бесплатный контент. 1Сергей