Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

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

Контроль остатков при проведении
Я
   xupypg
 
18.11.18 - 04:02
Подскажите пожалуйста, сделал запрос на контроль остатков, он не работает, в чём ошибка?
Запрос3 = Новый Запрос;
Запрос3.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос3.Текст = "ВЫБРАТЬ
                                |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
                        |    ТоварыНаСкладахОстатки.Товар КАК Товар,
                        |    РасходнаяНакладнаяТовары.Склад КАК Склад
                        |ИЗ
                        |    РегистрНакопления.ТоварыНаСкладах.Остатки(
                        |            ,
                        |            Товар В
                        |                (ВЫБРАТЬ
                        |                    НоменклатураДокумента.Номенклатура
                        |                ИЗ
                        |                    НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки
                        |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары
                        |        ПО ТоварыНаСкладахОстатки.Склад = РасходнаяНакладнаяТовары.Склад
                        |ГДЕ
                        |    ТоварыНаСкладахОстатки.КоличествоОстаток < 0";
 
 
   MSOliver
 
1 - 18.11.18 - 04:05
Кто такое НоменклатураДокумента?
   runoff_runoff
 
2 - 18.11.18 - 04:08
(Товар, Склад) В (
ВЫБРАТЬ
   НоменклатураДокумента.Номенклатура,
   НоменклатураДокумента.Склад
ИЗ                                            
   НоменклатураДокумента)
   xupypg
 
3 - 18.11.18 - 04:10
Номенклатура Документа- временная таблица, Руноф, я добавил склад, не получилось.... может отправить как-то вам выгрузку?
   xupypg
 
4 - 18.11.18 - 04:11
Вот весь блок

Если Режим = РежимПроведенияДокумента.Оперативный Тогда
        
        //проверим отрицательные остатки

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

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

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

    КонецЦикла;
       Движения.Записать(); 
        
        
    Если Режим = РежимПроведенияДокумента.Оперативный Тогда
        
        //проверим отрицательные остатки

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


    КонецПроцедуры
   xupypg
 
8 - 18.11.18 - 08:46
Попытался выгрузить результат 3 запроса в таблицу, он не выгружается, как я понял процедура просто сюда не попадает, а почему я понятия не имею, вроде всё по Радченко делал....
   hhhh
 
9 - 18.11.18 - 09:26
режим неоперативный
   xupypg
 
10 - 18.11.18 - 10:01
а как сделать оперативный?
 
 Рекламное место пустует
   xupypg
 
11 - 18.11.18 - 10:15
У меня в документе оперативное проведение документа разрешено
   _Дайвер_
 
12 - 18.11.18 - 11:04
Почему в условии у тебя КоличествоОстаток = Склад?
   _Дайвер_
 
13 - 18.11.18 - 11:12
Пробуй:
Запрос3.Текст = "ВЫБРАТЬ
                |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
                |    ТоварыНаСкладахОстатки.Товар КАК Товар
                |ИЗ
                |    РегистрНакопления.ТоварыНаСкладах.Остатки(
                |            ,
                |            Товар В
                |                (ВЫБРАТЬ
                |                    НоменклатураДокумента.Номенклатура
                |                ИЗ
                |                    НоменклатураДокумента)
                |                И Склад = &Склад) КАК ОстаткиТоваров
                |ГДЕ
                |    ТоварыНаСкладахОстатки.КоличествоОстаток < 0";
   xupypg
 
14 - 18.11.18 - 11:18
Дайвер, так не получится, потому, что у меня "Склад" не в реквизитах документа, а в таблице) в том-то и проблема))))
   hhhh
 
15 - 18.11.18 - 11:26
(14) дата документа сегодня?
   Остап Сулейманович
 
16 - 18.11.18 - 11:26
(0) Все здесь :
ГДЕ ТоварыНаСкладахОстатки.КоличествоОстаток < 0
у вас разрешены отрицательные остатки? Или это контроль по новой методике уже после записи движений?
   xupypg
 
17 - 18.11.18 - 11:33
Если перепровожу уже готовый документ, тогда он проводится левым числом, если создаю новый, то он проводится оперативно....  Это методика контроля остатков после проведения документа... по крайней мере попытка этой методики)
   hhhh
 
18 - 18.11.18 - 11:44
(17) ну вот это
 |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары
                        |        ПО ТоварыНаСкладахОстатки.КоличествоОстаток = РасходнаяНакладнаяТовары.Склад
                       

какая-то невероятная хрень. Может, чего покурил? Потому что в адекватном состоянии такое невозможно придумать.
   xupypg
 
19 - 18.11.18 - 11:51
как правильно будет? я не догоняю прост
   hhhh
 
20 - 18.11.18 - 11:58
|        ЛЕВОЕ СОЕДИНЕНИЕ НоменктатураДокумента КАК НоменктатураДокумента
                        |        ПО НоменктатураДокумента.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура И НоменктатураДокумента.Склад = ТоварыНаСкладахОстатки.Склад
   xupypg
 
21 - 18.11.18 - 12:14
не работает так)) думешь я не пробовал))) я уже неделю с этим разбираюсь) логически думал- не прокатило, начал всё подряд пробовать, тоже не прокатило) в моих глазах безнадёжность) я не уверен даже в том, что у меня выборка правильно составлена)
   hhhh
 
22 - 18.11.18 - 12:20
(21) не работает, значит надо найти где ошибка. а не бросаться сразу писать откровенный бред.
   xupypg
 
23 - 18.11.18 - 12:37
не могу ошибку найти, думал тут помогут
   hhhh
 
24 - 18.11.18 - 12:55
(23) нашли же
КоличествоОстаток = Склад написал
   azernot
 
25 - 18.11.18 - 12:56
ВЫБРАТЬ
    РасходнаяНакладнаяТовары.Склад КАК Склад,
    РасходнаяНакладнаяТовары.Номенклатура КАК Номенклатура,
    СУММА(РасходнаяНакладнаяТовары.Количество) КАК КоличествоВДокументе,
    СУММА(РасходнаяНакладнаяТовары.Сумма) КАК СуммаВДокументе
ПОМЕСТИТЬ НоменклатураДокумента
ИЗ
    Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары
ГДЕ
    РасходнаяНакладнаяТовары.Ссылка = &Ссылка

СГРУППИРОВАТЬ ПО
    РасходнаяНакладнаяТовары.Номенклатура,
    РасходнаяНакладнаяТовары.Склад
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    НоменклатураДокумента.Номенклатура,
    НоменклатураДокумента.КоличествоВДокументе,
    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНаОстатке,
    НоменклатураДокумента.КоличествоВДокументе - ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНедостаточно
ИЗ
    НоменклатураДокумента КАК НоменклатураДокумента
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
                ,
                (Склад, Номенклатура) В
                    (ВЫБРАТЬ
                        НоменклатураДокумента.Склад,
                        НоменклатураДокумента.Номенклатура
                    ИЗ
                        НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки
        ПО НоменклатураДокумента.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
            И НоменклатураДокумента.Склад = ТоварыНаСкладахОстатки.Склад
ГДЕ
    НоменклатураДокумента.КоличествоВДокументе > ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)
   xupypg
 
26 - 19.11.18 - 03:32
Азернот, не получилось, документ проводится...
   xupypg
 
27 - 19.11.18 - 03:35
Даже если удалить приходную накладную с определённым товаром, то всё равно в расходной он будет списываться, хотя по факту прихода даже не было
   xupypg
 
28 - 19.11.18 - 03:42
Процедура ОбработкаПроведения(Отказ, Режим)

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

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

    КонецЦикла;
       Движения.Записать(); 
        
        
    Если Режим = РежимПроведенияДокумента.Оперативный Тогда
        
        //проверим отрицательные остатки

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


    КонецПроцедуры
   xupypg
 
29 - 19.11.18 - 03:46
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
                        |                ,
                        |                (Склад, Товар) В
                        |                    (ВЫБРАТЬ
                        |                        НоменклатураДокумента.Склад,
                        |                        НоменклатураДокумента.Номенклатура
   xupypg
 
30 - 19.11.18 - 03:47
исправил третий запрос вот так, потому. что если в скобках указать "Номенклатура" то пишет поле не найдено, точки остановки проходят по всем строкам, но ошибку не выдаёт
   hhhh
 
31 - 19.11.18 - 05:27
(30) А куда далась самая основная строчка КоличествоОстаток < 0 ?? Ты самую главную проверку выбросил.
   xupypg
 
32 - 19.11.18 - 05:57
Вернул строчку, ничего не изменилось, документ по прежнему проводится
   hhhh
 
33 - 19.11.18 - 06:03
(32) дата документа сегодня? Потому что если вчера, то считается, что не оперативное.
 
 
   xupypg
 
34 - 19.11.18 - 06:16
Проведение оперативное, дата и время изменяется на дату и время на компьютере
   hhhh
 
35 - 19.11.18 - 06:21
(34) какой запрос в итоге получился?
   xupypg
 
36 - 19.11.18 - 06:32
Запрос3 = Новый Запрос;
        Запрос3.МенеджерВременныхТаблиц = МенеджерВТ;
        Запрос3.Текст = "ВЫБРАТЬ
                        |    НоменклатураДокумента.КоличествоВДокументе КАК КоличествоВДокументе,
                        |    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНаОстатке,
                        |    НоменклатураДокумента.КоличествоВДокументе - ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНедостаточно
                        |ИЗ
                        |    НоменклатураДокумента КАК НоменклатураДокумента
                        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
                        |                ,
                        |                (Склад, Товар) В
                        |                    (ВЫБРАТЬ
                        |                        НоменклатураДокумента.Склад,
                        |                        НоменклатураДокумента.Номенклатура
                        |                    ИЗ
                        |                        НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки
                        |        ПО НоменклатураДокумента.Номенклатура = ТоварыНаСкладахОстатки.Товар
                        |            И НоменклатураДокумента.Склад = ТоварыНаСкладахОстатки.Склад
                        |ГДЕ
                        |    НоменклатураДокумента.КоличествоВДокументе > ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)
                        |    И ТоварыНаСкладахОстатки.КоличествоОстаток < 0";
        
        
                        РезультатЗапроса = Запрос3.Выполнить();
                
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
        
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
   hhhh
 
37 - 19.11.18 - 08:01
(36) Вроде нормально. Отладчиком заходит внутрь цикла? И точно есть отрицательный остаток? Расход больше прихода?
   xupypg
 
38 - 19.11.18 - 08:06
Если Режим = РежимПроведенияДокумента.Оперативный Тогда
        
        //проверим отрицательные остатки

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


    КонецПроцедуры
   xupypg
 
39 - 19.11.18 - 08:07
Попадает в запрос, после запроса в результат, потом в выборку, после выборки в "Пока ВыборкаДетальныеЗаписи...." и после этой строки сразу в "КонецЕсли"
   xupypg
 
40 - 19.11.18 - 08:08
в сообщение пользователю он вообще не попадает, остатки точно отрицательные
   МимохожийОднако
 
41 - 19.11.18 - 08:10
(40) Отладчик включил?
   xupypg
 
42 - 19.11.18 - 08:11
в смысле? точку остановки поставил и вот так проверил
   hhhh
 
43 - 19.11.18 - 08:19
(40) вот в самом первом запросе откровенная хрень
|ГДЕ
        |    РасходнаяНакладнаяТовары.Номенклатура.Ссылка = &Ссылка

Как обычно ваш фирменный стиль: сравнивает номенклатуру с расходной накладной. Ну с какого бодуна вдруг номенклатура будет равной расходной накладной?
   xupypg
 
44 - 19.11.18 - 08:24
(43) СРАБОТАЛО)))
   xupypg
 
45 - 19.11.18 - 08:24
Спасибо всем огромное, где тут лайк ставить?)
   МимохожийОднако
 
46 - 19.11.18 - 08:25
(45) Фломастером на экране )
   xupypg
 
47 - 19.11.18 - 08:27
Я несмываемым поставлю))))
   xupypg
 
48 - 19.11.18 - 09:04
А как сделать чтоб не только по количеству, но и по сумме учёт шёл?
   МимохожийОднако
 
49 - 19.11.18 - 09:06
(48) Добавь ресурс Сумма
 
 Рекламное место пустует
   xupypg
 
50 - 19.11.18 - 09:18
в условиях тоже? и в какой регистр добавлять?
   МимохожийОднако
 
51 - 19.11.18 - 09:22
(50) регистр Товары на складах. Но обычно используют другой регистр Товары организаций, в которых есть измерение Организация. Какая у тебя типовая конфигурация пока не известно. Возможно, велосипед с суммой уже существует
   xupypg
 
52 - 19.11.18 - 09:26
всё что есть в коде написано, у меня 2 документа, 2 справочника и 1 регистр накоплений
   xupypg
 
53 - 19.11.18 - 09:26
в какой запрос, а не регистр*)
   МимохожийОднако
 
54 - 19.11.18 - 09:29
(53) Если у тебя один регистр, то добавь  в него ресурс Сумма.
Потом добавь аналогичное поле в запрос.
   xXeNoNx
 
55 - 19.11.18 - 10:35
(4) а зачем:
Если Режим = РежимПроведенияДокумента.Оперативный Тогда ??
   xXeNoNx
 
56 - 19.11.18 - 10:36
Это задачи подготовки к спецу
   xXeNoNx
 
57 - 19.11.18 - 10:37
(29) Соединение с подзапросом - плохая практика
   xXeNoNx
 
58 - 19.11.18 - 10:40
Без указания периода будешь читать же свои остатки...
   xXeNoNx
 
59 - 19.11.18 - 10:42
(36) Хреновый подход решения, а именно: решение можно сделать по новой методике проведения, сначала пишем, потом читаем.
   azernot
 
60 - 19.11.18 - 10:57
(28)         |ГДЕ
        |    РасходнаяНакладнаяТовары.Номенклатура.Ссылка = &Ссылка
    Запрос.УстановитьПараметр("Ссылка", Ссылка);

Что за бред?!

У тебя ВТ НоменклатураДокумента всегда будет пустая!
Надо так

|ГДЕ
        |    РасходнаяНакладнаяТовары.Ссылка = &Ссылка
   azernot
 
61 - 19.11.18 - 10:59
А, в (43) уже написали...
   xXeNoNx
 
62 - 19.11.18 - 11:03
(38) яб не принял такое решение и экзаменатор не примет
   xupypg
 
63 - 19.11.18 - 12:05
Процедура ОбработкаПроведения(Отказ, Режим)

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

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

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

    КонецЦикла;
       Движения.Записать(); 
        
        
    Если Режим = РежимПроведенияДокумента.Оперативный Тогда
        
        //проверим отрицательные остатки

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


    КонецПроцедуры
   xupypg
 
64 - 19.11.18 - 12:06
Добавил сумму, в последнем регистре установил условие, вообще перестало работать)
   xupypg
 
65 - 19.11.18 - 12:06
Суммовой учёт надо добавить, реквизит создал
   azernot
 
66 - 19.11.18 - 12:47
(65) А что значит "суммовой учёт"?
В учёте обычно сумму списания ТМЦ рассчитывается по какой-то методике (ФИФО, Средняя). Если есть количественный остаток, как может не быть суммового?
   xupypg
 
67 - 19.11.18 - 13:09
Вот я в смысле так же подумал, но экзаменатор сказал сделать...
   xupypg
 
68 - 19.11.18 - 13:09
я себе этот суммовой учёт в принципе не особо представляю
   xupypg
 
69 - 20.11.18 - 03:26
//проверим отрицательные остатки

        Запрос3 = Новый Запрос;
        Запрос3.МенеджерВременныхТаблиц = МенеджерВТ;
        Запрос3.Текст = "ВЫБРАТЬ
                        |    НоменклатураДокумента.КоличествоВДокументе КАК КоличествоВДокументе,
                        |    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНаОстатке,
                        |    НоменклатураДокумента.КоличествоВДокументе - ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНедостаточно,
                        |    ЕСТЬNULL(ТоварыНаСкладахОстатки.СуммаОстаток, 0) КАК СуммаОстаток,
                        |    НоменклатураДокумента.Склад КАК Склад,
                        |    НоменклатураДокумента.КоличествоВДокументе - ЕСТЬNULL(ТоварыНаСкладахОстатки.СуммаОстаток, 0) КАК КоличествоВДокументе1
                        |ИЗ
                        |    НоменклатураДокумента КАК НоменклатураДокумента
                        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
                        |                ,
                        |                (Склад, Товар) В
                        |                    (ВЫБРАТЬ
                        |                        НоменклатураДокумента.Склад,
                        |                        НоменклатураДокумента.Номенклатура
                        |                    ИЗ
                        |                        НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки
                        |        ПО НоменклатураДокумента.Номенклатура = ТоварыНаСкладахОстатки.Товар
                        |            И НоменклатураДокумента.Склад = ТоварыНаСкладахОстатки.Склад
                        |            И НоменклатураДокумента.КоличествоВДокументе = ТоварыНаСкладахОстатки.СуммаОстаток
                        |ГДЕ
                        |    НоменклатураДокумента.КоличествоВДокументе > ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)
                        |    И ТоварыНаСкладахОстатки.КоличествоОстаток < 0
                        |    И ТоварыНаСкладахОстатки.СуммаОстаток < 0
                        |    И НоменклатураДокумента.КоличествоВДокументе > ЕСТЬNULL(ТоварыНаСкладахОстатки.СуммаОстаток, 0)";
   xupypg
 
70 - 20.11.18 - 03:27
Добавил реквизит "Сумма" построил запрос по примеру количества, документ вообще перестал проводиться оперативно... он проводится, ошибка не выходит о недостаточном количестве и дата со временем не меняется на текущее, а остаётся прежней....
   azernot
 
71 - 20.11.18 - 10:32
И ТоварыНаСкладахОстатки.КоличествоОстаток < 0
                        |    И ТоварыНаСкладахОстатки.СуммаОстаток < 0

Зачем это?
   azernot
 
72 - 20.11.18 - 10:39
Вообще же, если уж это учебная задача - надо уточнять у экзаменатора, что же нужно сделать.
С точки зрения прикладной логики учётных задач контроль суммового остатка (и уж тем более сравнение суммового остатка с количеством из документа) - бред.

P.S. Мне кажется, что я оказываю медвежью услугу... Поэтому рекомендую автору всё же сначала подумать самостоятельно, что он хочет, сформулировать, а уж потом, если возникнут именно технические вопросы - задавать их.
   xupypg
 
73 - 20.11.18 - 12:45
Экзаменатор по поводу суммового учёта сказал: "Да там в 2 местах склад поменять, всё что нужно переделать". В каких местах я чё-то не вдупляю.....


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует