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

Контроль остатков при списании

Автор BlueMetan, 14 дек 2022, 22:07

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

BlueMetan

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

NaumovAlexey

1)у вас обращение к вирт.таблице остатков без параметров. Т.е. остатки на текущую дату, а не дату документа.
2)  |   И РасходнаяНакладная.Склад = &Склад"
это вообще что условие значит?

cast

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

antoneus

Тут было сообщение, но я его удалил)

BlueMetan

cast, Большое спасибо, немного преобразовал свой, все получилось

BlueMetan

NaumovAlexey, Ну меня склад находится в реквизитах, параметр для выборки по складам из регистра

Теги:  

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

Рейтинг@Mail.ru

Поиск