| 
    
            
         
         | 
    
    
  | 
Контроль остатков при проведении | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        xupypg    
     18.11.18 
            ✎
    04:02 
 | 
         
        Подскажите пожалуйста, сделал запрос на контроль остатков, он не работает, в чём ошибка?
 
        Запрос3 = Новый Запрос; Запрос3.МенеджерВременныхТаблиц = МенеджерВТ; Запрос3.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток, | ТоварыНаСкладахОстатки.Товар КАК Товар, | РасходнаяНакладнаяТовары.Склад КАК Склад |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки( | , | Товар В | (ВЫБРАТЬ | НоменклатураДокумента.Номенклатура | ИЗ | НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары | ПО ТоварыНаСкладахОстатки.Склад = РасходнаяНакладнаяТовары.Склад |ГДЕ | ТоварыНаСкладахОстатки.КоличествоОстаток < 0";  | 
|||
| 
    1
    
        MSOliver    
     18.11.18 
            ✎
    04:05 
 | 
         
        Кто такое НоменклатураДокумента?     
         | 
|||
| 
    2
    
        runoff_runoff    
     18.11.18 
            ✎
    04:08 
 | 
         
        (Товар, Склад) В (
 
        ВЫБРАТЬ НоменклатураДокумента.Номенклатура, НоменклатураДокумента.Склад ИЗ НоменклатураДокумента)  | 
|||
| 
    3
    
        xupypg    
     18.11.18 
            ✎
    04:10 
 | 
         
        Номенклатура Документа- временная таблица, Руноф, я добавил склад, не получилось.... может отправить как-то вам выгрузку?     
         | 
|||
| 
    4
    
        xupypg    
     18.11.18 
            ✎
    04:11 
 | 
         
        Вот весь блок
 
        Если Режим = РежимПроведенияДокумента.Оперативный Тогда //проверим отрицательные остатки Запрос3 = Новый Запрос; Запрос3.МенеджерВременныхТаблиц = МенеджерВТ; Запрос3.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток, | ТоварыНаСкладахОстатки.Товар КАК Товар, | РасходнаяНакладнаяТовары.Склад КАК Склад |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки( | , | Товар, Склад В | (ВЫБРАТЬ | НоменклатураДокумента.Номенклатура, | НоменклатураДокумента.Склад | ИЗ | НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары | ПО ТоварыНаСкладахОстатки.Склад = РасходнаяНакладнаяТовары.Склад | И ТоварыНаСкладахОстатки.КоличествоОстаток = РасходнаяНакладнаяТовары.Склад |ГДЕ | ТоварыНаСкладахОстатки.КоличествоОстаток < 0"; РезультатЗапроса = Запрос3.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Не хватает " + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) +" единиц материала """ + ВыборкаДетальныеЗаписи.Товар + """"; Сообщение.Сообщить(); Отказ = Истина; КонецЦикла; КонецЕсли;  | 
|||
| 
    5
    
        hhhh    
     18.11.18 
            ✎
    08:08 
 | 
         
        (4) а Движения.Записать() есть перед этим блоком?     
         | 
|||
| 
    6
    
        РусКомп    
     18.11.18 
            ✎
    08:36 
 | 
         
        Проведение оперативное, раз дата остатков не указана?     
         | 
|||
| 
    7
    
        xupypg    
     18.11.18 
            ✎
    08:45 
 | 
         
        Процедура ОбработкаПроведения(Отказ, Режим)
 
        Движения.ТоварыНаСкладах.Записывать = Истина; МенеджерВТ = Новый МенеджерВременныхтаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяТовары.Номенклатура КАК Номенклатура, | СУММА(РасходнаяНакладнаяТовары.Количество) КАК КоличествоВДокументе, | СУММА(РасходнаяНакладнаяТовары.Сумма) КАК СуммаВДокументе |ПОМЕСТИТЬ НоменклатураДокумента |ИЗ | Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары |ГДЕ | РасходнаяНакладнаяТовары.Номенклатура.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяТовары.Номенклатура"; Запрос.УстановитьПараметр("Ссылка", Ссылка); РезультатЗапроса = Запрос.Выполнить(); Запрос2 = Новый Запрос; Запрос2.МенеджерВременныхТаблиц = МенеджерВт; Запрос2.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяТовары.Номенклатура КАК Номенклатура, | РасходнаяНакладнаяТовары.Склад КАК Склад, | СУММА(РасходнаяНакладнаяТовары.Количество) КАК Количество |ИЗ | Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары |ГДЕ | РасходнаяНакладнаяТовары.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяТовары.Номенклатура, | РасходнаяНакладнаяТовары.Склад"; Запрос2.УстановитьПараметр("Ссылка", Ссылка); Движения.ТоварыНаСкладах.Записать(); РезультатЗапроса = Запрос2.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл // Вставить обработку выборки ВыборкаДетальныеЗаписи Движение = Движения.ТоварыНаСкладах.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Товар = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Склад = ВыборкаДетальныеЗаписи.Склад; Движение.Количество = ВыборкаДетальныеЗаписи.Количество; КонецЦикла; Движения.Записать(); Если Режим = РежимПроведенияДокумента.Оперативный Тогда //проверим отрицательные остатки Запрос3 = Новый Запрос; Запрос3.МенеджерВременныхТаблиц = МенеджерВТ; Запрос3.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток, | ТоварыНаСкладахОстатки.Товар КАК Товар, | РасходнаяНакладнаяТовары.Склад КАК Склад |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки( | , | (Товар, Склад) В | (ВЫБРАТЬ | НоменклатураДокумента.Номенклатура, | НоменклатураДокумента.Склад | ИЗ | НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары | ПО ТоварыНаСкладахОстатки.КоличествоОстаток = РасходнаяНакладнаяТовары.Склад |ГДЕ | ТоварыНаСкладахОстатки.КоличествоОстаток < 0"; РезультатЗапроса = Запрос3.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Не хватает " + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) +" единиц материала """ + ВыборкаДетальныеЗаписи.Товар + """"; Сообщение.Сообщить(); Отказ = Истина; КонецЦикла; КонецЕсли; КонецПроцедуры  | 
|||
| 
    8
    
        xupypg    
     18.11.18 
            ✎
    08:46 
 | 
         
        Попытался выгрузить результат 3 запроса в таблицу, он не выгружается, как я понял процедура просто сюда не попадает, а почему я понятия не имею, вроде всё по Радченко делал....     
         | 
|||
| 
    9
    
        hhhh    
     18.11.18 
            ✎
    09:26 
 | 
         
        режим неоперативный     
         | 
|||
| 
    10
    
        xupypg    
     18.11.18 
            ✎
    10:01 
 | 
         
        а как сделать оперативный?     
         | 
|||
| 
    11
    
        xupypg    
     18.11.18 
            ✎
    10:15 
 | 
         
        У меня в документе оперативное проведение документа разрешено     
         | 
|||
| 
    12
    
        _Дайвер_    
     18.11.18 
            ✎
    11:04 
 | 
         
        Почему в условии у тебя КоличествоОстаток = Склад?     
         | 
|||
| 
    13
    
        _Дайвер_    
     18.11.18 
            ✎
    11:12 
 | 
         
        Пробуй:
 
        Запрос3.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток, | ТоварыНаСкладахОстатки.Товар КАК Товар |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки( | , | Товар В | (ВЫБРАТЬ | НоменклатураДокумента.Номенклатура | ИЗ | НоменклатураДокумента) | И Склад = &Склад) КАК ОстаткиТоваров |ГДЕ | ТоварыНаСкладахОстатки.КоличествоОстаток < 0";  | 
|||
| 
    14
    
        xupypg    
     18.11.18 
            ✎
    11:18 
 | 
         
        Дайвер, так не получится, потому, что у меня "Склад" не в реквизитах документа, а в таблице) в том-то и проблема))))     
         | 
|||
| 
    15
    
        hhhh    
     18.11.18 
            ✎
    11:26 
 | 
         
        (14) дата документа сегодня?     
         | 
|||
| 
    16
    
        Остап Сулейманович    
     18.11.18 
            ✎
    11:26 
 | 
         
        (0) Все здесь :
 
        ГДЕ ТоварыНаСкладахОстатки.КоличествоОстаток < 0 у вас разрешены отрицательные остатки? Или это контроль по новой методике уже после записи движений?  | 
|||
| 
    17
    
        xupypg    
     18.11.18 
            ✎
    11:33 
 | 
         
        Если перепровожу уже готовый документ, тогда он проводится левым числом, если создаю новый, то он проводится оперативно....  Это методика контроля остатков после проведения документа... по крайней мере попытка этой методики)     
         | 
|||
| 
    18
    
        hhhh    
     18.11.18 
            ✎
    11:44 
 | 
         
        (17) ну вот это
 
        | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары | ПО ТоварыНаСкладахОстатки.КоличествоОстаток = РасходнаяНакладнаяТовары.Склад какая-то невероятная хрень. Может, чего покурил? Потому что в адекватном состоянии такое невозможно придумать.  | 
|||
| 
    19
    
        xupypg    
     18.11.18 
            ✎
    11:51 
 | 
         
        как правильно будет? я не догоняю прост     
         | 
|||
| 
    20
    
        hhhh    
     18.11.18 
            ✎
    11:58 
 | 
         
        |        ЛЕВОЕ СОЕДИНЕНИЕ НоменктатураДокумента КАК НоменктатураДокумента
 
        | ПО НоменктатураДокумента.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура И НоменктатураДокумента.Склад = ТоварыНаСкладахОстатки.Склад  | 
|||
| 
    21
    
        xupypg    
     18.11.18 
            ✎
    12:14 
 | 
         
        не работает так)) думешь я не пробовал))) я уже неделю с этим разбираюсь) логически думал- не прокатило, начал всё подряд пробовать, тоже не прокатило) в моих глазах безнадёжность) я не уверен даже в том, что у меня выборка правильно составлена)     
         | 
|||
| 
    22
    
        hhhh    
     18.11.18 
            ✎
    12:20 
 | 
         
        (21) не работает, значит надо найти где ошибка. а не бросаться сразу писать откровенный бред.     
         | 
|||
| 
    23
    
        xupypg    
     18.11.18 
            ✎
    12:37 
 | 
         
        не могу ошибку найти, думал тут помогут     
         | 
|||
| 
    24
    
        hhhh    
     18.11.18 
            ✎
    12:55 
 | 
         
        (23) нашли же
 
        КоличествоОстаток = Склад написал  | 
|||
| 
    25
    
        azernot    
     18.11.18 
            ✎
    12:56 
 | 
         
        ВЫБРАТЬ
 
        РасходнаяНакладнаяТовары.Склад КАК Склад, РасходнаяНакладнаяТовары.Номенклатура КАК Номенклатура, СУММА(РасходнаяНакладнаяТовары.Количество) КАК КоличествоВДокументе, СУММА(РасходнаяНакладнаяТовары.Сумма) КАК СуммаВДокументе ПОМЕСТИТЬ НоменклатураДокумента ИЗ Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары ГДЕ РасходнаяНакладнаяТовары.Ссылка = &Ссылка СГРУППИРОВАТЬ ПО РасходнаяНакладнаяТовары.Номенклатура, РасходнаяНакладнаяТовары.Склад ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ НоменклатураДокумента.Номенклатура, НоменклатураДокумента.КоличествоВДокументе, ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНаОстатке, НоменклатураДокумента.КоличествоВДокументе - ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНедостаточно ИЗ НоменклатураДокумента КАК НоменклатураДокумента ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки( , (Склад, Номенклатура) В (ВЫБРАТЬ НоменклатураДокумента.Склад, НоменклатураДокумента.Номенклатура ИЗ НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки ПО НоменклатураДокумента.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура И НоменклатураДокумента.Склад = ТоварыНаСкладахОстатки.Склад ГДЕ НоменклатураДокумента.КоличествоВДокументе > ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)  | 
|||
| 
    26
    
        xupypg    
     19.11.18 
            ✎
    03:32 
 | 
         
        Азернот, не получилось, документ проводится...     
         | 
|||
| 
    27
    
        xupypg    
     19.11.18 
            ✎
    03:35 
 | 
         
        Даже если удалить приходную накладную с определённым товаром, то всё равно в расходной он будет списываться, хотя по факту прихода даже не было     
         | 
|||
| 
    28
    
        xupypg    
     19.11.18 
            ✎
    03:42 
 | 
         
        Процедура ОбработкаПроведения(Отказ, Режим)
 
        Движения.ТоварыНаСкладах.Записывать = Истина; МенеджерВТ = Новый МенеджерВременныхтаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяТовары.Склад КАК Склад, | РасходнаяНакладнаяТовары.Номенклатура КАК Номенклатура, | СУММА(РасходнаяНакладнаяТовары.Количество) КАК КоличествоВДокументе, | СУММА(РасходнаяНакладнаяТовары.Сумма) КАК СуммаВДокументе |ПОМЕСТИТЬ НоменклатураДокумента |ИЗ | Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары |ГДЕ | РасходнаяНакладнаяТовары.Номенклатура.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяТовары.Номенклатура, | РасходнаяНакладнаяТовары.Склад"; Запрос.УстановитьПараметр("Ссылка", Ссылка); РезультатЗапроса = Запрос.Выполнить(); Запрос2 = Новый Запрос; Запрос2.МенеджерВременныхТаблиц = МенеджерВт; Запрос2.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяТовары.Номенклатура КАК Номенклатура, | РасходнаяНакладнаяТовары.Склад КАК Склад, | СУММА(РасходнаяНакладнаяТовары.Количество) КАК Количество |ИЗ | Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары |ГДЕ | РасходнаяНакладнаяТовары.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяТовары.Номенклатура, | РасходнаяНакладнаяТовары.Склад"; Запрос2.УстановитьПараметр("Ссылка", Ссылка); Движения.ТоварыНаСкладах.Записать(); РезультатЗапроса = Запрос2.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл // Вставить обработку выборки ВыборкаДетальныеЗаписи Движение = Движения.ТоварыНаСкладах.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Товар = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Склад = ВыборкаДетальныеЗаписи.Склад; Движение.Количество = ВыборкаДетальныеЗаписи.Количество; КонецЦикла; Движения.Записать(); Если Режим = РежимПроведенияДокумента.Оперативный Тогда //проверим отрицательные остатки Запрос3 = Новый Запрос; Запрос3.МенеджерВременныхТаблиц = МенеджерВТ; Запрос3.Текст = "ВЫБРАТЬ | НоменклатураДокумента.КоличествоВДокументе КАК КоличествоВДокументе, | ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНаОстатке, | НоменклатураДокумента.КоличествоВДокументе - ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНедостаточно |ИЗ | НоменклатураДокумента КАК НоменклатураДокумента | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки( | , | (Склад, Номенклатура) В | (ВЫБРАТЬ | НоменклатураДокумента.Склад, | НоменклатураДокумента.Товар | ИЗ | НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки | ПО НоменклатураДокумента.Номенклатура = ТоварыНаСкладахОстатки.Товар | И НоменклатураДокумента.Склад = ТоварыНаСкладахОстатки.Склад |ГДЕ | НоменклатураДокумента.КоличествоВДокументе > ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)"; РезультатЗапроса = Запрос3.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Не хватает " + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) +" единиц материала """ + ВыборкаДетальныеЗаписи.Товар + """"; Сообщение.Сообщить(); Отказ = Истина; КонецЦикла; КонецЕсли; КонецПроцедуры  | 
|||
| 
    29
    
        xupypg    
     19.11.18 
            ✎
    03:46 
 | 
         
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
 
        | , | (Склад, Товар) В | (ВЫБРАТЬ | НоменклатураДокумента.Склад, | НоменклатураДокумента.Номенклатура  | 
|||
| 
    30
    
        xupypg    
     19.11.18 
            ✎
    03:47 
 | 
         
        исправил третий запрос вот так, потому. что если в скобках указать "Номенклатура" то пишет поле не найдено, точки остановки проходят по всем строкам, но ошибку не выдаёт     
         | 
|||
| 
    31
    
        hhhh    
     19.11.18 
            ✎
    05:27 
 | 
         
        (30) А куда далась самая основная строчка КоличествоОстаток < 0 ?? Ты самую главную проверку выбросил.     
         | 
|||
| 
    32
    
        xupypg    
     19.11.18 
            ✎
    05:57 
 | 
         
        Вернул строчку, ничего не изменилось, документ по прежнему проводится     
         | 
|||
| 
    33
    
        hhhh    
     19.11.18 
            ✎
    06:03 
 | 
         
        (32) дата документа сегодня? Потому что если вчера, то считается, что не оперативное.     
         | 
|||
| 
    34
    
        xupypg    
     19.11.18 
            ✎
    06:16 
 | 
         
        Проведение оперативное, дата и время изменяется на дату и время на компьютере     
         | 
|||
| 
    35
    
        hhhh    
     19.11.18 
            ✎
    06:21 
 | 
         
        (34) какой запрос в итоге получился?     
         | 
|||
| 
    36
    
        xupypg    
     19.11.18 
            ✎
    06:32 
 | 
         
        Запрос3 = Новый Запрос;
 
        Запрос3.МенеджерВременныхТаблиц = МенеджерВТ; Запрос3.Текст = "ВЫБРАТЬ | НоменклатураДокумента.КоличествоВДокументе КАК КоличествоВДокументе, | ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНаОстатке, | НоменклатураДокумента.КоличествоВДокументе - ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНедостаточно |ИЗ | НоменклатураДокумента КАК НоменклатураДокумента | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки( | , | (Склад, Товар) В | (ВЫБРАТЬ | НоменклатураДокумента.Склад, | НоменклатураДокумента.Номенклатура | ИЗ | НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки | ПО НоменклатураДокумента.Номенклатура = ТоварыНаСкладахОстатки.Товар | И НоменклатураДокумента.Склад = ТоварыНаСкладахОстатки.Склад |ГДЕ | НоменклатураДокумента.КоличествоВДокументе > ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) | И ТоварыНаСкладахОстатки.КоличествоОстаток < 0"; РезультатЗапроса = Запрос3.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл  | 
|||
| 
    37
    
        hhhh    
     19.11.18 
            ✎
    08:01 
 | 
         
        (36) Вроде нормально. Отладчиком заходит внутрь цикла? И точно есть отрицательный остаток? Расход больше прихода?     
         | 
|||
| 
    38
    
        xupypg    
     19.11.18 
            ✎
    08:06 
 | 
         
        Если Режим = РежимПроведенияДокумента.Оперативный Тогда
 
        //проверим отрицательные остатки Запрос3 = Новый Запрос; Запрос3.МенеджерВременныхТаблиц = МенеджерВТ; Запрос3.Текст = "ВЫБРАТЬ | НоменклатураДокумента.КоличествоВДокументе КАК КоличествоВДокументе, | ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНаОстатке, | НоменклатураДокумента.КоличествоВДокументе - ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНедостаточно |ИЗ | НоменклатураДокумента КАК НоменклатураДокумента | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки( | , | (Склад, Товар) В | (ВЫБРАТЬ | НоменклатураДокумента.Склад, | НоменклатураДокумента.Номенклатура | ИЗ | НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки | ПО НоменклатураДокумента.Номенклатура = ТоварыНаСкладахОстатки.Товар | И НоменклатураДокумента.Склад = ТоварыНаСкладахОстатки.Склад |ГДЕ | НоменклатураДокумента.КоличествоВДокументе > ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) | И ТоварыНаСкладахОстатки.КоличествоОстаток < 0"; РезультатЗапроса = Запрос3.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Не хватает " + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) +" единиц материала """ + ВыборкаДетальныеЗаписи.Товар + """"; Сообщение.Сообщить(); Отказ = Истина; КонецЦикла; КонецЕсли; КонецПроцедуры  | 
|||
| 
    39
    
        xupypg    
     19.11.18 
            ✎
    08:07 
 | 
         
        Попадает в запрос, после запроса в результат, потом в выборку, после выборки в "Пока ВыборкаДетальныеЗаписи...." и после этой строки сразу в "КонецЕсли"     
         | 
|||
| 
    40
    
        xupypg    
     19.11.18 
            ✎
    08:08 
 | 
         
        в сообщение пользователю он вообще не попадает, остатки точно отрицательные     
         | 
|||
| 
    41
    
        Мимохожий Однако    
     19.11.18 
            ✎
    08:10 
 | 
         
        (40) Отладчик включил?     
         | 
|||
| 
    42
    
        xupypg    
     19.11.18 
            ✎
    08:11 
 | 
         
        в смысле? точку остановки поставил и вот так проверил     
         | 
|||
| 
    43
    
        hhhh    
     19.11.18 
            ✎
    08:19 
 | 
         
        (40) вот в самом первом запросе откровенная хрень
 
        |ГДЕ | РасходнаяНакладнаяТовары.Номенклатура.Ссылка = &Ссылка Как обычно ваш фирменный стиль: сравнивает номенклатуру с расходной накладной. Ну с какого бодуна вдруг номенклатура будет равной расходной накладной?  | 
|||
| 
    44
    
        xupypg    
     19.11.18 
            ✎
    08:24 
 | 
         
        (43) СРАБОТАЛО)))     
         | 
|||
| 
    45
    
        xupypg    
     19.11.18 
            ✎
    08:24 
 | 
         
        Спасибо всем огромное, где тут лайк ставить?)     
         | 
|||
| 
    46
    
        Мимохожий Однако    
     19.11.18 
            ✎
    08:25 
 | 
         
        (45) Фломастером на экране )     
         | 
|||
| 
    47
    
        xupypg    
     19.11.18 
            ✎
    08:27 
 | 
         
        Я несмываемым поставлю))))     
         | 
|||
| 
    48
    
        xupypg    
     19.11.18 
            ✎
    09:04 
 | 
         
        А как сделать чтоб не только по количеству, но и по сумме учёт шёл?     
         | 
|||
| 
    49
    
        Мимохожий Однако    
     19.11.18 
            ✎
    09:06 
 | 
         
        (48) Добавь ресурс Сумма     
         | 
|||
| 
    50
    
        xupypg    
     19.11.18 
            ✎
    09:18 
 | 
         
        в условиях тоже? и в какой регистр добавлять?     
         | 
|||
| 
    51
    
        Мимохожий Однако    
     19.11.18 
            ✎
    09:22 
 | 
         
        (50) регистр Товары на складах. Но обычно используют другой регистр Товары организаций, в которых есть измерение Организация. Какая у тебя типовая конфигурация пока не известно. Возможно, велосипед с суммой уже существует     
         | 
|||
| 
    52
    
        xupypg    
     19.11.18 
            ✎
    09:26 
 | 
         
        всё что есть в коде написано, у меня 2 документа, 2 справочника и 1 регистр накоплений     
         | 
|||
| 
    53
    
        xupypg    
     19.11.18 
            ✎
    09:26 
 | 
         
        в какой запрос, а не регистр*)     
         | 
|||
| 
    54
    
        Мимохожий Однако    
     19.11.18 
            ✎
    09:29 
 | 
         
        (53) Если у тебя один регистр, то добавь  в него ресурс Сумма.
 
        Потом добавь аналогичное поле в запрос.  | 
|||
| 
    55
    
        xXeNoNx    
     19.11.18 
            ✎
    10:35 
 | 
         
        (4) а зачем:
 
        Если Режим = РежимПроведенияДокумента.Оперативный Тогда ??  | 
|||
| 
    56
    
        xXeNoNx    
     19.11.18 
            ✎
    10:36 
 | 
         
        Это задачи подготовки к спецу     
         | 
|||
| 
    57
    
        xXeNoNx    
     19.11.18 
            ✎
    10:37 
 | 
         
        (29) Соединение с подзапросом - плохая практика     
         | 
|||
| 
    58
    
        xXeNoNx    
     19.11.18 
            ✎
    10:40 
 | 
         
        Без указания периода будешь читать же свои остатки...     
         | 
|||
| 
    59
    
        xXeNoNx    
     19.11.18 
            ✎
    10:42 
 | 
         
        (36) Хреновый подход решения, а именно: решение можно сделать по новой методике проведения, сначала пишем, потом читаем.     
         | 
|||
| 
    60
    
        azernot    
     19.11.18 
            ✎
    10:57 
 | 
         
        (28)         |ГДЕ
 
        | РасходнаяНакладнаяТовары.Номенклатура.Ссылка = &Ссылка Запрос.УстановитьПараметр("Ссылка", Ссылка); Что за бред?! У тебя ВТ НоменклатураДокумента всегда будет пустая! Надо так |ГДЕ | РасходнаяНакладнаяТовары.Ссылка = &Ссылка  | 
|||
| 
    61
    
        azernot    
     19.11.18 
            ✎
    10:59 
 | 
         
        А, в (43) уже написали...     
         | 
|||
| 
    62
    
        xXeNoNx    
     19.11.18 
            ✎
    11:03 
 | 
         
        (38) яб не принял такое решение и экзаменатор не примет     
         | 
|||
| 
    63
    
        xupypg    
     19.11.18 
            ✎
    12:05 
 | 
         
        Процедура ОбработкаПроведения(Отказ, Режим)
 
        Движения.ТоварыНаСкладах.Записывать = Истина; МенеджерВТ = Новый МенеджерВременныхтаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяТовары.Склад КАК Склад, | РасходнаяНакладнаяТовары.Номенклатура КАК Номенклатура, | СУММА(РасходнаяНакладнаяТовары.Количество) КАК КоличествоВДокументе, | СУММА(РасходнаяНакладнаяТовары.Сумма) КАК СуммаВДокументе |ПОМЕСТИТЬ НоменклатураДокумента |ИЗ | Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяТовары.Номенклатура, | РасходнаяНакладнаяТовары.Склад"; РезультатЗапроса = Запрос.Выполнить(); Запрос2 = Новый Запрос; Запрос2.МенеджерВременныхТаблиц = МенеджерВт; Запрос2.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяТовары.Номенклатура КАК Номенклатура, | РасходнаяНакладнаяТовары.Склад КАК Склад, | СУММА(РасходнаяНакладнаяТовары.Количество) КАК Количество |ИЗ | Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары |ГДЕ | РасходнаяНакладнаяТовары.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяТовары.Номенклатура, | РасходнаяНакладнаяТовары.Склад"; Запрос2.УстановитьПараметр("Ссылка", Ссылка); Движения.ТоварыНаСкладах.Записать(); РезультатЗапроса = Запрос2.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл // Вставить обработку выборки ВыборкаДетальныеЗаписи Движение = Движения.ТоварыНаСкладах.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Товар = ВыборкаДетальныеЗаписи.Номенклатура; Движение.Склад = ВыборкаДетальныеЗаписи.Склад; Движение.Количество = ВыборкаДетальныеЗаписи.Количество; КонецЦикла; Движения.Записать(); Если Режим = РежимПроведенияДокумента.Оперативный Тогда //проверим отрицательные остатки Запрос3 = Новый Запрос; Запрос3.МенеджерВременныхТаблиц = МенеджерВТ; Запрос3.Текст = "ВЫБРАТЬ | НоменклатураДокумента.КоличествоВДокументе КАК КоличествоВДокументе, | ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНаОстатке, | НоменклатураДокумента.КоличествоВДокументе - ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНедостаточно, | ТоварыНаСкладахОстатки.СуммаОстаток КАК СуммаОстаток |ИЗ | НоменклатураДокумента КАК НоменклатураДокумента | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки( | , | (Склад, Товар) В | (ВЫБРАТЬ | НоменклатураДокумента.Склад, | НоменклатураДокумента.Номенклатура | ИЗ | НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки | ПО НоменклатураДокумента.Номенклатура = ТоварыНаСкладахОстатки.Товар | И НоменклатураДокумента.Склад = ТоварыНаСкладахОстатки.Склад |ГДЕ | НоменклатураДокумента.КоличествоВДокументе > ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) | И ТоварыНаСкладахОстатки.КоличествоОстаток < 0 | И ТоварыНаСкладахОстатки.СуммаОстаток < 0"; РезультатЗапроса = Запрос3.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "Не хватает " + Строка(- ВыборкаДетальныеЗаписи.КоличествоНаОстатке) +" единиц материала """; Сообщение.Сообщить(); Отказ = Истина; КонецЦикла; КонецЕсли; КонецПроцедуры  | 
|||
| 
    64
    
        xupypg    
     19.11.18 
            ✎
    12:06 
 | 
         
        Добавил сумму, в последнем регистре установил условие, вообще перестало работать)     
         | 
|||
| 
    65
    
        xupypg    
     19.11.18 
            ✎
    12:06 
 | 
         
        Суммовой учёт надо добавить, реквизит создал     
         | 
|||
| 
    66
    
        azernot    
     19.11.18 
            ✎
    12:47 
 | 
         
        (65) А что значит "суммовой учёт"? 
 
        В учёте обычно сумму списания ТМЦ рассчитывается по какой-то методике (ФИФО, Средняя). Если есть количественный остаток, как может не быть суммового?  | 
|||
| 
    67
    
        xupypg    
     19.11.18 
            ✎
    13:09 
 | 
         
        Вот я в смысле так же подумал, но экзаменатор сказал сделать...     
         | 
|||
| 
    68
    
        xupypg    
     19.11.18 
            ✎
    13:09 
 | 
         
        я себе этот суммовой учёт в принципе не особо представляю     
         | 
|||
| 
    69
    
        xupypg    
     20.11.18 
            ✎
    03:26 
 | 
         
        //проверим отрицательные остатки
 
        Запрос3 = Новый Запрос; Запрос3.МенеджерВременныхТаблиц = МенеджерВТ; Запрос3.Текст = "ВЫБРАТЬ | НоменклатураДокумента.КоличествоВДокументе КАК КоличествоВДокументе, | ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНаОстатке, | НоменклатураДокумента.КоличествоВДокументе - ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоНедостаточно, | ЕСТЬNULL(ТоварыНаСкладахОстатки.СуммаОстаток, 0) КАК СуммаОстаток, | НоменклатураДокумента.Склад КАК Склад, | НоменклатураДокумента.КоличествоВДокументе - ЕСТЬNULL(ТоварыНаСкладахОстатки.СуммаОстаток, 0) КАК КоличествоВДокументе1 |ИЗ | НоменклатураДокумента КАК НоменклатураДокумента | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки( | , | (Склад, Товар) В | (ВЫБРАТЬ | НоменклатураДокумента.Склад, | НоменклатураДокумента.Номенклатура | ИЗ | НоменклатураДокумента)) КАК ТоварыНаСкладахОстатки | ПО НоменклатураДокумента.Номенклатура = ТоварыНаСкладахОстатки.Товар | И НоменклатураДокумента.Склад = ТоварыНаСкладахОстатки.Склад | И НоменклатураДокумента.КоличествоВДокументе = ТоварыНаСкладахОстатки.СуммаОстаток |ГДЕ | НоменклатураДокумента.КоличествоВДокументе > ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) | И ТоварыНаСкладахОстатки.КоличествоОстаток < 0 | И ТоварыНаСкладахОстатки.СуммаОстаток < 0 | И НоменклатураДокумента.КоличествоВДокументе > ЕСТЬNULL(ТоварыНаСкладахОстатки.СуммаОстаток, 0)";  | 
|||
| 
    70
    
        xupypg    
     20.11.18 
            ✎
    03:27 
 | 
         
        Добавил реквизит "Сумма" построил запрос по примеру количества, документ вообще перестал проводиться оперативно... он проводится, ошибка не выходит о недостаточном количестве и дата со временем не меняется на текущее, а остаётся прежней....     
         | 
|||
| 
    71
    
        azernot    
     20.11.18 
            ✎
    10:32 
 | 
         
        И ТоварыНаСкладахОстатки.КоличествоОстаток < 0
 
        | И ТоварыНаСкладахОстатки.СуммаОстаток < 0 Зачем это?  | 
|||
| 
    72
    
        azernot    
     20.11.18 
            ✎
    10:39 
 | 
         
        Вообще же, если уж это учебная задача - надо уточнять у экзаменатора, что же нужно сделать.
 
        С точки зрения прикладной логики учётных задач контроль суммового остатка (и уж тем более сравнение суммового остатка с количеством из документа) - бред. P.S. Мне кажется, что я оказываю медвежью услугу... Поэтому рекомендую автору всё же сначала подумать самостоятельно, что он хочет, сформулировать, а уж потом, если возникнут именно технические вопросы - задавать их.  | 
|||
| 
    73
    
        xupypg    
     20.11.18 
            ✎
    12:45 
 | 
         
        Экзаменатор по поводу суммового учёта сказал: "Да там в 2 местах склад поменять, всё что нужно переделать". В каких местах я чё-то не вдупляю.....     
         | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |